package com.github.reactNativeMPAndroidChart.charts; import android.graphics.Color; import android.graphics.Paint; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableType; import com.facebook.react.uimanager.ThemedReactContext; import com.github.mikephil.charting.charts.CandleStickChart; import com.github.mikephil.charting.data.CandleData; import com.github.mikephil.charting.data.CandleDataSet; import com.github.mikephil.charting.data.CandleEntry; import com.github.mikephil.charting.data.ChartData; import com.github.mikephil.charting.interfaces.datasets.IDataSet; import com.github.reactNativeMPAndroidChart.utils.BridgeUtils; import com.github.reactNativeMPAndroidChart.utils.ChartDataSetConfigUtils; import java.util.ArrayList; public class CandleStickChartManager extends BarLineChartBaseManager<CandleStickChart, CandleEntry> { @Override public String getName() { return "MPAndroidCandleStickChart"; } @Override protected CandleStickChart createViewInstance(ThemedReactContext reactContext) { return new CandleStickChart(reactContext); } @Override ChartData createData(String[] xValues) { return new CandleData(xValues); } @Override IDataSet createDataSet(ArrayList<CandleEntry> entries, String label) { return new CandleDataSet(entries, label); } @Override void dataSetConfig(IDataSet<CandleEntry> dataSet, ReadableMap config) { CandleDataSet candleDataSet = (CandleDataSet) dataSet; ChartDataSetConfigUtils.commonConfig(candleDataSet, config); ChartDataSetConfigUtils.commonBarLineScatterCandleBubbleConfig(candleDataSet, config); ChartDataSetConfigUtils.commonLineScatterCandleRadarConfig(candleDataSet, config); // CandleDataSet only config if (BridgeUtils.validate(config, ReadableType.Number, "barSpace")) { candleDataSet.setBarSpace((float) config.getDouble("barSpace")); } if (BridgeUtils.validate(config, ReadableType.Number, "shadowWidth")) { candleDataSet.setShadowWidth((float) config.getDouble("shadowWidth")); } if (BridgeUtils.validate(config, ReadableType.String, "shadowColor")) { candleDataSet.setShadowColor(Color.parseColor(config.getString("shadowColor"))); } if (BridgeUtils.validate(config, ReadableType.Boolean, "shadowColorSameAsCandle")) { candleDataSet.setShadowColorSameAsCandle(config.getBoolean("shadowColorSameAsCandle")); } if (BridgeUtils.validate(config, ReadableType.String, "neutralColor")) { candleDataSet.setNeutralColor(Color.parseColor(config.getString("neutralColor"))); } if (BridgeUtils.validate(config, ReadableType.String, "decreasingColor")) { candleDataSet.setDecreasingColor(Color.parseColor(config.getString("decreasingColor"))); } if (BridgeUtils.validate(config, ReadableType.String, "decreasingPaintStyle")) { candleDataSet.setDecreasingPaintStyle(Paint.Style.valueOf(config.getString("decreasingPaintStyle").toUpperCase())); } if (BridgeUtils.validate(config, ReadableType.String, "increasingColor")) { candleDataSet.setIncreasingColor(Color.parseColor(config.getString("increasingColor"))); } if (BridgeUtils.validate(config, ReadableType.String, "increasingPaintStyle")) { candleDataSet.setIncreasingPaintStyle(Paint.Style.valueOf(config.getString("increasingPaintStyle").toUpperCase())); } } @Override CandleEntry createEntry(ReadableArray yValues, int index) { if (!ReadableType.Map.equals(yValues.getType(index))) { throw new IllegalArgumentException(); } ReadableMap entryData = yValues.getMap(index); if (!BridgeUtils.validate(entryData, ReadableType.Number, "shadowH") || !BridgeUtils.validate(entryData, ReadableType.Number, "shadowL") || !BridgeUtils.validate(entryData, ReadableType.Number, "open") || !BridgeUtils.validate(entryData, ReadableType.Number, "close")) { throw new IllegalArgumentException("CandleStick data must contain: shadowH, shadowL, open and close values"); } float shadowH = (float) entryData.getDouble("shadowH"); float shadowL = (float) entryData.getDouble("shadowL"); float open = (float) entryData.getDouble("open"); float close = (float) entryData.getDouble("close"); return new CandleEntry(index, shadowH, shadowL, open, close); } }