diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
index 57c8b4f..a6e9e9c 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
@@ -1,13 +1,9 @@
package com.casic.smart.town.sanxi.base
import android.app.Application
-import android.util.Log
import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.greendao.DaoMaster
-import com.casic.smart.town.sanxi.greendao.DaoSession
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.hikvision.hatomplayer.HatomPlayerSDK
-import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlin.properties.Delegates
@@ -19,8 +15,6 @@
private var instance: BaseApplication by Delegates.notNull()
fun obtainInstance() = instance
-
- private lateinit var daoSession: DaoSession
}
override fun onCreate() {
@@ -29,19 +23,7 @@
SaveKeyValues.initSharedPreferences(this)
ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印
ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key))
- //推送
- PushManager.getInstance().initialize(this)
- PushManager.getInstance().setDebugLogger(this) {
- Log.d(kTag, it)
- }
- val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null)
- val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
- daoSession = daoMaster.newSession()
//appKey 为保留字段,目前只需传入null或空字符串即可。
HatomPlayerSDK.init(this, "", true)
}
-
- fun obtainDaoSession(): DaoSession {
- return daoSession
- }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
index 57c8b4f..a6e9e9c 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
@@ -1,13 +1,9 @@
package com.casic.smart.town.sanxi.base
import android.app.Application
-import android.util.Log
import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.greendao.DaoMaster
-import com.casic.smart.town.sanxi.greendao.DaoSession
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.hikvision.hatomplayer.HatomPlayerSDK
-import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlin.properties.Delegates
@@ -19,8 +15,6 @@
private var instance: BaseApplication by Delegates.notNull()
fun obtainInstance() = instance
-
- private lateinit var daoSession: DaoSession
}
override fun onCreate() {
@@ -29,19 +23,7 @@
SaveKeyValues.initSharedPreferences(this)
ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印
ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key))
- //推送
- PushManager.getInstance().initialize(this)
- PushManager.getInstance().setDebugLogger(this) {
- Log.d(kTag, it)
- }
- val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null)
- val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
- daoSession = daoMaster.newSession()
//appKey 为保留字段,目前只需传入null或空字符串即可。
HatomPlayerSDK.init(this, "", true)
}
-
- fun obtainDaoSession(): DaoSession {
- return daoSession
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
deleted file mode 100644
index b8f67dc..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.casic.smart.town.sanxi.bean;
-
-import org.greenrobot.greendao.annotation.Entity;
-import org.greenrobot.greendao.annotation.Generated;
-import org.greenrobot.greendao.annotation.Id;
-import org.greenrobot.greendao.annotation.Unique;
-
-@Entity
-public class AlarmMessageLocaleBean {
- @Id(autoincrement = true)
- private Long id;//主键自增
-
- @Unique
- private String messageId;
- private String appId;
- private String clientId;
- private String taskId;
- private String userId;
- private String title;
- private String content;
- private String deviceCode;
- private String isRead;//0-未读,1-已读
- private String alarmTime;
-
- @Generated(hash = 566950134)
- public AlarmMessageLocaleBean(Long id, String messageId, String appId,
- String clientId, String taskId, String userId, String title,
- String content, String deviceCode, String isRead, String alarmTime) {
- this.id = id;
- this.messageId = messageId;
- this.appId = appId;
- this.clientId = clientId;
- this.taskId = taskId;
- this.userId = userId;
- this.title = title;
- this.content = content;
- this.deviceCode = deviceCode;
- this.isRead = isRead;
- this.alarmTime = alarmTime;
- }
-
- @Generated(hash = 1737519562)
- public AlarmMessageLocaleBean() {
- }
-
- public Long getId() {
- return this.id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMessageId() {
- return this.messageId;
- }
-
- public void setMessageId(String messageId) {
- this.messageId = messageId;
- }
-
- public String getAppId() {
- return this.appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- public String getClientId() {
- return this.clientId;
- }
-
- public void setClientId(String clientId) {
- this.clientId = clientId;
- }
-
- public String getTaskId() {
- return this.taskId;
- }
-
- public void setTaskId(String taskId) {
- this.taskId = taskId;
- }
-
- public String getUserId() {
- return this.userId;
- }
-
- public void setUserId(String userId) {
- this.userId = userId;
- }
-
- public String getTitle() {
- return this.title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getContent() {
- return this.content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public String getDeviceCode() {
- return this.deviceCode;
- }
-
- public void setDeviceCode(String deviceCode) {
- this.deviceCode = deviceCode;
- }
-
- public String getIsRead() {
- return this.isRead;
- }
-
- public void setIsRead(String isRead) {
- this.isRead = isRead;
- }
-
- public String getAlarmTime() {
- return this.alarmTime;
- }
-
- public void setAlarmTime(String alarmTime) {
- this.alarmTime = alarmTime;
- }
-}
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
index 57c8b4f..a6e9e9c 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
@@ -1,13 +1,9 @@
package com.casic.smart.town.sanxi.base
import android.app.Application
-import android.util.Log
import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.greendao.DaoMaster
-import com.casic.smart.town.sanxi.greendao.DaoSession
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.hikvision.hatomplayer.HatomPlayerSDK
-import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlin.properties.Delegates
@@ -19,8 +15,6 @@
private var instance: BaseApplication by Delegates.notNull()
fun obtainInstance() = instance
-
- private lateinit var daoSession: DaoSession
}
override fun onCreate() {
@@ -29,19 +23,7 @@
SaveKeyValues.initSharedPreferences(this)
ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印
ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key))
- //推送
- PushManager.getInstance().initialize(this)
- PushManager.getInstance().setDebugLogger(this) {
- Log.d(kTag, it)
- }
- val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null)
- val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
- daoSession = daoMaster.newSession()
//appKey 为保留字段,目前只需传入null或空字符串即可。
HatomPlayerSDK.init(this, "", true)
}
-
- fun obtainDaoSession(): DaoSession {
- return daoSession
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
deleted file mode 100644
index b8f67dc..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.casic.smart.town.sanxi.bean;
-
-import org.greenrobot.greendao.annotation.Entity;
-import org.greenrobot.greendao.annotation.Generated;
-import org.greenrobot.greendao.annotation.Id;
-import org.greenrobot.greendao.annotation.Unique;
-
-@Entity
-public class AlarmMessageLocaleBean {
- @Id(autoincrement = true)
- private Long id;//主键自增
-
- @Unique
- private String messageId;
- private String appId;
- private String clientId;
- private String taskId;
- private String userId;
- private String title;
- private String content;
- private String deviceCode;
- private String isRead;//0-未读,1-已读
- private String alarmTime;
-
- @Generated(hash = 566950134)
- public AlarmMessageLocaleBean(Long id, String messageId, String appId,
- String clientId, String taskId, String userId, String title,
- String content, String deviceCode, String isRead, String alarmTime) {
- this.id = id;
- this.messageId = messageId;
- this.appId = appId;
- this.clientId = clientId;
- this.taskId = taskId;
- this.userId = userId;
- this.title = title;
- this.content = content;
- this.deviceCode = deviceCode;
- this.isRead = isRead;
- this.alarmTime = alarmTime;
- }
-
- @Generated(hash = 1737519562)
- public AlarmMessageLocaleBean() {
- }
-
- public Long getId() {
- return this.id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMessageId() {
- return this.messageId;
- }
-
- public void setMessageId(String messageId) {
- this.messageId = messageId;
- }
-
- public String getAppId() {
- return this.appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- public String getClientId() {
- return this.clientId;
- }
-
- public void setClientId(String clientId) {
- this.clientId = clientId;
- }
-
- public String getTaskId() {
- return this.taskId;
- }
-
- public void setTaskId(String taskId) {
- this.taskId = taskId;
- }
-
- public String getUserId() {
- return this.userId;
- }
-
- public void setUserId(String userId) {
- this.userId = userId;
- }
-
- public String getTitle() {
- return this.title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getContent() {
- return this.content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public String getDeviceCode() {
- return this.deviceCode;
- }
-
- public void setDeviceCode(String deviceCode) {
- this.deviceCode = deviceCode;
- }
-
- public String getIsRead() {
- return this.isRead;
- }
-
- public void setIsRead(String isRead) {
- this.isRead = isRead;
- }
-
- public String getAlarmTime() {
- return this.alarmTime;
- }
-
- public void setAlarmTime(String alarmTime) {
- this.alarmTime = alarmTime;
- }
-}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
new file mode 100644
index 0000000..262f1fb
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.smart.town.sanxi.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
index 57c8b4f..a6e9e9c 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
@@ -1,13 +1,9 @@
package com.casic.smart.town.sanxi.base
import android.app.Application
-import android.util.Log
import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.greendao.DaoMaster
-import com.casic.smart.town.sanxi.greendao.DaoSession
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.hikvision.hatomplayer.HatomPlayerSDK
-import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlin.properties.Delegates
@@ -19,8 +15,6 @@
private var instance: BaseApplication by Delegates.notNull()
fun obtainInstance() = instance
-
- private lateinit var daoSession: DaoSession
}
override fun onCreate() {
@@ -29,19 +23,7 @@
SaveKeyValues.initSharedPreferences(this)
ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印
ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key))
- //推送
- PushManager.getInstance().initialize(this)
- PushManager.getInstance().setDebugLogger(this) {
- Log.d(kTag, it)
- }
- val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null)
- val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
- daoSession = daoMaster.newSession()
//appKey 为保留字段,目前只需传入null或空字符串即可。
HatomPlayerSDK.init(this, "", true)
}
-
- fun obtainDaoSession(): DaoSession {
- return daoSession
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
deleted file mode 100644
index b8f67dc..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.casic.smart.town.sanxi.bean;
-
-import org.greenrobot.greendao.annotation.Entity;
-import org.greenrobot.greendao.annotation.Generated;
-import org.greenrobot.greendao.annotation.Id;
-import org.greenrobot.greendao.annotation.Unique;
-
-@Entity
-public class AlarmMessageLocaleBean {
- @Id(autoincrement = true)
- private Long id;//主键自增
-
- @Unique
- private String messageId;
- private String appId;
- private String clientId;
- private String taskId;
- private String userId;
- private String title;
- private String content;
- private String deviceCode;
- private String isRead;//0-未读,1-已读
- private String alarmTime;
-
- @Generated(hash = 566950134)
- public AlarmMessageLocaleBean(Long id, String messageId, String appId,
- String clientId, String taskId, String userId, String title,
- String content, String deviceCode, String isRead, String alarmTime) {
- this.id = id;
- this.messageId = messageId;
- this.appId = appId;
- this.clientId = clientId;
- this.taskId = taskId;
- this.userId = userId;
- this.title = title;
- this.content = content;
- this.deviceCode = deviceCode;
- this.isRead = isRead;
- this.alarmTime = alarmTime;
- }
-
- @Generated(hash = 1737519562)
- public AlarmMessageLocaleBean() {
- }
-
- public Long getId() {
- return this.id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMessageId() {
- return this.messageId;
- }
-
- public void setMessageId(String messageId) {
- this.messageId = messageId;
- }
-
- public String getAppId() {
- return this.appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- public String getClientId() {
- return this.clientId;
- }
-
- public void setClientId(String clientId) {
- this.clientId = clientId;
- }
-
- public String getTaskId() {
- return this.taskId;
- }
-
- public void setTaskId(String taskId) {
- this.taskId = taskId;
- }
-
- public String getUserId() {
- return this.userId;
- }
-
- public void setUserId(String userId) {
- this.userId = userId;
- }
-
- public String getTitle() {
- return this.title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getContent() {
- return this.content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public String getDeviceCode() {
- return this.deviceCode;
- }
-
- public void setDeviceCode(String deviceCode) {
- this.deviceCode = deviceCode;
- }
-
- public String getIsRead() {
- return this.isRead;
- }
-
- public void setIsRead(String isRead) {
- this.isRead = isRead;
- }
-
- public String getAlarmTime() {
- return this.alarmTime;
- }
-
- public void setAlarmTime(String alarmTime) {
- this.alarmTime = alarmTime;
- }
-}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
new file mode 100644
index 0000000..262f1fb
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.smart.town.sanxi.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
new file mode 100644
index 0000000..512211d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.smart.town.sanxi.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
index 57c8b4f..a6e9e9c 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
@@ -1,13 +1,9 @@
package com.casic.smart.town.sanxi.base
import android.app.Application
-import android.util.Log
import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.greendao.DaoMaster
-import com.casic.smart.town.sanxi.greendao.DaoSession
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.hikvision.hatomplayer.HatomPlayerSDK
-import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlin.properties.Delegates
@@ -19,8 +15,6 @@
private var instance: BaseApplication by Delegates.notNull()
fun obtainInstance() = instance
-
- private lateinit var daoSession: DaoSession
}
override fun onCreate() {
@@ -29,19 +23,7 @@
SaveKeyValues.initSharedPreferences(this)
ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印
ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key))
- //推送
- PushManager.getInstance().initialize(this)
- PushManager.getInstance().setDebugLogger(this) {
- Log.d(kTag, it)
- }
- val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null)
- val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
- daoSession = daoMaster.newSession()
//appKey 为保留字段,目前只需传入null或空字符串即可。
HatomPlayerSDK.init(this, "", true)
}
-
- fun obtainDaoSession(): DaoSession {
- return daoSession
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
deleted file mode 100644
index b8f67dc..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.casic.smart.town.sanxi.bean;
-
-import org.greenrobot.greendao.annotation.Entity;
-import org.greenrobot.greendao.annotation.Generated;
-import org.greenrobot.greendao.annotation.Id;
-import org.greenrobot.greendao.annotation.Unique;
-
-@Entity
-public class AlarmMessageLocaleBean {
- @Id(autoincrement = true)
- private Long id;//主键自增
-
- @Unique
- private String messageId;
- private String appId;
- private String clientId;
- private String taskId;
- private String userId;
- private String title;
- private String content;
- private String deviceCode;
- private String isRead;//0-未读,1-已读
- private String alarmTime;
-
- @Generated(hash = 566950134)
- public AlarmMessageLocaleBean(Long id, String messageId, String appId,
- String clientId, String taskId, String userId, String title,
- String content, String deviceCode, String isRead, String alarmTime) {
- this.id = id;
- this.messageId = messageId;
- this.appId = appId;
- this.clientId = clientId;
- this.taskId = taskId;
- this.userId = userId;
- this.title = title;
- this.content = content;
- this.deviceCode = deviceCode;
- this.isRead = isRead;
- this.alarmTime = alarmTime;
- }
-
- @Generated(hash = 1737519562)
- public AlarmMessageLocaleBean() {
- }
-
- public Long getId() {
- return this.id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMessageId() {
- return this.messageId;
- }
-
- public void setMessageId(String messageId) {
- this.messageId = messageId;
- }
-
- public String getAppId() {
- return this.appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- public String getClientId() {
- return this.clientId;
- }
-
- public void setClientId(String clientId) {
- this.clientId = clientId;
- }
-
- public String getTaskId() {
- return this.taskId;
- }
-
- public void setTaskId(String taskId) {
- this.taskId = taskId;
- }
-
- public String getUserId() {
- return this.userId;
- }
-
- public void setUserId(String userId) {
- this.userId = userId;
- }
-
- public String getTitle() {
- return this.title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getContent() {
- return this.content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public String getDeviceCode() {
- return this.deviceCode;
- }
-
- public void setDeviceCode(String deviceCode) {
- this.deviceCode = deviceCode;
- }
-
- public String getIsRead() {
- return this.isRead;
- }
-
- public void setIsRead(String isRead) {
- this.isRead = isRead;
- }
-
- public String getAlarmTime() {
- return this.alarmTime;
- }
-
- public void setAlarmTime(String alarmTime) {
- this.alarmTime = alarmTime;
- }
-}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
new file mode 100644
index 0000000..262f1fb
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.smart.town.sanxi.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
new file mode 100644
index 0000000..512211d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.smart.town.sanxi.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt
new file mode 100644
index 0000000..06cb326
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.extensions
+
+import android.view.View
+import com.qmuiteam.qmui.widget.QMUIEmptyView
+
+fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
+ this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
+}
+
+fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
+ this.show(false, title, null, "刷新", onButtonClickListener)
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
index 57c8b4f..a6e9e9c 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
@@ -1,13 +1,9 @@
package com.casic.smart.town.sanxi.base
import android.app.Application
-import android.util.Log
import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.greendao.DaoMaster
-import com.casic.smart.town.sanxi.greendao.DaoSession
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.hikvision.hatomplayer.HatomPlayerSDK
-import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlin.properties.Delegates
@@ -19,8 +15,6 @@
private var instance: BaseApplication by Delegates.notNull()
fun obtainInstance() = instance
-
- private lateinit var daoSession: DaoSession
}
override fun onCreate() {
@@ -29,19 +23,7 @@
SaveKeyValues.initSharedPreferences(this)
ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印
ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key))
- //推送
- PushManager.getInstance().initialize(this)
- PushManager.getInstance().setDebugLogger(this) {
- Log.d(kTag, it)
- }
- val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null)
- val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
- daoSession = daoMaster.newSession()
//appKey 为保留字段,目前只需传入null或空字符串即可。
HatomPlayerSDK.init(this, "", true)
}
-
- fun obtainDaoSession(): DaoSession {
- return daoSession
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
deleted file mode 100644
index b8f67dc..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.casic.smart.town.sanxi.bean;
-
-import org.greenrobot.greendao.annotation.Entity;
-import org.greenrobot.greendao.annotation.Generated;
-import org.greenrobot.greendao.annotation.Id;
-import org.greenrobot.greendao.annotation.Unique;
-
-@Entity
-public class AlarmMessageLocaleBean {
- @Id(autoincrement = true)
- private Long id;//主键自增
-
- @Unique
- private String messageId;
- private String appId;
- private String clientId;
- private String taskId;
- private String userId;
- private String title;
- private String content;
- private String deviceCode;
- private String isRead;//0-未读,1-已读
- private String alarmTime;
-
- @Generated(hash = 566950134)
- public AlarmMessageLocaleBean(Long id, String messageId, String appId,
- String clientId, String taskId, String userId, String title,
- String content, String deviceCode, String isRead, String alarmTime) {
- this.id = id;
- this.messageId = messageId;
- this.appId = appId;
- this.clientId = clientId;
- this.taskId = taskId;
- this.userId = userId;
- this.title = title;
- this.content = content;
- this.deviceCode = deviceCode;
- this.isRead = isRead;
- this.alarmTime = alarmTime;
- }
-
- @Generated(hash = 1737519562)
- public AlarmMessageLocaleBean() {
- }
-
- public Long getId() {
- return this.id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMessageId() {
- return this.messageId;
- }
-
- public void setMessageId(String messageId) {
- this.messageId = messageId;
- }
-
- public String getAppId() {
- return this.appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- public String getClientId() {
- return this.clientId;
- }
-
- public void setClientId(String clientId) {
- this.clientId = clientId;
- }
-
- public String getTaskId() {
- return this.taskId;
- }
-
- public void setTaskId(String taskId) {
- this.taskId = taskId;
- }
-
- public String getUserId() {
- return this.userId;
- }
-
- public void setUserId(String userId) {
- this.userId = userId;
- }
-
- public String getTitle() {
- return this.title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getContent() {
- return this.content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public String getDeviceCode() {
- return this.deviceCode;
- }
-
- public void setDeviceCode(String deviceCode) {
- this.deviceCode = deviceCode;
- }
-
- public String getIsRead() {
- return this.isRead;
- }
-
- public void setIsRead(String isRead) {
- this.isRead = isRead;
- }
-
- public String getAlarmTime() {
- return this.alarmTime;
- }
-
- public void setAlarmTime(String alarmTime) {
- this.alarmTime = alarmTime;
- }
-}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
new file mode 100644
index 0000000..262f1fb
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.smart.town.sanxi.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
new file mode 100644
index 0000000..512211d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.smart.town.sanxi.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt
new file mode 100644
index 0000000..06cb326
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.extensions
+
+import android.view.View
+import com.qmuiteam.qmui.widget.QMUIEmptyView
+
+fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
+ this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
+}
+
+fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
+ this.show(false, title, null, "刷新", onButtonClickListener)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
index 93548fc..a763c56 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -1,11 +1,18 @@
package com.casic.smart.town.sanxi.extensions
+import android.content.Context
import com.casic.smart.town.sanxi.model.ErrorMessageModel
import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.casic.smart.town.sanxi.util.OnImageCompressListener
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.utils.SaveKeyValues
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
+import java.util.*
fun String.separateResponseCode(): Int {
if (this.isBlank()) {
@@ -51,4 +58,49 @@
"未知类型"
}
}
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ if (this.isEmpty()) return this
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(context.createCompressImageDir().toString())
+ .filter {
+ !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif"))
+ }
+ .setCompressListener(object : OnCompressListener {
+ override fun onStart() {
+
+ }
+
+ override fun onSuccess(file: File) {
+ listener.onSuccess(file)
+ }
+
+ override fun onError(e: Throwable) {
+ listener.onError(e)
+ }
+ }).launch()
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ExpandableItemViewHolder(
+ layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context))
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
new file mode 100644
index 0000000..8176a68
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt
@@ -0,0 +1,118 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderCompletedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text = String.format(
+ "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}"
+ )
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
new file mode 100644
index 0000000..36abfdf
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt
@@ -0,0 +1,111 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderInHandleAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
new file mode 100644
index 0000000..e41c337
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt
@@ -0,0 +1,105 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.extensions.arrowAnimation
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.casic.smart.town.sanxi.util.TimeLineItemDecoration
+
+class OrderNotConfirmedAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+ return expandableList
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
new file mode 100644
index 0000000..72405e1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt
@@ -0,0 +1,68 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.OrderListModel
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class OrderNotProcessedAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "报警值:未知"
+ } else {
+ "报警值:" + rowsBean.alarmValue
+ }
+ holder.alarmValueView.text = alarmValue
+ holder.wellLocationView.text = String.format("点位置:${rowsBean.position}")
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener?.onOperationClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..aff52ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,18 @@
+package com.casic.smart.town.sanxi.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int) = pages[position]
+
+ override fun getCount() = pages.size
+
+ override fun getPageTitle(position: Int) = pageTitles[position]
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
index 57c8b4f..a6e9e9c 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt
@@ -1,13 +1,9 @@
package com.casic.smart.town.sanxi.base
import android.app.Application
-import android.util.Log
import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.greendao.DaoMaster
-import com.casic.smart.town.sanxi.greendao.DaoSession
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.hikvision.hatomplayer.HatomPlayerSDK
-import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlin.properties.Delegates
@@ -19,8 +15,6 @@
private var instance: BaseApplication by Delegates.notNull()
fun obtainInstance() = instance
-
- private lateinit var daoSession: DaoSession
}
override fun onCreate() {
@@ -29,19 +23,7 @@
SaveKeyValues.initSharedPreferences(this)
ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印
ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key))
- //推送
- PushManager.getInstance().initialize(this)
- PushManager.getInstance().setDebugLogger(this) {
- Log.d(kTag, it)
- }
- val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null)
- val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
- daoSession = daoMaster.newSession()
//appKey 为保留字段,目前只需传入null或空字符串即可。
HatomPlayerSDK.init(this, "", true)
}
-
- fun obtainDaoSession(): DaoSession {
- return daoSession
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
deleted file mode 100644
index b8f67dc..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.casic.smart.town.sanxi.bean;
-
-import org.greenrobot.greendao.annotation.Entity;
-import org.greenrobot.greendao.annotation.Generated;
-import org.greenrobot.greendao.annotation.Id;
-import org.greenrobot.greendao.annotation.Unique;
-
-@Entity
-public class AlarmMessageLocaleBean {
- @Id(autoincrement = true)
- private Long id;//主键自增
-
- @Unique
- private String messageId;
- private String appId;
- private String clientId;
- private String taskId;
- private String userId;
- private String title;
- private String content;
- private String deviceCode;
- private String isRead;//0-未读,1-已读
- private String alarmTime;
-
- @Generated(hash = 566950134)
- public AlarmMessageLocaleBean(Long id, String messageId, String appId,
- String clientId, String taskId, String userId, String title,
- String content, String deviceCode, String isRead, String alarmTime) {
- this.id = id;
- this.messageId = messageId;
- this.appId = appId;
- this.clientId = clientId;
- this.taskId = taskId;
- this.userId = userId;
- this.title = title;
- this.content = content;
- this.deviceCode = deviceCode;
- this.isRead = isRead;
- this.alarmTime = alarmTime;
- }
-
- @Generated(hash = 1737519562)
- public AlarmMessageLocaleBean() {
- }
-
- public Long getId() {
- return this.id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMessageId() {
- return this.messageId;
- }
-
- public void setMessageId(String messageId) {
- this.messageId = messageId;
- }
-
- public String getAppId() {
- return this.appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- public String getClientId() {
- return this.clientId;
- }
-
- public void setClientId(String clientId) {
- this.clientId = clientId;
- }
-
- public String getTaskId() {
- return this.taskId;
- }
-
- public void setTaskId(String taskId) {
- this.taskId = taskId;
- }
-
- public String getUserId() {
- return this.userId;
- }
-
- public void setUserId(String userId) {
- this.userId = userId;
- }
-
- public String getTitle() {
- return this.title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getContent() {
- return this.content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public String getDeviceCode() {
- return this.deviceCode;
- }
-
- public void setDeviceCode(String deviceCode) {
- this.deviceCode = deviceCode;
- }
-
- public String getIsRead() {
- return this.isRead;
- }
-
- public void setIsRead(String isRead) {
- this.isRead = isRead;
- }
-
- public String getAlarmTime() {
- return this.alarmTime;
- }
-
- public void setAlarmTime(String alarmTime) {
- this.alarmTime = alarmTime;
- }
-}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
new file mode 100644
index 0000000..262f1fb
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.smart.town.sanxi.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
new file mode 100644
index 0000000..512211d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.smart.town.sanxi.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt
new file mode 100644
index 0000000..06cb326
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.extensions
+
+import android.view.View
+import com.qmuiteam.qmui.widget.QMUIEmptyView
+
+fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
+ this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
+}
+
+fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
+ this.show(false, title, null, "刷新", onButtonClickListener)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
index 93548fc..a763c56 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -1,11 +1,18 @@
package com.casic.smart.town.sanxi.extensions
+import android.content.Context
import com.casic.smart.town.sanxi.model.ErrorMessageModel
import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.casic.smart.town.sanxi.util.OnImageCompressListener
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.utils.SaveKeyValues
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
+import java.util.*
fun String.separateResponseCode(): Int {
if (this.isBlank()) {
@@ -51,4 +58,49 @@
"未知类型"
}
}
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
+}
+
+//拼接图片地址
+fun String.combineImagePath(): String {
+ if (this.isEmpty()) return this
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(context.createCompressImageDir().toString())
+ .filter {
+ !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif"))
+ }
+ .setCompressListener(object : OnCompressListener {
+ override fun onStart() {
+
+ }
+
+ override fun onSuccess(file: File) {
+ listener.onSuccess(file)
+ }
+
+ override fun onError(e: Throwable) {
+ listener.onError(e)
+ }
+ }).launch()
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
deleted file mode 100644
index 84ca796..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.casic.smart.town.sanxi.fragment
-
-import android.os.Handler
-import androidx.lifecycle.ViewModelProvider
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.adapter.AlarmAdapter
-import com.casic.smart.town.sanxi.model.AlarmListModel
-import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
-import com.casic.smart.town.sanxi.vm.AlarmViewModel
-import com.pengxh.kt.lite.base.KotlinBaseFragment
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import kotlinx.android.synthetic.main.fragment_alarm.*
-
-class AlarmPageFragment : KotlinBaseFragment() {
-
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var alarmAdapter: AlarmAdapter
- private var dataBeans: MutableList = ArrayList()
- private var pageIndex = 1
- private var isRefresh = false
- private var isLoadMore = false
-
- override fun initLayoutView(): Int = R.layout.fragment_alarm
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- weakReferenceHandler = WeakReferenceHandler(callback)
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.resultModel.observe(this, {
- if (it.code == 200) {
- val dataRows = it.data?.rows
- when {
- isRefresh -> {
- dataBeans.clear()
- dataBeans = dataRows!!
- alarmRefreshLayout.finishRefresh()
- isRefresh = false
- }
- isLoadMore -> {
- if (dataRows?.size == 0) {
- "到底了,别拉了".show(requireContext())
- }
- dataBeans.addAll(dataRows!!)
- alarmRefreshLayout.finishLoadMore()
- isLoadMore = false
- }
- else -> {
- dataBeans = dataRows!!
- }
- }
- weakReferenceHandler.sendEmptyMessage(2022102801)
- }
- })
- }
-
- override fun initEvent() {
- alarmRefreshLayout.setOnRefreshListener {
- isRefresh = true
- //刷新之后页码重置
- pageIndex = 1
- getAlarmListData()
- }
- alarmRefreshLayout.setOnLoadMoreListener {
- isLoadMore = true
- pageIndex++
- getAlarmListData()
- }
- }
-
- override fun onResume() {
- super.onResume()
- pageIndex = 1
- getAlarmListData()
- }
-
- private fun getAlarmListData() {
- alarmViewModel.getAlarmListData("", "", pageIndex)
- }
-
- private val callback = Handler.Callback {
- if (it.what == 2022102801) {
- if (isRefresh || isLoadMore) {
- alarmAdapter.notifyDataSetChanged()
- } else {
- alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
- alarmRecyclerView!!.adapter = alarmAdapter
- alarmAdapter.setOnItemClickListener(object :
- AlarmAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val deviceId = dataBeans[position].id.toString()
- if (deviceId.isBlank()) {
- "设备ID异常,无法查看位置".show(requireContext())
- return
- }
- requireContext().navigatePageTo(deviceId)
- }
- })
- }
- }
- true
- }
-}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b2284e7..d944f80 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
-apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -51,15 +50,9 @@
}
}
- greendao {
- schemaVersion 1//数据库版本号
- targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
- daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名
- }
-
applicationVariants.all { variant ->
variant.outputs.all {
- outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk"
+ outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk"
}
}
}
@@ -93,6 +86,8 @@
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.9.0'
+ //图片选择框架
+ implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//返回值转换器
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
@@ -110,14 +105,11 @@
implementation 'com.amap.api:3dmap:latest.integration'
//ArcGIS
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
- //推送SDK
- implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK
- implementation 'com.getui:gtc:3.1.9.0' //个推核心组件
- //数据库框架
- implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
implementation project(path: ':hatom-video-player')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2e068a..83f0a08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,23 +52,18 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
deleted file mode 100644
index 9996a4b..0000000
--- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.casic.smart.town.sanxi.adapter
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.casic.smart.town.sanxi.R
-import com.casic.smart.town.sanxi.model.AlarmListModel
-
-class AlarmAdapter(
- context: Context, private val dataRows: MutableList
-) : RecyclerView.Adapter() {
-
- private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
- layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
- )
-
- override fun getItemCount(): Int = dataRows.size
-
- override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
- //绑定数据
- val rowsBean = dataRows[position]
-
- holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
- holder.deviceStateView.text = rowsBean.onlineStateName
- holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
- holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
-
- holder.itemView.setOnClickListener {
- listener?.onClicked(position)
- }
- }
-
- inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
- var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
- var locationView: TextView = view.findViewById(R.id.locationView)
- var installDateView: TextView = view.findViewById(R.id.installDateView)
- }
-
- private var listener: OnItemClickListener? = null
-
- interface OnItemClickListener {
- fun onClicked(position: Int)
- }
-
- fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
- this.listener = onClickListener
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
new file mode 100644
index 0000000..759647c
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt
@@ -0,0 +1,52 @@
+package com.casic.smart.town.sanxi.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.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.ExpandableDataModel
+import com.pengxh.kt.lite.extensions.convertColor
+
+@SuppressLint("NotifyDataSetChanged")
+class ExpandableViewAdapter(private val context: Context) :
+ RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList