diff --git a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java index 2e2fab454bf50f53735d055af908f3d63be10a53..a16375d180e4bc9f250490bb4425cce173ee0ed2 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java +++ b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java @@ -10,6 +10,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.graphics.Canvas; import android.graphics.Color; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; @@ -51,6 +52,9 @@ import com.github.mikephil.charting.formatter.IValueFormatter; import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet; import com.github.mikephil.charting.listener.ChartTouchListener; import com.github.mikephil.charting.listener.OnChartGestureListener; +import com.github.mikephil.charting.renderer.ScatterChartRenderer; +import com.github.mikephil.charting.renderer.scatter.IShapeRenderer; +import com.github.mikephil.charting.utils.Transformer; import com.github.mikephil.charting.utils.ViewPortHandler; import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.materialdrawer.AccountHeaderBuilder; @@ -96,7 +100,6 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc private static long activePumpMac; - boolean mEnableCgmService = true; SharedPreferences prefs = null; private PumpInfo mActivePump; @@ -330,6 +333,56 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc yAxis.setTextColor(Color.WHITE); mChart.getLegend().setEnabled(false); // Hide the legend + + // TODO: remove if if "coloring bug" in MPAndroidChart is fixed + // see: https://github.com/PhilJay/MPAndroidChart/issues/2682 + mChart.setRenderer(new ScatterChartRenderer(mChart, mChart.getAnimator(), mChart.getViewPortHandler()) { + + float[] mPixelBuffer = new float[2]; + + @Override + protected void drawDataSet(Canvas c, IScatterDataSet dataSet) { + + ViewPortHandler viewPortHandler = mViewPortHandler; + + Transformer trans = mChart.getTransformer(dataSet.getAxisDependency()); + + float phaseY = mAnimator.getPhaseY(); + + IShapeRenderer renderer = dataSet.getShapeRenderer(); + if (renderer == null) { + Log.i("MISSING", "There's no IShapeRenderer specified for ScatterDataSet"); + return; + } + + int max = (int)(Math.min( + Math.ceil((float)dataSet.getEntryCount() * mAnimator.getPhaseX()), + (float)dataSet.getEntryCount())); + + for (int i = 0; i < max; i++) { + + Entry e = dataSet.getEntryForIndex(i); + + mPixelBuffer[0] = e.getX(); + mPixelBuffer[1] = e.getY() * phaseY; + + trans.pointValuesToPixel(mPixelBuffer); + + if (!viewPortHandler.isInBoundsRight(mPixelBuffer[0])) + break; + + if (!viewPortHandler.isInBoundsLeft(mPixelBuffer[0]) + || !viewPortHandler.isInBoundsY(mPixelBuffer[1])) + continue; + + mRenderPaint.setColor(dataSet.getColor(i)); + renderer.renderShape( + c, dataSet, mViewPortHandler, + mPixelBuffer[0], mPixelBuffer[1], + mRenderPaint); + } + } + }); } @Override @@ -783,6 +836,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc pos = entries.size(); entries.add(new Entry(pumpStatus.getEventDate().getTime(), pumpStatus.getSgv())); + //TODO: need to be configurable if (sgv < 80) colors[pos] = Color.RED; else if (sgv <= 180) @@ -795,11 +849,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc if (mChart.getData() == null) { mChart.setMinimumHeight(200); - ScatterDataSet dataSet = new ScatterDataSet(entries, null); - //dataSet.setColors(colors); // disabled tue to a bug(??) in MPAndroid Chart - dataSet.setColor(Color.LTGRAY); + dataSet.setColors(colors); // disabled tue to a bug(??) in MPAndroid Chart + //dataSet.setColor(Color.LTGRAY); dataSet.setValueTextColor(Color.WHITE); dataSet.setScatterShape(ScatterChart.ScatterShape.CIRCLE); dataSet.setScatterShapeSize(7.2f); @@ -828,14 +881,20 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc mChart.setData(lineData); } else { ((ScatterDataSet)mChart.getScatterData().getDataSets().get(0)).setValues(entries); - //((ScatterDataSet)mChart.getScatterData().getDataSets().get(0)).setColors(colors); // disabled tue to a bug(??) in MPAndroid Chart - //dataSet.notifyDataSetChanged(); + ((ScatterDataSet)mChart.getScatterData().getDataSets().get(0)).setColors(colors); // disabled tue to a bug(??) in MPAndroid Chart } //TODO: make the display timespan configurable - mChart.getXAxis().setAxisMaximum(System.currentTimeMillis()); - mChart.getXAxis().setAxisMinimum(mChart.getXAxis().getAxisMaximum() - 24 * 60 * 60 * 1000); + //long now = System.currentTimeMillis(); + + //Log.d(TAG, "Graph limits: " + (new Date(now - 24 * 60 * 60 * 1000) + " - " + (new Date(now)))); + //mChart.setVisibleXRangeMaximum(12); + //mChart.setVisibleXRangeMinimum(0); + //mChart.getXAxis().setAxisMaximum((now + 0*60*1000)); + //mChart.getXAxis().setAxisMinimum(now - 35 * 60 * 1000); + //mChart.moveViewToX(now - 35*60*1000); // - 24 * 60 * 60 * 1000); + //mChart.invalidate(); mChart.postInvalidate(); } }