diff --git a/app/src/main/kotlin/info/appdev/chartexample/DynamicalAddingActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/DynamicalAddingActivity.kt index e19d46ab9f..8f1c7d9e7b 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/DynamicalAddingActivity.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/DynamicalAddingActivity.kt @@ -148,7 +148,7 @@ class DynamicalAddingActivity : DemoBase(), OnChartValueSelectedListener { } private fun createSet(): LineDataSet { - val set = LineDataSet(null, "DataSet 1") + val set = LineDataSet(label = "DataSet 1") set.lineWidth = 2.5f set.circleRadius = 4.5f set.color = Color.rgb(240, 99, 99) diff --git a/app/src/main/kotlin/info/appdev/chartexample/RealtimeLineChartActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/RealtimeLineChartActivity.kt index 0a96a52329..ec29eede4a 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/RealtimeLineChartActivity.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/RealtimeLineChartActivity.kt @@ -113,7 +113,7 @@ class RealtimeLineChartActivity : DemoBase(), OnChartValueSelectedListener { } private fun createSet(): LineDataSet { - val set = LineDataSet(null, "Dynamic Data") + val set = LineDataSet(label = "Dynamic Data") set.axisDependency = AxisDependency.LEFT set.color = ColorTemplate.holoBlue set.setCircleColor(Color.WHITE) diff --git a/app/src/main/kotlin/info/appdev/chartexample/compose/HorizontalBarComposeActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/compose/HorizontalBarComposeActivity.kt index de964dc15a..4a555df6ec 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/compose/HorizontalBarComposeActivity.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/compose/HorizontalBarComposeActivity.kt @@ -354,7 +354,7 @@ class HorizontalBarComposeActivity : DemoBaseCompose() { if (chartData != null && chartData.dataSetCount > 0) { set1 = chartData.getDataSetByIndex(0) as BarDataSet @Suppress("DEPRECATION") - set1.values = values + set1.entries = values chartData.notifyDataChanged() localChart.notifyDataSetChanged() } else { diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/BarLineScatterCandleBubbleDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/BarLineScatterCandleBubbleDataSet.kt index 4b5a113912..fbc22d82ee 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/BarLineScatterCandleBubbleDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/BarLineScatterCandleBubbleDataSet.kt @@ -7,7 +7,7 @@ import info.appdev.charting.interfaces.datasets.IBarLineScatterCandleBubbleDataS /** * Baseclass of all DataSets for Bar-, Line-, Scatter- and CandleStickChart. */ -abstract class BarLineScatterCandleBubbleDataSet(yVals: MutableList?, label: String) : +abstract class BarLineScatterCandleBubbleDataSet(yVals: MutableList, label: String) : DataSet(yVals, label), IBarLineScatterCandleBubbleDataSet { /** * Sets the color that is used for drawing the highlight indicators. diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/BubbleDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/BubbleDataSet.kt index cd872671a4..07f229a2c2 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/BubbleDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/BubbleDataSet.kt @@ -3,7 +3,7 @@ package info.appdev.charting.data import info.appdev.charting.interfaces.datasets.IBubbleDataSet import info.appdev.charting.utils.convertDpToPixel -open class BubbleDataSet(yVals: MutableList?, label: String) : BarLineScatterCandleBubbleDataSet(yVals, label), IBubbleDataSet { +open class BubbleDataSet(yVals: MutableList, label: String) : BarLineScatterCandleBubbleDataSet(yVals, label), IBubbleDataSet { protected var mMaxSize: Float = 0f protected var mNormalizeSize: Boolean = true @@ -21,8 +21,8 @@ open class BubbleDataSet(yVals: MutableList?, label: String) : BarL override fun copy(): DataSet { val entries: MutableList = ArrayList() - for (i in mEntries!!.indices) { - entries.add(mEntries!![i].copy()) + for (i in mEntries.indices) { + entries.add(mEntries[i].copy()) } val copied = BubbleDataSet(entries, label) copy(copied) diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/CandleDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/CandleDataSet.kt index 47d4b821e5..13b2f1cc32 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/CandleDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/CandleDataSet.kt @@ -9,7 +9,7 @@ import info.appdev.charting.utils.convertDpToPixel /** * DataSet for the CandleStickChart. */ -open class CandleDataSet(yVals: MutableList?, label: String = "") : LineScatterCandleRadarDataSet(yVals, label), ICandleDataSet { +open class CandleDataSet(yVals: MutableList, label: String = "") : LineScatterCandleRadarDataSet(yVals, label), ICandleDataSet { /** * the width of the shadow of the candle */ @@ -72,10 +72,8 @@ open class CandleDataSet(yVals: MutableList?, label: String = "") : override fun copy(): DataSet { val entries: MutableList = mutableListOf() - mEntries?.let { - for (i in it.indices) { - entries.add(it[i].copy()) - } + for (i in mEntries.indices) { + entries.add(mEntries[i].copy()) } val copied = CandleDataSet(entries, label) diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/DataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/DataSet.kt index 8da5ca29c7..823d7ca46e 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/DataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/DataSet.kt @@ -11,7 +11,7 @@ import kotlin.math.abs * LineChart, or the values of a specific group of bars in the BarChart). */ abstract class DataSet( - protected var mEntries: MutableList?, + protected var mEntries: MutableList, label: String = "" ) : BaseDataSet(label), Serializable { /** @@ -38,17 +38,12 @@ abstract class DataSet( override var xMin: Float = Float.MAX_VALUE protected set - /** * Creates a new DataSet object with the given values (entries) it represents. Also, a * label that describes the DataSet can be specified. The label can also be * used to retrieve the DataSet from a ChartData object. */ init { - if (mEntries == null) { - mEntries = ArrayList() - } - calcMinMax() } @@ -58,7 +53,7 @@ abstract class DataSet( this.xMax = -Float.MAX_VALUE this.xMin = Float.MAX_VALUE - if (mEntries == null || mEntries!!.isEmpty()) { + if (mEntries.isEmpty()) { return } @@ -71,7 +66,7 @@ abstract class DataSet( this.yMax = -Float.MAX_VALUE this.yMin = Float.MAX_VALUE - if (mEntries == null || mEntries!!.isEmpty()) { + if (mEntries.isEmpty()) { return } @@ -85,7 +80,7 @@ abstract class DataSet( for (i in indexFrom..indexTo) { // only recalculate y - calcMinMaxY(mEntries!![i]) + calcMinMaxY(mEntries[i]) } } @@ -118,32 +113,13 @@ abstract class DataSet( } override val entryCount: Int - get() = mEntries!!.size - - @get:Deprecated("") - @set:Deprecated("") - var values: MutableList? - /** - * This method is deprecated. - * Use getEntries() instead. - */ - get() = mEntries - /** - * This method is deprecated. - * Use setEntries(...) instead. - */ - set(values) { - this.entries = values - } + get() = mEntries.size - var entries: MutableList? - /** - * Returns the array of entries that this DataSet represents. - */ + /** + * Returns the array of entries that this DataSet represents. + */ + var entries: MutableList get() = mEntries - /** - * Sets the array of entries that this DataSet represents, and calls notifyDataSetChanged() - */ set(entries) { mEntries = entries notifyDataSetChanged() @@ -161,8 +137,8 @@ abstract class DataSet( override fun toString(): String { val buffer = StringBuilder() buffer.append(toSimpleString()) - for (i in mEntries!!.indices) { - buffer.append(mEntries!![i].toString()).append(" ") + for (i in mEntries.indices) { + buffer.append(mEntries[i].toString()).append(" ") } return buffer.toString() } @@ -170,33 +146,26 @@ abstract class DataSet( /** * Returns a simple string representation of the DataSet with the type and the number of Entries. */ - fun toSimpleString() = "DataSet, label: $label, entries: ${mEntries!!.size}" + fun toSimpleString() = "DataSet, label: $label, entries: ${mEntries.size}" override fun addEntryOrdered(entry: T) { - if (mEntries == null) { - mEntries = ArrayList() - } - calcMinMax(entry) - if (!mEntries!!.isEmpty() && mEntries!![mEntries!!.size - 1].x > entry.x) { + if (!mEntries.isEmpty() && mEntries[mEntries.size - 1].x > entry.x) { val closestIndex = getEntryIndex(entry.x, entry.y, Rounding.UP) - mEntries!!.add(closestIndex, entry) + mEntries.add(closestIndex, entry) } else { - mEntries!!.add(entry) + mEntries.add(entry) } } override fun clear() { - mEntries!!.clear() + mEntries.clear() notifyDataSetChanged() } override fun addEntry(entry: T): Boolean { - var values = this.entries - if (values == null) { - values = ArrayList() - } + val values = this.entries calcMinMax(entry) @@ -205,11 +174,9 @@ abstract class DataSet( } override fun removeEntry(entry: T): Boolean { - if (mEntries == null) - return false // remove the entry - val removed = mEntries!!.remove(entry) + val removed = mEntries.remove(entry) if (removed) { calcMinMax() @@ -220,14 +187,14 @@ abstract class DataSet( override fun getEntryIndex(entry: T): Int { // return getEntryIndex(entry) - return mEntries!!.indexOf(entry) + return mEntries.indexOf(entry) } override fun getEntryForXValue(xValue: Float, closestToY: Float, rounding: Rounding?): T? { val index = getEntryIndex(xValue, closestToY, rounding) if (index > -1) { - return mEntries!![index] + return mEntries[index] } return null } @@ -240,28 +207,28 @@ abstract class DataSet( if (index < 0) { Timber.e("index $index is < 0 for getEntryForIndex") return null - } else if (index >= mEntries!!.size) { - Timber.e("index " + index + "/" + mEntries!!.size + " is out of range for getEntryForIndex") + } else if (index >= mEntries.size) { + Timber.e("index $index / ${mEntries.size} is out of range for getEntryForIndex") return null } - return mEntries!![index] + return mEntries[index] } override fun getEntryIndex(xValue: Float, closestToY: Float, rounding: Rounding?): Int { - if (mEntries == null || mEntries!!.isEmpty()) { + if (mEntries.isEmpty()) { return -1 } var low = 0 - var high = mEntries!!.size - 1 + var high = mEntries.size - 1 var closest = high while (low < high) { val m = low + (high - low) / 2 - val currentEntry: Entry = mEntries!![m] + val currentEntry: Entry = mEntries[m] - val nextEntry: Entry = mEntries!![m + 1] + val nextEntry: Entry = mEntries[m + 1] val d1 = currentEntry.x - xValue val d2 = nextEntry.x - xValue @@ -291,11 +258,11 @@ abstract class DataSet( closest = high } - val closestEntry: Entry = mEntries!![closest] + val closestEntry: Entry = mEntries[closest] val closestXValue = closestEntry.x if (rounding == Rounding.UP) { // If rounding up, and found x-value is lower than specified x, and we can go upper... - if (closestXValue < xValue && closest < mEntries!!.size - 1) { + if (closestXValue < xValue && closest < mEntries.size - 1) { ++closest } } else if (rounding == Rounding.DOWN) { @@ -307,7 +274,7 @@ abstract class DataSet( // Search by closest to y-value if (!closestToY.isNaN()) { - while (closest > 0 && mEntries!![closest - 1].x == closestXValue) { + while (closest > 0 && mEntries[closest - 1].x == closestXValue) { closest -= 1 } @@ -316,11 +283,11 @@ abstract class DataSet( while (true) { closest += 1 - if (closest >= mEntries!!.size) { + if (closest >= mEntries.size) { break } - val value: T = mEntries!![closest] + val value: T = mEntries[closest] if (value.x != closestXValue) { break @@ -341,23 +308,23 @@ abstract class DataSet( val entries: MutableList = mutableListOf() var low = 0 - var high = mEntries!!.size - 1 + var high = mEntries.size - 1 while (low <= high) { var m = (high + low) / 2 - var entry = mEntries!![m] + var entry = mEntries[m] // if we have a match if (xValue == entry.x) { - while (m > 0 && mEntries!![m - 1].x == xValue) { + while (m > 0 && mEntries[m - 1].x == xValue) { m-- } - high = mEntries!!.size + high = mEntries.size // loop over all "equal" entries while (m < high) { - entry = mEntries!![m] + entry = mEntries[m] if (entry.x == xValue) { entries.add(entry) } else { diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/LineDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/LineDataSet.kt index 9627f21845..9f00dc2555 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/LineDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/LineDataSet.kt @@ -12,15 +12,12 @@ import info.appdev.charting.utils.ColorTemplate import info.appdev.charting.utils.convertDpToPixel import timber.log.Timber -open class LineDataSet(yVals: MutableList?, label: String = "") : LineRadarDataSet(yVals, label), ILineDataSet { +open class LineDataSet(yVals: MutableList = mutableListOf(), label: String = "") : LineRadarDataSet(yVals, label), ILineDataSet { /** * Drawing mode for this line dataset */ private var mLineDataSetMode: Mode = Mode.LINEAR - /** - * returns all colors specified for the circles - */ /** * Sets the colors that should be used for the circles of this DataSet. * Colors are reused as soon as the number of Entries the DataSet represents @@ -28,9 +25,6 @@ open class LineDataSet(yVals: MutableList?, label: String = "") : LineRad * are already prepared (by calling getResources().getColor(...)) before * adding them to the DataSet. */ - /** - * List representing all colors that are used for the circles - */ @ColorInt var circleColors: MutableList = mutableListOf() @@ -72,7 +66,6 @@ open class LineDataSet(yVals: MutableList?, label: String = "") : LineRad private var mDrawCircleHole = true - init { // default colors // mColors.add(Color.rgb(192, 255, 140)); @@ -82,10 +75,8 @@ open class LineDataSet(yVals: MutableList?, label: String = "") : LineRad override fun copy(): DataSet { val entries: MutableList = mutableListOf() - mEntries?.let { - for (i in it.indices) { - entries.add(it[i].copy()) - } + for (i in mEntries.indices) { + entries.add(mEntries[i].copy()) } val copied = LineDataSet(entries, label) copy(copied) @@ -128,13 +119,14 @@ open class LineDataSet(yVals: MutableList?, label: String = "") : LineRad set(value) { mLineDataSetMode = value } + + /** + * Sets the intensity for cubic lines (if enabled). Max = 1f = very cubic, + * Min = 0.05f = low cubic effect, Default: 0.2f + */ override var cubicIntensity: Float get() = mCubicIntensity set(value) { - /** - * Sets the intensity for cubic lines (if enabled). Max = 1f = very cubic, - * Min = 0.05f = low cubic effect, Default: 0.2f - */ var intensity = value if (intensity > 1f) { intensity = 1f @@ -152,13 +144,13 @@ open class LineDataSet(yVals: MutableList?, label: String = "") : LineRad override val isDrawSteppedEnabled: Boolean get() = mLineDataSetMode == Mode.STEPPED + /** + * Sets the radius of the drawn circles. + * Default radius = 4f, Min = 1f + */ override var circleRadius: Float get() = mCircleRadius set(value) { - /** - * Sets the radius of the drawn circles. - * Default radius = 4f, Min = 1f - */ if (value >= 1f) { mCircleRadius = value.convertDpToPixel() } else { @@ -166,13 +158,13 @@ open class LineDataSet(yVals: MutableList?, label: String = "") : LineRad } } + /** + * Sets the hole radius of the drawn circles. + * Default radius = 2f, Min = 0.5f + */ override var circleHoleRadius: Float get() = mCircleHoleRadius set(value) { - /** - * Sets the hole radius of the drawn circles. - * Default radius = 2f, Min = 0.5f - */ if (value >= 0.5f) { mCircleHoleRadius = value.convertDpToPixel() } else { @@ -224,11 +216,7 @@ open class LineDataSet(yVals: MutableList?, label: String = "") : LineRad override var fillFormatter: IFillFormatter? get() = mFillFormatter set(value) { - if (value == null) { - mFillFormatter = DefaultFillFormatter() - } else { - mFillFormatter = value - } + mFillFormatter = value ?: DefaultFillFormatter() } /** diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/LineRadarDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/LineRadarDataSet.kt index 5b39cff2d8..fabb6c1282 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/LineRadarDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/LineRadarDataSet.kt @@ -9,7 +9,7 @@ import info.appdev.charting.utils.convertDpToPixel /** * Base dataset for line and radar DataSets. */ -abstract class LineRadarDataSet(yVals: MutableList?, label: String) : LineScatterCandleRadarDataSet(yVals, label), ILineRadarDataSet { +abstract class LineRadarDataSet(yVals: MutableList, label: String) : LineScatterCandleRadarDataSet(yVals, label), ILineRadarDataSet { // TODO: Move to using `Fill` class /** * the color that is used for filling the line surface diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/LineScatterCandleRadarDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/LineScatterCandleRadarDataSet.kt index 0fa003ffd7..f31b5587fb 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/LineScatterCandleRadarDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/LineScatterCandleRadarDataSet.kt @@ -4,7 +4,7 @@ import android.graphics.DashPathEffect import info.appdev.charting.interfaces.datasets.ILineScatterCandleRadarDataSet import info.appdev.charting.utils.convertDpToPixel -abstract class LineScatterCandleRadarDataSet(yVals: MutableList?, label: String) : BarLineScatterCandleBubbleDataSet(yVals, label), +abstract class LineScatterCandleRadarDataSet(yVals: MutableList, label: String) : BarLineScatterCandleBubbleDataSet(yVals, label), ILineScatterCandleRadarDataSet { override var isVerticalHighlightIndicatorEnabled: Boolean = true protected set @@ -76,11 +76,11 @@ abstract class LineScatterCandleRadarDataSet(yVals: MutableList?, this.dashPathEffectHighlight = null } + /** + * Returns true if the dashed-line effect is enabled for highlight lines, false if not. + * Default: disabled + */ val isDashedHighlightLineEnabled: Boolean - /** - * Returns true if the dashed-line effect is enabled for highlight lines, false if not. - * Default: disabled - */ get() = this.dashPathEffectHighlight != null protected fun copy(lineScatterCandleRadarDataSet: LineScatterCandleRadarDataSet<*>) { diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/PieDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/PieDataSet.kt index 46cb68f28e..d3f263be7a 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/PieDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/PieDataSet.kt @@ -4,7 +4,7 @@ import androidx.annotation.ColorInt import info.appdev.charting.interfaces.datasets.IPieDataSet import info.appdev.charting.utils.convertDpToPixel -open class PieDataSet(yVals: MutableList?, label: String) : DataSet(yVals, label), IPieDataSet { +open class PieDataSet(yVals: MutableList, label: String) : DataSet(yVals, label), IPieDataSet { /** * the space in pixels between the chart-slices, default 0f */ @@ -25,15 +25,14 @@ open class PieDataSet(yVals: MutableList?, label: String) : DataSet { val entries: MutableList = mutableListOf() - mEntries?.let { - for (i in it.indices) { - entries.add(it[i].copy()) - } + for (i in mEntries.indices) { + entries.add(mEntries[i].copy()) } val copied = PieDataSet(entries, label) return copied diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/RadarDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/RadarDataSet.kt index 0b0893046d..ceca8885bd 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/RadarDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/RadarDataSet.kt @@ -5,7 +5,7 @@ import androidx.annotation.ColorInt import info.appdev.charting.interfaces.datasets.IRadarDataSet import info.appdev.charting.utils.ColorTemplate -open class RadarDataSet(yVals: MutableList?, label: String = "") : LineRadarDataSet(yVals, label), IRadarDataSet { +open class RadarDataSet(yVals: MutableList, label: String = "") : LineRadarDataSet(yVals, label), IRadarDataSet { /** flag indicating whether highlight circle should be drawn or not */ protected var mDrawHighlightCircleEnabled: Boolean = false @@ -60,10 +60,8 @@ open class RadarDataSet(yVals: MutableList?, label: String = "") : L override fun copy(): DataSet { val entries: MutableList = mutableListOf() - mEntries?.let { - for (i in it.indices) { - entries.add(it[i].copy()) - } + for (i in mEntries.indices) { + entries.add(mEntries[i].copy()) } val copied = RadarDataSet(entries, label) copy(copied) diff --git a/chartLib/src/main/kotlin/info/appdev/charting/data/ScatterDataSet.kt b/chartLib/src/main/kotlin/info/appdev/charting/data/ScatterDataSet.kt index 8ab7fa3b03..0b1b5dcbb9 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/data/ScatterDataSet.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/data/ScatterDataSet.kt @@ -13,7 +13,7 @@ import info.appdev.charting.renderer.scatter.TriangleShapeRenderer import info.appdev.charting.renderer.scatter.XShapeRenderer import info.appdev.charting.utils.ColorTemplate -open class ScatterDataSet(yVals: MutableList?, label: String = "") : LineScatterCandleRadarDataSet(yVals, label), IScatterDataSet { +open class ScatterDataSet(yVals: MutableList, label: String = "") : LineScatterCandleRadarDataSet(yVals, label), IScatterDataSet { /** * the size the scatterShape will have, in density pixels */ @@ -40,10 +40,8 @@ open class ScatterDataSet(yVals: MutableList?, label: String = "") : Line override fun copy(): DataSet { val entries: MutableList = mutableListOf() - mEntries?.let { - for (i in it.indices) { - entries.add(it[i].copy()) - } + for (i in mEntries.indices) { + entries.add(mEntries[i].copy()) } val copied = ScatterDataSet(entries, label) copy(copied)