From a7d5e22d37c72d79a3e2dd0ccfc06059a4e0e055 Mon Sep 17 00:00:00 2001 From: Hannes Achleitner Date: Tue, 28 Nov 2023 08:59:08 +0100 Subject: [PATCH 1/3] Kotlin conversion LineChart --- .../mikephil/charting/charts/LineChart.java | 77 ------------------- .../mikephil/charting/charts/LineChart.kt | 54 +++++++++++++ 2 files changed, 54 insertions(+), 77 deletions(-) delete mode 100644 MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java create mode 100644 MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java deleted file mode 100644 index db0536db27..0000000000 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java +++ /dev/null @@ -1,77 +0,0 @@ - -package com.github.mikephil.charting.charts; - -import android.content.Context; -import android.util.AttributeSet; - -import com.github.mikephil.charting.data.LineData; -import com.github.mikephil.charting.formatter.IAxisValueFormatter; -import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider; -import com.github.mikephil.charting.renderer.LineChartRenderer; - -import java.util.Locale; - -/** - * Chart that draws lines, surfaces, circles, ... - * - * @author Philipp Jahoda - */ -public class LineChart extends BarLineChartBase implements LineDataProvider { - - public LineChart(Context context) { - super(context); - } - - public LineChart(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public LineChart(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void init() { - super.init(); - - mRenderer = new LineChartRenderer(this, mAnimator, mViewPortHandler); - } - - @Override - public LineData getLineData() { - return mData; - } - - @Override - protected void onDetachedFromWindow() { - // releases the bitmap in the renderer to avoid oom error - if (mRenderer != null && mRenderer instanceof LineChartRenderer) { - ((LineChartRenderer) mRenderer).releaseBitmap(); - } - super.onDetachedFromWindow(); - } - - @Override - public String getAccessibilityDescription() { - LineData lineData = getLineData(); - - int numberOfPoints = lineData.getEntryCount(); - - // Min and max values... - IAxisValueFormatter yAxisValueFormmater = getAxisLeft().getValueFormatter(); - String minVal = yAxisValueFormmater.getFormattedValue(lineData.getYMin(), null); - String maxVal = yAxisValueFormmater.getFormattedValue(lineData.getYMax(), null); - - // Data range... - IAxisValueFormatter xAxisValueFormatter = getXAxis().getValueFormatter(); - String minRange = xAxisValueFormatter.getFormattedValue(lineData.getXMin(), null); - String maxRange = xAxisValueFormatter.getFormattedValue(lineData.getXMax(), null); - - String entries = numberOfPoints == 1 ? "entry" : "entries"; - - return String.format(Locale.getDefault(), "The line chart has %d %s. " + - "The minimum value is %s and maximum value is %s." + - "Data ranges from %s to %s.", - numberOfPoints, entries, minVal, maxVal, minRange, maxRange); - } -} diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt new file mode 100644 index 0000000000..86591cd467 --- /dev/null +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt @@ -0,0 +1,54 @@ +package com.github.mikephil.charting.charts + +import android.content.Context +import android.util.AttributeSet +import com.github.mikephil.charting.data.LineData +import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider +import com.github.mikephil.charting.renderer.LineChartRenderer +import java.util.Locale + +class LineChart : BarLineChartBase, LineDataProvider { + + constructor(context: Context?) : super(context) + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) + + override fun init() { + super.init() + mRenderer = LineChartRenderer(this, mAnimator, mViewPortHandler) + } + + override fun getLineData(): LineData { + return mData!! + } + + public override fun onDetachedFromWindow() { + // releases the bitmap in the renderer to avoid oom error + if (mRenderer != null && mRenderer is LineChartRenderer) { + (mRenderer as LineChartRenderer).releaseBitmap() + } + super.onDetachedFromWindow() + } + + override fun getAccessibilityDescription(): String { + val lineData = lineData + val numberOfPoints = lineData.entryCount + + // Min and max values... + val yAxisValueFormatter = axisLeft.valueFormatter + val minVal = yAxisValueFormatter.getFormattedValue(lineData.yMin, null) + val maxVal = yAxisValueFormatter.getFormattedValue(lineData.yMax, null) + + // Data range... + val xAxisValueFormatter = xAxis.valueFormatter + val minRange = xAxisValueFormatter.getFormattedValue(lineData.xMin, null) + val maxRange = xAxisValueFormatter.getFormattedValue(lineData.xMax, null) + val entries = if (numberOfPoints == 1) "entry" else "entries" + return String.format( + Locale.getDefault(), "The line chart has %d %s. " + + "The minimum value is %s and maximum value is %s." + + "Data ranges from %s to %s.", + numberOfPoints, entries, minVal, maxVal, minRange, maxRange + ) + } +} From 5ef55da2eccbc41b5bc86a34637d1521df7e1788 Mon Sep 17 00:00:00 2001 From: Hannes Achleitner Date: Tue, 28 Nov 2023 09:00:20 +0100 Subject: [PATCH 2/3] Fix some NPE --- .../java/com/github/mikephil/charting/charts/LineChart.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt index 86591cd467..1b299a1b73 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt @@ -19,7 +19,11 @@ class LineChart : BarLineChartBase, LineDataProvider { } override fun getLineData(): LineData { - return mData!! + mData?.let { + return it + } ?: run { + return LineData() + } } public override fun onDetachedFromWindow() { From 7a9d1780ddd0bfbbc52717845749a79c72d97b68 Mon Sep 17 00:00:00 2001 From: Hannes Achleitner Date: Tue, 28 Nov 2023 12:52:28 +0100 Subject: [PATCH 3/3] More Kotlin conversions --- .../github/mikephil/charting/charts/Chart.java | 3 +++ .../github/mikephil/charting/charts/LineChart.kt | 13 +++++++------ .../BarLineScatterCandleBubbleDataProvider.java | 16 ---------------- .../BarLineScatterCandleBubbleDataProvider.kt | 13 +++++++++++++ .../dataprovider/LineDataProvider.java | 11 ----------- .../interfaces/dataprovider/LineDataProvider.kt | 10 ++++++++++ .../charting/renderer/LineChartRenderer.java | 6 +++--- 7 files changed, 36 insertions(+), 36 deletions(-) delete mode 100644 MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.java create mode 100644 MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.kt delete mode 100644 MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.java create mode 100644 MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.kt diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/Chart.java b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/Chart.java index e3250953e3..50094913f9 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/Chart.java +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/Chart.java @@ -53,6 +53,8 @@ import java.io.OutputStream; import java.util.ArrayList; +import androidx.annotation.NonNull; + /** * Baseclass of all Chart-Views. * @@ -1311,6 +1313,7 @@ public void setDrawMarkers(boolean enabled) { /** * Returns the ChartData object that has been set for the chart. */ + @NonNull public T getData() { return mData; } diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt index 1b299a1b73..eb41ac083e 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.kt @@ -18,13 +18,14 @@ class LineChart : BarLineChartBase, LineDataProvider { mRenderer = LineChartRenderer(this, mAnimator, mViewPortHandler) } - override fun getLineData(): LineData { - mData?.let { - return it - } ?: run { - return LineData() + override val lineData: LineData + get() { + mData?.let { + return it + } ?: run { + return LineData() + } } - } public override fun onDetachedFromWindow() { // releases the bitmap in the renderer to avoid oom error diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.java b/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.java deleted file mode 100644 index 68beeb8d62..0000000000 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.github.mikephil.charting.interfaces.dataprovider; - -import com.github.mikephil.charting.components.YAxis.AxisDependency; -import com.github.mikephil.charting.data.BarLineScatterCandleBubbleData; -import com.github.mikephil.charting.utils.Transformer; - -public interface BarLineScatterCandleBubbleDataProvider extends ChartInterface { - - Transformer getTransformer(AxisDependency axis); - boolean isInverted(AxisDependency axis); - - float getLowestVisibleX(); - float getHighestVisibleX(); - - BarLineScatterCandleBubbleData getData(); -} diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.kt new file mode 100644 index 0000000000..eea0b5e562 --- /dev/null +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.kt @@ -0,0 +1,13 @@ +package com.github.mikephil.charting.interfaces.dataprovider + +import com.github.mikephil.charting.components.YAxis.AxisDependency +import com.github.mikephil.charting.data.BarLineScatterCandleBubbleData +import com.github.mikephil.charting.utils.Transformer + +interface BarLineScatterCandleBubbleDataProvider : ChartInterface { + fun getTransformer(axis: AxisDependency?): Transformer? + fun isInverted(axis: AxisDependency?): Boolean + val lowestVisibleX: Float + val highestVisibleX: Float + override fun getData(): BarLineScatterCandleBubbleData<*> +} \ No newline at end of file diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.java b/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.java deleted file mode 100644 index 5c23ac27b4..0000000000 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.mikephil.charting.interfaces.dataprovider; - -import com.github.mikephil.charting.components.YAxis; -import com.github.mikephil.charting.data.LineData; - -public interface LineDataProvider extends BarLineScatterCandleBubbleDataProvider { - - LineData getLineData(); - - YAxis getAxis(YAxis.AxisDependency dependency); -} diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.kt new file mode 100644 index 0000000000..73785b90ed --- /dev/null +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.kt @@ -0,0 +1,10 @@ +package com.github.mikephil.charting.interfaces.dataprovider + +import com.github.mikephil.charting.components.YAxis +import com.github.mikephil.charting.components.YAxis.AxisDependency +import com.github.mikephil.charting.data.LineData + +interface LineDataProvider : BarLineScatterCandleBubbleDataProvider { + val lineData: LineData + fun getAxis(dependency: AxisDependency): YAxis? +} \ No newline at end of file diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineChartRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineChartRenderer.java index 8c5e0bebd9..ed92714b57 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineChartRenderer.java +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineChartRenderer.java @@ -629,12 +629,12 @@ public void drawExtras(Canvas c) { /** * cache for the circle bitmaps of all datasets */ - private HashMap mImageCaches = new HashMap<>(); + private final HashMap mImageCaches = new HashMap<>(); /** * buffer for drawing the circles */ - private float[] mCirclesBuffer = new float[2]; + private final float[] mCirclesBuffer = new float[2]; protected void drawCircles(Canvas c) { @@ -782,7 +782,7 @@ public void releaseBitmap() { private class DataSetImageCache { - private Path mCirclePathBuffer = new Path(); + private final Path mCirclePathBuffer = new Path(); private Bitmap[] circleBitmaps;