Skip to content

Commit 4ca7505

Browse files
committed
feat(graphs): use updated fonts in graphs
1 parent 4cbba0d commit 4ca7505

File tree

4 files changed

+75
-35
lines changed

4 files changed

+75
-35
lines changed

app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/ProductivityGraph.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
/*
22
* Copyright (c) 2025 Nishant Mishra
33
*
4-
* You should have received a copy of the GNU General Public License
5-
* along with this program. If not, see <https://www.gnu.org/licenses/>.
4+
* This file is part of Tomato - a minimalist pomodoro timer for Android.
5+
*
6+
* Tomato is free software: you can redistribute it and/or modify it under the terms of the GNU
7+
* General Public License as published by the Free Software Foundation, either version 3 of the
8+
* License, or (at your option) any later version.
9+
*
10+
* Tomato is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
11+
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
12+
* Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License along with Tomato.
15+
* If not, see <https://www.gnu.org/licenses/>.
616
*/
717

818
package org.nsh07.pomodoro.ui.statsScreen
919

20+
import android.graphics.Typeface
1021
import androidx.compose.animation.AnimatedVisibility
1122
import androidx.compose.foundation.layout.Column
1223
import androidx.compose.foundation.layout.ColumnScope
@@ -28,6 +39,8 @@ fun ColumnScope.ProductivityGraph(
2839
expanded: Boolean,
2940
modelProducer: CartesianChartModelProducer,
3041
modifier: Modifier = Modifier,
42+
axisTypeface: Typeface = Typeface.DEFAULT,
43+
markerTypeface: Typeface = Typeface.DEFAULT,
3144
label: String = stringResource(R.string.productivity_analysis)
3245
) {
3346
AnimatedVisibility(expanded) {
@@ -40,6 +53,8 @@ fun ColumnScope.ProductivityGraph(
4053
Spacer(Modifier.height(8.dp))
4154
TimeColumnChart(
4255
modelProducer,
56+
axisTypeface = axisTypeface,
57+
markerTypeface = markerTypeface,
4358
xValueFormatter = CartesianValueFormatter { _, value, _ ->
4459
when (value) {
4560
0.0 -> "0 - 6"

app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.nsh07.pomodoro.ui.statsScreen
1919

20+
import android.graphics.Typeface
2021
import androidx.compose.animation.core.animateFloatAsState
2122
import androidx.compose.foundation.background
2223
import androidx.compose.foundation.layout.Arrangement
@@ -59,6 +60,7 @@ import androidx.compose.ui.Alignment
5960
import androidx.compose.ui.Modifier
6061
import androidx.compose.ui.draw.rotate
6162
import androidx.compose.ui.input.nestedscroll.nestedScroll
63+
import androidx.compose.ui.platform.LocalFontFamilyResolver
6264
import androidx.compose.ui.res.painterResource
6365
import androidx.compose.ui.res.stringResource
6466
import androidx.compose.ui.tooling.preview.Preview
@@ -75,7 +77,8 @@ import org.nsh07.pomodoro.BuildConfig
7577
import org.nsh07.pomodoro.R
7678
import org.nsh07.pomodoro.data.Stat
7779
import org.nsh07.pomodoro.ui.statsScreen.viewModel.StatsViewModel
78-
import org.nsh07.pomodoro.ui.theme.AppFonts.interClock
80+
import org.nsh07.pomodoro.ui.theme.AppFonts.googleFlex400
81+
import org.nsh07.pomodoro.ui.theme.AppFonts.googleFlex600
7982
import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar
8083
import org.nsh07.pomodoro.ui.theme.TomatoTheme
8184
import org.nsh07.pomodoro.utils.millisecondsToHoursMinutes
@@ -149,6 +152,10 @@ fun StatsScreen(
149152
}
150153
}
151154

155+
val resolver = LocalFontFamilyResolver.current
156+
val axisTypeface = remember { resolver.resolve(googleFlex400).value as Typeface }
157+
val markerTypeface = remember { resolver.resolve(googleFlex600).value as Typeface }
158+
152159
Column(
153160
horizontalAlignment = Alignment.CenterHorizontally,
154161
modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
@@ -219,7 +226,6 @@ fun StatsScreen(
219226
millisecondsToHoursMinutes(todayStat?.totalFocusTime() ?: 0)
220227
},
221228
style = typography.displaySmall,
222-
fontFamily = interClock,
223229
color = colorScheme.onPrimaryContainer,
224230
maxLines = 1,
225231
autoSize = TextAutoSize.StepBased(maxFontSize = typography.displaySmall.fontSize)
@@ -246,7 +252,6 @@ fun StatsScreen(
246252
millisecondsToHoursMinutes(todayStat?.breakTime ?: 0)
247253
},
248254
style = typography.displaySmall,
249-
fontFamily = interClock,
250255
color = colorScheme.onTertiaryContainer,
251256
maxLines = 1,
252257
autoSize = TextAutoSize.StepBased(maxFontSize = typography.displaySmall.fontSize)
@@ -279,20 +284,21 @@ fun StatsScreen(
279284
lastWeekAverageFocusTimes.sum().toLong()
280285
}
281286
),
282-
style = typography.displaySmall,
283-
fontFamily = interClock
287+
style = typography.displaySmall
284288
)
285289
Text(
286290
stringResource(R.string.focus_per_day_avg),
287291
style = typography.titleSmall,
288-
modifier = Modifier.padding(bottom = 4.dp)
292+
modifier = Modifier.padding(bottom = 5.2.dp)
289293
)
290294
}
291295
}
292296
item {
293297
TimeColumnChart(
294298
lastWeekSummaryChartData.first,
295299
modifier = Modifier.padding(start = 16.dp),
300+
axisTypeface = axisTypeface,
301+
markerTypeface = markerTypeface,
296302
xValueFormatter = CartesianValueFormatter { context, x, _ ->
297303
context.model.extraStore[lastWeekSummaryChartData.second][x.toInt()]
298304
}
@@ -326,6 +332,8 @@ fun StatsScreen(
326332
ProductivityGraph(
327333
lastWeekStatExpanded,
328334
lastWeekSummaryAnalysisModelProducer,
335+
axisTypeface = axisTypeface,
336+
markerTypeface = markerTypeface,
329337
label = stringResource(R.string.weekly_productivity_analysis),
330338
modifier = Modifier.padding(horizontal = 32.dp)
331339
)
@@ -355,20 +363,21 @@ fun StatsScreen(
355363
lastMonthAverageFocusTimes.sum().toLong()
356364
}
357365
),
358-
style = typography.displaySmall,
359-
fontFamily = interClock
366+
style = typography.displaySmall
360367
)
361368
Text(
362369
text = stringResource(R.string.focus_per_day_avg),
363370
style = typography.titleSmall,
364-
modifier = Modifier.padding(bottom = 4.dp)
371+
modifier = Modifier.padding(bottom = 5.2.dp)
365372
)
366373
}
367374
}
368375
item {
369376
TimeColumnChart(
370377
lastMonthSummaryChartData.first,
371378
modifier = Modifier.padding(start = 16.dp),
379+
axisTypeface = axisTypeface,
380+
markerTypeface = markerTypeface,
372381
thickness = 8.dp,
373382
xValueFormatter = CartesianValueFormatter { context, x, _ ->
374383
context.model.extraStore[lastMonthSummaryChartData.second][x.toInt()]
@@ -403,6 +412,8 @@ fun StatsScreen(
403412
ProductivityGraph(
404413
lastMonthStatExpanded,
405414
lastMonthSummaryAnalysisModelProducer,
415+
axisTypeface = axisTypeface,
416+
markerTypeface = markerTypeface,
406417
label = stringResource(R.string.monthly_productivity_analysis),
407418
modifier = Modifier.padding(horizontal = 32.dp)
408419
)
@@ -432,20 +443,21 @@ fun StatsScreen(
432443
lastYearAverageFocusTimes.sum().toLong()
433444
}
434445
),
435-
style = typography.displaySmall,
436-
fontFamily = interClock
446+
style = typography.displaySmall
437447
)
438448
Text(
439449
text = stringResource(R.string.focus_per_day_avg),
440450
style = typography.titleSmall,
441-
modifier = Modifier.padding(bottom = 4.dp)
451+
modifier = Modifier.padding(bottom = 5.2.dp)
442452
)
443453
}
444454
}
445455
item {
446456
TimeLineChart(
447457
lastYearSummaryChartData.first,
448458
modifier = Modifier.padding(start = 16.dp),
459+
axisTypeface = axisTypeface,
460+
markerTypeface = markerTypeface,
449461
xValueFormatter = CartesianValueFormatter { context, x, _ ->
450462
context.model.extraStore[lastYearSummaryChartData.second][x.toInt()]
451463
}

app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/TimeColumnChart.kt

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.nsh07.pomodoro.ui.statsScreen
1919

20+
import android.graphics.Typeface
2021
import androidx.compose.animation.core.AnimationSpec
2122
import androidx.compose.foundation.layout.height
2223
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
@@ -27,22 +28,24 @@ import androidx.compose.runtime.Composable
2728
import androidx.compose.runtime.LaunchedEffect
2829
import androidx.compose.runtime.remember
2930
import androidx.compose.ui.Modifier
30-
import androidx.compose.ui.graphics.toArgb
3131
import androidx.compose.ui.tooling.preview.Preview
3232
import androidx.compose.ui.unit.Dp
3333
import androidx.compose.ui.unit.dp
3434
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
3535
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottom
3636
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStart
3737
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberColumnCartesianLayer
38+
import com.patrykandpatrick.vico.compose.cartesian.marker.rememberDefaultCartesianMarker
3839
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
40+
import com.patrykandpatrick.vico.compose.cartesian.rememberFadingEdges
3941
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoZoomState
4042
import com.patrykandpatrick.vico.compose.common.ProvideVicoTheme
4143
import com.patrykandpatrick.vico.compose.common.component.rememberLineComponent
44+
import com.patrykandpatrick.vico.compose.common.component.rememberShapeComponent
45+
import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent
4246
import com.patrykandpatrick.vico.compose.common.fill
4347
import com.patrykandpatrick.vico.compose.common.vicoTheme
4448
import com.patrykandpatrick.vico.compose.m3.common.rememberM3VicoTheme
45-
import com.patrykandpatrick.vico.core.cartesian.FadingEdges
4649
import com.patrykandpatrick.vico.core.cartesian.Zoom
4750
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
4851
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
@@ -54,8 +57,6 @@ import com.patrykandpatrick.vico.core.cartesian.marker.ColumnCartesianLayerMarke
5457
import com.patrykandpatrick.vico.core.cartesian.marker.DefaultCartesianMarker
5558
import com.patrykandpatrick.vico.core.common.Fill
5659
import com.patrykandpatrick.vico.core.common.Insets
57-
import com.patrykandpatrick.vico.core.common.component.ShapeComponent
58-
import com.patrykandpatrick.vico.core.common.component.TextComponent
5960
import com.patrykandpatrick.vico.core.common.shape.CorneredShape
6061
import org.nsh07.pomodoro.ui.theme.TomatoTheme
6162
import org.nsh07.pomodoro.utils.millisecondsToHours
@@ -67,6 +68,8 @@ import org.nsh07.pomodoro.utils.millisecondsToMinutes
6768
fun TimeColumnChart(
6869
modelProducer: CartesianChartModelProducer,
6970
modifier: Modifier = Modifier,
71+
axisTypeface: Typeface = Typeface.DEFAULT,
72+
markerTypeface: Typeface = Typeface.DEFAULT,
7073
thickness: Dp = 40.dp,
7174
columnCollectionSpacing: Dp = 4.dp,
7275
xValueFormatter: CartesianValueFormatter = CartesianValueFormatter.Default,
@@ -109,31 +112,34 @@ fun TimeColumnChart(
109112
),
110113
startAxis = VerticalAxis.rememberStart(
111114
line = rememberLineComponent(Fill.Transparent),
115+
label = rememberTextComponent(typeface = axisTypeface),
112116
tick = rememberLineComponent(Fill.Transparent),
113117
guideline = rememberLineComponent(Fill.Transparent),
114118
valueFormatter = yValueFormatter
115119
),
116120
bottomAxis = HorizontalAxis.rememberBottom(
117121
line = rememberLineComponent(Fill.Transparent),
122+
label = rememberTextComponent(typeface = axisTypeface),
118123
tick = rememberLineComponent(Fill.Transparent),
119124
guideline = rememberLineComponent(Fill.Transparent),
120125
valueFormatter = xValueFormatter
121126
),
122-
marker = DefaultCartesianMarker(
123-
TextComponent(
124-
color = colorScheme.inverseOnSurface.toArgb(),
125-
background = ShapeComponent(
127+
marker = rememberDefaultCartesianMarker(
128+
rememberTextComponent(
129+
color = colorScheme.inverseOnSurface,
130+
typeface = markerTypeface,
131+
background = rememberShapeComponent(
126132
fill = fill(colorScheme.inverseSurface),
127133
shape = CorneredShape.rounded(8f)
128134
),
129-
textSizeSp = typography.bodySmall.fontSize.value,
130-
lineHeightSp = typography.bodySmall.lineHeight.value,
135+
textSize = typography.bodySmall.fontSize,
136+
lineHeight = typography.bodySmall.lineHeight,
131137
padding = Insets(verticalDp = 4f, horizontalDp = 8f),
132138
margins = Insets(bottomDp = 2f)
133139
),
134140
valueFormatter = markerValueFormatter
135141
),
136-
fadingEdges = FadingEdges()
142+
fadingEdges = rememberFadingEdges()
137143
),
138144
modelProducer = modelProducer,
139145
zoomState = rememberVicoZoomState(

app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/TimeLineChart.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.nsh07.pomodoro.ui.statsScreen
1919

20+
import android.graphics.Typeface
2021
import androidx.compose.animation.core.AnimationSpec
2122
import androidx.compose.foundation.layout.height
2223
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
@@ -37,14 +38,17 @@ import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottom
3738
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStart
3839
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLine
3940
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLineCartesianLayer
41+
import com.patrykandpatrick.vico.compose.cartesian.marker.rememberDefaultCartesianMarker
4042
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
43+
import com.patrykandpatrick.vico.compose.cartesian.rememberFadingEdges
4144
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoZoomState
4245
import com.patrykandpatrick.vico.compose.common.ProvideVicoTheme
4346
import com.patrykandpatrick.vico.compose.common.component.rememberLineComponent
47+
import com.patrykandpatrick.vico.compose.common.component.rememberShapeComponent
48+
import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent
4449
import com.patrykandpatrick.vico.compose.common.fill
4550
import com.patrykandpatrick.vico.compose.common.vicoTheme
4651
import com.patrykandpatrick.vico.compose.m3.common.rememberM3VicoTheme
47-
import com.patrykandpatrick.vico.core.cartesian.FadingEdges
4852
import com.patrykandpatrick.vico.core.cartesian.Zoom
4953
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
5054
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
@@ -57,8 +61,6 @@ import com.patrykandpatrick.vico.core.cartesian.marker.DefaultCartesianMarker
5761
import com.patrykandpatrick.vico.core.cartesian.marker.LineCartesianLayerMarkerTarget
5862
import com.patrykandpatrick.vico.core.common.Fill
5963
import com.patrykandpatrick.vico.core.common.Insets
60-
import com.patrykandpatrick.vico.core.common.component.ShapeComponent
61-
import com.patrykandpatrick.vico.core.common.component.TextComponent
6264
import com.patrykandpatrick.vico.core.common.shader.ShaderProvider
6365
import com.patrykandpatrick.vico.core.common.shape.CorneredShape
6466
import org.nsh07.pomodoro.ui.theme.TomatoTheme
@@ -71,6 +73,8 @@ import org.nsh07.pomodoro.utils.millisecondsToMinutes
7173
fun TimeLineChart(
7274
modelProducer: CartesianChartModelProducer,
7375
modifier: Modifier = Modifier,
76+
axisTypeface: Typeface = Typeface.DEFAULT,
77+
markerTypeface: Typeface = Typeface.DEFAULT,
7478
thickness: Float = 2f,
7579
pointSpacing: Dp = 12.dp,
7680
xValueFormatter: CartesianValueFormatter = CartesianValueFormatter.Default,
@@ -123,31 +127,34 @@ fun TimeLineChart(
123127
),
124128
startAxis = VerticalAxis.rememberStart(
125129
line = rememberLineComponent(Fill.Transparent),
130+
label = rememberTextComponent(typeface = axisTypeface),
126131
tick = rememberLineComponent(Fill.Transparent),
127132
guideline = rememberLineComponent(Fill.Transparent),
128133
valueFormatter = yValueFormatter
129134
),
130135
bottomAxis = HorizontalAxis.rememberBottom(
131136
line = rememberLineComponent(Fill.Transparent),
137+
label = rememberTextComponent(typeface = axisTypeface),
132138
tick = rememberLineComponent(Fill.Transparent),
133139
guideline = rememberLineComponent(Fill.Transparent),
134140
valueFormatter = xValueFormatter
135141
),
136-
marker = DefaultCartesianMarker(
137-
TextComponent(
138-
color = colorScheme.inverseOnSurface.toArgb(),
139-
background = ShapeComponent(
142+
marker = rememberDefaultCartesianMarker(
143+
rememberTextComponent(
144+
color = colorScheme.inverseOnSurface,
145+
typeface = markerTypeface,
146+
background = rememberShapeComponent(
140147
fill = fill(colorScheme.inverseSurface),
141148
shape = CorneredShape.rounded(8f)
142149
),
143-
textSizeSp = typography.bodySmall.fontSize.value,
144-
lineHeightSp = typography.bodySmall.lineHeight.value,
150+
textSize = typography.bodySmall.fontSize,
151+
lineHeight = typography.bodySmall.lineHeight,
145152
padding = Insets(verticalDp = 4f, horizontalDp = 8f),
146153
margins = Insets(bottomDp = 2f)
147154
),
148155
valueFormatter = markerValueFormatter
149156
),
150-
fadingEdges = FadingEdges()
157+
fadingEdges = rememberFadingEdges()
151158
),
152159
modelProducer = modelProducer,
153160
zoomState = rememberVicoZoomState(

0 commit comments

Comments
 (0)