diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt index 15e7afa1f..9bf4ee1d1 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt @@ -193,6 +193,8 @@ class UserReactionsViewModel(val account: Account) : ViewModel() { val todaysReactionCount = _reactions.map { showCount(it[today()]) }.distinctUntilChanged() val todaysZapAmount = _zaps.map { showAmountAxis(it[today()]) }.distinctUntilChanged() + var shouldShowDecimalsInAxis = false + fun formatDate(createAt: Long): String { return sdf.format( Instant.ofEpochSecond(createAt) @@ -334,10 +336,28 @@ class UserReactionsViewModel(val account: Account) : ViewModel() { val chartEntryModelProducer1 = ChartEntryModelProducer(listOfCountCurves).getModel() val chartEntryModelProducer2 = ChartEntryModelProducer(listOfValueCurves).getModel() + this.shouldShowDecimalsInAxis = shouldShowDecimals(chartEntryModelProducer2.minY, chartEntryModelProducer2.maxY) + this._axisLabels.emit(listOf(6, 5, 4, 3, 2, 1, 0).map { displayAxisFormatter.format(now.minusSeconds(day * it)) }) this._chartModel.emit(chartEntryModelProducer1.plus(chartEntryModelProducer2)) } + // determine if the min max are so close that they render to the same number. + fun shouldShowDecimals(min: Float, max: Float): Boolean { + val step = (max - min) / 8 + + var previous = showAmountAxis(min.toBigDecimal()) + for (i in 1..7) { + val current = showAmountAxis((min + (i * step)).toBigDecimal()) + if (previous == current) { + return true + } + previous = current + } + + return false + } + var collectorJob: Job? = null init { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt index fb83ae710..b22a03cd4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt @@ -55,6 +55,7 @@ import com.vitorpamplona.amethyst.ui.note.OneKilo import com.vitorpamplona.amethyst.ui.note.OneMega import com.vitorpamplona.amethyst.ui.note.UserReactionsRow import com.vitorpamplona.amethyst.ui.note.UserReactionsViewModel +import com.vitorpamplona.amethyst.ui.note.showAmount import com.vitorpamplona.amethyst.ui.note.showCount import com.vitorpamplona.amethyst.ui.screen.NotificationViewModel import com.vitorpamplona.amethyst.ui.screen.RefresheableCardView @@ -224,6 +225,7 @@ private fun ObserveAndShowChart( ) { val axisModel = model.axisLabels.collectAsStateWithLifecycle() val chartModel by model.chartModel.collectAsStateWithLifecycle() + chartModel?.let { Chart( chart = remember(lineChartCount, lineChartZaps) { @@ -235,7 +237,7 @@ private fun ObserveAndShowChart( ), endAxis = rememberEndAxis( label = axisLabelComponent(color = BitcoinOrange), - valueFormatter = AmountAxisValueFormatter() + valueFormatter = AmountAxisValueFormatter(model.shouldShowDecimalsInAxis) ), bottomAxis = rememberBottomAxis( valueFormatter = LabelValueFormatter(axisModel) @@ -265,12 +267,16 @@ class CountAxisValueFormatter() : AxisValueFormatter { +class AmountAxisValueFormatter(val showDecimals: Boolean) : AxisValueFormatter { override fun formatValue( value: Float, chartValues: ChartValues ): String { - return showAmountAxis(value.toBigDecimal()) + return if (showDecimals) { + showAmount(value.toBigDecimal()) + } else { + showAmountAxis(value.toBigDecimal()) + } } }