Compare commits
5 Commits
43f0519487
...
be5463bf18
| Author | SHA1 | Date | |
|---|---|---|---|
| be5463bf18 | |||
| 260e70a1b7 | |||
| c2e7116da1 | |||
| 8c922943ee | |||
| d9d79d397a |
@@ -1,6 +1,5 @@
|
|||||||
package it.danieleverducci.lunatracker
|
package it.danieleverducci.lunatracker
|
||||||
|
|
||||||
import android.graphics.Canvas
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
@@ -12,7 +11,6 @@ import android.widget.TextView
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.graphics.toColorInt
|
import androidx.core.graphics.toColorInt
|
||||||
import com.github.mikephil.charting.animation.ChartAnimator
|
|
||||||
import com.github.mikephil.charting.charts.BarChart
|
import com.github.mikephil.charting.charts.BarChart
|
||||||
import com.github.mikephil.charting.data.BarData
|
import com.github.mikephil.charting.data.BarData
|
||||||
import com.github.mikephil.charting.data.BarDataSet
|
import com.github.mikephil.charting.data.BarDataSet
|
||||||
@@ -20,10 +18,7 @@ import com.github.mikephil.charting.data.BarEntry
|
|||||||
import com.github.mikephil.charting.data.Entry
|
import com.github.mikephil.charting.data.Entry
|
||||||
import com.github.mikephil.charting.formatter.ValueFormatter
|
import com.github.mikephil.charting.formatter.ValueFormatter
|
||||||
import com.github.mikephil.charting.highlight.Highlight
|
import com.github.mikephil.charting.highlight.Highlight
|
||||||
import com.github.mikephil.charting.interfaces.dataprovider.BarDataProvider
|
|
||||||
import com.github.mikephil.charting.listener.OnChartValueSelectedListener
|
import com.github.mikephil.charting.listener.OnChartValueSelectedListener
|
||||||
import com.github.mikephil.charting.renderer.HorizontalBarChartRenderer
|
|
||||||
import com.github.mikephil.charting.utils.ViewPortHandler
|
|
||||||
import it.danieleverducci.lunatracker.entities.LunaEvent
|
import it.danieleverducci.lunatracker.entities.LunaEvent
|
||||||
import utils.DateUtils
|
import utils.DateUtils
|
||||||
import utils.NumericUtils
|
import utils.NumericUtils
|
||||||
@@ -321,7 +316,10 @@ class StatisticsActivity : AppCompatActivity() {
|
|||||||
format.format((dayStartUnix + startSeconds) * 1000).toString()
|
format.format((dayStartUnix + startSeconds) * 1000).toString()
|
||||||
val endTimeString =
|
val endTimeString =
|
||||||
format.format((dayStartUnix + endSeconds) * 1000).toString()
|
format.format((dayStartUnix + endSeconds) * 1000).toString()
|
||||||
val durationString = DateUtils.formatTimeDuration(applicationContext, durationSeconds.toLong())
|
val durationString = NumericUtils(applicationContext).formatEventQuantity(
|
||||||
|
LunaEvent.Type.SLEEP,
|
||||||
|
durationSeconds
|
||||||
|
)
|
||||||
|
|
||||||
val daysWithData =
|
val daysWithData =
|
||||||
stack[e.x.toInt()][startSeconds / SLEEP_PATTERN_GRANULARITY]
|
stack[e.x.toInt()][startSeconds / SLEEP_PATTERN_GRANULARITY]
|
||||||
@@ -463,7 +461,7 @@ class StatisticsActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val duration = value.yVals[h.stackIndex].toInt()
|
val duration = value.yVals[h.stackIndex].toInt()
|
||||||
val durationString = DateUtils.formatTimeDuration(applicationContext, duration.toLong())
|
val durationString = NumericUtils(applicationContext).formatEventQuantity(LunaEvent.Type.SLEEP, duration)
|
||||||
|
|
||||||
val offsetUnix = spanToUnix(state.startSpan + e.x.toInt()) // start of the time span (day/week/month)
|
val offsetUnix = spanToUnix(state.startSpan + e.x.toInt()) // start of the time span (day/week/month)
|
||||||
val startUnix = offsetUnix + value.yVals.sliceArray(0..<h.stackIndex).fold(0) { acc, y -> acc + y.toInt() }
|
val startUnix = offsetUnix + value.yVals.sliceArray(0..<h.stackIndex).fold(0) { acc, y -> acc + y.toInt() }
|
||||||
@@ -494,21 +492,6 @@ class StatisticsActivity : AppCompatActivity() {
|
|||||||
barChart.invalidate()
|
barChart.invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the value on the bar is not out of screen.
|
|
||||||
class CustomHorizontalBarChartRenderer(chart: BarDataProvider, animator: ChartAnimator, viewPortHandler: ViewPortHandler): HorizontalBarChartRenderer(chart, animator, viewPortHandler) {
|
|
||||||
override fun drawValue(
|
|
||||||
c: Canvas,
|
|
||||||
valueText: String,
|
|
||||||
x: Float,
|
|
||||||
y: Float,
|
|
||||||
color: Int
|
|
||||||
) {
|
|
||||||
mValuePaint.setColor(color)
|
|
||||||
c.drawText(valueText, x.coerceAtLeast(60F), y, mValuePaint)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun showSleepBarGraph(state: GraphState) {
|
fun showSleepBarGraph(state: GraphState) {
|
||||||
val ranges = toSleepRanges(state.events)
|
val ranges = toSleepRanges(state.events)
|
||||||
val values = ArrayList(List(state.endSpan - state.startSpan + 1) { BarEntry(it.toFloat(), 0F) })
|
val values = ArrayList(List(state.endSpan - state.startSpan + 1) { BarEntry(it.toFloat(), 0F) })
|
||||||
@@ -573,7 +556,7 @@ class StatisticsActivity : AppCompatActivity() {
|
|||||||
prefix + value.toInt().toString()
|
prefix + value.toInt().toString()
|
||||||
}
|
}
|
||||||
GraphType.SLEEP_SUM -> {
|
GraphType.SLEEP_SUM -> {
|
||||||
prefix + DateUtils.formatTimeDuration(applicationContext, value.toLong())
|
prefix + NumericUtils(applicationContext).formatEventQuantity(LunaEvent.Type.SLEEP, value.toInt())
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
Log.e(TAG, "unhandled graphTypeSelection $graphTypeSelection")
|
Log.e(TAG, "unhandled graphTypeSelection $graphTypeSelection")
|
||||||
@@ -588,8 +571,6 @@ class StatisticsActivity : AppCompatActivity() {
|
|||||||
data.setValueTextSize(12f)
|
data.setValueTextSize(12f)
|
||||||
barChart.setData(data)
|
barChart.setData(data)
|
||||||
|
|
||||||
barChart.setRenderer(CustomHorizontalBarChartRenderer(barChart, barChart.getAnimator(), barChart.getViewPortHandler()))
|
|
||||||
|
|
||||||
barChart.legend.isEnabled = false
|
barChart.legend.isEnabled = false
|
||||||
val valueCount = min(values.size, 24)
|
val valueCount = min(values.size, 24)
|
||||||
barChart.setVisibleXRangeMaximum(valueCount.toFloat())
|
barChart.setVisibleXRangeMaximum(valueCount.toFloat())
|
||||||
@@ -654,8 +635,6 @@ class StatisticsActivity : AppCompatActivity() {
|
|||||||
data.setValueTextSize(12f)
|
data.setValueTextSize(12f)
|
||||||
barChart.setData(data)
|
barChart.setData(data)
|
||||||
|
|
||||||
barChart.setRenderer(CustomHorizontalBarChartRenderer(barChart, barChart.getAnimator(), barChart.getViewPortHandler()))
|
|
||||||
|
|
||||||
val valueCount = min(values.size, 24)
|
val valueCount = min(values.size, 24)
|
||||||
barChart.setVisibleXRangeMaximum(valueCount.toFloat())
|
barChart.setVisibleXRangeMaximum(valueCount.toFloat())
|
||||||
barChart.xAxis.setLabelCount(valueCount)
|
barChart.xAxis.setLabelCount(valueCount)
|
||||||
|
|||||||
Reference in New Issue
Block a user