diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt index 85dae02..9d49d2a 100644 --- a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt @@ -1,9 +1,6 @@ package com.casic.br.ktd.view -import android.content.res.Configuration import android.os.Bundle -import android.util.Log -import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.LatLng @@ -21,18 +18,14 @@ import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.vm.LoadState -import com.shuyu.gsyvideoplayer.GSYVideoManager -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.OrientationUtils +/** + * 不区分AI、Gas的报警详情 + * */ class AlarmDetailActivity : KotlinBaseActivity() { private val kTag = "AlarmDetailActivity" private lateinit var alarmViewModel: AlarmViewModel - private lateinit var orientationUtils: OrientationUtils - private var isPlay = false - private var isPause = false override fun initEvent() { binding.returnButton.setOnClickListener { finish() } @@ -42,10 +35,6 @@ PageNavigationManager.addActivity(this) val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! - orientationUtils = OrientationUtils(this, binding.videoPlayerView) - //初始化不打开外部的旋转 - orientationUtils.isEnable = false - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.getAlarmDetail(alarmId) alarmViewModel.alarmDetail.observe(this) { @@ -92,51 +81,6 @@ .load(model.alarmPicture.combineImagePath()) .into(binding.alarmImageView) } - - //视频 - if (model.alarmVideo.isNullOrEmpty()) { - binding.emptyImageView.visibility = View.VISIBLE - binding.videoPlayerView.visibility = View.GONE - Glide.with(this) - .load(R.mipmap.empty) - .into(binding.emptyImageView) - } else { - binding.emptyImageView.visibility = View.GONE - binding.videoPlayerView.visibility = View.VISIBLE - - val videoPath = model.alarmVideo.combineImagePath() - Log.d(kTag, "initOnCreate => $videoPath") - val videoOption = GSYVideoOptionBuilder() - videoOption.setIsTouchWiget(true) - .setRotateViewAuto(false) - .setLockLand(false) - .setAutoFullWithSize(true) - .setShowFullAnimation(false) - .setNeedLockFull(true) - .setUrl(videoPath) - .setCacheWithPlay(false) - .setVideoTitle(model.taskName) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onPrepared(url: String, vararg objects: Any) { - super.onPrepared(url, *objects) - //开始播放了才能旋转和全屏 - orientationUtils.isEnable = true - isPlay = true - } - - override fun onQuitFullscreen(url: String, vararg objects: Any) { - super.onQuitFullscreen(url, *objects) - orientationUtils.backToProtVideo() - } - }).setLockClickListener { _, lock -> - orientationUtils.isEnable = !lock - }.build(binding.videoPlayerView) - binding.videoPlayerView.fullscreenButton.setOnClickListener { - //直接横屏 - orientationUtils.resolveByClick() - binding.videoPlayerView.startWindowFullscreen(this, true, true) - } - } } } } @@ -161,46 +105,4 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } - - override fun onBackPressed() { - orientationUtils.backToProtVideo() - if (GSYVideoManager.backFromWindowFull(this)) { - return - } - super.onBackPressed() - } - - override fun onPause() { - binding.videoPlayerView.currentPlayer.onVideoPause() - super.onPause() - isPause = true - } - - override fun onResume() { - binding.videoPlayerView.currentPlayer.onVideoResume(false) - super.onResume() - isPause = false - } - - override fun onDestroy() { - if (isPlay) { - binding.videoPlayerView.currentPlayer.release() - } - orientationUtils.releaseListener() - super.onDestroy() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - //如果旋转了就全屏 - if (isPlay && !isPause) { - binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true - ) - } - } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt index 85dae02..9d49d2a 100644 --- a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt @@ -1,9 +1,6 @@ package com.casic.br.ktd.view -import android.content.res.Configuration import android.os.Bundle -import android.util.Log -import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.LatLng @@ -21,18 +18,14 @@ import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.vm.LoadState -import com.shuyu.gsyvideoplayer.GSYVideoManager -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.OrientationUtils +/** + * 不区分AI、Gas的报警详情 + * */ class AlarmDetailActivity : KotlinBaseActivity() { private val kTag = "AlarmDetailActivity" private lateinit var alarmViewModel: AlarmViewModel - private lateinit var orientationUtils: OrientationUtils - private var isPlay = false - private var isPause = false override fun initEvent() { binding.returnButton.setOnClickListener { finish() } @@ -42,10 +35,6 @@ PageNavigationManager.addActivity(this) val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! - orientationUtils = OrientationUtils(this, binding.videoPlayerView) - //初始化不打开外部的旋转 - orientationUtils.isEnable = false - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.getAlarmDetail(alarmId) alarmViewModel.alarmDetail.observe(this) { @@ -92,51 +81,6 @@ .load(model.alarmPicture.combineImagePath()) .into(binding.alarmImageView) } - - //视频 - if (model.alarmVideo.isNullOrEmpty()) { - binding.emptyImageView.visibility = View.VISIBLE - binding.videoPlayerView.visibility = View.GONE - Glide.with(this) - .load(R.mipmap.empty) - .into(binding.emptyImageView) - } else { - binding.emptyImageView.visibility = View.GONE - binding.videoPlayerView.visibility = View.VISIBLE - - val videoPath = model.alarmVideo.combineImagePath() - Log.d(kTag, "initOnCreate => $videoPath") - val videoOption = GSYVideoOptionBuilder() - videoOption.setIsTouchWiget(true) - .setRotateViewAuto(false) - .setLockLand(false) - .setAutoFullWithSize(true) - .setShowFullAnimation(false) - .setNeedLockFull(true) - .setUrl(videoPath) - .setCacheWithPlay(false) - .setVideoTitle(model.taskName) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onPrepared(url: String, vararg objects: Any) { - super.onPrepared(url, *objects) - //开始播放了才能旋转和全屏 - orientationUtils.isEnable = true - isPlay = true - } - - override fun onQuitFullscreen(url: String, vararg objects: Any) { - super.onQuitFullscreen(url, *objects) - orientationUtils.backToProtVideo() - } - }).setLockClickListener { _, lock -> - orientationUtils.isEnable = !lock - }.build(binding.videoPlayerView) - binding.videoPlayerView.fullscreenButton.setOnClickListener { - //直接横屏 - orientationUtils.resolveByClick() - binding.videoPlayerView.startWindowFullscreen(this, true, true) - } - } } } } @@ -161,46 +105,4 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } - - override fun onBackPressed() { - orientationUtils.backToProtVideo() - if (GSYVideoManager.backFromWindowFull(this)) { - return - } - super.onBackPressed() - } - - override fun onPause() { - binding.videoPlayerView.currentPlayer.onVideoPause() - super.onPause() - isPause = true - } - - override fun onResume() { - binding.videoPlayerView.currentPlayer.onVideoResume(false) - super.onResume() - isPause = false - } - - override fun onDestroy() { - if (isPlay) { - binding.videoPlayerView.currentPlayer.release() - } - orientationUtils.releaseListener() - super.onDestroy() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - //如果旋转了就全屏 - if (isPlay && !isPause) { - binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true - ) - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt new file mode 100644 index 0000000..832ccf6 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt @@ -0,0 +1,206 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityGasAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class GasAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + binding.concentrationView.text = "${model.alarmValue}ppm·m" + binding.caseThresholdView.text = "${model.alarmThresh}ppm·m" + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //图片 + if (model.alarmPicture.isNullOrEmpty()) { + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.alarmImageView) + } else { + Glide.with(this) + .load(model.alarmPicture.combineImagePath()) + .into(binding.alarmImageView) + } + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityGasAlarmDetailBinding { + return ActivityGasAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, + newConfig, + orientationUtils, + true, + true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt index 85dae02..9d49d2a 100644 --- a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt @@ -1,9 +1,6 @@ package com.casic.br.ktd.view -import android.content.res.Configuration import android.os.Bundle -import android.util.Log -import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.LatLng @@ -21,18 +18,14 @@ import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.vm.LoadState -import com.shuyu.gsyvideoplayer.GSYVideoManager -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.OrientationUtils +/** + * 不区分AI、Gas的报警详情 + * */ class AlarmDetailActivity : KotlinBaseActivity() { private val kTag = "AlarmDetailActivity" private lateinit var alarmViewModel: AlarmViewModel - private lateinit var orientationUtils: OrientationUtils - private var isPlay = false - private var isPause = false override fun initEvent() { binding.returnButton.setOnClickListener { finish() } @@ -42,10 +35,6 @@ PageNavigationManager.addActivity(this) val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! - orientationUtils = OrientationUtils(this, binding.videoPlayerView) - //初始化不打开外部的旋转 - orientationUtils.isEnable = false - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.getAlarmDetail(alarmId) alarmViewModel.alarmDetail.observe(this) { @@ -92,51 +81,6 @@ .load(model.alarmPicture.combineImagePath()) .into(binding.alarmImageView) } - - //视频 - if (model.alarmVideo.isNullOrEmpty()) { - binding.emptyImageView.visibility = View.VISIBLE - binding.videoPlayerView.visibility = View.GONE - Glide.with(this) - .load(R.mipmap.empty) - .into(binding.emptyImageView) - } else { - binding.emptyImageView.visibility = View.GONE - binding.videoPlayerView.visibility = View.VISIBLE - - val videoPath = model.alarmVideo.combineImagePath() - Log.d(kTag, "initOnCreate => $videoPath") - val videoOption = GSYVideoOptionBuilder() - videoOption.setIsTouchWiget(true) - .setRotateViewAuto(false) - .setLockLand(false) - .setAutoFullWithSize(true) - .setShowFullAnimation(false) - .setNeedLockFull(true) - .setUrl(videoPath) - .setCacheWithPlay(false) - .setVideoTitle(model.taskName) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onPrepared(url: String, vararg objects: Any) { - super.onPrepared(url, *objects) - //开始播放了才能旋转和全屏 - orientationUtils.isEnable = true - isPlay = true - } - - override fun onQuitFullscreen(url: String, vararg objects: Any) { - super.onQuitFullscreen(url, *objects) - orientationUtils.backToProtVideo() - } - }).setLockClickListener { _, lock -> - orientationUtils.isEnable = !lock - }.build(binding.videoPlayerView) - binding.videoPlayerView.fullscreenButton.setOnClickListener { - //直接横屏 - orientationUtils.resolveByClick() - binding.videoPlayerView.startWindowFullscreen(this, true, true) - } - } } } } @@ -161,46 +105,4 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } - - override fun onBackPressed() { - orientationUtils.backToProtVideo() - if (GSYVideoManager.backFromWindowFull(this)) { - return - } - super.onBackPressed() - } - - override fun onPause() { - binding.videoPlayerView.currentPlayer.onVideoPause() - super.onPause() - isPause = true - } - - override fun onResume() { - binding.videoPlayerView.currentPlayer.onVideoResume(false) - super.onResume() - isPause = false - } - - override fun onDestroy() { - if (isPlay) { - binding.videoPlayerView.currentPlayer.release() - } - orientationUtils.releaseListener() - super.onDestroy() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - //如果旋转了就全屏 - if (isPlay && !isPause) { - binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true - ) - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt new file mode 100644 index 0000000..832ccf6 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt @@ -0,0 +1,206 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityGasAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class GasAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + binding.concentrationView.text = "${model.alarmValue}ppm·m" + binding.caseThresholdView.text = "${model.alarmThresh}ppm·m" + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //图片 + if (model.alarmPicture.isNullOrEmpty()) { + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.alarmImageView) + } else { + Glide.with(this) + .load(model.alarmPicture.combineImagePath()) + .into(binding.alarmImageView) + } + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityGasAlarmDetailBinding { + return ActivityGasAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, + newConfig, + orientationUtils, + true, + true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt index 7ef2752..5cec695 100644 --- a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt @@ -763,7 +763,7 @@ } /** - * 视频抓取,抓取15s的视频 + * TODO 视频抓取,抓取10s的视频。带宽不够,暂时注掉 * */ private fun recordVideo() { if (!isRecordingVideo) { @@ -877,7 +877,7 @@ if (dataModel!!.methane >= gasAlarmRule) { isAlarm = "1" - recordVideo() +// recordVideo() captureImage(true) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt index 85dae02..9d49d2a 100644 --- a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt @@ -1,9 +1,6 @@ package com.casic.br.ktd.view -import android.content.res.Configuration import android.os.Bundle -import android.util.Log -import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.LatLng @@ -21,18 +18,14 @@ import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.vm.LoadState -import com.shuyu.gsyvideoplayer.GSYVideoManager -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.OrientationUtils +/** + * 不区分AI、Gas的报警详情 + * */ class AlarmDetailActivity : KotlinBaseActivity() { private val kTag = "AlarmDetailActivity" private lateinit var alarmViewModel: AlarmViewModel - private lateinit var orientationUtils: OrientationUtils - private var isPlay = false - private var isPause = false override fun initEvent() { binding.returnButton.setOnClickListener { finish() } @@ -42,10 +35,6 @@ PageNavigationManager.addActivity(this) val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! - orientationUtils = OrientationUtils(this, binding.videoPlayerView) - //初始化不打开外部的旋转 - orientationUtils.isEnable = false - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.getAlarmDetail(alarmId) alarmViewModel.alarmDetail.observe(this) { @@ -92,51 +81,6 @@ .load(model.alarmPicture.combineImagePath()) .into(binding.alarmImageView) } - - //视频 - if (model.alarmVideo.isNullOrEmpty()) { - binding.emptyImageView.visibility = View.VISIBLE - binding.videoPlayerView.visibility = View.GONE - Glide.with(this) - .load(R.mipmap.empty) - .into(binding.emptyImageView) - } else { - binding.emptyImageView.visibility = View.GONE - binding.videoPlayerView.visibility = View.VISIBLE - - val videoPath = model.alarmVideo.combineImagePath() - Log.d(kTag, "initOnCreate => $videoPath") - val videoOption = GSYVideoOptionBuilder() - videoOption.setIsTouchWiget(true) - .setRotateViewAuto(false) - .setLockLand(false) - .setAutoFullWithSize(true) - .setShowFullAnimation(false) - .setNeedLockFull(true) - .setUrl(videoPath) - .setCacheWithPlay(false) - .setVideoTitle(model.taskName) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onPrepared(url: String, vararg objects: Any) { - super.onPrepared(url, *objects) - //开始播放了才能旋转和全屏 - orientationUtils.isEnable = true - isPlay = true - } - - override fun onQuitFullscreen(url: String, vararg objects: Any) { - super.onQuitFullscreen(url, *objects) - orientationUtils.backToProtVideo() - } - }).setLockClickListener { _, lock -> - orientationUtils.isEnable = !lock - }.build(binding.videoPlayerView) - binding.videoPlayerView.fullscreenButton.setOnClickListener { - //直接横屏 - orientationUtils.resolveByClick() - binding.videoPlayerView.startWindowFullscreen(this, true, true) - } - } } } } @@ -161,46 +105,4 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } - - override fun onBackPressed() { - orientationUtils.backToProtVideo() - if (GSYVideoManager.backFromWindowFull(this)) { - return - } - super.onBackPressed() - } - - override fun onPause() { - binding.videoPlayerView.currentPlayer.onVideoPause() - super.onPause() - isPause = true - } - - override fun onResume() { - binding.videoPlayerView.currentPlayer.onVideoResume(false) - super.onResume() - isPause = false - } - - override fun onDestroy() { - if (isPlay) { - binding.videoPlayerView.currentPlayer.release() - } - orientationUtils.releaseListener() - super.onDestroy() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - //如果旋转了就全屏 - if (isPlay && !isPause) { - binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true - ) - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt new file mode 100644 index 0000000..832ccf6 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt @@ -0,0 +1,206 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityGasAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class GasAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + binding.concentrationView.text = "${model.alarmValue}ppm·m" + binding.caseThresholdView.text = "${model.alarmThresh}ppm·m" + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //图片 + if (model.alarmPicture.isNullOrEmpty()) { + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.alarmImageView) + } else { + Glide.with(this) + .load(model.alarmPicture.combineImagePath()) + .into(binding.alarmImageView) + } + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityGasAlarmDetailBinding { + return ActivityGasAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, + newConfig, + orientationUtils, + true, + true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt index 7ef2752..5cec695 100644 --- a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt @@ -763,7 +763,7 @@ } /** - * 视频抓取,抓取15s的视频 + * TODO 视频抓取,抓取10s的视频。带宽不够,暂时注掉 * */ private fun recordVideo() { if (!isRecordingVideo) { @@ -877,7 +877,7 @@ if (dataModel!!.methane >= gasAlarmRule) { isAlarm = "1" - recordVideo() +// recordVideo() captureImage(true) } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index b4506a5..02645dd 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -63,8 +63,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -77,8 +77,8 @@ taskId, deviceId, alarmContent, - alarmLongitude, alarmLatitude, + alarmLongitude, alarmTime, alarmThresh, alarmPicture, @@ -130,8 +130,8 @@ dataModel.alarmPicture = "" dataModel.alarmThresh = SaveKeyValues.getValue( LocaleConstant.ALARM_RULE, 1000 - ) as Int - dataModel.alarmValue = 0 + ) as String + dataModel.alarmValue = "0" dataModel.alarmVideo = "" detailModel.data = dataModel } else { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt index 85dae02..9d49d2a 100644 --- a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt @@ -1,9 +1,6 @@ package com.casic.br.ktd.view -import android.content.res.Configuration import android.os.Bundle -import android.util.Log -import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.LatLng @@ -21,18 +18,14 @@ import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.vm.LoadState -import com.shuyu.gsyvideoplayer.GSYVideoManager -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.OrientationUtils +/** + * 不区分AI、Gas的报警详情 + * */ class AlarmDetailActivity : KotlinBaseActivity() { private val kTag = "AlarmDetailActivity" private lateinit var alarmViewModel: AlarmViewModel - private lateinit var orientationUtils: OrientationUtils - private var isPlay = false - private var isPause = false override fun initEvent() { binding.returnButton.setOnClickListener { finish() } @@ -42,10 +35,6 @@ PageNavigationManager.addActivity(this) val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! - orientationUtils = OrientationUtils(this, binding.videoPlayerView) - //初始化不打开外部的旋转 - orientationUtils.isEnable = false - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.getAlarmDetail(alarmId) alarmViewModel.alarmDetail.observe(this) { @@ -92,51 +81,6 @@ .load(model.alarmPicture.combineImagePath()) .into(binding.alarmImageView) } - - //视频 - if (model.alarmVideo.isNullOrEmpty()) { - binding.emptyImageView.visibility = View.VISIBLE - binding.videoPlayerView.visibility = View.GONE - Glide.with(this) - .load(R.mipmap.empty) - .into(binding.emptyImageView) - } else { - binding.emptyImageView.visibility = View.GONE - binding.videoPlayerView.visibility = View.VISIBLE - - val videoPath = model.alarmVideo.combineImagePath() - Log.d(kTag, "initOnCreate => $videoPath") - val videoOption = GSYVideoOptionBuilder() - videoOption.setIsTouchWiget(true) - .setRotateViewAuto(false) - .setLockLand(false) - .setAutoFullWithSize(true) - .setShowFullAnimation(false) - .setNeedLockFull(true) - .setUrl(videoPath) - .setCacheWithPlay(false) - .setVideoTitle(model.taskName) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onPrepared(url: String, vararg objects: Any) { - super.onPrepared(url, *objects) - //开始播放了才能旋转和全屏 - orientationUtils.isEnable = true - isPlay = true - } - - override fun onQuitFullscreen(url: String, vararg objects: Any) { - super.onQuitFullscreen(url, *objects) - orientationUtils.backToProtVideo() - } - }).setLockClickListener { _, lock -> - orientationUtils.isEnable = !lock - }.build(binding.videoPlayerView) - binding.videoPlayerView.fullscreenButton.setOnClickListener { - //直接横屏 - orientationUtils.resolveByClick() - binding.videoPlayerView.startWindowFullscreen(this, true, true) - } - } } } } @@ -161,46 +105,4 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } - - override fun onBackPressed() { - orientationUtils.backToProtVideo() - if (GSYVideoManager.backFromWindowFull(this)) { - return - } - super.onBackPressed() - } - - override fun onPause() { - binding.videoPlayerView.currentPlayer.onVideoPause() - super.onPause() - isPause = true - } - - override fun onResume() { - binding.videoPlayerView.currentPlayer.onVideoResume(false) - super.onResume() - isPause = false - } - - override fun onDestroy() { - if (isPlay) { - binding.videoPlayerView.currentPlayer.release() - } - orientationUtils.releaseListener() - super.onDestroy() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - //如果旋转了就全屏 - if (isPlay && !isPause) { - binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true - ) - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt new file mode 100644 index 0000000..832ccf6 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt @@ -0,0 +1,206 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityGasAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class GasAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + binding.concentrationView.text = "${model.alarmValue}ppm·m" + binding.caseThresholdView.text = "${model.alarmThresh}ppm·m" + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //图片 + if (model.alarmPicture.isNullOrEmpty()) { + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.alarmImageView) + } else { + Glide.with(this) + .load(model.alarmPicture.combineImagePath()) + .into(binding.alarmImageView) + } + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityGasAlarmDetailBinding { + return ActivityGasAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, + newConfig, + orientationUtils, + true, + true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt index 7ef2752..5cec695 100644 --- a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt @@ -763,7 +763,7 @@ } /** - * 视频抓取,抓取15s的视频 + * TODO 视频抓取,抓取10s的视频。带宽不够,暂时注掉 * */ private fun recordVideo() { if (!isRecordingVideo) { @@ -877,7 +877,7 @@ if (dataModel!!.methane >= gasAlarmRule) { isAlarm = "1" - recordVideo() +// recordVideo() captureImage(true) } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index b4506a5..02645dd 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -63,8 +63,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -77,8 +77,8 @@ taskId, deviceId, alarmContent, - alarmLongitude, alarmLatitude, + alarmLongitude, alarmTime, alarmThresh, alarmPicture, @@ -130,8 +130,8 @@ dataModel.alarmPicture = "" dataModel.alarmThresh = SaveKeyValues.getValue( LocaleConstant.ALARM_RULE, 1000 - ) as Int - dataModel.alarmValue = 0 + ) as String + dataModel.alarmValue = "0" dataModel.alarmVideo = "" detailModel.data = dataModel } else { diff --git a/app/src/main/res/layout/activity_ai_alarm_detail.xml b/app/src/main/res/layout/activity_ai_alarm_detail.xml new file mode 100644 index 0000000..5a3b318 --- /dev/null +++ b/app/src/main/res/layout/activity_ai_alarm_detail.xml @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt index 85dae02..9d49d2a 100644 --- a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt @@ -1,9 +1,6 @@ package com.casic.br.ktd.view -import android.content.res.Configuration import android.os.Bundle -import android.util.Log -import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.LatLng @@ -21,18 +18,14 @@ import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.vm.LoadState -import com.shuyu.gsyvideoplayer.GSYVideoManager -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.OrientationUtils +/** + * 不区分AI、Gas的报警详情 + * */ class AlarmDetailActivity : KotlinBaseActivity() { private val kTag = "AlarmDetailActivity" private lateinit var alarmViewModel: AlarmViewModel - private lateinit var orientationUtils: OrientationUtils - private var isPlay = false - private var isPause = false override fun initEvent() { binding.returnButton.setOnClickListener { finish() } @@ -42,10 +35,6 @@ PageNavigationManager.addActivity(this) val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! - orientationUtils = OrientationUtils(this, binding.videoPlayerView) - //初始化不打开外部的旋转 - orientationUtils.isEnable = false - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.getAlarmDetail(alarmId) alarmViewModel.alarmDetail.observe(this) { @@ -92,51 +81,6 @@ .load(model.alarmPicture.combineImagePath()) .into(binding.alarmImageView) } - - //视频 - if (model.alarmVideo.isNullOrEmpty()) { - binding.emptyImageView.visibility = View.VISIBLE - binding.videoPlayerView.visibility = View.GONE - Glide.with(this) - .load(R.mipmap.empty) - .into(binding.emptyImageView) - } else { - binding.emptyImageView.visibility = View.GONE - binding.videoPlayerView.visibility = View.VISIBLE - - val videoPath = model.alarmVideo.combineImagePath() - Log.d(kTag, "initOnCreate => $videoPath") - val videoOption = GSYVideoOptionBuilder() - videoOption.setIsTouchWiget(true) - .setRotateViewAuto(false) - .setLockLand(false) - .setAutoFullWithSize(true) - .setShowFullAnimation(false) - .setNeedLockFull(true) - .setUrl(videoPath) - .setCacheWithPlay(false) - .setVideoTitle(model.taskName) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onPrepared(url: String, vararg objects: Any) { - super.onPrepared(url, *objects) - //开始播放了才能旋转和全屏 - orientationUtils.isEnable = true - isPlay = true - } - - override fun onQuitFullscreen(url: String, vararg objects: Any) { - super.onQuitFullscreen(url, *objects) - orientationUtils.backToProtVideo() - } - }).setLockClickListener { _, lock -> - orientationUtils.isEnable = !lock - }.build(binding.videoPlayerView) - binding.videoPlayerView.fullscreenButton.setOnClickListener { - //直接横屏 - orientationUtils.resolveByClick() - binding.videoPlayerView.startWindowFullscreen(this, true, true) - } - } } } } @@ -161,46 +105,4 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } - - override fun onBackPressed() { - orientationUtils.backToProtVideo() - if (GSYVideoManager.backFromWindowFull(this)) { - return - } - super.onBackPressed() - } - - override fun onPause() { - binding.videoPlayerView.currentPlayer.onVideoPause() - super.onPause() - isPause = true - } - - override fun onResume() { - binding.videoPlayerView.currentPlayer.onVideoResume(false) - super.onResume() - isPause = false - } - - override fun onDestroy() { - if (isPlay) { - binding.videoPlayerView.currentPlayer.release() - } - orientationUtils.releaseListener() - super.onDestroy() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - //如果旋转了就全屏 - if (isPlay && !isPause) { - binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true - ) - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt new file mode 100644 index 0000000..832ccf6 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt @@ -0,0 +1,206 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityGasAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class GasAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + binding.concentrationView.text = "${model.alarmValue}ppm·m" + binding.caseThresholdView.text = "${model.alarmThresh}ppm·m" + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //图片 + if (model.alarmPicture.isNullOrEmpty()) { + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.alarmImageView) + } else { + Glide.with(this) + .load(model.alarmPicture.combineImagePath()) + .into(binding.alarmImageView) + } + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityGasAlarmDetailBinding { + return ActivityGasAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, + newConfig, + orientationUtils, + true, + true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt index 7ef2752..5cec695 100644 --- a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt @@ -763,7 +763,7 @@ } /** - * 视频抓取,抓取15s的视频 + * TODO 视频抓取,抓取10s的视频。带宽不够,暂时注掉 * */ private fun recordVideo() { if (!isRecordingVideo) { @@ -877,7 +877,7 @@ if (dataModel!!.methane >= gasAlarmRule) { isAlarm = "1" - recordVideo() +// recordVideo() captureImage(true) } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index b4506a5..02645dd 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -63,8 +63,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -77,8 +77,8 @@ taskId, deviceId, alarmContent, - alarmLongitude, alarmLatitude, + alarmLongitude, alarmTime, alarmThresh, alarmPicture, @@ -130,8 +130,8 @@ dataModel.alarmPicture = "" dataModel.alarmThresh = SaveKeyValues.getValue( LocaleConstant.ALARM_RULE, 1000 - ) as Int - dataModel.alarmValue = 0 + ) as String + dataModel.alarmValue = "0" dataModel.alarmVideo = "" detailModel.data = dataModel } else { diff --git a/app/src/main/res/layout/activity_ai_alarm_detail.xml b/app/src/main/res/layout/activity_ai_alarm_detail.xml new file mode 100644 index 0000000..5a3b318 --- /dev/null +++ b/app/src/main/res/layout/activity_ai_alarm_detail.xml @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_detail.xml b/app/src/main/res/layout/activity_alarm_detail.xml index d707aca..48e151a 100644 --- a/app/src/main/res/layout/activity_alarm_detail.xml +++ b/app/src/main/res/layout/activity_alarm_detail.xml @@ -9,7 +9,7 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginStart="@dimen/dp_10" - android:layout_marginTop="@dimen/dp_15" + android:layout_marginTop="@dimen/dp_30" android:layout_marginBottom="@dimen/dp_10" android:layout_weight="1" app:cardCornerRadius="@dimen/dp_10" @@ -200,7 +200,7 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginTop="@dimen/dp_15" + android:layout_marginTop="@dimen/dp_30" android:layout_marginBottom="@dimen/dp_10" android:layout_weight="1" android:orientation="vertical"> @@ -246,55 +246,9 @@ - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ea5faa..93f7fd3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ android:theme="@style/ActivityNoTitleBar" android:screenOrientation="landscape" /> + + diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index f5fcd37..2b59bef 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -83,7 +83,7 @@ //设置x轴 val xAxis: XAxis = this.xAxis xAxis.textSize = 10f - xAxis.labelCount = labelCount //x轴标签数量 + xAxis.labelCount = labelCount / 4 //x轴标签数量 xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index 1986aa8..7fd3b72 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -176,6 +176,11 @@ alarmAdapter.setOnItemCheckedListener(object : AlarmAdapter.OnItemClickedListener { override fun onItemClicked(item: AlarmListModel.DataModel.RowsModel) { +// if (item.alarmType == "1") { +// requireContext().navigatePageTo(item.id) +// } else { +// requireContext().navigatePageTo(item.id) +// } requireContext().navigatePageTo(item.id) } diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 9a226a9..1bf78f9 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -95,7 +95,7 @@ } /***任务趋势*************************************************************************/ - taskViewModel.getTaskTrend("", "", "") + taskViewModel.getTaskTrend("", "", "month") taskViewModel.taskTrendModel.observe(this) { if (it.code == 200) { val xAxisLabels: MutableList = ArrayList() diff --git a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java index 02dde76..870d1e1 100644 --- a/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java +++ b/app/src/main/java/com/casic/br/ktd/model/AlarmDetailModel.java @@ -37,10 +37,10 @@ private String alarmLongitude; private String alarmPicture; private String alarmStatus; - private Integer alarmThresh; + private String alarmThresh; private String alarmTime; private String alarmType; - private Integer alarmValue; + private String alarmValue; private String alarmVideo; private String cancelReason; private String cancelResult; @@ -102,11 +102,11 @@ this.alarmStatus = alarmStatus; } - public Integer getAlarmThresh() { + public String getAlarmThresh() { return alarmThresh; } - public void setAlarmThresh(Integer alarmThresh) { + public void setAlarmThresh(String alarmThresh) { this.alarmThresh = alarmThresh; } @@ -126,11 +126,11 @@ this.alarmType = alarmType; } - public Integer getAlarmValue() { + public String getAlarmValue() { return alarmValue; } - public void setAlarmValue(Integer alarmValue) { + public void setAlarmValue(String alarmValue) { this.alarmValue = alarmValue; } diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 4dcfbd0..66d25b6 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -304,8 +304,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -318,8 +318,8 @@ param.addProperty("taskId", taskId) param.addProperty("deviceId", deviceId) param.addProperty("alarmContent", alarmContent) - param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmLatitude", alarmLatitude) + param.addProperty("alarmLongitude", alarmLongitude) param.addProperty("alarmTime", alarmTime) param.addProperty("alarmThresh", alarmThresh) param.addProperty("alarmPicture", alarmPicture) diff --git a/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt new file mode 100644 index 0000000..1f402ce --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/AiAlarmDetailActivity.kt @@ -0,0 +1,181 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityAiAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class AiAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this).load(R.mipmap.empty).into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true).setRotateViewAuto(false).setLockLand(false) + .setAutoFullWithSize(true).setShowFullAnimation(false).setNeedLockFull(true) + .setUrl(videoPath).setCacheWithPlay(false).setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityAiAlarmDetailBinding { + return ActivityAiAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, newConfig, orientationUtils, true, true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt index 85dae02..9d49d2a 100644 --- a/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/AlarmDetailActivity.kt @@ -1,9 +1,6 @@ package com.casic.br.ktd.view -import android.content.res.Configuration import android.os.Bundle -import android.util.Log -import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.LatLng @@ -21,18 +18,14 @@ import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.vm.LoadState -import com.shuyu.gsyvideoplayer.GSYVideoManager -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.OrientationUtils +/** + * 不区分AI、Gas的报警详情 + * */ class AlarmDetailActivity : KotlinBaseActivity() { private val kTag = "AlarmDetailActivity" private lateinit var alarmViewModel: AlarmViewModel - private lateinit var orientationUtils: OrientationUtils - private var isPlay = false - private var isPause = false override fun initEvent() { binding.returnButton.setOnClickListener { finish() } @@ -42,10 +35,6 @@ PageNavigationManager.addActivity(this) val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! - orientationUtils = OrientationUtils(this, binding.videoPlayerView) - //初始化不打开外部的旋转 - orientationUtils.isEnable = false - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.getAlarmDetail(alarmId) alarmViewModel.alarmDetail.observe(this) { @@ -92,51 +81,6 @@ .load(model.alarmPicture.combineImagePath()) .into(binding.alarmImageView) } - - //视频 - if (model.alarmVideo.isNullOrEmpty()) { - binding.emptyImageView.visibility = View.VISIBLE - binding.videoPlayerView.visibility = View.GONE - Glide.with(this) - .load(R.mipmap.empty) - .into(binding.emptyImageView) - } else { - binding.emptyImageView.visibility = View.GONE - binding.videoPlayerView.visibility = View.VISIBLE - - val videoPath = model.alarmVideo.combineImagePath() - Log.d(kTag, "initOnCreate => $videoPath") - val videoOption = GSYVideoOptionBuilder() - videoOption.setIsTouchWiget(true) - .setRotateViewAuto(false) - .setLockLand(false) - .setAutoFullWithSize(true) - .setShowFullAnimation(false) - .setNeedLockFull(true) - .setUrl(videoPath) - .setCacheWithPlay(false) - .setVideoTitle(model.taskName) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onPrepared(url: String, vararg objects: Any) { - super.onPrepared(url, *objects) - //开始播放了才能旋转和全屏 - orientationUtils.isEnable = true - isPlay = true - } - - override fun onQuitFullscreen(url: String, vararg objects: Any) { - super.onQuitFullscreen(url, *objects) - orientationUtils.backToProtVideo() - } - }).setLockClickListener { _, lock -> - orientationUtils.isEnable = !lock - }.build(binding.videoPlayerView) - binding.videoPlayerView.fullscreenButton.setOnClickListener { - //直接横屏 - orientationUtils.resolveByClick() - binding.videoPlayerView.startWindowFullscreen(this, true, true) - } - } } } } @@ -161,46 +105,4 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } - - override fun onBackPressed() { - orientationUtils.backToProtVideo() - if (GSYVideoManager.backFromWindowFull(this)) { - return - } - super.onBackPressed() - } - - override fun onPause() { - binding.videoPlayerView.currentPlayer.onVideoPause() - super.onPause() - isPause = true - } - - override fun onResume() { - binding.videoPlayerView.currentPlayer.onVideoResume(false) - super.onResume() - isPause = false - } - - override fun onDestroy() { - if (isPlay) { - binding.videoPlayerView.currentPlayer.release() - } - orientationUtils.releaseListener() - super.onDestroy() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - //如果旋转了就全屏 - if (isPlay && !isPause) { - binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true - ) - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt new file mode 100644 index 0000000..832ccf6 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/GasAlarmDetailActivity.kt @@ -0,0 +1,206 @@ +package com.casic.br.ktd.view + +import android.content.res.Configuration +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.ActivityGasAlarmDetailBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.extensions.toChineseAddress +import com.casic.br.ktd.listener.OnGeocodeSearchListener +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.utils.OrientationUtils + +class GasAlarmDetailActivity : KotlinBaseActivity() { + + private val kTag = "AlarmDetailActivity" + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var orientationUtils: OrientationUtils + private var isPlay = false + private var isPause = false + + override fun initEvent() { + binding.returnButton.setOnClickListener { finish() } + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + PageNavigationManager.addActivity(this) + val alarmId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + orientationUtils = OrientationUtils(this, binding.videoPlayerView) + //初始化不打开外部的旋转 + orientationUtils.isEnable = false + + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + alarmViewModel.getAlarmDetail(alarmId) + alarmViewModel.alarmDetail.observe(this) { + if (it.code == 200) { + val model = it.data + + binding.alarmCodeView.text = model.alarmCode + binding.alarmTimeView.text = model.alarmTime + binding.concentrationView.text = "${model.alarmValue}ppm·m" + binding.caseThresholdView.text = "${model.alarmThresh}ppm·m" + val longitude = model.alarmLongitude + val latitude = model.alarmLatitude + if (!longitude.isNullOrBlank() && !latitude.isNullOrBlank()) { + binding.latLngView.text = "$longitude,$latitude" + if (CoordinateConverter.isAMapDataAvailable( + latitude.toDouble(), longitude.toDouble() + ) + ) { + LatLng(latitude.toDouble(), longitude.toDouble()).toChineseAddress(object : + OnGeocodeSearchListener { + override fun onRegionCodeSearched(address: String) { + binding.locationView.text = address + } + }) + } else { + binding.locationView.text = "未知" + } + } + binding.taskCodeView.text = model.taskCode + binding.taskNameView.text = model.taskName + binding.carNumberView.text = model.carPlate + binding.deviceModelView.text = model.deviceModel + binding.alarmStateView.text = model.alarmStatus + binding.handleTimeView.text = model.cancelTime + binding.reasonView.text = model.cancelReason + + //图片 + if (model.alarmPicture.isNullOrEmpty()) { + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.alarmImageView) + } else { + Glide.with(this) + .load(model.alarmPicture.combineImagePath()) + .into(binding.alarmImageView) + } + + //视频 + if (model.alarmVideo.isNullOrEmpty()) { + binding.emptyImageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + Glide.with(this) + .load(R.mipmap.empty) + .into(binding.emptyImageView) + } else { + binding.emptyImageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.taskName) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } + + override fun initViewBinding(): ActivityGasAlarmDetailBinding { + return ActivityGasAlarmDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun onBackPressed() { + orientationUtils.backToProtVideo() + if (GSYVideoManager.backFromWindowFull(this)) { + return + } + super.onBackPressed() + } + + override fun onPause() { + binding.videoPlayerView.currentPlayer.onVideoPause() + super.onPause() + isPause = true + } + + override fun onResume() { + binding.videoPlayerView.currentPlayer.onVideoResume(false) + super.onResume() + isPause = false + } + + override fun onDestroy() { + if (isPlay) { + binding.videoPlayerView.currentPlayer.release() + } + orientationUtils.releaseListener() + super.onDestroy() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + //如果旋转了就全屏 + if (isPlay && !isPause) { + binding.videoPlayerView.onConfigurationChanged( + this, + newConfig, + orientationUtils, + true, + true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt index 7ef2752..5cec695 100644 --- a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt @@ -763,7 +763,7 @@ } /** - * 视频抓取,抓取15s的视频 + * TODO 视频抓取,抓取10s的视频。带宽不够,暂时注掉 * */ private fun recordVideo() { if (!isRecordingVideo) { @@ -877,7 +877,7 @@ if (dataModel!!.methane >= gasAlarmRule) { isAlarm = "1" - recordVideo() +// recordVideo() captureImage(true) } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index b4506a5..02645dd 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -63,8 +63,8 @@ taskId: String, deviceId: String, alarmContent: String, - alarmLongitude: String, alarmLatitude: String, + alarmLongitude: String, alarmTime: String, alarmThresh: String, alarmPicture: String, @@ -77,8 +77,8 @@ taskId, deviceId, alarmContent, - alarmLongitude, alarmLatitude, + alarmLongitude, alarmTime, alarmThresh, alarmPicture, @@ -130,8 +130,8 @@ dataModel.alarmPicture = "" dataModel.alarmThresh = SaveKeyValues.getValue( LocaleConstant.ALARM_RULE, 1000 - ) as Int - dataModel.alarmValue = 0 + ) as String + dataModel.alarmValue = "0" dataModel.alarmVideo = "" detailModel.data = dataModel } else { diff --git a/app/src/main/res/layout/activity_ai_alarm_detail.xml b/app/src/main/res/layout/activity_ai_alarm_detail.xml new file mode 100644 index 0000000..5a3b318 --- /dev/null +++ b/app/src/main/res/layout/activity_ai_alarm_detail.xml @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_detail.xml b/app/src/main/res/layout/activity_alarm_detail.xml index d707aca..48e151a 100644 --- a/app/src/main/res/layout/activity_alarm_detail.xml +++ b/app/src/main/res/layout/activity_alarm_detail.xml @@ -9,7 +9,7 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginStart="@dimen/dp_10" - android:layout_marginTop="@dimen/dp_15" + android:layout_marginTop="@dimen/dp_30" android:layout_marginBottom="@dimen/dp_10" android:layout_weight="1" app:cardCornerRadius="@dimen/dp_10" @@ -200,7 +200,7 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginTop="@dimen/dp_15" + android:layout_marginTop="@dimen/dp_30" android:layout_marginBottom="@dimen/dp_10" android:layout_weight="1" android:orientation="vertical"> @@ -246,55 +246,9 @@ - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_gas_alarm_detail.xml b/app/src/main/res/layout/activity_gas_alarm_detail.xml new file mode 100644 index 0000000..d707aca --- /dev/null +++ b/app/src/main/res/layout/activity_gas_alarm_detail.xml @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file