diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
index 2e73469..4039bd3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
@@ -26,6 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_user_settings
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
titleView.text = "系统设置"
@@ -61,8 +62,10 @@
warningSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SaveKeyValues.putValue(Constant.OPEN_WARNING, true)
+ OtherUtils.playSound(this, R.raw.alarm)
vibrator.vibrate(1000)
} else {
+ OtherUtils.playSound(this, 0)
SaveKeyValues.putValue(Constant.OPEN_WARNING, false)
}
}
@@ -73,6 +76,9 @@
SaveKeyValues.putValue(Constant.AUTO_RECORD, false)
}
}
+ logLayout.setOnClickListener {
+ startActivity(Intent(this, ShowLogActivity::class.java))
+ }
loginOutButton.setChangeAlphaWhenPress(true)
loginOutButton.setOnClickListener {
QMUIDialog.MessageDialogBuilder(this)
@@ -99,11 +105,15 @@
LoginActivity::class.java
)
)
- finish()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
} else {
ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
}
})
+ loginOutModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "操作失败,请重试")
+ })
}.create().show()
}
}
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
index 2e73469..4039bd3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
@@ -26,6 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_user_settings
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
titleView.text = "系统设置"
@@ -61,8 +62,10 @@
warningSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SaveKeyValues.putValue(Constant.OPEN_WARNING, true)
+ OtherUtils.playSound(this, R.raw.alarm)
vibrator.vibrate(1000)
} else {
+ OtherUtils.playSound(this, 0)
SaveKeyValues.putValue(Constant.OPEN_WARNING, false)
}
}
@@ -73,6 +76,9 @@
SaveKeyValues.putValue(Constant.AUTO_RECORD, false)
}
}
+ logLayout.setOnClickListener {
+ startActivity(Intent(this, ShowLogActivity::class.java))
+ }
loginOutButton.setChangeAlphaWhenPress(true)
loginOutButton.setOnClickListener {
QMUIDialog.MessageDialogBuilder(this)
@@ -99,11 +105,15 @@
LoginActivity::class.java
)
)
- finish()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
} else {
ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
}
})
+ loginOutModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "操作失败,请重试")
+ })
}.create().show()
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
new file mode 100644
index 0000000..91359a2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -0,0 +1,20 @@
+package com.casic.birmm.inspect.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.launch
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class InspectionQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryInspect(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryInspect(keywords, startTime, endTime, pageIndex)
+ }, {
+ loadState.value = LoadState.Fail
+ })
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
index 2e73469..4039bd3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
@@ -26,6 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_user_settings
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
titleView.text = "系统设置"
@@ -61,8 +62,10 @@
warningSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SaveKeyValues.putValue(Constant.OPEN_WARNING, true)
+ OtherUtils.playSound(this, R.raw.alarm)
vibrator.vibrate(1000)
} else {
+ OtherUtils.playSound(this, 0)
SaveKeyValues.putValue(Constant.OPEN_WARNING, false)
}
}
@@ -73,6 +76,9 @@
SaveKeyValues.putValue(Constant.AUTO_RECORD, false)
}
}
+ logLayout.setOnClickListener {
+ startActivity(Intent(this, ShowLogActivity::class.java))
+ }
loginOutButton.setChangeAlphaWhenPress(true)
loginOutButton.setOnClickListener {
QMUIDialog.MessageDialogBuilder(this)
@@ -99,11 +105,15 @@
LoginActivity::class.java
)
)
- finish()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
} else {
ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
}
})
+ loginOutModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "操作失败,请重试")
+ })
}.create().show()
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
new file mode 100644
index 0000000..91359a2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -0,0 +1,20 @@
+package com.casic.birmm.inspect.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.launch
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class InspectionQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryInspect(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryInspect(keywords, startTime, endTime, pageIndex)
+ }, {
+ loadState.value = LoadState.Fail
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
index fa22f6c..c60862d 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
@@ -1,23 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.ActionResultModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class LoginOutViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "LoginOutViewModel"
- }
-
val resultModel = MutableLiveData()
fun loginOut() = launch({
resultModel.value = RetrofitServiceManager.loginOut()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
index 2e73469..4039bd3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
@@ -26,6 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_user_settings
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
titleView.text = "系统设置"
@@ -61,8 +62,10 @@
warningSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SaveKeyValues.putValue(Constant.OPEN_WARNING, true)
+ OtherUtils.playSound(this, R.raw.alarm)
vibrator.vibrate(1000)
} else {
+ OtherUtils.playSound(this, 0)
SaveKeyValues.putValue(Constant.OPEN_WARNING, false)
}
}
@@ -73,6 +76,9 @@
SaveKeyValues.putValue(Constant.AUTO_RECORD, false)
}
}
+ logLayout.setOnClickListener {
+ startActivity(Intent(this, ShowLogActivity::class.java))
+ }
loginOutButton.setChangeAlphaWhenPress(true)
loginOutButton.setOnClickListener {
QMUIDialog.MessageDialogBuilder(this)
@@ -99,11 +105,15 @@
LoginActivity::class.java
)
)
- finish()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
} else {
ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
}
})
+ loginOutModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "操作失败,请重试")
+ })
}.create().show()
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
new file mode 100644
index 0000000..91359a2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -0,0 +1,20 @@
+package com.casic.birmm.inspect.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.launch
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class InspectionQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryInspect(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryInspect(keywords, startTime, endTime, pageIndex)
+ }, {
+ loadState.value = LoadState.Fail
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
index fa22f6c..c60862d 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
@@ -1,23 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.ActionResultModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class LoginOutViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "LoginOutViewModel"
- }
-
val resultModel = MutableLiveData()
fun loginOut() = launch({
resultModel.value = RetrofitServiceManager.loginOut()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index f13301d..8cc84f2 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -1,22 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class UserViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "UserViewModel"
- }
val resultModel = MutableLiveData()
fun getUserInfo() = launch({
resultModel.value = RetrofitServiceManager.getUserInfo()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
index 2e73469..4039bd3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
@@ -26,6 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_user_settings
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
titleView.text = "系统设置"
@@ -61,8 +62,10 @@
warningSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SaveKeyValues.putValue(Constant.OPEN_WARNING, true)
+ OtherUtils.playSound(this, R.raw.alarm)
vibrator.vibrate(1000)
} else {
+ OtherUtils.playSound(this, 0)
SaveKeyValues.putValue(Constant.OPEN_WARNING, false)
}
}
@@ -73,6 +76,9 @@
SaveKeyValues.putValue(Constant.AUTO_RECORD, false)
}
}
+ logLayout.setOnClickListener {
+ startActivity(Intent(this, ShowLogActivity::class.java))
+ }
loginOutButton.setChangeAlphaWhenPress(true)
loginOutButton.setOnClickListener {
QMUIDialog.MessageDialogBuilder(this)
@@ -99,11 +105,15 @@
LoginActivity::class.java
)
)
- finish()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
} else {
ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
}
})
+ loginOutModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "操作失败,请重试")
+ })
}.create().show()
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
new file mode 100644
index 0000000..91359a2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -0,0 +1,20 @@
+package com.casic.birmm.inspect.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.launch
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class InspectionQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryInspect(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryInspect(keywords, startTime, endTime, pageIndex)
+ }, {
+ loadState.value = LoadState.Fail
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
index fa22f6c..c60862d 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
@@ -1,23 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.ActionResultModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class LoginOutViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "LoginOutViewModel"
- }
-
val resultModel = MutableLiveData()
fun loginOut() = launch({
resultModel.value = RetrofitServiceManager.loginOut()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index f13301d..8cc84f2 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -1,22 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class UserViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "UserViewModel"
- }
val resultModel = MutableLiveData()
fun getUserInfo() = launch({
resultModel.value = RetrofitServiceManager.getUserInfo()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_button_layout.xml b/app/src/main/res/drawable/bg_button_layout.xml
new file mode 100644
index 0000000..cf000c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_button_layout.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
index 2e73469..4039bd3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
@@ -26,6 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_user_settings
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
titleView.text = "系统设置"
@@ -61,8 +62,10 @@
warningSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SaveKeyValues.putValue(Constant.OPEN_WARNING, true)
+ OtherUtils.playSound(this, R.raw.alarm)
vibrator.vibrate(1000)
} else {
+ OtherUtils.playSound(this, 0)
SaveKeyValues.putValue(Constant.OPEN_WARNING, false)
}
}
@@ -73,6 +76,9 @@
SaveKeyValues.putValue(Constant.AUTO_RECORD, false)
}
}
+ logLayout.setOnClickListener {
+ startActivity(Intent(this, ShowLogActivity::class.java))
+ }
loginOutButton.setChangeAlphaWhenPress(true)
loginOutButton.setOnClickListener {
QMUIDialog.MessageDialogBuilder(this)
@@ -99,11 +105,15 @@
LoginActivity::class.java
)
)
- finish()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
} else {
ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
}
})
+ loginOutModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "操作失败,请重试")
+ })
}.create().show()
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
new file mode 100644
index 0000000..91359a2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -0,0 +1,20 @@
+package com.casic.birmm.inspect.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.launch
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class InspectionQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryInspect(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryInspect(keywords, startTime, endTime, pageIndex)
+ }, {
+ loadState.value = LoadState.Fail
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
index fa22f6c..c60862d 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
@@ -1,23 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.ActionResultModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class LoginOutViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "LoginOutViewModel"
- }
-
val resultModel = MutableLiveData()
fun loginOut() = launch({
resultModel.value = RetrofitServiceManager.loginOut()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index f13301d..8cc84f2 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -1,22 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class UserViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "UserViewModel"
- }
val resultModel = MutableLiveData()
fun getUserInfo() = launch({
resultModel.value = RetrofitServiceManager.getUserInfo()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_button_layout.xml b/app/src/main/res/drawable/bg_button_layout.xml
new file mode 100644
index 0000000..cf000c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_button_layout.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml
new file mode 100644
index 0000000..92c4171
--- /dev/null
+++ b/app/src/main/res/drawable/ic_search.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity() {
+
+ private var keywords = ""
+ private var startTime = ""
+ private var endTime = ""
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+ private var dataBeans: MutableList = ArrayList()
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var adapter: InspectListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ InspectionQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_inspect
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "巡检记录查询"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(this);
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ //开始时间
+ startDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择起始时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ startTime = TimeOrDateUtil.timestampToDate(millseconds)
+ startDateView.setText(startTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+ //结束时间
+ endDateView.setOnClickListener {
+ TimePickerDialog.Builder()
+ .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor))
+ .setTitleStringId("请选择结束时间")
+ .setWheelItemTextSize(16)
+ .setCyclic(false)
+ .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS)
+ .setMaxMillseconds(System.currentTimeMillis())
+ .setType(Type.YEAR_MONTH_DAY)
+ .setCallBack { _, millseconds ->
+ endTime = TimeOrDateUtil.timestampToDate(millseconds)
+ endDateView.setText(endTime)
+ }
+ .build().show(supportFragmentManager, "startDate")
+ }
+
+ //开始搜索
+ searchView.setOnClickListener {
+ keywords = inputTipsView.text.toString()
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
+ }
+ viewModel.resultModel.observe(this, Observer {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ refreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ ToastHelper.showToast(this, "到底了,别拉了")
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210709)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ })
+ }
+
+ private class WeakReferenceHandler(activity: InspectionQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210709) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ InspectListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.inspectRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.inspectRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ InspectListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+// val intent = Intent(resultActivity, InspectRouteActivity::class.java)
+// intent.putExtra("id", resultActivity.dataBeans[position].id)
+// resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index 36e6828..df4239c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -26,7 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
-
+ PageNavigationManager.addActivity(this)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 6baf2fb..3f49b60 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -9,13 +9,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
-import com.casic.birmm.inspect.utils.StatusBarColorUtil
-import com.casic.birmm.inspect.utils.ToastHelper
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -27,6 +25,7 @@
override fun initLayoutView(): Int = R.layout.activity_main
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
leftBackView.visibility = View.GONE
@@ -41,6 +40,9 @@
userViewModel.resultModel.observe(this, Observer {
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
@@ -51,7 +53,22 @@
}
//记录查询
logSearchLayout.setOnClickListener {
-
+ QMUIBottomSheet.BottomListSheetBuilder(this)
+ .setTitle("选择记录类型")
+ .addItem("巡检记录")
+ .addItem("事件记录")
+ .setGravityCenter(true)
+ .setOnSheetItemClickListener { dialog, _, position, _ ->
+ dialog?.dismiss()
+ when (position) {
+ 0 -> {
+ startActivity(Intent(this, InspectionQueryActivity::class.java))
+ }
+ 1 -> {
+// startActivity(Intent(this, EventQueryActivity::class.java))
+ }
+ }
+ }.build().show()
}
//系统设置
settingsLayout.setOnClickListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
index 07f48a5..d4821de 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/PermissionActivity.kt
@@ -5,6 +5,7 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
@@ -12,6 +13,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ PageNavigationManager.addActivity(this)
//判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (EasyPermissions.hasPermissions(this, *Constant.USER_PERMISSIONS)) {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
new file mode 100644
index 0000000..65e04d2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
@@ -0,0 +1,27 @@
+package com.casic.birmm.inspect.view
+
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class ShowLogActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_show_log
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "日志"
+ }
+
+ override fun initData() {
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
index 2e73469..4039bd3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt
@@ -26,6 +26,7 @@
override fun initLayoutView(): Int = R.layout.activity_user_settings
override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
ImmersionBar.with(this).statusBarDarkFont(false).init()
titleView.text = "系统设置"
@@ -61,8 +62,10 @@
warningSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SaveKeyValues.putValue(Constant.OPEN_WARNING, true)
+ OtherUtils.playSound(this, R.raw.alarm)
vibrator.vibrate(1000)
} else {
+ OtherUtils.playSound(this, 0)
SaveKeyValues.putValue(Constant.OPEN_WARNING, false)
}
}
@@ -73,6 +76,9 @@
SaveKeyValues.putValue(Constant.AUTO_RECORD, false)
}
}
+ logLayout.setOnClickListener {
+ startActivity(Intent(this, ShowLogActivity::class.java))
+ }
loginOutButton.setChangeAlphaWhenPress(true)
loginOutButton.setOnClickListener {
QMUIDialog.MessageDialogBuilder(this)
@@ -99,11 +105,15 @@
LoginActivity::class.java
)
)
- finish()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
} else {
ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
}
})
+ loginOutModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "操作失败,请重试")
+ })
}.create().show()
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
new file mode 100644
index 0000000..91359a2
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -0,0 +1,20 @@
+package com.casic.birmm.inspect.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.launch
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class InspectionQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryInspect(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryInspect(keywords, startTime, endTime, pageIndex)
+ }, {
+ loadState.value = LoadState.Fail
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
index fa22f6c..c60862d 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt
@@ -1,23 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.ActionResultModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class LoginOutViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "LoginOutViewModel"
- }
-
val resultModel = MutableLiveData()
fun loginOut() = launch({
resultModel.value = RetrofitServiceManager.loginOut()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index f13301d..8cc84f2 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -1,22 +1,19 @@
package com.casic.birmm.inspect.vm
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.utils.LoadState
import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class UserViewModel : BaseViewModel() {
- companion object {
- private const val Tag = "UserViewModel"
- }
val resultModel = MutableLiveData()
fun getUserInfo() = launch({
resultModel.value = RetrofitServiceManager.getUserInfo()
}, {
- Log.d(Tag, it.stackTrace.toString())
+ loadState.value = LoadState.Fail
})
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_button_layout.xml b/app/src/main/res/drawable/bg_button_layout.xml
new file mode 100644
index 0000000..cf000c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_button_layout.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml
new file mode 100644
index 0000000..92c4171
--- /dev/null
+++ b/app/src/main/res/drawable/ic_search.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_query_inspect.xml b/app/src/main/res/layout/activity_query_inspect.xml
new file mode 100644
index 0000000..de77290
--- /dev/null
+++ b/app/src/main/res/layout/activity_query_inspect.xml
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9fe38c..0c8230b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,8 +66,10 @@
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
//官方Json解析库
implementation 'com.google.code.gson:gson:2.8.6'
+ //上拉加载下拉刷新
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+ //日期选择器
+ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
//图片选择框架
// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
- //上拉加载下拉刷新
-// implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ed6ab1..aa3e1d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
@@ -36,6 +36,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
new file mode 100644
index 0000000..8f0278c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/InspectListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.birmm.inspect.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.model.InspectModel
+
+
+class InspectListAdapter(
+ context: Context,
+ dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private val dataRows: MutableList? = dataRows
+ private var layoutInflater: LayoutInflater? = null
+
+ init {
+ layoutInflater = LayoutInflater.from(context)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view: View =
+ layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name
+ holder.inspectDateView.text = rowsBean.date
+ holder.inspectNameView.text = rowsBean.user
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClick(position)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows!!.size
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView)
+ var inspectDateView: TextView = view.findViewById(R.id.inspectDateView)
+ var inspectNameView: TextView = view.findViewById(R.id.inspectNameView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
index 9affee1..5ba27f1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseActivity.kt
@@ -2,6 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -16,8 +18,12 @@
setContentView(initLayoutView())
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
/**
diff --git a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
index e3a6c03..0d2bc90 100644
--- a/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/base/BaseViewModelActivity.kt
@@ -4,6 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.ToastHelper
import com.qmuiteam.qmui.util.QMUIStatusBarHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
@@ -20,6 +22,11 @@
protected lateinit var viewModel: VM
/**
+ * 提供ViewModel类
+ */
+ protected abstract fun createViewModelByClass(): Class?
+
+ /**
* 初始化xml布局
*/
protected abstract fun initLayoutView(): Int
@@ -39,19 +46,18 @@
*/
abstract fun initEvent()
- /**
- * 提供ViewModel类
- */
- protected abstract fun createViewModelByClass(): Class?
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(initLayoutView())
createViewModelByClass()?.let { viewModel = ViewModelProvider(this).get(it) }
QMUIStatusBarHelper.translucent(this) //沉浸式状态栏
setupTopBarLayout()
- initData()
- initEvent()
+ if (OtherUtils.isNetworkConnected(this)) {
+ initData()
+ initEvent()
+ } else {
+ ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
new file mode 100644
index 0000000..558e716
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectModel.kt
@@ -0,0 +1,43 @@
+package com.casic.birmm.inspect.model
+
+class InspectModel {
+
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+
+ var total = 0
+ var rows: MutableList? = null
+
+ class RowsBean {
+ /**
+ * date : 2021年07月08日
+ * endLat : 39.915908
+ * endLng : 116.26876
+ * endTime : 2021-07-08 11:20:20
+ * id : 162570318141612121
+ * name : 测试
+ * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]]
+ * startLat : 39.913365
+ * startLng : 116.269462
+ * startTime : 2021-07-08 08:13:01
+ * user : 王晓颖
+ */
+ var date: String? = null
+ var endLat = 0.0
+ var endLng = 0.0
+ var endTime: String? = null
+ var id: String? = null
+ var name: String? = null
+ var routes: String? = null
+ var startLat = 0.0
+ var startLng = 0.0
+ var startTime: String? = null
+ var user: String? = null
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
index 981afb0..c27772f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt
@@ -10,6 +10,9 @@
)
const val PERMISSIONS_CODE = 999
+ const val PAGE_LIMIT = 15
+
+ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val USER_OBJECT = "userObject"
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
index 070b1fd..f67181c 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt
@@ -1,8 +1,14 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.SoundPool
+import android.net.ConnectivityManager
+import android.os.Build
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
object OtherUtils {
private var loadingDialog: QMUITipDialog? = null
@@ -22,4 +28,48 @@
}
}
}
+
+ /**
+ * 判断是否有网络连接
+ * @param context
+ * @return
+ */
+ fun isNetworkConnected(context: Context?): Boolean { //true是链接,false是没链接
+ if (context != null) {
+ val manager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ if (manager == null) {
+ return false
+ } else {
+ val netWorkInfo = manager.activeNetworkInfo
+ if (netWorkInfo != null) {
+ return netWorkInfo.isAvailable
+ }
+ }
+ }
+ return false
+ }
+
+ fun playSound(context: Context?, resId: Int) {
+ if (context == null) return
+ val soundPool: SoundPool
+ soundPool = if (Build.VERSION.SDK_INT >= 21) {
+ val builder = SoundPool.Builder()
+ builder.setMaxStreams(1)
+ val attrBuilder = AudioAttributes.Builder()
+ attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
+ builder.setAudioAttributes(attrBuilder.build())
+ builder.build()
+ } else {
+ SoundPool(1, AudioManager.STREAM_SYSTEM, 5)
+ }
+ if (resId == 0) {
+ soundPool.autoPause()
+ } else {
+ soundPool.load(context, resId, 1)
+ soundPool.setOnLoadCompleteListener { it: SoundPool, _: Int, _: Int ->
+ it.play(1, 1f, 1f, 0, 0, 1f)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
new file mode 100644
index 0000000..4a6655c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/PageNavigationManager.kt
@@ -0,0 +1,70 @@
+package com.casic.birmm.inspect.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * 统一管理所有Activity
+ * */
+object PageNavigationManager {
+ private var activityStack = Stack()
+
+ /**
+ * 添加Activity到堆栈
+ */
+ fun addActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.push(activity)
+ }
+
+ /**
+ * 获取当前Activity(堆栈中最后一个压入的)
+ */
+ fun currentActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+
+ /**
+ * 结束当前Activity(堆栈中最后一个压入的)
+ */
+ fun finishCurrentActivity() {
+ val activity = activityStack.pop()
+ activity.finish()
+ }
+
+ /**
+ * 结束指定的Activity
+ */
+ private fun finishActivity(activity: Activity?) {
+ if (activity == null) {
+ return
+ }
+ activityStack.remove(activity)
+ if (!activity.isFinishing) {
+ activity.finish()
+ }
+ }
+
+ /**
+ * 结束指定类名的Activity
+ */
+ fun finishActivity(clazz: Class) {
+ activityStack.forEach {
+ if (it.javaClass == clazz) {
+ finishActivity(it)
+ }
+ }
+ }
+
+ /**
+ * 结束所有Activity
+ */
+ fun finishAllActivity() {
+ activityStack.forEach {
+ it?.finish()
+ }
+ activityStack.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
new file mode 100644
index 0000000..fda39c6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/TimeOrDateUtil.kt
@@ -0,0 +1,47 @@
+package com.casic.birmm.inspect.utils
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+object TimeOrDateUtil {
+ private val allDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
+ private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
+ private val minuteFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
+ private val secondsFormat = SimpleDateFormat("mm:ss", Locale.CHINA)
+
+ /**
+ * 时间戳转完整日期时间
+ */
+ fun timestampToCompleteDate(millSeconds: Long): String {
+ return allDateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转日期
+ */
+ fun timestampToDate(millSeconds: Long): String {
+ return dateFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时间
+ */
+ fun timestampToTime(millSeconds: Long): String {
+ return timeFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转时分
+ */
+ fun minuteToTime(millSeconds: Long): String {
+ return minuteFormat.format(Date(millSeconds))
+ }
+
+ /**
+ * 时间戳转分秒
+ */
+ fun millsToTime(millSeconds: Long): String {
+ return secondsFormat.format(Date(millSeconds))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index a870f5a..115b896 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -1,9 +1,6 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import retrofit2.http.*
/**
@@ -38,4 +35,17 @@
*/
@GET("/user/logout")
suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/inspection/search")
+ suspend fun obtainInspectList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): InspectModel
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index 4dde02f..43cfc3f 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -1,10 +1,8 @@
package com.casic.birmm.inspect.utils.retrofit
-import com.casic.birmm.inspect.model.ActionResultModel
-import com.casic.birmm.inspect.model.LoginResultModel
-import com.casic.birmm.inspect.model.PublicKeyModel
-import com.casic.birmm.inspect.model.UserInfoModel
+import com.casic.birmm.inspect.model.*
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
object RetrofitServiceManager {
@@ -38,4 +36,23 @@
suspend fun loginOut(): ActionResultModel {
return api.obtainLoginOutResult(AuthenticationHelper.token!!)
}
+
+ /**
+ * 巡检记录列表
+ */
+ suspend fun queryInspect(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): InspectModel {
+ return api.obtainInspectList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
index cb01ce4..016fca4 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt
@@ -9,9 +9,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
-import com.casic.birmm.inspect.utils.AuthenticationHelper
-import com.casic.birmm.inspect.utils.Constant
-import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -25,10 +23,7 @@
override fun initLayoutView(): Int = R.layout.activity_guide
override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
+ PageNavigationManager.addActivity(this)
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
val rightMargin = QMUIDisplayHelper.dp2px(this, 10)
@@ -37,7 +32,9 @@
params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0)
skipButton.requestLayout()
}
+ }
+ override fun initData() {
countDownTimer = object : CountDownTimer(4000, 1000) {
override fun onFinish() {
startLoginActivity()
@@ -71,6 +68,9 @@
startActivity(Intent(this, MainActivity::class.java))
finish()
})
+ userViewModel.loadState.observe(this, Observer {
+ ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
new file mode 100644
index 0000000..cff683a
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -0,0 +1,165 @@
+package com.casic.birmm.inspect.view
+
+import android.os.Handler
+import android.os.Message
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.InspectListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.model.InspectModel
+import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.vm.InspectionQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_inspect.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+
+class InspectionQueryActivity : BaseViewModelActivity