From faebb2b5b0c8f117c3dcffffa7b6a1c29f4738b6 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Thu, 1 Jun 2023 16:57:12 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 - .../watcher/constant/TimeStep.kt | 19 ++ .../watcher/ui/ChooseParamsActivity.kt | 102 ++++++- .../watcher/ui/QueryDataActivity.kt | 72 +++-- .../watcher/ui/WarnDataActivity.kt | 73 ++++- .../safetywatcher/watcher/utils/DateUtils.kt | 4 +- .../yinuo/safetywatcher/watcher/utils/Exts.kt | 8 + .../res/layout/activity_choose_params.xml | 255 +++++++++++++----- app/src/main/res/layout/activity_setting.xml | 2 +- .../layout_date_picker_globalization1.xml | 11 - app/src/main/res/mipmap-hdpi/ic_video.png | Bin 0 -> 7713 bytes app/src/main/res/values/strings.xml | 12 + 12 files changed, 440 insertions(+), 120 deletions(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/constant/TimeStep.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt create mode 100644 app/src/main/res/mipmap-hdpi/ic_video.png 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" /> - - zlEMfKsYodKoA>+vxc98J*K_vSbPy=#GuuU$ZP+9&v|O{yZUZT z0eOM>8EM@HYDRcT0KhkmQCBqyw%N3%`5K@RFst}wQl2|Wq6L5w>WdyEQfWN+BzcXF z?gn%R{r<`iK>e2N0ejjcU9Z5Si9xe=c6vO(l%gHTdKZ%_uGna|l%urq>0s z3!?E9j_l9p;EsX0ZW4)Ph&W!|;JtWb?>U@IhhB4L9|fyQro*eU`60FUO6&hCJDmB$VZ&<$J2t-1w9nN@^Ub`Ovbqu{5-Oi+6J0j-qYVZa2_ z9jjN1_kc2rn~c5A=*SXvyva&9*>cffZtx+qUHrKxRtM)3hC{u2!{6D#yped>8&%RL zXH*hoA4f!P6Mh0SQW1d#jo&{%iMY`F`xJNl^D|PR?^G9CX=;t<;AT0v?umu>fRkvX9UJK~t>*Yb89>k=`hXu2$m_64en6gOo zGc9;ER3oKFQp+d8lu+|P6YAt$6HF|4E%@1A>N6@6ER3!%!9GW}7aG%f8?p8!YkJ6>vG&Shy1mn7Ck@MlHklWsfh;DMMJ1@npN>yR1f*rpI3X`My& zoS9&2;*775GD#?W>u&Ro5TsCUN@zb_1qAS|<2KY^2L@SghPLh1Y=&1Ik^<+pkVog5 zLg?_4$v-IDTUwqN!qg%AvTa*eMz6I^?jLq9Fw0F?P|NCjKw03}2@{mOcRB7EHC%P! zZ%h%*r^u;^iL?w!u9Nq^MFXg3)L;>i0QM~MotO(2p7SnrRP3(4K4}>+=JP8N@HDNM zHhhvi%GJa`4iG=X!f=M!u{jh}`SrS~?R^;LjKc1dcF~6Rjzk6$S&eeR7JCR@rm$;G zFtWHw({7}uK0)uz(0nwKAD^e}xC;0j|53gsypI5xE6V4K-H@Wbzs5W$H)0=MK43G4 zWL+?$)ZX6u`KFHZI)o4kYSCD7EaUsfm1d+wxP0WeWPG5``mP{~=xAxmM?LumK@vWv z_p}5(VY-L=^V%6QcT@N)L8m#<_;g+p94PDU!3Sm2_6`a8rlAGZ2m*4Y;(RWFol z79R0%en~$+GIJ^kbaNb{=e>9^s9E2gE~B=I3$mpQZ1Bsq=)pfIC`c;5BqtQANeh3@ zz;N*P`frK8>pw)euF{IndwyA6y8*T_2Z?!1zZ_^4eLZc_{1yfZ`TvPCNess`3*)yl zO(d(+m{|Fl7ko;PG3#9vy|7WR8S-WO7M^z*GUSYCK(jv!Z6`mkqfrfYp25v;fns0#(?E!sp>>3tPH1?J)4oW{ zn}C$+V8|TNAWXCLXk)Bmr|Ot#;UzqN@t?NT31!IqM9^8r-!j)Qq^Rcp1u4}7A<{-N zSy=cT@%J@2``PZsMl68dxfBuc!(*yvEk7<`rBaxL64gAh^fTp*e7OxwrW8k1B3UsV zz}1KL2UmjcF;l@&1#%I-HM|--U)nN!2XsP_*p=n4T!vGzXjJXssrI2W5XRQza}7U7 z+76{j0Bv7obiy`1`Ath^nL)`^zdpy{`HVA`(1DpQQWDL)Z5E3Lt@Ie%$NR!+K*HPm zIO4!k$Bei3p*T>sb&nd6MjUSEc0o@5O7*LmEcrOtG*@g+z785HLDKIdOy=CAr<(_+ zR8X2qHS59rwQZ{King8UhoQAgI;|P=`%`O1k!l2g`uv3A1K1n)=p99zQu7NNbVfI9 zF)1W*G(F1V!-p0_yu&Lu}?7_jZ^T?M^-!uZje?MYEdCXFY zNtLW7S_#{nHY8^J+0#333Yaia6btpFrH-8QWD}UL-qs-So!A?`*p-HuqFf{+DEcf2 zet*Dx^#)r7PFM0VVD{EKnEvd=KqI#&4Dmj5d~s9kLDFPgWV}m?9Y%kexU1Jj7)|^M=l6{Jl#RdhmvPR}OZ{Xh@4i#KZf;Ma z!ymGSh=CZ{-xkwy$U9+z)(NqWRzRW@UZdOM_t znmg8;rBTtgsr`X6hvw*BeAGCV0dqb3bP9hpMb}ygcO?;HwWn>XY+k0A{gnx8ye?0b zP+Udv_pMXD<Zdt$3|NR0a7&IRz4nSNe4wrG#Bk zAA||qaG|4=^)zuGjKvrh+F&+;Y(5$WOS#I3@hJ%4x8wq=@EIv-&){QIgqq?_;MmGZ zBxg%4hul?C0{pn_M}@iAk0e|T0Mz&4j3BZa{OH3nix5n5;~R6;*sxTk_7`)Zx9%oq zj5@yWI)}M@6euYHTijUFSI-xGnOG*2@dojx=Vkmk1odjA#|L4=*V!^@SPQF-Vn_H2 zfdxK#)jKMf0Tb_Gri1+8v+?1BOh#86u_ik})9@bTDx@owDp>lu!|AJN0T{2lV$+o4 z|83Oxzl}mas-|(rnvdA7v8X+=fi#{8X={CObiI3<3S&j-?UchylG6=#)Uu=igJMsu zp^G*ZRv*PkdVufzxmuxr<$2jWRu-6A7%sPba~SlCAdSl>fnlnOF}^mgErwpS7i^7w zUQppTXvnPllR};4AT=#EtVmgr*JZ(xBY-qiK0*m-MQY19ODcSo!1I4U7+mc&KnGql z40$Oj2Se}VoR~g_-IIGJdm9qm_EiX2!3`-}<9QdQpXeZYdIMy`{6rw3w+0+;r8xTK zhA%cB-IIFQRCM{5?r!taF4d-)_^NVkeaMmho9Rg3mGfS5gD&K%*G!ChIh)Gy;Si%g zovg|aDIz5%^W1(@c#GP1$YE}0hG(Zv!Q;XFzzMAD7Jf;Mp)MLS146E0XNK0VWT`@V z1Hu#Q<37YJw*anhd!Se8E$c<(x74L+KOzCNuGOZKN-flsQScDxD69r{ZUY7*tFx^b zWL>4D5q4ZbmMtQIs87y|^*xAHZyw=y!AgTl8siI3=W1Wh;7FZ`ntNCB(-HbqX zbVs~toh<&9UdlCrCiQ7dh!JCq!d=gXuKJ^b$d^z zT^>8*k#RryDb>Y-`&G}97^djpg_O87!p%Uiq$6msG=EeHt>q=TF=Z5yVsb~gr^%+bG54~0Y(d1D+_M!i-TgO|bVGo%O& zVV9aVg!m`@*#@I8KVED(NxH{h44apR4@7RN?yNMlf9&6f+lpkb+hsp2G6V2>+cNnN z91R?;<1Q9Fh%1Y=9E_<3d|9x(15G6U;;oR;8s&FkxP#QruzeL-u_lUyL|5PECS|$1 zLy4~?Q15bgKR@DMpQ>e3@vRts=ZO)qef{r+>}}iEBjt-`maoZTug3RV0(4y=@5ekw z4xaCuS4#7_7tVFwZ~e<-(Z!}R6ukRnh_o%sPh=M5?-TW8w*e7s&=S(u^UK35)RHQ{ z7QsI#Ut0{DPJEyA?5bRaljq})9ci!ez&yD!u4NG^FI_Gs_D`T6;~ukXUV6MtyA{T4 z1esnR`gxD=2c{(9yr19E;s_Cky5rcTo=x4#BSv536IFt{K-Tr&c#0o!fHGB>M6rV` zjLoe@7-u^ZMjyVZPC&4*v)p<9t(evT&5E5|gEq7uX03$?A*C`g<~1^2OBFK`m`G&f zNcj_;b}H=5jO{G}(&erTqWw?zl%a|9uHmdg60jY80Kr9guiwC;qUYplG|219GM+v5 za`nT(_g;SXiE0XXXp7u$N8Q|^wttafROw*twEODD7P)mA z#$E+4?%}5bFi0JJR#!S)lV}(vHr_dT>nbE1#*h}H8(B5oeG_jOd?f5O%l(~LcYZYc zqEL2TK-ldh2;da-V+r=@xzK%zy@`FMz7)WQG+Tg>qx$l3> zEUNCUI#z&VWg&hAX{3)QZX;6!8kM1mACBYSWSlpCgMRkfH#}b9EL@vMq^~vThIv?a z;zB)}=e$cLFe5Kkb)O)1Vw*ZEmj&^zO$Zf&%(@HEwo(6MsFW0V5({|d*f+@!Y^m<- zWgu@?>G&2{t#nkU%EC5y1Kd&T3B~t5+M7o(;+5U0jg4BRu#>L!MDXemjmrmzS$3?d zFP??6rhI8>-5iq3_4E?JZ#3?sZoY0{?ZGVky<1X1Z&Ld!aXQXHGD#y~;)tTZ5GLJN z$@k5d2to(_719P4m^ty#vAbe{CH3o%q9L6lvu`cMIwE$QycdsmQiMZHOv}d0#YtU& z@7Uht{QxWIjAyoRcz2KDLXb9ez$z4JrU)JXa-tkOiNdsHo8NGIccokQ#q;et*;EG` z)#)#VxC?iId={|Bu%`K!97+`Vi)DglLqZUzqVj59S04FLr$-D)yHQ;I1z zwVa-mFC1?Dv4EyWzoBX34ypSEBanvDHQuf9rf~dESy4`k@UkW4r?V~Qkycr-wO`nb z`EJEkBjnHNa_{YsOZbUE#IGd(13KI;`*n_mYC47skx~tGVB3{>9>_V z@(dvVcS&;&=K-G)o0Y9$HoxKa}huIQTK-|66#>ZpvF9OqDT!kvbSxQy=vIGvb zH}c@^JJzO^Lc?g#p-+hoD#IVyw~Cs-yTr*6{!B)mcYNoPH^HO(ax~)`V+_gtDjo~RqM8x3F7u@$phUGk-hn-LZ{-q{`f2mS5-*F2TTIBiNi&5; zhwt7wuaF88+fJ1or)RZOs?y(o_{Eldn+7KRI@FQ2Y(vu(ZvpT`dqu{uns+4{WG)O^ zkpBrqCeF!d}xlKJsT5EW^{w1tW;eDVWUhn-a zo?2ytE)#bFh=D1#&+fX*V~{%5dO$D14JUUIW5Ycq_)=Y0(MJoqEKxC|k*^8^yEF=z zUdXu@#Cjix26kd(Q;9#vH`3e zEG3#Eap}XRyNQ4^t}_Jl;X5*Mcx?o5DjXbN%WFKX1;SnSul%b%fi zwbGgV%YinGrJHq)w_RCkXT<$koSP`qOr-JYU;i57E03b?zpuWQsh?i|-QG3vHyBeU ze7T=_&%RbGDC(iF;2b*7IU4=ee-SLSEPA0aYY2eR#h~eDH=f9u12(W{^4*)KDuQHkY)>;U(xe80Dz}gJezF;E51AlTjezTCM5tPzcj-Z(itSrR4c{5nn~U=3e8r`(NJn zs4O1_$N$dxH2O%Q=OIdrktdy~P$z4;WzNapVdF*fliu8o5C@R!Q*g3VF5%LrjGIEK z(TmEX?-IamS_XzPiU3}%;^2z4)-S7$_W?-dK~9T#khGXSE0S`cT#9SVah`#*jltm0 z^Zo0fpv=$FF|!p%b~>^<2QpcJqVB;pjUUGn z)&c%DUGy}#a}XbE2lQt;P-w1f2)ii070ZelIYd!DZlmj9S>d=bXhz$tY92xNr2|KH zs;xdml0`!$q5j65MfHnJ3MWmoe=y_H1MCN;gb$l2rUiC@H*iLvHJw#lDUrDHR1vlC zgq|LkJuHNPJz`aDVu|nO7H3ioc$`@q7~qhX?4*}t|A0H5ljjnLyZjwsR50Yu`~4h+ z=3nG0WsQ$Tb>NcDRbz$Vy zqSu+#J0tIB_-=!gSxdpYaW? z-~S{okS9cjBLcUK1z(6IP$hZmsliew6ZQmC`Dpb}AJ*gOP~4!a%XnBVg9S-&|- zLVWBj={KS%jv0!y>5zQTR&owcfH_cTu?1!^fjU$;T3*wI=cYE-aN>+A!rqUt_9T^t zO91V;PqKiL%cBjWMw)4k3@@q$pRWT(ofvk0c=W=}^kT22;TH~;lx3G?9?mGc7d9oY z_t0Pw^ZA~i3ft^fsWpSRw{I=qCjoKKF$)L_;G@g8?a1hzLeOCQ$JRMXx%y1?r9 zy>U{GB9P`EfN8v8jRyZQ^#`doH++VZC;sPR1apt>KudLumtvPKfts#G<0F;!(>5{G zJjU*3TJh4Kl}v5Pw;7w_;%IgjvQ6I9nk#X1Y3eB+y_2+GelN&6_f54<=O83Uy7@S^ zdq$H=J2HuRpGKbF6{Dwx;waJZoBJaFUVSffV%QT>p1OAp7GZr8Cw@tV;%)t9JO_=E zbdli|*ZFjONy{ib6%+>}Z{X!KS35B~!tR;bLTWHxmOEnflo0uofZr@oA{pwyvxj_|pVj{x$zj45^Oqi50l(|a!DpKFoJC|I^bgGxHp+-={9tB&g=S1MeiBK*n5_Zw-a_pKIq zq3OWc4`#qWA;6j9|B;azJHCbkhmo<*T}r6@t6%5J{7}Zd68CV_fW`q47sT zn12lx3us9H=9h{livDq6h)$7g&{cX5wH+SAfl%uQZ9W(S;8#NpjU36Aj($T;MnF8+ z*j_#)b|~};i5f^gS2tFwoJ*(6{-%yf|F=;-(W3g<*d=%s)>jR%YUW=3I#Mq2OAoO1 zpnaCz9180%FLPTvHX_rO{YH8Ra+CMStRcR6(j>CtKmN0#G>qG$hRk;oEj_OFn6N(w z8cfEN8E;IGDM(+58yU9O$Z(5FQUP_YJDKlnW6vFs%J`2S{pN2FJKRj>JMTT!`A@@-pnezoO8v5!rx9wv72UAjV6951J literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 39a59c0..ac71799 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,4 +39,16 @@ 确认 当前时间 修改筛选条件 + 开始时间 + 结束时间 + 时间间隔 + 告警类型 + + 30秒 + 1分钟 + 3分钟 + 5分钟 + + 开始时间和结束时间间隔不能超过24小时!请调整 + 开始时间必须小于结束时间!请调整