Skip to content

Commit

Permalink
Make fixes and improvements to sample app
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickmichalik committed May 29, 2024
1 parent fd2010b commit 7f0c7d9
Show file tree
Hide file tree
Showing 18 changed files with 276 additions and 200 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ internal fun VicoApp() {
NavHost(navController = navController, startDestination = "chartList") {
composable("chartList") { ChartListScreen(navController) }
composable(
"chart/{initialChartID}/{uiSystemID}",
"chart/{initialChartID}/{uiFrameworkID}",
listOf(
navArgument("initialChartID") { type = NavType.IntType },
navArgument("uiSystemID") { type = NavType.IntType },
navArgument("uiFrameworkID") { type = NavType.IntType },
),
) { backStackEntry ->
val arguments = requireNotNull(backStackEntry.arguments)
ChartScreen(
navController,
arguments.getInt("initialChartID"),
arguments.getInt("uiSystemID"),
arguments.getInt("uiFrameworkID"),
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import com.patrykandpatrick.vico.R
@OptIn(ExperimentalMaterial3Api::class)
@Composable
internal fun ChartListScreen(navController: NavController) {
var uiSystem by rememberSaveable { mutableStateOf(UISystem.Compose) }
var uiFramework by rememberSaveable { mutableStateOf(UIFramework.Compose) }
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
Scaffold(
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
Expand All @@ -60,21 +60,21 @@ internal fun ChartListScreen(navController: NavController) {
SingleChoiceSegmentedButtonRow(
Modifier.fillMaxWidth().padding(start = 16.dp, end = 16.dp, bottom = 8.dp)
) {
UISystem.entries.forEachIndexed { index, segmentUISystem ->
UIFramework.entries.forEachIndexed { index, segmentUIFramework ->
SegmentedButton(
selected = uiSystem == segmentUISystem,
onClick = { uiSystem = segmentUISystem },
shape = SegmentedButtonDefaults.itemShape(index, UISystem.entries.size),
selected = uiFramework == segmentUIFramework,
onClick = { uiFramework = segmentUIFramework },
shape = SegmentedButtonDefaults.itemShape(index, UIFramework.entries.size),
) {
Text(stringResource(segmentUISystem.labelResourceID))
Text(stringResource(segmentUIFramework.labelResourceID))
}
}
}
}
items(charts.size) { chartID ->
ListItem(
{ Text(stringResource(R.string.chart_x, chartID + 1)) },
Modifier.clickable { navController.navigate("chart/$chartID/${uiSystem.ordinal}") },
Modifier.clickable { navController.navigate("chart/$chartID/${uiFramework.ordinal}") },
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ import com.patrykandpatrick.vico.R

@OptIn(ExperimentalMaterial3Api::class)
@Composable
internal fun ChartScreen(navController: NavController, initialChartID: Int, uiSystemID: Int) {
internal fun ChartScreen(navController: NavController, initialChartID: Int, uiFrameworkID: Int) {
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
val nestedNavController = rememberNavController()
val chartID =
Expand Down Expand Up @@ -113,7 +113,7 @@ internal fun ChartScreen(navController: NavController, initialChartID: Int, uiSy
BackHandler(onBack = navigateBack)
val arguments = requireNotNull(backStackEntry.arguments)
charts[arguments.getInt("chartID")](
UISystem.entries[uiSystemID],
UIFramework.entries[uiFrameworkID],
Modifier.padding(horizontal = 16.dp),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,15 @@ import com.patrykandpatrick.vico.sample.showcase.charts.Chart8
import com.patrykandpatrick.vico.sample.showcase.charts.Chart9

internal val charts =
listOf<@Composable (UISystem, Modifier) -> Unit>(
{ uiSystem, modifier -> Chart1(uiSystem, modifier) },
{ uiSystem, modifier -> Chart2(uiSystem, modifier) },
{ uiSystem, modifier -> Chart3(uiSystem, modifier) },
{ uiSystem, modifier -> Chart4(uiSystem, modifier) },
{ uiSystem, modifier -> Chart5(uiSystem, modifier) },
{ uiSystem, modifier -> Chart6(uiSystem, modifier) },
{ uiSystem, modifier -> Chart7(uiSystem, modifier) },
{ uiSystem, modifier -> Chart8(uiSystem, modifier) },
{ uiSystem, modifier -> Chart9(uiSystem, modifier) },
{ uiSystem, modifier -> Chart10(uiSystem, modifier) },
listOf<@Composable (UIFramework, Modifier) -> Unit>(
{ uiFramework, modifier -> Chart1(uiFramework, modifier) },
{ uiFramework, modifier -> Chart2(uiFramework, modifier) },
{ uiFramework, modifier -> Chart3(uiFramework, modifier) },
{ uiFramework, modifier -> Chart4(uiFramework, modifier) },
{ uiFramework, modifier -> Chart5(uiFramework, modifier) },
{ uiFramework, modifier -> Chart6(uiFramework, modifier) },
{ uiFramework, modifier -> Chart7(uiFramework, modifier) },
{ uiFramework, modifier -> Chart8(uiFramework, modifier) },
{ uiFramework, modifier -> Chart9(uiFramework, modifier) },
{ uiFramework, modifier -> Chart10(uiFramework, modifier) },
)
Original file line number Diff line number Diff line change
Expand Up @@ -104,16 +104,10 @@ internal fun rememberMarker(
) {
with(context) {
super.getInsets(context, outInsets, horizontalDimensions)
val shadowInset =
(CLIPPING_FREE_SHADOW_RADIUS_MULTIPLIER * LABEL_BACKGROUND_SHADOW_RADIUS_DP -
LABEL_BACKGROUND_SHADOW_DY_DP)
.pixels
when (labelPosition) {
LabelPosition.Top,
LabelPosition.AroundPoint,
LabelPosition.AbovePoint -> outInsets.top += shadowInset
LabelPosition.Bottom -> outInsets.bottom += shadowInset
}
val baseShadowInsetDp =
CLIPPING_FREE_SHADOW_RADIUS_MULTIPLIER * LABEL_BACKGROUND_SHADOW_RADIUS_DP
outInsets.top += (baseShadowInsetDp - LABEL_BACKGROUND_SHADOW_DY_DP).pixels
outInsets.bottom += (baseShadowInsetDp + LABEL_BACKGROUND_SHADOW_DY_DP).pixels
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package com.patrykandpatrick.vico.sample.showcase
import androidx.annotation.StringRes
import com.patrykandpatrick.vico.R

internal enum class UISystem(@StringRes val labelResourceID: Int) {
internal enum class UIFramework(@StringRes val labelResourceID: Int) {
Compose(R.string.compose),
Views(R.string.views),
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,25 +35,27 @@ import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
import com.patrykandpatrick.vico.core.common.shader.DynamicShader
import com.patrykandpatrick.vico.databinding.Chart1Binding
import com.patrykandpatrick.vico.sample.showcase.UISystem
import com.patrykandpatrick.vico.sample.showcase.UIFramework
import com.patrykandpatrick.vico.sample.showcase.rememberMarker
import kotlin.random.Random
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

@Composable
internal fun Chart1(uiSystem: UISystem, modifier: Modifier) {
internal fun Chart1(uiFramework: UIFramework, modifier: Modifier) {
val modelProducer = remember { CartesianChartModelProducer.build() }
LaunchedEffect(Unit) {
withContext(Dispatchers.Default) {
modelProducer.tryRunTransaction {
/* Simple examples:
https://patrykandpatrick.com/vico/wiki/cartesian-charts/layers/line-layer#data. */
lineSeries { series(x, x.map { Random.nextFloat() * 15 }) }
}
}
}
when (uiSystem) {
UISystem.Compose -> ComposeChart1(modelProducer, modifier)
UISystem.Views -> ViewChart1(modelProducer, modifier)
when (uiFramework) {
UIFramework.Compose -> ComposeChart1(modelProducer, modifier)
UIFramework.Views -> ViewChart1(modelProducer, modifier)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,29 +33,31 @@ import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
import com.patrykandpatrick.vico.core.cartesian.data.RandomCartesianModelGenerator
import com.patrykandpatrick.vico.databinding.Chart10Binding
import com.patrykandpatrick.vico.sample.showcase.Defaults
import com.patrykandpatrick.vico.sample.showcase.UISystem
import com.patrykandpatrick.vico.sample.showcase.UIFramework
import com.patrykandpatrick.vico.sample.showcase.rememberMarker
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.withContext

@Composable
internal fun Chart10(uiSystem: UISystem, modifier: Modifier) {
internal fun Chart10(uiFramework: UIFramework, modifier: Modifier) {
val modelProducer = remember { CartesianChartModelProducer.build() }
LaunchedEffect(key1 = Unit) {
withContext(Dispatchers.Default) {
while (isActive) {
modelProducer.tryRunTransaction {
/* Simple examples:
https://patrykandpatrick.com/vico/wiki/cartesian-charts/layers/candlestick-layer#data. */
add(RandomCartesianModelGenerator.getRandomCandlestickLayerModelPartial())
}
delay(Defaults.TRANSACTION_INTERVAL_MS)
}
}
}
when (uiSystem) {
UISystem.Compose -> ComposeChart10(modelProducer, modifier)
UISystem.Views -> ViewChart10(modelProducer, modifier)
when (uiFramework) {
UIFramework.Compose -> ComposeChart10(modelProducer, modifier)
UIFramework.Views -> ViewChart10(modelProducer, modifier)
}
}

Expand Down Expand Up @@ -86,8 +88,13 @@ private fun ComposeChart10(modelProducer: CartesianChartModelProducer, modifier:
@Composable
private fun ViewChart10(modelProducer: CartesianChartModelProducer, modifier: Modifier) {
val marker = rememberMarker(showIndicator = false)
AndroidViewBinding(Chart10Binding::inflate, modifier = modifier) {
chartView.modelProducer = modelProducer
chartView.marker = marker
}
AndroidViewBinding(
{ inflater, parent, attachToParent ->
Chart10Binding.inflate(inflater, parent, attachToParent).apply {
chartView.modelProducer = modelProducer
chartView.marker = marker
}
},
modifier,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import com.patrykandpatrick.vico.core.common.component.TextComponent
import com.patrykandpatrick.vico.core.common.shape.Shape
import com.patrykandpatrick.vico.databinding.Chart2Binding
import com.patrykandpatrick.vico.sample.showcase.Defaults
import com.patrykandpatrick.vico.sample.showcase.UISystem
import com.patrykandpatrick.vico.sample.showcase.UIFramework
import com.patrykandpatrick.vico.sample.showcase.rememberMarker
import java.text.DateFormatSymbols
import java.util.Locale
Expand All @@ -61,21 +61,23 @@ import kotlinx.coroutines.isActive
import kotlinx.coroutines.withContext

@Composable
internal fun Chart2(uiSystem: UISystem, modifier: Modifier) {
internal fun Chart2(uiFramework: UIFramework, modifier: Modifier) {
val modelProducer = remember { CartesianChartModelProducer.build() }
LaunchedEffect(Unit) {
withContext(Dispatchers.Default) {
while (isActive) {
modelProducer.tryRunTransaction {
/* Simple examples:
https://patrykandpatrick.com/vico/wiki/cartesian-charts/layers/column-layer#data. */
columnSeries { series(List(47) { 2 + Random.nextFloat() * 18 }) }
}
delay(Defaults.TRANSACTION_INTERVAL_MS)
}
}
}
when (uiSystem) {
UISystem.Compose -> ComposeChart2(modelProducer, modifier)
UISystem.Views -> ViewChart2(modelProducer, modifier)
when (uiFramework) {
UIFramework.Compose -> ComposeChart2(modelProducer, modifier)
UIFramework.Views -> ViewChart2(modelProducer, modifier)
}
}

Expand Down Expand Up @@ -158,8 +160,8 @@ private fun getViewHorizontalLine() =
background = ShapeComponent(Shape.Pill, HORIZONTAL_LINE_COLOR)
padding =
Dimensions(
HORIZONTAL_LINE_LABEL_VERTICAL_PADDING_DP,
HORIZONTAL_LINE_LABEL_HORIZONTAL_PADDING_DP,
HORIZONTAL_LINE_LABEL_VERTICAL_PADDING_DP,
)
margins = Dimensions(HORIZONTAL_LINE_LABEL_MARGIN_DP)
typeface = Typeface.MONOSPACE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ import com.patrykandpatrick.vico.core.common.shader.DynamicShader
import com.patrykandpatrick.vico.core.common.shape.Shape
import com.patrykandpatrick.vico.databinding.Chart3Binding
import com.patrykandpatrick.vico.sample.showcase.Defaults
import com.patrykandpatrick.vico.sample.showcase.UISystem
import com.patrykandpatrick.vico.sample.showcase.UIFramework
import com.patrykandpatrick.vico.sample.showcase.rememberMarker
import kotlin.random.Random
import kotlinx.coroutines.Dispatchers
Expand All @@ -60,21 +60,23 @@ import kotlinx.coroutines.isActive
import kotlinx.coroutines.withContext

@Composable
internal fun Chart3(uiSystem: UISystem, modifier: Modifier) {
internal fun Chart3(uiFramework: UIFramework, modifier: Modifier) {
val modelProducer = remember { CartesianChartModelProducer.build() }
LaunchedEffect(Unit) {
withContext(Dispatchers.Default) {
while (isActive) {
modelProducer.tryRunTransaction {
/* Simple examples:
https://patrykandpatrick.com/vico/wiki/cartesian-charts/layers/line-layer#data. */
lineSeries { series(List(Defaults.ENTRY_COUNT) { Random.nextFloat() * 20 }) }
}
delay(Defaults.TRANSACTION_INTERVAL_MS)
}
}
}
when (uiSystem) {
UISystem.Compose -> ComposeChart3(modelProducer, modifier)
UISystem.Views -> ViewChart3(modelProducer, modifier)
when (uiFramework) {
UIFramework.Compose -> ComposeChart3(modelProducer, modifier)
UIFramework.Views -> ViewChart3(modelProducer, modifier)
}
}

Expand Down Expand Up @@ -127,15 +129,19 @@ private fun ComposeChart3(modelProducer: CartesianChartModelProducer, modifier:
@Composable
private fun ViewChart3(modelProducer: CartesianChartModelProducer, modifier: Modifier) {
val marker = rememberMarker(DefaultCartesianMarker.LabelPosition.AroundPoint)

AndroidViewBinding(Chart3Binding::inflate, modifier) {
with(chartView) {
(chart?.layers?.get(0) as LineCartesianLayer?)?.axisValueOverrider = axisValueOverrider
runInitialAnimation = false
this.modelProducer = modelProducer
this.marker = marker
}
}
AndroidViewBinding(
{ inflater, parent, attachToParent ->
Chart3Binding.inflate(inflater, parent, attachToParent).apply {
with(chartView) {
(chart?.layers?.get(0) as LineCartesianLayer?)?.axisValueOverrider = axisValueOverrider
runInitialAnimation = false
this.modelProducer = modelProducer
this.marker = marker
}
}
},
modifier,
)
}

private val lineColor = Color(0xffffbb00)
Expand Down
Loading

0 comments on commit 7f0c7d9

Please sign in to comment.