diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml index 21fa5b9..cc8460a 100644 --- a/app/src/main/res/drawable/ic_battery_4.xml +++ b/app/src/main/res/drawable/ic_battery_4.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml index 21fa5b9..cc8460a 100644 --- a/app/src/main/res/drawable/ic_battery_4.xml +++ b/app/src/main/res/drawable/ic_battery_4.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..d19dde4 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml index 21fa5b9..cc8460a 100644 --- a/app/src/main/res/drawable/ic_battery_4.xml +++ b/app/src/main/res/drawable/ic_battery_4.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..d19dde4 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_history_data.xml b/app/src/main/res/layout/activity_history_data.xml index f1c320d..acbb3a5 100644 --- a/app/src/main/res/layout/activity_history_data.xml +++ b/app/src/main/res/layout/activity_history_data.xml @@ -8,7 +8,7 @@ - + android:layout_margin="@dimen/dp_7" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml index 21fa5b9..cc8460a 100644 --- a/app/src/main/res/drawable/ic_battery_4.xml +++ b/app/src/main/res/drawable/ic_battery_4.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..d19dde4 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_history_data.xml b/app/src/main/res/layout/activity_history_data.xml index f1c320d..acbb3a5 100644 --- a/app/src/main/res/layout/activity_history_data.xml +++ b/app/src/main/res/layout/activity_history_data.xml @@ -8,7 +8,7 @@ - + android:layout_margin="@dimen/dp_7" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml index 21fa5b9..cc8460a 100644 --- a/app/src/main/res/drawable/ic_battery_4.xml +++ b/app/src/main/res/drawable/ic_battery_4.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..d19dde4 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_history_data.xml b/app/src/main/res/layout/activity_history_data.xml index f1c320d..acbb3a5 100644 --- a/app/src/main/res/layout/activity_history_data.xml +++ b/app/src/main/res/layout/activity_history_data.xml @@ -8,7 +8,7 @@ - + android:layout_margin="@dimen/dp_7" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml deleted file mode 100644 index be941c3..0000000 --- a/app/src/main/res/values/array.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - 本年度 - 本季度 - 近30日 - 近7日 - 今日 - 自定义 - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml index 21fa5b9..cc8460a 100644 --- a/app/src/main/res/drawable/ic_battery_4.xml +++ b/app/src/main/res/drawable/ic_battery_4.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..d19dde4 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_history_data.xml b/app/src/main/res/layout/activity_history_data.xml index f1c320d..acbb3a5 100644 --- a/app/src/main/res/layout/activity_history_data.xml +++ b/app/src/main/res/layout/activity_history_data.xml @@ -8,7 +8,7 @@ - + android:layout_margin="@dimen/dp_7" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml deleted file mode 100644 index be941c3..0000000 --- a/app/src/main/res/values/array.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - 本年度 - 本季度 - 近30日 - 近7日 - 今日 - 自定义 - - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index ca7da7e..c455e80 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,4 +9,16 @@ #FF6600 #37D4AE #99000000 + + + + #FF4444 + + #FF9933 + + #FFCC00 + + #66CC66 + + #339933 \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index 58d5e63..1f2fdeb 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,7 +1,6 @@ package com.casic.smarttube.extensions import android.content.Context -import android.graphics.Color import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener @@ -104,20 +103,20 @@ fun String.toTextColor(context: Context): Int { if (this.isBlank()) { - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { - in 0..10 -> return R.color.redTextColor.convertColor(context) - in 11..30 -> return R.color.orangeTextColor.convertColor(context) - in 31..60 -> return Color.parseColor("#FFFF00") - in 61..90 -> return Color.parseColor("#90B030") - in 91..100 -> return Color.parseColor("#33CC33") + in 0..10 -> return R.color.battery_low.convertColor(context) + in 11..30 -> return R.color.battery_medium_low.convertColor(context) + in 31..60 -> return R.color.battery_medium.convertColor(context) + in 61..90 -> return R.color.battery_medium_high.convertColor(context) + in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } - return R.color.redTextColor.convertColor(context) + return R.color.battery_low.convertColor(context) } /** diff --git a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt index d7f1843..80407a8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smarttube/utils/ChartViewHelper.kt @@ -25,9 +25,6 @@ fun setLineChartData(chart: LineChart, xAxisDate: ArrayList, entries: List) { //每次加载数据都初始化折线图 chart.initConfig() - if (entries.isEmpty()) { - return - } //绑定数据 val lineDataSets: MutableList = ArrayList() //设置数据 diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index 336839b..9a17372 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -1,8 +1,6 @@ package com.casic.smarttube.view import android.os.Bundle -import android.view.View -import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.databinding.ActivityHistoryDataBinding @@ -13,9 +11,7 @@ import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry -import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -49,6 +45,32 @@ devCode = params[1] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.historyDataData.observe(this) { + if (it.code == 200) { + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + it.data.reverse() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + // 2022-07-06 16:41:00 需要改为 07-06 16:41 + xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) + + //浓度线 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + ) + } + if (strengthEntries.isEmpty()) { + binding.dataLineChart.clear() + binding.dataLineChart.invalidate() + return@observe + } + + ChartViewHelper.setLineChartData( + binding.dataLineChart, xAxisLabels, strengthEntries + ) + } + } } override fun observeRequestState() { @@ -62,113 +84,80 @@ override fun initEvent() { //默认选择近7天的数据 - binding.periodSpinner.setSelection(3) - binding.periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - val time = System.currentTimeMillis() - val calendar = Calendar.getInstance() - val year: Int = calendar.get(Calendar.YEAR) - when (position) { - 0 -> { - //本年度 - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, "$year-01-01", time.timestampToCompleteDate() - ) - } - - 1 -> { - //本季度 - val startDate = when (time.getQuarterOfYear()) { - 1 -> "$year-01-01" - 2 -> "$year-04-01" - 3 -> "$year-07-01" - 4 -> "$year-10-01" - else -> "" - } - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, time.timestampToCompleteDate() - ) - } - - 2 -> { - //近30日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastMonthDate(), - time.timestampToCompleteDate() - ) - } - - 3 -> { - //近7日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToLastWeekDate(), - time.timestampToCompleteDate() - ) - } - - 4 -> { - //今日 - deviceViewModel.getDeviceHistoryData( - context, - groupId, - devCode, - time.timestampToDate(), - time.timestampToCompleteDate() - ) - } - - 5 -> { - DateSelectDialog.Builder().setContext(this@HistoryDataActivity) - .setTitle("选择日期").setNegativeButton("取消") - .setPositiveButton("选好了").setOnDialogButtonClickListener(object : - DateSelectDialog.OnDialogButtonClickListener { - override fun onConfirmClick(startDate: String, endDate: String) { - deviceViewModel.getDeviceHistoryData( - context, groupId, devCode, startDate, endDate - ) - } - - override fun onCancelClick() { - //选择取消就默认加载近7天的数据 - binding.periodSpinner.setSelection(3) - } - }).setFragmentManager(supportFragmentManager) - .setCalendarType(Type.YEAR_MONTH_DAY).build().show() - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - deviceViewModel.historyDataData.observe(this) { - if (it.code == 200) { - val xAxisLabels = ArrayList() - //每个entries都是一条折线 - val strengthEntries = ArrayList() - it.data.reverse() - it.data.forEachIndexed { i, rowsBean -> - // x 轴坐标 - // 2022-07-06 16:41:00 需要改为 07-06 16:41 - xAxisLabels.add(rowsBean.uptime.dateToMonthDay()) - - //浓度线 - strengthEntries.add( - Entry(i.toFloat(), rowsBean.stregnth!!.toFloat(), "浓度") + deviceViewModel.getDeviceHistoryData( + this, groupId, devCode, + System.currentTimeMillis().timestampToLastWeekDate(), + System.currentTimeMillis().timestampToDate() + ) + binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year = calendar.get(Calendar.YEAR) + when (checkedId) { + R.id.yearRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, "$year-01-01", time.timestampToDate() ) } - ChartViewHelper.setLineChartData( - binding.dataLineChart, xAxisLabels, strengthEntries - ) + + R.id.quarterRadioButton -> { + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" + } + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, time.timestampToDate() + ) + } + + R.id.monthRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastMonthDate(), + time.timestampToDate() + ) + } + + R.id.weekRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToLastWeekDate(), + time.timestampToDate() + ) + } + + R.id.todayRadioButton -> { + deviceViewModel.getDeviceHistoryData( + context, + groupId, + devCode, + time.timestampToDate(), + time.timestampToDate() + ) + } + + else -> { + DateSelectDialog.Builder().setContext(context) + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.getDeviceHistoryData( + context, groupId, devCode, startDate, endDate + ) + } + + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + } + }).setFragmentManager(supportFragmentManager).build().show() + } } } } diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index c052c7f..c3052cb 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -14,8 +14,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.extensions.timestampToTime +import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -25,42 +24,19 @@ ) { private val ctx: Context = builder.context - private val title: String = builder.title - private val negativeBtn: String = builder.negativeBtn - private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager - private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var title: String - lateinit var negativeBtn: String - lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager - lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String): Builder { - this.title = title - return this - } - - fun setNegativeButton(name: String): Builder { - this.negativeBtn = name - return this - } - - fun setPositiveButton(name: String): Builder { - this.positiveBtn = name - return this - } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this @@ -71,11 +47,6 @@ return this } - fun setCalendarType(calendarType: Type): Builder { - this.type = calendarType - return this - } - fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -86,14 +57,9 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) - setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.isNotBlank()) { - binding.dialogTitleView.text = title - } - binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) @@ -102,13 +68,9 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } @@ -121,24 +83,18 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(type) + .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - val textValue = if (type == Type.ALL) { - millSeconds.timestampToTime() - } else { - millSeconds.timestampToCompleteDate() - } + val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } - binding.dialogCancelButton.text = negativeBtn binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } - binding.dialogConfirmButton.text = positiveBtn binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() @@ -165,11 +121,7 @@ if (start.isBlank() || end.isBlank()) { return false } - val dateFormat = if (type == Type.ALL) { - SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) - } else { - SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) - } + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml index 38425b4..cbc8cec 100644 --- a/app/src/main/res/drawable/ic_battery_0.xml +++ b/app/src/main/res/drawable/ic_battery_0.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml index 93a6ce2..305b2fb 100644 --- a/app/src/main/res/drawable/ic_battery_1.xml +++ b/app/src/main/res/drawable/ic_battery_1.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml index a09a07f..38b1b02 100644 --- a/app/src/main/res/drawable/ic_battery_2.xml +++ b/app/src/main/res/drawable/ic_battery_2.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml index 21e3d58..4d4da31 100644 --- a/app/src/main/res/drawable/ic_battery_3.xml +++ b/app/src/main/res/drawable/ic_battery_3.xml @@ -5,6 +5,6 @@ android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml index 21fa5b9..cc8460a 100644 --- a/app/src/main/res/drawable/ic_battery_4.xml +++ b/app/src/main/res/drawable/ic_battery_4.xml @@ -4,6 +4,6 @@ android:viewportWidth="1316" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..d19dde4 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_history_data.xml b/app/src/main/res/layout/activity_history_data.xml index f1c320d..acbb3a5 100644 --- a/app/src/main/res/layout/activity_history_data.xml +++ b/app/src/main/res/layout/activity_history_data.xml @@ -8,7 +8,7 @@ - + android:layout_margin="@dimen/dp_7" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml deleted file mode 100644 index be941c3..0000000 --- a/app/src/main/res/values/array.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - 本年度 - 本季度 - 近30日 - 近7日 - 今日 - 自定义 - - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index ca7da7e..c455e80 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,4 +9,16 @@ #FF6600 #37D4AE #99000000 + + + + #FF4444 + + #FF9933 + + #FFCC00 + + #66CC66 + + #339933 \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a55db0b..bbdf0c5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -79,4 +79,15 @@ @anim/activity_in @anim/activity_out + +