Skip to content

Commit 7b3e320

Browse files
support pie chart fo enable/disable click
1 parent 600d755 commit 7b3e320

File tree

1 file changed

+44
-23
lines changed
  • YChartsLib/src/main/java/co/yml/charts/ui/piechart/charts

1 file changed

+44
-23
lines changed

YChartsLib/src/main/java/co/yml/charts/ui/piechart/charts/PieChart.kt

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@ import androidx.compose.ui.semantics.contentDescription
3131
import androidx.compose.ui.semantics.semantics
3232
import androidx.compose.ui.unit.dp
3333
import androidx.core.graphics.withRotation
34+
import co.yml.charts.common.components.accessibility.AccessibilityBottomSheetDialog
35+
import co.yml.charts.common.components.accessibility.SliceInfo
36+
import co.yml.charts.common.extensions.collectIsTalkbackEnabledAsState
37+
import co.yml.charts.common.extensions.getTextHeight
38+
import co.yml.charts.common.model.PlotType
3439
import co.yml.charts.ui.piechart.PieChartConstants.MINIMUM_PERCENTAGE_FOR_SLICE_LABELS
3540
import co.yml.charts.ui.piechart.models.PieChartConfig
3641
import co.yml.charts.ui.piechart.models.PieChartData
3742
import co.yml.charts.ui.piechart.utils.convertTouchEventPointToAngle
3843
import co.yml.charts.ui.piechart.utils.getSliceCenterPoints
3944
import co.yml.charts.ui.piechart.utils.proportion
4045
import co.yml.charts.ui.piechart.utils.sweepAngles
41-
import co.yml.charts.common.components.accessibility.AccessibilityBottomSheetDialog
42-
import co.yml.charts.common.components.accessibility.SliceInfo
43-
import co.yml.charts.common.extensions.collectIsTalkbackEnabledAsState
44-
import co.yml.charts.common.extensions.getTextHeight
45-
import co.yml.charts.common.model.PlotType
4646
import kotlinx.coroutines.launch
4747
import kotlin.math.abs
4848
import kotlin.math.roundToInt
@@ -95,8 +95,8 @@ fun PieChart(
9595
Surface(
9696
modifier = modifier.fillMaxWidth()
9797
) {
98-
BoxWithConstraints(
99-
modifier = modifier
98+
val boxModifier = if (pieChartConfig.isClickOnSliceEnabled) {
99+
modifier
100100
.aspectRatio(1f)
101101
.semantics {
102102
contentDescription = pieChartConfig.accessibilityConfig.chartDescription
@@ -107,7 +107,16 @@ fun PieChart(
107107
accessibilitySheetState.show()
108108
}
109109
}
110-
},
110+
}
111+
} else {
112+
modifier
113+
.aspectRatio(1f)
114+
.semantics {
115+
contentDescription = pieChartConfig.accessibilityConfig.chartDescription
116+
}
117+
}
118+
BoxWithConstraints(
119+
modifier = boxModifier
111120
) {
112121

113122
val sideSize = Integer.min(constraints.maxWidth, constraints.maxHeight)
@@ -124,24 +133,36 @@ fun PieChart(
124133
)
125134
}
126135
}
127-
Canvas(modifier = Modifier
128-
.width(sideSize.dp)
129-
.height(sideSize.dp)
130-
.pointerInput(true) {
131-
132-
detectTapGestures {
133-
val clickedAngle = convertTouchEventPointToAngle(
134-
sideSize.toFloat(), sideSize.toFloat(), it.x, it.y
135-
)
136-
progressSize.forEachIndexed { index, item ->
137-
if (clickedAngle <= item) {
138-
if (activePie != index) activePie = index
139-
onSliceClick(pieChartData.slices[index])
140-
return@detectTapGestures
136+
val canvasModifier = if (pieChartConfig.isClickOnSliceEnabled) {
137+
Modifier
138+
.width(sideSize.dp)
139+
.height(sideSize.dp)
140+
.pointerInput(true) {
141+
detectTapGestures {
142+
val clickedAngle = convertTouchEventPointToAngle(
143+
sideSize.toFloat(),
144+
sideSize.toFloat(),
145+
it.x,
146+
it.y
147+
)
148+
progressSize.forEachIndexed { index, item ->
149+
if (clickedAngle <= item) {
150+
activePie = if (activePie != index)
151+
index
152+
else
153+
-1
154+
onSliceClick(pieChartData.slices[index])
155+
return@detectTapGestures
156+
}
141157
}
142158
}
143159
}
144-
}) {
160+
} else {
161+
Modifier
162+
.width(sideSize.dp)
163+
.height(sideSize.dp)
164+
}
165+
Canvas(modifier = canvasModifier) {
145166

146167
var sAngle = pieChartConfig.startAngle
147168

0 commit comments

Comments
 (0)