|
|
|
@ -33,7 +33,7 @@ import kotlin.math.min
|
|
|
|
|
import kotlin.math.round
|
|
|
|
|
|
|
|
|
|
fun interface OnDateClickedListener {
|
|
|
|
|
fun onDateClicked(date: LocalDate)
|
|
|
|
|
fun onDateClicked(date: LocalDate, isLongClick: Boolean)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class HistoryChart(
|
|
|
|
@ -42,9 +42,10 @@ class HistoryChart(
|
|
|
|
|
var paletteColor: PaletteColor,
|
|
|
|
|
var series: List<Square>,
|
|
|
|
|
var defaultSquare: Square,
|
|
|
|
|
var hasNotes: List<Boolean>,
|
|
|
|
|
var theme: Theme,
|
|
|
|
|
var today: LocalDate,
|
|
|
|
|
var onDateClickedListener: OnDateClickedListener = OnDateClickedListener { },
|
|
|
|
|
var onDateClickedListener: OnDateClickedListener = OnDateClickedListener { _, _ -> },
|
|
|
|
|
var padding: Double = 0.0,
|
|
|
|
|
) : DataView {
|
|
|
|
|
|
|
|
|
@ -72,6 +73,14 @@ class HistoryChart(
|
|
|
|
|
get() = squareSpacing + squareSize
|
|
|
|
|
|
|
|
|
|
override fun onClick(x: Double, y: Double) {
|
|
|
|
|
onDateClicked(x, y, false)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onLongClick(x: Double, y: Double) {
|
|
|
|
|
onDateClicked(x, y, true)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun onDateClicked(x: Double, y: Double, isLongClick: Boolean) {
|
|
|
|
|
if (width <= 0.0) throw IllegalStateException("onClick must be called after draw(canvas)")
|
|
|
|
|
val col = ((x - padding) / squareSize).toInt()
|
|
|
|
|
val row = ((y - padding) / squareSize).toInt()
|
|
|
|
@ -79,7 +88,7 @@ class HistoryChart(
|
|
|
|
|
if (row == 0 || col == nColumns) return
|
|
|
|
|
val clickedDate = topLeftDate.plus(offset)
|
|
|
|
|
if (clickedDate.isNewerThan(today)) return
|
|
|
|
|
onDateClickedListener.onDateClicked(clickedDate)
|
|
|
|
|
onDateClickedListener.onDateClicked(clickedDate, isLongClick)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun draw(canvas: Canvas) {
|
|
|
|
@ -191,7 +200,9 @@ class HistoryChart(
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
val value = if (offset >= series.size) defaultSquare else series[offset]
|
|
|
|
|
val notes = if (offset >= hasNotes.size) false else hasNotes[offset]
|
|
|
|
|
val squareColor: Color
|
|
|
|
|
val circleColor: Color
|
|
|
|
|
val color = theme.color(paletteColor.paletteIndex)
|
|
|
|
|
squareColor = when (value) {
|
|
|
|
|
Square.ON -> {
|
|
|
|
@ -235,5 +246,14 @@ class HistoryChart(
|
|
|
|
|
canvas.setColor(textColor)
|
|
|
|
|
canvas.setTextAlign(TextAlign.CENTER)
|
|
|
|
|
canvas.drawText(date.day.toString(), x + width / 2, y + width / 2)
|
|
|
|
|
|
|
|
|
|
if (notes) {
|
|
|
|
|
circleColor = when (value) {
|
|
|
|
|
Square.ON -> theme.lowContrastTextColor
|
|
|
|
|
else -> color
|
|
|
|
|
}
|
|
|
|
|
canvas.setColor(circleColor)
|
|
|
|
|
canvas.fillCircle(x + width - width / 5, y + width / 5, width / 12)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|