diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + () { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ 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 e8a3d72..dfcf485 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ 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 e8a3d72..dfcf485 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,10 @@ + + + \ No newline at end of file diff --git a/app/svg/all_warning.svg b/app/svg/all_warning.svg deleted file mode 100644 index 17244d6..0000000 --- a/app/svg/all_warning.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ 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 e8a3d72..dfcf485 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,10 @@ + + + \ No newline at end of file diff --git a/app/svg/all_warning.svg b/app/svg/all_warning.svg deleted file mode 100644 index 17244d6..0000000 --- a/app/svg/all_warning.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/svg/collect.svg b/app/svg/collect.svg deleted file mode 100644 index 4352c3d..0000000 --- a/app/svg/collect.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ 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 e8a3d72..dfcf485 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,10 @@ + + + \ No newline at end of file diff --git a/app/svg/all_warning.svg b/app/svg/all_warning.svg deleted file mode 100644 index 17244d6..0000000 --- a/app/svg/all_warning.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/svg/collect.svg b/app/svg/collect.svg deleted file mode 100644 index 4352c3d..0000000 --- a/app/svg/collect.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/file.svg b/app/svg/file.svg deleted file mode 100644 index 20b6493..0000000 --- a/app/svg/file.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ 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 e8a3d72..dfcf485 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,10 @@ + + + \ No newline at end of file diff --git a/app/svg/all_warning.svg b/app/svg/all_warning.svg deleted file mode 100644 index 17244d6..0000000 --- a/app/svg/all_warning.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/svg/collect.svg b/app/svg/collect.svg deleted file mode 100644 index 4352c3d..0000000 --- a/app/svg/collect.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/file.svg b/app/svg/file.svg deleted file mode 100644 index 20b6493..0000000 --- a/app/svg/file.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/navigation.svg b/app/svg/navigation.svg deleted file mode 100644 index f5c0e39..0000000 --- a/app/svg/navigation.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ 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 e8a3d72..dfcf485 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,10 @@ + + + \ No newline at end of file diff --git a/app/svg/all_warning.svg b/app/svg/all_warning.svg deleted file mode 100644 index 17244d6..0000000 --- a/app/svg/all_warning.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/svg/collect.svg b/app/svg/collect.svg deleted file mode 100644 index 4352c3d..0000000 --- a/app/svg/collect.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/file.svg b/app/svg/file.svg deleted file mode 100644 index 20b6493..0000000 --- a/app/svg/file.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/navigation.svg b/app/svg/navigation.svg deleted file mode 100644 index f5c0e39..0000000 --- a/app/svg/navigation.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/onTop.svg b/app/svg/onTop.svg deleted file mode 100644 index 8f51240..0000000 --- a/app/svg/onTop.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt b/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt deleted file mode 100644 index 787df08..0000000 --- a/app/src/main/java/com/casic/br/operationsite/service/TcpMessageService.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.casic.br.operationsite.service - -import android.app.Service -import android.content.Intent -import android.os.Handler -import android.os.IBinder -import android.os.Message -import com.casic.br.operationsite.utils.LocaleConstant -import com.casic.br.operationsite.utils.tcp.SocketManager -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler - -class TcpMessageService : Service(), Handler.Callback { - - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "TcpMessageService" - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - weakReferenceHandler = WeakReferenceHandler(this) - SocketManager.get.connectTcpServer(LocaleConstant.GAS_BASE_IP, LocaleConstant.TCP_PORT) - } - - override fun onDestroy() { - super.onDestroy() - SocketManager.get.close() - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == LocaleConstant.TCP_CONNECTED_CODE) { - "指令连接成功,现在可以下发指令了".show(this) - } else { - "指令连接断开,开始自动重连".show(this) - } - return true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index febd34d..7ff5ca0 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -15,12 +15,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.diffCurrentTime +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class AlarmListActivity : KotlinBaseActivity() { @@ -54,13 +55,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false alarmAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -69,69 +70,73 @@ } else -> { - alarmAdapter = object : - NormalRecyclerAdapter( - R.layout.item_alarm_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: AlarmListModel.DataModel.RowsModel - ) { - val deltaT = item.alarmTime.diffCurrentTime() - val diffTime = if (deltaT < 24) { - "${deltaT}小时前" - } else { - item.alarmTime - } - - val color = when (item.alarmStatusName) { - "正在报警" -> R.color.redTextColor.convertColor(context) - "手动消警" -> R.color.greenColor.convertColor(context) - else -> R.color.hintTextColor.convertColor(context) - } - - val road = if (item.workRoad.isNullOrBlank()) { - "未知" - } else { - item.workRoad - } - - viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) - .setBackgroundColor(R.id.alarmStatusView, color) - .setText(R.id.alarmContentView, item.alarmContent) - .setText(R.id.workRoadView, road) - .setText(R.id.alarmTimeView, diffTime) - .setImageResource( - R.id.alarmImageView, item.alarmImage.combineImagePath() - ) - .setOnClickListener(R.id.alarmImageView) { - navigatePageTo( - 0, arrayListOf(item.alarmImage.combineImagePath()) - ) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + alarmAdapter = object : + NormalRecyclerAdapter( + R.layout.item_alarm_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: AlarmListModel.DataModel.RowsModel + ) { + val color = when (item.alarmStatusName) { + "正在报警" -> R.color.redTextColor.convertColor(context) + "手动消警" -> R.color.greenColor.convertColor(context) + else -> R.color.hintTextColor.convertColor(context) } - if (item.alarmType == "1" || item.alarmType == "4" || item.alarmType == "5" || item.alarmType == "7" || item.alarmType == "8" || item.alarmType == "9" || item.alarmType == "10") { - viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) - .setVisibility(R.id.alarmImageView, View.GONE) - if (item.alarmType == "1") { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue} ppm·m" - ) + val road = if (item.workRoad.isNullOrBlank()) { + "未知" } else { - viewHolder.setText( - R.id.alarmValueView, "报警值:${item.alarmValue}" - ) + item.workRoad } - } else { - viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE) - .setVisibility(R.id.alarmImageView, View.VISIBLE) + + viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName) + .setBackgroundColor(R.id.alarmStatusView, color) + .setText(R.id.alarmContentView, item.alarmContent) + .setText(R.id.workRoadView, road) + .setText(R.id.alarmTimeView, item.alarmTime) + .setImageResource( + R.id.alarmImageView, item.alarmImage.combineImagePath() + ) + .setOnClickListener(R.id.alarmImageView) { + navigatePageTo( + 0, arrayListOf(item.alarmImage.combineImagePath()) + ) + } + + if (item.alarmType == "1" || + item.alarmType == "4" || + item.alarmType == "5" || + item.alarmType == "7" || + item.alarmType == "8" || + item.alarmType == "9" || + item.alarmType == "10" + ) { + val ppm = item.alarmValue.toString().toFloat() + val lel = "%.2f".format(ppm / 500) + viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE) + .setVisibility(R.id.alarmImageView, View.GONE) + .setText( + R.id.alarmValueView, "报警值:${lel}%LEL" + ) + } else { + viewHolder.setVisibility( + R.id.alarmValueView, View.INVISIBLE + ).setVisibility(R.id.alarmImageView, View.VISIBLE) + } } } + binding.recyclerView.adapter = alarmAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) + ) } - binding.recyclerView.adapter = alarmAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) - ) } } } @@ -141,27 +146,51 @@ override fun observeRequestState() { alarmViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } } override fun initEvent() { - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true - //刷新之后页码重置 page = 1 getAlarmListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getAlarmListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getAlarmListByPage() + } + }) } private fun getAlarmListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 9328dfc..8bf506b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.view import android.os.Bundle +import android.view.View import androidx.lifecycle.ViewModelProvider import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityMainBinding @@ -13,11 +14,13 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog +import com.pengxh.kt.lite.widget.EmptyView class MainActivity : KotlinBaseActivity() { @@ -47,13 +50,13 @@ val dataRows = it.data?.rows!! when { isRefresh -> { - binding.refreshLayout.finishRefresh() + binding.refreshView.finishRefresh() isRefresh = false workSiteAdapter.refresh(dataRows) } isLoadMore -> { - binding.refreshLayout.finishLoadMore() + binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) @@ -62,38 +65,45 @@ } else -> { - workSiteAdapter = object : - NormalRecyclerAdapter( - R.layout.item_work_site_rv_l, dataRows - ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, - item: WorkSiteListModel.DataModel.RowsModel - ) { - viewHolder.setText(R.id.workSiteNameView, item.workTitle) - .setText(R.id.constructionUnitView, item.workPersonDeptName) - .setText(R.id.constructionDateView, item.registerTime) - .setText(R.id.leaderNameView, item.workPersonName) - .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) - .setText(R.id.workSiteView, item.workSiteDesc) + if (dataRows.size == 0) { + binding.emptyView.visibility = View.VISIBLE + binding.recyclerView.visibility = View.GONE + } else { + binding.emptyView.visibility = View.GONE + binding.recyclerView.visibility = View.VISIBLE + workSiteAdapter = object : + NormalRecyclerAdapter( + R.layout.item_work_site_rv_l, dataRows + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: WorkSiteListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.workSiteNameView, item.workTitle) + .setText(R.id.constructionUnitView, item.workPersonDeptName) + .setText(R.id.constructionDateView, item.registerTime) + .setText(R.id.leaderNameView, item.workPersonName) + .setText(R.id.leaderPhoneView, item.workPersonPhoneNumber) + .setText(R.id.workSiteView, item.workSiteDesc) + } } - } - binding.recyclerView.adapter = workSiteAdapter - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets( - marginOffset, marginOffset shr 1, - marginOffset, marginOffset shr 1 + binding.recyclerView.adapter = workSiteAdapter + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets( + marginOffset, marginOffset shr 1, + marginOffset, marginOffset shr 1 + ) ) - ) - workSiteAdapter.setOnItemClickedListener(object : - NormalRecyclerAdapter.OnItemClickedListener { - override fun onItemClicked( - position: Int, item: WorkSiteListModel.DataModel.RowsModel - ) { - RuntimeCache.projectId = item.id - navigatePageTo() - } - }) + workSiteAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, item: WorkSiteListModel.DataModel.RowsModel + ) { + RuntimeCache.projectId = item.id + navigatePageTo() + } + }) + } } } } @@ -103,10 +113,19 @@ override fun observeRequestState() { workSiteViewModel.loadState.observe(this) { - if (!isLoadMore && !isRefresh) { - when (it) { - LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") - else -> LoadingDialog.dismiss() + if (isRefresh || isLoadMore) { + return@observe + } + when (it) { + LoadState.Loading -> LoadingDialog.show(this, "数据加载中,请稍后...") + + LoadState.Success -> { + LoadingDialog.dismiss() + } + + LoadState.Fail -> { + LoadingDialog.dismiss() + "数据加载失败,请重试".show(this) } } } @@ -119,16 +138,32 @@ getProjectListByPage() } - binding.refreshLayout.setOnRefreshListener { + binding.refreshView.setOnRefreshListener { + if (!isNetworkConnected()) { + binding.refreshView.finishRefresh() + "网络似乎已经断开,请检查网络".show(this) + return@setOnRefreshListener + } isRefresh = true page = 1 getProjectListByPage() } - binding.refreshLayout.setOnLoadMoreListener { + binding.refreshView.setOnLoadMoreListener { + if (!isNetworkConnected()) { + binding.refreshView.finishLoadMore() + "网络似乎已经断开,请检查网络".show(this) + return@setOnLoadMoreListener + } isLoadMore = true page++ getProjectListByPage() } + + binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { + override fun onReloadButtonClicked() { + getProjectListByPage() + } + }) } private fun getProjectListByPage() { diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 4235aff..1db6a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,6 +1,7 @@ package com.casic.br.operationsite.vm import android.content.Context +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage @@ -11,6 +12,7 @@ import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.RetrofitFactory.kTag class AuthenticateViewModel : BaseViewModel() { @@ -19,6 +21,7 @@ fun getPublicKey(context: Context) = launch({ val response = RetrofitServiceManager.authenticate() + Log.d(kTag, "getPublicKey: $response") when (response.getResponseCode()) { 200 -> { keyModel.value = gson.fromJson( diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index 13d10ed..d9a5f02 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -16,26 +16,36 @@ android:layout_height="0dp" android:layout_weight="1"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - - + android:layout_height="match_parent"> - - + + + + + + + - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + android:layout_height="match_parent"> - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml index 15d7dca..02fbd4a 100644 --- a/app/src/main/res/layout/item_alarm_rv_l.xml +++ b/app/src/main/res/layout/item_alarm_rv_l.xml @@ -2,7 +2,7 @@ @@ -34,8 +34,7 @@ android:layout_centerVertical="true" android:layout_marginHorizontal="5dp" android:text="1000" - android:textColor="@color/black" - android:textSize="@dimen/sp_16" /> + android:textColor="@color/black" /> - + android:src="@mipmap/load_image_error" + app:shapeAppearance="@style/RoundedStyle" /> \ 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 e8a3d72..dfcf485 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,10 @@ + + + \ No newline at end of file diff --git a/app/svg/all_warning.svg b/app/svg/all_warning.svg deleted file mode 100644 index 17244d6..0000000 --- a/app/svg/all_warning.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/svg/collect.svg b/app/svg/collect.svg deleted file mode 100644 index 4352c3d..0000000 --- a/app/svg/collect.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/file.svg b/app/svg/file.svg deleted file mode 100644 index 20b6493..0000000 --- a/app/svg/file.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/navigation.svg b/app/svg/navigation.svg deleted file mode 100644 index f5c0e39..0000000 --- a/app/svg/navigation.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/onTop.svg b/app/svg/onTop.svg deleted file mode 100644 index 8f51240..0000000 --- a/app/svg/onTop.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/app/svg/warning.svg b/app/svg/warning.svg deleted file mode 100644 index 4960412..0000000 --- a/app/svg/warning.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file