diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c7766f..9a3dbf8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -24,4 +24,13 @@
- @color/mainTextColor
- @dimen/sp_16
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c7766f..9a3dbf8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -24,4 +24,13 @@
- @color/mainTextColor
- @dimen/sp_16
+
+
+
diff --git a/app/svg/alarm_location.svg b/app/svg/alarm_location.svg
new file mode 100644
index 0000000..838706d
--- /dev/null
+++ b/app/svg/alarm_location.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c7766f..9a3dbf8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -24,4 +24,13 @@
- @color/mainTextColor
- @dimen/sp_16
+
+
+
diff --git a/app/svg/alarm_location.svg b/app/svg/alarm_location.svg
new file mode 100644
index 0000000..838706d
--- /dev/null
+++ b/app/svg/alarm_location.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/collect.svg b/app/svg/collect.svg
new file mode 100644
index 0000000..4352c3d
--- /dev/null
+++ b/app/svg/collect.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c7766f..9a3dbf8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -24,4 +24,13 @@
- @color/mainTextColor
- @dimen/sp_16
+
+
+
diff --git a/app/svg/alarm_location.svg b/app/svg/alarm_location.svg
new file mode 100644
index 0000000..838706d
--- /dev/null
+++ b/app/svg/alarm_location.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/collect.svg b/app/svg/collect.svg
new file mode 100644
index 0000000..4352c3d
--- /dev/null
+++ b/app/svg/collect.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/file.svg b/app/svg/file.svg
new file mode 100644
index 0000000..20b6493
--- /dev/null
+++ b/app/svg/file.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c7766f..9a3dbf8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -24,4 +24,13 @@
- @color/mainTextColor
- @dimen/sp_16
+
+
+
diff --git a/app/svg/alarm_location.svg b/app/svg/alarm_location.svg
new file mode 100644
index 0000000..838706d
--- /dev/null
+++ b/app/svg/alarm_location.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/collect.svg b/app/svg/collect.svg
new file mode 100644
index 0000000..4352c3d
--- /dev/null
+++ b/app/svg/collect.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/file.svg b/app/svg/file.svg
new file mode 100644
index 0000000..20b6493
--- /dev/null
+++ b/app/svg/file.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/navigation.svg b/app/svg/navigation.svg
new file mode 100644
index 0000000..f5c0e39
--- /dev/null
+++ b/app/svg/navigation.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c7766f..9a3dbf8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -24,4 +24,13 @@
- @color/mainTextColor
- @dimen/sp_16
+
+
+
diff --git a/app/svg/alarm_location.svg b/app/svg/alarm_location.svg
new file mode 100644
index 0000000..838706d
--- /dev/null
+++ b/app/svg/alarm_location.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/collect.svg b/app/svg/collect.svg
new file mode 100644
index 0000000..4352c3d
--- /dev/null
+++ b/app/svg/collect.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/file.svg b/app/svg/file.svg
new file mode 100644
index 0000000..20b6493
--- /dev/null
+++ b/app/svg/file.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/navigation.svg b/app/svg/navigation.svg
new file mode 100644
index 0000000..f5c0e39
--- /dev/null
+++ b/app/svg/navigation.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/onTop.svg b/app/svg/onTop.svg
new file mode 100644
index 0000000..8f51240
--- /dev/null
+++ b/app/svg/onTop.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8fe29..00b0e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
+ return ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv, parent, false)
+ )
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.groupNameView.text = rowsBean.projectName
+ holder.projectAreaView.text = rowsBean.area
+ holder.projectTypeView.text = rowsBean.type
+ holder.projectLocationView.text = rowsBean.location
+
+ //绑定事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var groupNameView: TextView = view.findViewById(R.id.groupNameView)
+ var projectAreaView: QMUIRoundButton = view.findViewById(R.id.projectAreaView)
+ var projectTypeView: QMUIRoundButton = view.findViewById(R.id.projectTypeView)
+ var projectLocationView: TextView = view.findViewById(R.id.projectLocationView)
+ }
+
+ 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/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index 7e1faf3..c053c9c 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -8,12 +8,14 @@
import com.casic.br.operationsite.adapter.WorkingListAdapter
import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.WorkingListModel
+import com.casic.br.operationsite.utils.DialogHelper
import com.casic.br.operationsite.view.WorkSiteTabActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
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 com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.fragment_working.*
import kotlinx.android.synthetic.main.include_empty_view.*
@@ -81,6 +83,19 @@
weakReferenceHandler.sendEmptyMessage(2022071101)
}
})
+
+ workSiteViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
}
private fun obtainWorkingListByPage() {
diff --git a/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
new file mode 100644
index 0000000..7979a74
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/model/AlarmListModel.java
@@ -0,0 +1,121 @@
+package com.casic.br.operationsite.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ private List rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsBean {
+ private String area;
+ private String createTime;
+ private String id;
+ private String location;
+ private String projectName;
+ private String type;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
index b7e8188..e034eba 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt
@@ -12,4 +12,13 @@
@Query("offset") offset: Int,
@Query("limit") limit: Int
): String
+
+ /**
+ * 报警列表
+ */
+ @GET("/test/alarm/alarmList")
+ suspend fun obtainAlarmListByPage(
+ @Query("offset") offset: Int,
+ @Query("limit") limit: Int
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 63c4f5c..209bc31 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -19,4 +19,11 @@
suspend fun obtainWorkingListByPage(page: Int): String {
return api.obtainWorkingListByPage(page, LocaleConstant.PAGE_LIMIT)
}
+
+ /**
+ * 报警列表
+ */
+ suspend fun obtainAlarmListByPage(page: Int): String {
+ return api.obtainAlarmListByPage(page, LocaleConstant.PAGE_LIMIT)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
new file mode 100644
index 0000000..751d8ce
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/utils/DialogHelper.kt
@@ -0,0 +1,29 @@
+package com.casic.br.operationsite.utils;
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object DialogHelper {
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun showLoadingDialog(activity: Activity, message: String?) {
+ loadingDialog = QMUITipDialog.Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismissLoadingDialog() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
new file mode 100644
index 0000000..d6594c7
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.operationsite.view
+
+import android.os.Handler
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.adapter.AlarmListAdapter
+import com.casic.br.operationsite.extensions.showEmptyPage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.utils.DialogHelper
+import com.casic.br.operationsite.vm.AlarmViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_alarm_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class AlarmListActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmListAdapter: AlarmListAdapter
+ private lateinit var alarmViewModel: AlarmViewModel
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_alarm_list
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+
+ searchTextView.setOnClickListener {
+ if (searchInputView.text.isNullOrBlank()) {
+ "错误!请重新输入!".show(this)
+ }
+ }
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
+ }
+
+ override fun onResume() {
+ obtainAlarmListByPage()
+ super.onResume()
+ }
+
+ override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ obtainAlarmListByPage()
+ }
+
+ alarmViewModel.alarmModel.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(this)
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022071201)
+ }
+ })
+
+ alarmViewModel.loadState.observe(this, {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ }
+ })
+ }
+
+ private fun obtainAlarmListByPage() {
+ alarmViewModel.obtainAlarmListByPage(pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022071201) {
+ if (isRefresh || isLoadMore) {
+ alarmListAdapter.notifyDataSetChanged()
+ } else { //首次加载数据
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage {
+ pageIndex = 1
+ obtainAlarmListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ alarmListAdapter = AlarmListAdapter(this, dataBeans)
+ alarmRecyclerView!!.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ alarmRecyclerView!!.layoutManager = LinearLayoutManager(this)
+ alarmRecyclerView!!.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickListener(object :
+ AlarmListAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ navigatePageTo(dataBeans[position].id)
+ }
+ })
+ }
+ }
+ }
+ true
+ }
+
+ /**
+ * xml申明式点击事件
+ * @param view 事件持有者,不可删除
+ * */
+ fun finishActivity(view: View) {
+ finish()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index bea8faa..1cf2a04 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -81,7 +81,7 @@
override fun initEvent() {
alarmTextView.setOnClickListener {
- navigatePageTo()
+ navigatePageTo()
}
fenceTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..f438b3b
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -0,0 +1,37 @@
+package com.casic.br.operationsite.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.operationsite.base.BaseApplication
+import com.casic.br.operationsite.extensions.separateResponseCode
+import com.casic.br.operationsite.extensions.toErrorMessage
+import com.casic.br.operationsite.model.AlarmListModel
+import com.casic.br.operationsite.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson = Gson()
+ val alarmModel = MutableLiveData()
+
+ fun obtainAlarmListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.obtainAlarmListByPage(page)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ alarmModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
index ab0d764..d5d8601 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt
@@ -11,6 +11,7 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
/**
* 现场作业ViewModel
@@ -21,13 +22,16 @@
val workingModel = MutableLiveData()
fun obtainWorkingListByPage(page: Int) = launch({
+ loadState.value = LoadState.Loading
val response = RetrofitServiceManager.obtainWorkingListByPage(page)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
workingModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
+ loadState.value = LoadState.Success
} else {
+ loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
new file mode 100644
index 0000000..fb34d0e
--- /dev/null
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_alarm_location.xml b/app/src/main/res/drawable/ic_alarm_location.xml
new file mode 100644
index 0000000..3b1513c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_location.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml
new file mode 100644
index 0000000..e05ab3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml
new file mode 100644
index 0000000..d948356
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c7766f..9a3dbf8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -24,4 +24,13 @@
- @color/mainTextColor
- @dimen/sp_16
+
+
+
diff --git a/app/svg/alarm_location.svg b/app/svg/alarm_location.svg
new file mode 100644
index 0000000..838706d
--- /dev/null
+++ b/app/svg/alarm_location.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/collect.svg b/app/svg/collect.svg
new file mode 100644
index 0000000..4352c3d
--- /dev/null
+++ b/app/svg/collect.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/file.svg b/app/svg/file.svg
new file mode 100644
index 0000000..20b6493
--- /dev/null
+++ b/app/svg/file.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/navigation.svg b/app/svg/navigation.svg
new file mode 100644
index 0000000..f5c0e39
--- /dev/null
+++ b/app/svg/navigation.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/onTop.svg b/app/svg/onTop.svg
new file mode 100644
index 0000000..8f51240
--- /dev/null
+++ b/app/svg/onTop.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/app/svg/warning.svg b/app/svg/warning.svg
new file mode 100644
index 0000000..4960412
--- /dev/null
+++ b/app/svg/warning.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file