diff --git a/app/build.gradle b/app/build.gradle index c0f2105..00d91ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,8 +54,6 @@ dependencies { implementation rootProject.ext.dependencies.jxl // 时间日期选择控件 implementation 'com.github.loper7:DateTimePicker:0.6.3' - implementation('androidx.activity:activity:1.7.2') - implementation('androidx.activity:activity-ktx:1.7.2') implementation 'com.google.android.material:material:1.5.0' annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.0.0' diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/TimeStep.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/TimeStep.kt new file mode 100644 index 0000000..7c6b860 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/TimeStep.kt @@ -0,0 +1,19 @@ +package com.yinuo.safetywatcher.watcher.constant + +import androidx.annotation.IntDef + +@IntDef( + TimeStep.SECOND_30, + TimeStep.MINUTE_1, + TimeStep.MINUTE_3, + TimeStep.MINUTE_5, +) + +annotation class TimeStep() { + companion object { + const val SECOND_30 = 30 + const val MINUTE_1 = 60 + const val MINUTE_3 = 180 + const val MINUTE_5 = 300 + } +} diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/ChooseParamsActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/ChooseParamsActivity.kt index 318d060..0c97cd3 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/ChooseParamsActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/ChooseParamsActivity.kt @@ -2,10 +2,14 @@ package com.yinuo.safetywatcher.watcher.ui import android.content.Context import android.content.Intent +import android.text.TextUtils import android.view.View import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityChooseParamsBinding import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity +import com.yinuo.safetywatcher.watcher.constant.TimeStep +import com.yinuo.safetywatcher.watcher.utils.DateUtils +import com.yinuo.safetywatcher.watcher.utils.showToast class ChooseParamsActivity : NoOptionsActivity() { private val mBinding by lazy { @@ -13,19 +17,26 @@ class ChooseParamsActivity : NoOptionsActivity() { } companion object { - private const val START_TIME = "startTime" - private const val END_TIME = "endTime" - private const val TIME_STEP = "step" - private const val WARN_TYPE = "warnType" + const val START_TIME = "startTime" + const val END_TIME = "endTime" + const val TIME_STEP = "step" + const val WARN_TYPE = "warnType" - fun open(context: Context, startTime: Long, endTime: Long, timeStep: Int, warnType: String? = null) { - val intent = Intent() + fun open( + context: Context, + startTime: Long = 0L, + endTime: Long = 0L, + @TimeStep timeStep: Int = 0, + warnType: String? = null + ): Intent { + val intent = Intent(context, ChooseParamsActivity::class.java) intent.putExtra(START_TIME, startTime) intent.putExtra(END_TIME, endTime) intent.putExtra(TIME_STEP, timeStep) warnType?.let { intent.putExtra(WARN_TYPE, warnType) } + return intent } } @@ -37,6 +48,85 @@ class ChooseParamsActivity : NoOptionsActivity() { return mBinding.root } + private var startTime: Long = -1L + private var endTime: Long = -1L + override fun initView() { + intent?.apply { + startTime = getLongExtra(START_TIME, -1L) + endTime = getLongExtra(END_TIME, -1L) + var timeStep = getIntExtra(TIME_STEP, -1) + var warnType = getStringExtra(WARN_TYPE) + + val currentTime = System.currentTimeMillis() + if (startTime < 0) { + startTime = currentTime - DateUtils.ONE_DAY_MS + } + if (endTime < 0) { + endTime = currentTime + } + if (timeStep < 0) { + timeStep = TimeStep.SECOND_30 + } + + // updateUI + mBinding.apply { + // pickers + startPicker.setDefaultMillisecond(startTime) + endPicker.setDefaultMillisecond(endTime) + + // timeStep + when (timeStep) { + TimeStep.SECOND_30 -> rbS30.isChecked = true + TimeStep.MINUTE_1 -> rbM1.isChecked = true + TimeStep.MINUTE_3 -> rbM3.isChecked = true + TimeStep.MINUTE_5 -> rbM5.isChecked = true + } + // warnType + warnTypeContainer.visibility = + if (TextUtils.isEmpty(warnType)) View.GONE else View.VISIBLE + + + tvConfirm.setOnClickListener { + returnDataback() + } + startPicker.setOnDateTimeChangedListener { + startTime = it + endPicker.setMaxMillisecond(startTime + DateUtils.ONE_DAY_MS) + } + endPicker.setOnDateTimeChangedListener { + endTime = it + } + } + } + + } + + private fun returnDataback() { + if (startTime >= endTime) { + showToast(getString(R.string.error_interval_tip)) + return + } + if (endTime - startTime > DateUtils.MAX_QUERY_TIME_INTERVAL) { + showToast(getString(R.string.over_max_interval_tip)) + return + } + + val timeStep = when (mBinding.rgTimeStep.checkedRadioButtonId) { + mBinding.rbS30.id -> TimeStep.SECOND_30 + mBinding.rbM1.id -> TimeStep.MINUTE_1 + mBinding.rbM3.id -> TimeStep.MINUTE_3 + mBinding.rbM5.id -> TimeStep.MINUTE_5 + else -> { + TimeStep.SECOND_30 + } + } + val intent = Intent() + intent.putExtra(START_TIME, startTime) + intent.putExtra(END_TIME, endTime) + intent.putExtra(TIME_STEP, timeStep) + // intent.putExtra() + setResult(RESULT_OK, intent) + finish() } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/QueryDataActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/QueryDataActivity.kt index 9af8d60..0d566fc 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/QueryDataActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/QueryDataActivity.kt @@ -1,6 +1,6 @@ package com.yinuo.safetywatcher.watcher.ui -import android.content.Intent +import android.annotation.SuppressLint import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.recyclerview.widget.LinearLayoutManager @@ -9,6 +9,7 @@ import com.yinuo.safetywatcher.databinding.ActivityQueryDataBinding import com.yinuo.safetywatcher.watcher.adapter.HistoryDataAdapter import com.yinuo.safetywatcher.watcher.base.BaseActivity import com.yinuo.safetywatcher.watcher.bean.HistoryData +import com.yinuo.safetywatcher.watcher.constant.TimeStep import com.yinuo.safetywatcher.watcher.utils.DateUtils import com.yinuo.safetywatcher.watcher.view.CommonTopBar @@ -41,29 +42,70 @@ class QueryDataActivity : BaseActivity() { return mBinding.root } -// registerForActivityResult + private var startTime = -1L + private var endTime = -1L + private var timeStep = TimeStep.SECOND_30 + private val mAdapter = HistoryDataAdapter() + + private val paramsLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + val intent = result.data + intent?.apply { + startTime = getLongExtra(ChooseParamsActivity.START_TIME, startTime) + endTime = getLongExtra(ChooseParamsActivity.END_TIME, endTime) + timeStep = getIntExtra(ChooseParamsActivity.TIME_STEP, timeStep) + initDefaultParamsUi() + queryData() + } + } + } override fun initView() { - initDefaultParams() - ActivityResultContracts.StartActivityForResult + initDefaultParamsUi() + mBinding.tvModifyParams.setOnClickListener { - startActivity(Intent(this@QueryDataActivity, ChooseParamsActivity::class.java)) + paramsLauncher.launch( + ChooseParamsActivity.open( + this@QueryDataActivity, + startTime, + endTime, + timeStep + ) + ) } mBinding.rvData.layoutManager = LinearLayoutManager(this@QueryDataActivity) + mBinding.rvData.adapter = mAdapter + + queryData() + } + + @SuppressLint("SetTextI18n") + private fun initDefaultParamsUi() { + if (startTime < 0) { + startTime = System.currentTimeMillis() - DateUtils.ONE_DAY_MS + } + if (endTime < 0) { + endTime = System.currentTimeMillis() + } + val startTimeStr = DateUtils.formatHistoryTime(this.startTime) + val endTimeStr = DateUtils.formatHistoryTime(this.endTime) + val timeStepStr = when (timeStep) { + TimeStep.SECOND_30 -> getString(R.string.second_30) + TimeStep.MINUTE_1 -> getString(R.string.minute_1) + TimeStep.MINUTE_3 -> getString(R.string.minute_3) + TimeStep.MINUTE_5 -> getString(R.string.minute_5) + else -> getString(R.string.second_30) + } + mBinding.tvParams.text = + "时间: $startTimeStr——$endTimeStr 数据间隔:$timeStepStr" + } - val adapter = HistoryDataAdapter() + private fun queryData() { val datas = mutableListOf() datas.add(HistoryData(0, "气体传感器")) datas.add(HistoryData(0, "温度传感器")) - adapter.setData(datas) - mBinding.rvData.adapter = adapter - } - - private fun initDefaultParams() { - val startTime = DateUtils.formatHistoryTime(System.currentTimeMillis()) - val endTime = DateUtils.formatHistoryTime(System.currentTimeMillis()) - val step = 30; - mBinding.tvParams.text = "时间: $startTime——$endTime 数据间隔:$step" + mAdapter.setData(datas) } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/WarnDataActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/WarnDataActivity.kt index 535743d..25e9d81 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/WarnDataActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/WarnDataActivity.kt @@ -1,13 +1,14 @@ package com.yinuo.safetywatcher.watcher.ui -import android.content.Intent import android.view.View +import androidx.activity.result.contract.ActivityResultContracts import androidx.recyclerview.widget.LinearLayoutManager import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityWarndataBinding import com.yinuo.safetywatcher.watcher.adapter.WarnDataAdapter import com.yinuo.safetywatcher.watcher.base.BaseActivity import com.yinuo.safetywatcher.watcher.bean.WarnData +import com.yinuo.safetywatcher.watcher.constant.TimeStep import com.yinuo.safetywatcher.watcher.utils.DateUtils import com.yinuo.safetywatcher.watcher.view.CommonTopBar @@ -40,29 +41,73 @@ class WarnDataActivity : BaseActivity() { return mBinding.root } + private var startTime = -1L + private var endTime = -1L + private var timeStep = TimeStep.SECOND_30 + private var warnType = "" + private val mAdapter = WarnDataAdapter() + + private val paramsLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + val intent = result.data + intent?.apply { + startTime = getLongExtra(ChooseParamsActivity.START_TIME, startTime) + endTime = getLongExtra(ChooseParamsActivity.END_TIME, endTime) + timeStep = getIntExtra(ChooseParamsActivity.TIME_STEP, timeStep) + warnType = getStringExtra(ChooseParamsActivity.WARN_TYPE) ?: warnType + initDefaultParamsUi() + queryData() + } + } + } + override fun initView() { // 初始化默认查询参数 - initDefaultParams() + initDefaultParamsUi() mBinding.tvModifyParams.setOnClickListener { - startActivity(Intent(this@WarnDataActivity, ChooseParamsActivity::class.java)) + paramsLauncher.launch( + ChooseParamsActivity.open( + this@WarnDataActivity, + startTime, + endTime, + timeStep + ) + ) } // 测试数据 mBinding.rvData.layoutManager = LinearLayoutManager(this@WarnDataActivity) - val adapter = WarnDataAdapter() + mBinding.rvData.adapter = mAdapter + queryData() + } + + private fun initDefaultParamsUi() { + if (startTime < 0) { + startTime = System.currentTimeMillis() - DateUtils.ONE_DAY_MS + } + if (endTime < 0) { + endTime = System.currentTimeMillis() + } + val startTimeStr = DateUtils.formatHistoryTime(startTime) + val endTimeStr = DateUtils.formatHistoryTime(endTime) + val timeStepStr = when (timeStep) { + TimeStep.SECOND_30 -> getString(R.string.second_30) + TimeStep.MINUTE_1 -> getString(R.string.minute_1) + TimeStep.MINUTE_3 -> getString(R.string.minute_3) + TimeStep.MINUTE_5 -> getString(R.string.minute_5) + else -> getString(R.string.second_30) + } + warnType = "温度超标" + mBinding.tvParams.text = + "时间: $startTimeStr——$endTimeStr 数据间隔:$timeStepStr 告警类型:$warnType" + } + + private fun queryData() { val datas = mutableListOf() datas.add(WarnData(0, "二氧化碳浓度过高")) datas.add(WarnData(0, "温度超标")) - adapter.setData(datas) - mBinding.rvData.adapter = adapter - } - - private fun initDefaultParams() { - val startTime = DateUtils.formatHistoryTime(System.currentTimeMillis()) - val endTime = DateUtils.formatHistoryTime(System.currentTimeMillis()) - val step = 30; - val type = "温度超标" - mBinding.tvParams.text = "时间: $startTime——$endTime 数据间隔:$step 告警类型:$type" + mAdapter.setData(datas) } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/DateUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/DateUtils.kt index e091d63..abc7ccb 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/DateUtils.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/DateUtils.kt @@ -4,8 +4,10 @@ import java.text.SimpleDateFormat import java.util.Locale object DateUtils { - private val dataFormat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.ROOT) + const val ONE_DAY_MS = 24 * 60 * 60 * 1000 + const val MAX_QUERY_TIME_INTERVAL = ONE_DAY_MS + private val dataFormat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.ROOT) fun formatHistoryTime(time: Long): String? { return dataFormat.format(time) } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt new file mode 100644 index 0000000..5898f3e --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt @@ -0,0 +1,8 @@ +package com.yinuo.safetywatcher.watcher.utils + +import android.content.Context +import android.widget.Toast + +fun Context.showToast(msg: String) { + Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_choose_params.xml b/app/src/main/res/layout/activity_choose_params.xml index 08fa082..c9ac227 100644 --- a/app/src/main/res/layout/activity_choose_params.xml +++ b/app/src/main/res/layout/activity_choose_params.xml @@ -6,92 +6,207 @@ android:gravity="center_horizontal" android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginStart="@dimen/_55dp" + android:background="@drawable/white_rectangle" /> + android:textSize="@dimen/_30dp" /> - + android:layout_marginStart="@dimen/_20dp" + android:orientation="horizontal"> + - + - + + + + + + + + + - + android:textSize="@dimen/_30dp" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 44983ad..b2f18bc 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -125,7 +125,7 @@ + android:src="@mipmap/ic_video" /> - - 确认 当前时间 修改筛选条件 + 开始时间 + 结束时间 + 时间间隔 + 告警类型 + + 30秒 + 1分钟 + 3分钟 + 5分钟 + + 开始时间和结束时间间隔不能超过24小时!请调整 + 开始时间必须小于结束时间!请调整