Skip to content

Commit b2fee09

Browse files
ish-joshihannesa2
authored andcommitted
add: pie chart information for screen-reader
1 parent 36a0ee2 commit b2fee09

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

MPChartLib/src/main/java/com/github/mikephil/charting/charts/CandleStickChart.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@ public CandleData getCandleData() {
4444

4545
@Override
4646
public String getAccessibilityDescription() {
47-
return "This is a candlestick";
47+
return "This is a candlestick chart";
4848
}
4949
}

MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import android.util.AttributeSet;
66

77
import com.github.mikephil.charting.data.LineData;
8+
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
89
import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider;
910
import com.github.mikephil.charting.renderer.LineChartRenderer;
1011

12+
import java.util.Locale;
13+
1114
/**
1215
* Chart that draws lines, surfaces, circles, ...
1316
*
@@ -50,6 +53,25 @@ protected void onDetachedFromWindow() {
5053

5154
@Override
5255
public String getAccessibilityDescription() {
53-
return "This is a line chart";
56+
LineData lineData = getLineData();
57+
58+
int numberOfPoints = lineData.getEntryCount();
59+
60+
// Min and max values...
61+
IAxisValueFormatter yAxisValueFormmater = getAxisLeft().getValueFormatter();
62+
String minVal = yAxisValueFormmater.getFormattedValue(lineData.getYMin(), null);
63+
String maxVal = yAxisValueFormmater.getFormattedValue(lineData.getYMax(), null);
64+
65+
// Data range...
66+
IAxisValueFormatter xAxisValueFormatter = getXAxis().getValueFormatter();
67+
String minRange = xAxisValueFormatter.getFormattedValue(lineData.getXMin(), null);
68+
String maxRange = xAxisValueFormatter.getFormattedValue(lineData.getXMax(), null);
69+
70+
String entries = numberOfPoints == 1 ? "entry" : "entries";
71+
72+
return String.format(Locale.getDefault(), "The line chart has %d %s. " +
73+
"The minimum value is %s and maximum value is %s." +
74+
"Data ranges from %s to %s.",
75+
numberOfPoints, entries, minVal, maxVal, minRange, maxRange);
5476
}
5577
}

MPChartLib/src/main/java/com/github/mikephil/charting/charts/PieChart.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,22 @@
66
import android.graphics.Paint;
77
import android.graphics.RectF;
88
import android.graphics.Typeface;
9+
import android.text.TextUtils;
910
import android.util.AttributeSet;
1011

1112
import com.github.mikephil.charting.components.XAxis;
1213
import com.github.mikephil.charting.data.PieData;
14+
import com.github.mikephil.charting.data.PieEntry;
1315
import com.github.mikephil.charting.highlight.Highlight;
1416
import com.github.mikephil.charting.highlight.PieHighlighter;
1517
import com.github.mikephil.charting.interfaces.datasets.IPieDataSet;
1618
import com.github.mikephil.charting.renderer.PieChartRenderer;
1719
import com.github.mikephil.charting.utils.MPPointF;
1820
import com.github.mikephil.charting.utils.Utils;
1921

22+
import java.util.ArrayList;
2023
import java.util.List;
24+
import java.util.Locale;
2125

2226
/**
2327
* View that represents a pie chart. Draws cake like slices.
@@ -804,6 +808,24 @@ protected void onDetachedFromWindow() {
804808

805809
@Override
806810
public String getAccessibilityDescription() {
807-
return "This is a pie chart";
811+
812+
PieData pieData = getData();
813+
814+
int entryCount = pieData.getEntryCount();
815+
816+
StringBuilder builder = new StringBuilder();
817+
818+
builder.append(String.format(Locale.getDefault(), "The pie chart has %d entries.",
819+
entryCount));
820+
821+
for (int i = 0; i < entryCount; i++) {
822+
PieEntry entry = pieData.getDataSet().getEntryForIndex(i);
823+
float percentage = (entry.getValue() / pieData.getYValueSum()) * 100;
824+
builder.append(String.format(Locale.getDefault(), "%s has %.2f percent pie taken",
825+
(TextUtils.isEmpty(entry.getLabel()) ? "No Label" : entry.getLabel()),
826+
percentage));
827+
}
828+
829+
return builder.toString();
808830
}
809831
}

0 commit comments

Comments
 (0)