diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ AuthenticationHelper.token!!,
+ keywords,
+ startTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ pageIndex
+ )
+ }
}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
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 df4239c..517203f 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
@@ -12,6 +12,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.AuthenticateViewModel
import com.casic.birmm.inspect.vm.LoginInViewModel
@@ -59,7 +60,7 @@
changeLoadStatus(loginState)
})
} else {
- ToastHelper.showToast(this, it.message!!)
+ it.message!!.show(this)
}
})
authenticateViewModel.loadState.observe(this, Observer {
@@ -109,11 +110,11 @@
val account = userNameView.text.toString()
val userPassword = userPasswordView.text.toString()
if (TextUtils.isEmpty(account)) {
- ToastHelper.showToast(this, "用户名不能为空")
+ "用户名不能为空".show(this)
return@setOnClickListener
}
if (TextUtils.isEmpty(userPassword)) {
- ToastHelper.showToast(this, "密码不能为空")
+ "密码不能为空".show(this)
return@setOnClickListener
}
authenticateViewModel.obtainPublicKey()
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
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 df4239c..517203f 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
@@ -12,6 +12,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.AuthenticateViewModel
import com.casic.birmm.inspect.vm.LoginInViewModel
@@ -59,7 +60,7 @@
changeLoadStatus(loginState)
})
} else {
- ToastHelper.showToast(this, it.message!!)
+ it.message!!.show(this)
}
})
authenticateViewModel.loadState.observe(this, Observer {
@@ -109,11 +110,11 @@
val account = userNameView.text.toString()
val userPassword = userPasswordView.text.toString()
if (TextUtils.isEmpty(account)) {
- ToastHelper.showToast(this, "用户名不能为空")
+ "用户名不能为空".show(this)
return@setOnClickListener
}
if (TextUtils.isEmpty(userPassword)) {
- ToastHelper.showToast(this, "密码不能为空")
+ "密码不能为空".show(this)
return@setOnClickListener
}
authenticateViewModel.obtainPublicKey()
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 3f49b60..4ef86d3 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
@@ -41,7 +45,7 @@
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
@@ -65,7 +69,7 @@
startActivity(Intent(this, InspectionQueryActivity::class.java))
}
1 -> {
-// startActivity(Intent(this, EventQueryActivity::class.java))
+ startActivity(Intent(this, EventQueryActivity::class.java))
}
}
}.build().show()
@@ -79,7 +83,7 @@
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
return if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - clickTime > 2000) {
- ToastHelper.showToast(this, "再按一次退出程序")
+ "再按一次退出程序".show(this)
clickTime = System.currentTimeMillis()
true
} else {
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
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 df4239c..517203f 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
@@ -12,6 +12,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.AuthenticateViewModel
import com.casic.birmm.inspect.vm.LoginInViewModel
@@ -59,7 +60,7 @@
changeLoadStatus(loginState)
})
} else {
- ToastHelper.showToast(this, it.message!!)
+ it.message!!.show(this)
}
})
authenticateViewModel.loadState.observe(this, Observer {
@@ -109,11 +110,11 @@
val account = userNameView.text.toString()
val userPassword = userPasswordView.text.toString()
if (TextUtils.isEmpty(account)) {
- ToastHelper.showToast(this, "用户名不能为空")
+ "用户名不能为空".show(this)
return@setOnClickListener
}
if (TextUtils.isEmpty(userPassword)) {
- ToastHelper.showToast(this, "密码不能为空")
+ "密码不能为空".show(this)
return@setOnClickListener
}
authenticateViewModel.obtainPublicKey()
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 3f49b60..4ef86d3 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
@@ -41,7 +45,7 @@
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
@@ -65,7 +69,7 @@
startActivity(Intent(this, InspectionQueryActivity::class.java))
}
1 -> {
-// startActivity(Intent(this, EventQueryActivity::class.java))
+ startActivity(Intent(this, EventQueryActivity::class.java))
}
}
}.build().show()
@@ -79,7 +83,7 @@
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
return if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - clickTime > 2000) {
- ToastHelper.showToast(this, "再按一次退出程序")
+ "再按一次退出程序".show(this)
clickTime = System.currentTimeMillis()
true
} else {
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 4039bd3..06f680d 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
@@ -9,6 +9,7 @@
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.LoginOutViewModel
@@ -54,7 +55,7 @@
leftBackView.setOnClickListener { this.finish() }
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
- ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关")
+ "设备没有震动蜂鸣器,无法打开此开关".show(this)
warningSwitch.isChecked = false
return@setOnClickListener
}
@@ -108,11 +109,11 @@
//清除所有Activity
PageNavigationManager.finishAllActivity()
} else {
- ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
+ "操作失败".show(this@UserSettingsActivity)
}
})
loginOutModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "操作失败,请重试")
+ "操作失败,请重试".show(this)
})
}.create().show()
}
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
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 df4239c..517203f 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
@@ -12,6 +12,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.AuthenticateViewModel
import com.casic.birmm.inspect.vm.LoginInViewModel
@@ -59,7 +60,7 @@
changeLoadStatus(loginState)
})
} else {
- ToastHelper.showToast(this, it.message!!)
+ it.message!!.show(this)
}
})
authenticateViewModel.loadState.observe(this, Observer {
@@ -109,11 +110,11 @@
val account = userNameView.text.toString()
val userPassword = userPasswordView.text.toString()
if (TextUtils.isEmpty(account)) {
- ToastHelper.showToast(this, "用户名不能为空")
+ "用户名不能为空".show(this)
return@setOnClickListener
}
if (TextUtils.isEmpty(userPassword)) {
- ToastHelper.showToast(this, "密码不能为空")
+ "密码不能为空".show(this)
return@setOnClickListener
}
authenticateViewModel.obtainPublicKey()
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 3f49b60..4ef86d3 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
@@ -41,7 +45,7 @@
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
@@ -65,7 +69,7 @@
startActivity(Intent(this, InspectionQueryActivity::class.java))
}
1 -> {
-// startActivity(Intent(this, EventQueryActivity::class.java))
+ startActivity(Intent(this, EventQueryActivity::class.java))
}
}
}.build().show()
@@ -79,7 +83,7 @@
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
return if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - clickTime > 2000) {
- ToastHelper.showToast(this, "再按一次退出程序")
+ "再按一次退出程序".show(this)
clickTime = System.currentTimeMillis()
true
} else {
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 4039bd3..06f680d 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
@@ -9,6 +9,7 @@
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.LoginOutViewModel
@@ -54,7 +55,7 @@
leftBackView.setOnClickListener { this.finish() }
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
- ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关")
+ "设备没有震动蜂鸣器,无法打开此开关".show(this)
warningSwitch.isChecked = false
return@setOnClickListener
}
@@ -108,11 +109,11 @@
//清除所有Activity
PageNavigationManager.finishAllActivity()
} else {
- ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
+ "操作失败".show(this@UserSettingsActivity)
}
})
loginOutModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "操作失败,请重试")
+ "操作失败,请重试".show(this)
})
}.create().show()
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
index f14f4cb..6cba9ba 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
@@ -2,9 +2,9 @@
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.extensions.launch
import com.casic.birmm.inspect.model.PublicKeyModel
import com.casic.birmm.inspect.utils.LoadState
-import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class AuthenticateViewModel : BaseViewModel() {
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
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 df4239c..517203f 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
@@ -12,6 +12,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.AuthenticateViewModel
import com.casic.birmm.inspect.vm.LoginInViewModel
@@ -59,7 +60,7 @@
changeLoadStatus(loginState)
})
} else {
- ToastHelper.showToast(this, it.message!!)
+ it.message!!.show(this)
}
})
authenticateViewModel.loadState.observe(this, Observer {
@@ -109,11 +110,11 @@
val account = userNameView.text.toString()
val userPassword = userPasswordView.text.toString()
if (TextUtils.isEmpty(account)) {
- ToastHelper.showToast(this, "用户名不能为空")
+ "用户名不能为空".show(this)
return@setOnClickListener
}
if (TextUtils.isEmpty(userPassword)) {
- ToastHelper.showToast(this, "密码不能为空")
+ "密码不能为空".show(this)
return@setOnClickListener
}
authenticateViewModel.obtainPublicKey()
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 3f49b60..4ef86d3 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
@@ -41,7 +45,7 @@
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
@@ -65,7 +69,7 @@
startActivity(Intent(this, InspectionQueryActivity::class.java))
}
1 -> {
-// startActivity(Intent(this, EventQueryActivity::class.java))
+ startActivity(Intent(this, EventQueryActivity::class.java))
}
}
}.build().show()
@@ -79,7 +83,7 @@
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
return if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - clickTime > 2000) {
- ToastHelper.showToast(this, "再按一次退出程序")
+ "再按一次退出程序".show(this)
clickTime = System.currentTimeMillis()
true
} else {
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 4039bd3..06f680d 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
@@ -9,6 +9,7 @@
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.LoginOutViewModel
@@ -54,7 +55,7 @@
leftBackView.setOnClickListener { this.finish() }
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
- ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关")
+ "设备没有震动蜂鸣器,无法打开此开关".show(this)
warningSwitch.isChecked = false
return@setOnClickListener
}
@@ -108,11 +109,11 @@
//清除所有Activity
PageNavigationManager.finishAllActivity()
} else {
- ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
+ "操作失败".show(this@UserSettingsActivity)
}
})
loginOutModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "操作失败,请重试")
+ "操作失败,请重试".show(this)
})
}.create().show()
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
index f14f4cb..6cba9ba 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
@@ -2,9 +2,9 @@
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.extensions.launch
import com.casic.birmm.inspect.model.PublicKeyModel
import com.casic.birmm.inspect.utils.LoadState
-import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class AuthenticateViewModel : BaseViewModel() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.kt
new file mode 100644
index 0000000..7dcf628
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.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.extensions.launch
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class EventQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryEvent(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryEvent(keywords, startTime, endTime, pageIndex)
+ }, {
+ loadState.value = LoadState.Fail
+ })
+}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
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 df4239c..517203f 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
@@ -12,6 +12,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.AuthenticateViewModel
import com.casic.birmm.inspect.vm.LoginInViewModel
@@ -59,7 +60,7 @@
changeLoadStatus(loginState)
})
} else {
- ToastHelper.showToast(this, it.message!!)
+ it.message!!.show(this)
}
})
authenticateViewModel.loadState.observe(this, Observer {
@@ -109,11 +110,11 @@
val account = userNameView.text.toString()
val userPassword = userPasswordView.text.toString()
if (TextUtils.isEmpty(account)) {
- ToastHelper.showToast(this, "用户名不能为空")
+ "用户名不能为空".show(this)
return@setOnClickListener
}
if (TextUtils.isEmpty(userPassword)) {
- ToastHelper.showToast(this, "密码不能为空")
+ "密码不能为空".show(this)
return@setOnClickListener
}
authenticateViewModel.obtainPublicKey()
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 3f49b60..4ef86d3 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
@@ -41,7 +45,7 @@
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
@@ -65,7 +69,7 @@
startActivity(Intent(this, InspectionQueryActivity::class.java))
}
1 -> {
-// startActivity(Intent(this, EventQueryActivity::class.java))
+ startActivity(Intent(this, EventQueryActivity::class.java))
}
}
}.build().show()
@@ -79,7 +83,7 @@
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
return if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - clickTime > 2000) {
- ToastHelper.showToast(this, "再按一次退出程序")
+ "再按一次退出程序".show(this)
clickTime = System.currentTimeMillis()
true
} else {
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 4039bd3..06f680d 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
@@ -9,6 +9,7 @@
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.LoginOutViewModel
@@ -54,7 +55,7 @@
leftBackView.setOnClickListener { this.finish() }
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
- ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关")
+ "设备没有震动蜂鸣器,无法打开此开关".show(this)
warningSwitch.isChecked = false
return@setOnClickListener
}
@@ -108,11 +109,11 @@
//清除所有Activity
PageNavigationManager.finishAllActivity()
} else {
- ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
+ "操作失败".show(this@UserSettingsActivity)
}
})
loginOutModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "操作失败,请重试")
+ "操作失败,请重试".show(this)
})
}.create().show()
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
index f14f4cb..6cba9ba 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
@@ -2,9 +2,9 @@
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.extensions.launch
import com.casic.birmm.inspect.model.PublicKeyModel
import com.casic.birmm.inspect.utils.LoadState
-import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class AuthenticateViewModel : BaseViewModel() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.kt
new file mode 100644
index 0000000..7dcf628
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.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.extensions.launch
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class EventQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryEvent(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryEvent(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/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
index 91359a2..4c7c302 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -2,9 +2,9 @@
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.extensions.launch
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() {
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List) :
+ RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_image_gridview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return images.size
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ Glide.with(context)
+ .load(images[position])
+ .apply(RequestOptions().error(R.drawable.ic_load_error))
+ .into(holder.imageView)
+ holder.itemView.setOnClickListener { itemClickListener!!.onClick(position) }
+ }
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val imageView: ImageView = itemView.findViewById(R.id.imageView)
+ }
+
+ private var itemClickListener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClick(position: Int)
+ }
+
+ fun setOnItemClickListener(listener: OnItemClickListener?) {
+ itemClickListener = listener
+ }
+}
\ 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 5ba27f1..74da1e2 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,8 +2,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.casic.birmm.inspect.extensions.show
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
@@ -22,7 +22,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(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 0d2bc90..93b7592 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,8 +4,8 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.extensions.show
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
@@ -56,7 +56,7 @@
initData()
initEvent()
} else {
- ToastHelper.showToast(this, "糟糕,没有接入任何网络~")
+ "糟糕,没有接入任何网络~".show(this)
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
new file mode 100644
index 0000000..1f700ab
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt
@@ -0,0 +1,85 @@
+package com.casic.birmm.inspect.extensions
+
+import android.content.Context
+import android.graphics.Color
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.TextView
+import android.widget.Toast
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import java.util.regex.Pattern
+
+/**
+ * String扩展方法
+ */
+
+//过滤空格,回车
+fun String.filterString(): String {
+ if (TextUtils.isEmpty(this)) {
+ return this
+ }
+ val s: String
+ //先过滤回车换行
+ val p = Pattern.compile("\\s*|\t|\r|\n")
+ val m = p.matcher(this)
+ s = m.replaceAll("")
+ //再过滤空格
+ return s.trim { it <= ' ' }.replace(" ", "")
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ val defaultValue = SaveKeyValues.getValue(
+ Constant.DEFAULT_SERVER_CONFIG,
+ "http://111.198.10.15:12204"
+ ) as String
+ return "$defaultValue/static/$this"
+}
+
+
+//将Toast扩展到String
+fun String.show(context: Context) {
+ val toast = Toast(context)
+ val textView = TextView(context)
+ textView.setBackgroundResource(R.drawable.bg_toast_layout)
+ textView.setTextColor(Color.WHITE)
+ textView.textSize = 16.0f
+ textView.text = this
+ textView.setPadding(
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10),
+ QMUIDisplayHelper.dp2px(context, 20),
+ QMUIDisplayHelper.dp2px(context, 10)
+ )
+ toast.setGravity(Gravity.CENTER, 0, 0)
+ toast.view = textView
+ toast.duration = Toast.LENGTH_SHORT
+ toast.show()
+}
+
+//判断是否是数字和字母
+fun String.isLetterAndDigit(): Boolean {
+ var isDigit = false
+ var isLetter = false
+ for (i in this.indices) {
+ if (Character.isDigit(this[i])) {
+ isDigit = true
+ } else if (Character.isLetter(this[i])) {
+ isLetter = true
+ }
+ }
+ return isDigit && isLetter
+}
+
+fun String.isPhoneNumber(): Boolean {
+ val regExp =
+ "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
+ return if (this.length != 11) {
+ false
+ } else {
+ Pattern.compile(regExp).matcher(this).matches()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
new file mode 100644
index 0000000..04bc97c
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.birmm.inspect.extensions
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * ViewModel扩展方法:启动协程
+ * @param block 协程逻辑
+ * @param onError 错误回调方法
+ * @param onComplete 完成回调方法
+ */
+fun ViewModel.launch(
+ block: suspend CoroutineScope.() -> Unit,
+ onError: (e: Throwable) -> Unit = {},
+ onComplete: () -> Unit = {}
+) {
+ viewModelScope.launch(
+ CoroutineExceptionHandler { _, throwable ->
+ run {
+ onError(throwable)
+ }
+ }
+ ) {
+ try {
+ block.invoke(this)
+ } finally {
+ onComplete()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
new file mode 100644
index 0000000..de499aa
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/model/EventModel.kt
@@ -0,0 +1,41 @@
+package com.casic.birmm.inspect.model
+
+class EventModel {
+ 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 {
+ /**
+ * createTime : 2020-12-28 14:56:59
+ * data : -1
+ * description : ggg
+ * id : t1609138629320112121
+ * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * inspectionId : 1609138451543200022
+ * lat : 39.915956
+ * lng : 116.268596
+ * name : sss
+ * type : 自定义事件
+ * user : 超超级管理员
+ */
+ var createTime: String? = null
+ var data = 0
+ var description: String? = null
+ var id: String? = null
+ var images: String? = null
+ var inspectionId: String? = null
+ var lat = 0.0
+ var lng = 0.0
+ var name: String? = null
+ var type: String? = null
+ var user: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
deleted file mode 100644
index 2259965..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ExtensionViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import kotlinx.coroutines.CoroutineExceptionHandler
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * ViewModel扩展方法:启动协程
- * @param block 协程逻辑
- * @param onError 错误回调方法
- * @param onComplete 完成回调方法
- */
-fun ViewModel.launch(
- block: suspend CoroutineScope.() -> Unit,
- onError: (e: Throwable) -> Unit = {},
- onComplete: () -> Unit = {}
-) {
- viewModelScope.launch(
- CoroutineExceptionHandler { _, throwable ->
- run {
- onError(throwable)
- }
- }
- ) {
- try {
- block.invoke(this)
- } finally {
- onComplete()
- }
- }
-}
\ No newline at end of file
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 f67181c..3265619 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,11 +1,13 @@
package com.casic.birmm.inspect.utils
import android.content.Context
+import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.net.ConnectivityManager
import android.os.Build
+import com.casic.birmm.inspect.view.BigImageActivity
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -72,4 +74,12 @@
}
}
}
+
+ //查看大图
+ fun showBigImage(context: Context, index: Int, imageList: ArrayList?) {
+ val intent = Intent(context, BigImageActivity::class.java)
+ intent.putExtra("index", index)
+ intent.putStringArrayListExtra("images", imageList)
+ context.startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
deleted file mode 100644
index 95ecbbd..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/StringHelper.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.text.TextUtils
-import java.util.regex.Pattern
-
-object StringHelper {
-
- fun isLetterAndDigit(str: String): Boolean {
- var isDigit = false
- var isLetter = false
- for (i in str.indices) {
- if (Character.isDigit(str[i])) {
- isDigit = true
- } else if (Character.isLetter(str[i])) {
- isLetter = true
- }
- }
- return isDigit && isLetter
- }
-
- fun isPhoneNumber(number: String): Boolean {
- val regExp =
- "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$"
- return if (number.length != 11) {
- false
- } else {
- Pattern.compile(regExp).matcher(number).matches()
- }
- }
-
- /**
- * 过滤空格,回车
- */
- fun filterString(str: String): String {
- if (TextUtils.isEmpty(str)) {
- return str
- }
- val s: String
- //先过滤回车换行
- val p = Pattern.compile("\\s*|\t|\r|\n")
- val m = p.matcher(str)
- s = m.replaceAll("")
- //再过滤空格
- return s.trim { it <= ' ' }.replace(" ", "")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
deleted file mode 100644
index 0ed4ff4..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.casic.birmm.inspect.utils
-
-import android.content.Context
-import android.graphics.Color
-import android.view.Gravity
-import android.widget.TextView
-import android.widget.Toast
-import com.casic.birmm.inspect.R
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
-
-
-object ToastHelper {
- fun showToast(context: Context, message: String) {
- val toast = Toast(context)
- val textView = TextView(context)
- textView.setBackgroundResource(R.drawable.bg_toast_layout)
- textView.setTextColor(Color.WHITE)
- textView.textSize = 16.0f
- textView.text = message
- textView.setPadding(
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10),
- QMUIDisplayHelper.dp2px(context, 20),
- QMUIDisplayHelper.dp2px(context, 10)
- )
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.view = textView
- toast.duration = Toast.LENGTH_SHORT
- toast.show()
- }
-}
\ 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 115b896..ce426a3 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
@@ -48,4 +48,17 @@
@Query("limit") limit: Int,
@Query("offset") offset: Int
): InspectModel
+
+ /**
+ * 巡检记录列表
+ */
+ @GET("/task/search")
+ suspend fun obtainEventList(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): EventModel
}
\ 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 43cfc3f..673ce3d 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
@@ -55,4 +55,23 @@
pageIndex
)
}
+
+ /**
+ * 事件记录列表
+ */
+ suspend fun queryEvent(
+ keywords: String,
+ startTime: String,
+ endTime: String,
+ pageIndex: Int
+ ): EventModel {
+ return api.obtainEventList(
+ 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/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
new file mode 100644
index 0000000..4916c38
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt
@@ -0,0 +1,96 @@
+package com.casic.birmm.inspect.view;
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+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 com.luck.picture.lib.photoview.PhotoView
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : BaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ val index = intent.getIntExtra("index", 0)
+ val urls = intent.getStringArrayListExtra("images")
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = "(" + (index + 1) + "/" + urls.size + ")"
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = "(" + (position + 1) + "/" + urls.size + ")"
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.finishActivity(BigImageActivity::class.java)
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
new file mode 100644
index 0000000..9b29ca3
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventDetailActivity.kt
@@ -0,0 +1,79 @@
+package com.casic.birmm.inspect.view
+
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.GridLayoutManager
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.adapter.ImageRecycleViewAdapter
+import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.OtherUtils
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.gyf.immersionbar.ImmersionBar
+import kotlinx.android.synthetic.main.activity_event_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class EventDetailActivity : BaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_event_detail
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ titleView.text = "事件详情"
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initData() {
+ createTimeView.text = intent.getStringExtra("createTime")
+ descriptionView.text = intent.getStringExtra("description")
+ val data = intent.getIntExtra("data", -1)
+ if (data == -1) {
+ noImageLayout.visibility = View.GONE
+ val images = intent.getStringExtra("images")
+ /**
+ * images: 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg
+ * images:
+ * images: 2020-12/c2fd5777fe5d4e09af0bbd6693f5fbf4.jpg,2020-12/7d91abc431d0482da33745bacc111bc4.jpg
+ * */
+ val urls: ArrayList = ArrayList()
+ if (images == null) {
+ urls.add("")
+ } else {
+ if (images.isEmpty()) {
+ urls.add("")
+ } else {
+ val imageArray = images.split(",")
+ imageArray.forEach {
+ urls.add(it.combineImagePath())
+ }
+ }
+ }
+ //绑定图片
+ val imageAdapter = ImageRecycleViewAdapter(this, urls)
+ imageRecyclerView.layoutManager = GridLayoutManager(this, 2)
+ imageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object :
+ ImageRecycleViewAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ if (urls[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(this@EventDetailActivity)
+ } else {
+ OtherUtils.showBigImage(this@EventDetailActivity, position, urls)
+ }
+ }
+ })
+ } else {
+ hasImageLayout.visibility = View.GONE
+ dataView.text = "$data.0"
+ }
+ }
+
+ 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/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
new file mode 100644
index 0000000..3d2eb8f
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt
@@ -0,0 +1,184 @@
+package com.casic.birmm.inspect.view
+
+import android.content.Intent
+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.EventListAdapter
+import com.casic.birmm.inspect.base.BaseViewModelActivity
+import com.casic.birmm.inspect.extensions.filterString
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
+import com.casic.birmm.inspect.vm.EventQueryViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.jzxiang.pickerview.TimePickerDialog
+import com.jzxiang.pickerview.data.Type
+import kotlinx.android.synthetic.main.activity_query_event.*
+import kotlinx.android.synthetic.main.activity_query_inspect.emptyView
+import kotlinx.android.synthetic.main.activity_query_inspect.endDateView
+import kotlinx.android.synthetic.main.activity_query_inspect.inputTipsView
+import kotlinx.android.synthetic.main.activity_query_inspect.refreshLayout
+import kotlinx.android.synthetic.main.activity_query_inspect.searchView
+import kotlinx.android.synthetic.main.activity_query_inspect.startDateView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.lang.ref.WeakReference
+
+class EventQueryActivity : 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: EventListAdapter
+
+ override fun createViewModelByClass(): Class? =
+ EventQueryViewModel::class.java
+
+ override fun initLayoutView(): Int = R.layout.activity_query_event
+
+ 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.queryEvent(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()
+ //查询都从第一页开始查
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, 1)
+ }
+
+ refreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ viewModel.queryEvent(keywords, startTime, endTime, pageIndex)
+ }
+ refreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ viewModel.queryEvent(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) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ refreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(20210712)
+ }
+ })
+ viewModel.loadState.observe(this, Observer {
+ "抱歉,无法查询到相关记录".show(this)
+ })
+ }
+
+ private class WeakReferenceHandler(activity: EventQueryActivity) : Handler() {
+ private val reference: WeakReference = WeakReference(activity)
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val resultActivity = reference.get()
+ if (msg.what == 20210712) {
+ if (resultActivity!!.isRefresh || resultActivity.isLoadMore) {
+ resultActivity.adapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (resultActivity.dataBeans.size == 0) {
+ resultActivity.emptyView!!.show("抱歉,无法查询到相关记录", null)
+ } else {
+ resultActivity.emptyView!!.hide()
+ resultActivity.adapter =
+ EventListAdapter(resultActivity, resultActivity.dataBeans)
+ resultActivity.eventRecyclerView!!.layoutManager =
+ LinearLayoutManager(resultActivity)
+ resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter
+ resultActivity.adapter.setOnItemClickListener(object :
+ EventListAdapter.OnItemClickListener {
+ override fun onClick(position: Int) {
+ val intent = Intent(resultActivity, EventDetailActivity::class.java)
+ val rowsBean = resultActivity.dataBeans[position]
+ intent.putExtra("createTime", rowsBean.createTime)
+ intent.putExtra(
+ "description",
+ rowsBean.description!!.filterString()
+ )
+ intent.putExtra("data", rowsBean.data)
+ intent.putExtra("images", rowsBean.images)
+ resultActivity.startActivity(intent)
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+}
\ 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 016fca4..2e57bec 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -69,7 +73,7 @@
finish()
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
new file mode 100644
index 0000000..d805b9d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt
@@ -0,0 +1,4 @@
+package com.casic.birmm.inspect.view
+
+class InspectRouteActivity {
+}
\ 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
index cff683a..d075b96 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt
@@ -8,8 +8,12 @@
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.extensions.show
import com.casic.birmm.inspect.model.InspectModel
-import com.casic.birmm.inspect.utils.*
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
+import com.casic.birmm.inspect.utils.TimeOrDateUtil
import com.casic.birmm.inspect.vm.InspectionQueryViewModel
import com.gyf.immersionbar.ImmersionBar
import com.jzxiang.pickerview.TimePickerDialog
@@ -44,7 +48,7 @@
}
override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(this);
+ weakReferenceHandler = WeakReferenceHandler(this)
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -86,6 +90,8 @@
//开始搜索
searchView.setOnClickListener {
keywords = inputTipsView.text.toString()
+ //查询都从第一页开始查
+ pageIndex = 1
viewModel.queryInspect(keywords, startTime, endTime, pageIndex)
}
@@ -112,7 +118,7 @@
}
isLoadMore -> {
if (dataRows?.size == 0) {
- ToastHelper.showToast(this, "到底了,别拉了")
+ "到底了,别拉了".show(this)
}
dataBeans.addAll(dataRows!!)
refreshLayout.finishLoadMore()
@@ -126,7 +132,7 @@
}
})
viewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "抱歉,无法查询到相关记录")
+ "抱歉,无法查询到相关记录".show(this)
})
}
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 df4239c..517203f 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
@@ -12,6 +12,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.AuthenticateViewModel
import com.casic.birmm.inspect.vm.LoginInViewModel
@@ -59,7 +60,7 @@
changeLoadStatus(loginState)
})
} else {
- ToastHelper.showToast(this, it.message!!)
+ it.message!!.show(this)
}
})
authenticateViewModel.loadState.observe(this, Observer {
@@ -109,11 +110,11 @@
val account = userNameView.text.toString()
val userPassword = userPasswordView.text.toString()
if (TextUtils.isEmpty(account)) {
- ToastHelper.showToast(this, "用户名不能为空")
+ "用户名不能为空".show(this)
return@setOnClickListener
}
if (TextUtils.isEmpty(userPassword)) {
- ToastHelper.showToast(this, "密码不能为空")
+ "密码不能为空".show(this)
return@setOnClickListener
}
authenticateViewModel.obtainPublicKey()
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 3f49b60..4ef86d3 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,7 +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.*
+import com.casic.birmm.inspect.extensions.show
+import com.casic.birmm.inspect.utils.Constant
+import com.casic.birmm.inspect.utils.PageNavigationManager
+import com.casic.birmm.inspect.utils.SaveKeyValues
+import com.casic.birmm.inspect.utils.StatusBarColorUtil
import com.casic.birmm.inspect.vm.UserViewModel
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
@@ -41,7 +45,7 @@
SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象
})
userViewModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "获取用户信息失败,请重试")
+ "获取用户信息失败,请重试".show(this)
})
}
}
@@ -65,7 +69,7 @@
startActivity(Intent(this, InspectionQueryActivity::class.java))
}
1 -> {
-// startActivity(Intent(this, EventQueryActivity::class.java))
+ startActivity(Intent(this, EventQueryActivity::class.java))
}
}
}.build().show()
@@ -79,7 +83,7 @@
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
return if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - clickTime > 2000) {
- ToastHelper.showToast(this, "再按一次退出程序")
+ "再按一次退出程序".show(this)
clickTime = System.currentTimeMillis()
true
} else {
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 4039bd3..06f680d 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
@@ -9,6 +9,7 @@
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.base.BaseActivity
+import com.casic.birmm.inspect.extensions.show
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.*
import com.casic.birmm.inspect.vm.LoginOutViewModel
@@ -54,7 +55,7 @@
leftBackView.setOnClickListener { this.finish() }
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
- ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关")
+ "设备没有震动蜂鸣器,无法打开此开关".show(this)
warningSwitch.isChecked = false
return@setOnClickListener
}
@@ -108,11 +109,11 @@
//清除所有Activity
PageNavigationManager.finishAllActivity()
} else {
- ToastHelper.showToast(this@UserSettingsActivity, "操作失败")
+ "操作失败".show(this@UserSettingsActivity)
}
})
loginOutModel.loadState.observe(this, Observer {
- ToastHelper.showToast(this, "操作失败,请重试")
+ "操作失败,请重试".show(this)
})
}.create().show()
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
index f14f4cb..6cba9ba 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt
@@ -2,9 +2,9 @@
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.extensions.launch
import com.casic.birmm.inspect.model.PublicKeyModel
import com.casic.birmm.inspect.utils.LoadState
-import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class AuthenticateViewModel : BaseViewModel() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.kt
new file mode 100644
index 0000000..7dcf628
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/EventQueryViewModel.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.extensions.launch
+import com.casic.birmm.inspect.model.EventModel
+import com.casic.birmm.inspect.utils.LoadState
+import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
+
+class EventQueryViewModel : BaseViewModel() {
+ val resultModel = MutableLiveData()
+
+ fun queryEvent(keywords: String, startTime: String, endTime: String, pageIndex: Int) =
+ launch({
+ resultModel.value =
+ RetrofitServiceManager.queryEvent(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/InspectionQueryViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
index 91359a2..4c7c302 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectionQueryViewModel.kt
@@ -2,9 +2,9 @@
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.extensions.launch
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() {
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt
index d9bd8ba..15fc791 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt
@@ -2,9 +2,9 @@
import androidx.lifecycle.MutableLiveData
import com.casic.birmm.inspect.base.BaseViewModel
+import com.casic.birmm.inspect.extensions.launch
import com.casic.birmm.inspect.model.LoginResultModel
import com.casic.birmm.inspect.utils.LoadState
-import com.casic.birmm.inspect.utils.launch
import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager
class LoginInViewModel : BaseViewModel() {
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..803804e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+inspect_app
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0c8230b..bf4de11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -70,6 +70,8 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//日期选择器
implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1'
+ //图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
-// implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
+ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aa3e1d4..0c3455d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
new file mode 100644
index 0000000..7520133
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt
@@ -0,0 +1,64 @@
+package com.casic.birmm.inspect.adapter
+
+import android.annotation.SuppressLint
+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.EventModel
+
+
+class EventListAdapter(
+ 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)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows?.get(position)!!
+ holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type
+ holder.inspectDateView.text = rowsBean.createTime
+ 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/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
new file mode 100644
index 0000000..3efd655
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt
@@ -0,0 +1,50 @@
+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.ImageView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.birmm.inspect.R
+
+class ImageRecycleViewAdapter(private val context: Context, private val images: List