Skip to content

Commit

Permalink
Graph height fix, basal lines tweaks, below 50 mgdl handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakub Kuchta committed Feb 8, 2025
1 parent 70f4a3f commit d81832d
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ static synchronized void processData(final RecentData recentData, final boolean
bg.calculated_value = (double) sg.sg;
bg.filtered_data = (double) sg.sg;
} else {
bg.calculated_value = (double) 49.9;
bg.filtered_data = (double) 49.9;
bg.calculated_value = (double) 1.0;
bg.filtered_data = (double) 1.0;
}
bg.noise = "";
bg.uuid = UUID.randomUUID().toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,6 @@ public BgGraphBuilder(Context context, long start, long end, int numValues, bool
capturePercentage = -1; // invalid reading
}
}
maxValue = unitized(BgReading.getMaxCalculatedValue(numValues, start, end));
bloodtests = BloodTest.latestForGraph(numValues, start, end);
// get extra calibrations so we can use them for historical readings
calibrations = Calibration.latestForGraph(numValues, start - (3 * Constants.DAY_IN_MS), end);
Expand All @@ -253,6 +252,7 @@ public BgGraphBuilder(Context context, long start, long end, int numValues, bool
defaultMinY = unitized(Pref.getStringToInt("default_ymin", 40)); // Use the user-defined ymin
defaultMaxY = unitized(Pref.getStringToInt("default_ymax", 250)); // Use the user-defined ymax
}
maxValue = unitized(BgReading.getMaxCalculatedValue(numValues, start, end));
defaultMaxY = Math.max(maxValue, defaultMaxY) + unitized(50);
pointSize = isXLargeTablet(context) ? 5 : 3;
axisTextSize = isXLargeTablet(context) ? 20 : Axis.DEFAULT_TEXT_SIZE_SP;
Expand Down Expand Up @@ -404,6 +404,46 @@ private List<Line> basalLines() {
private List<Line> pumpBasalLines() {
final List<Line> basalLines = new ArrayList<>();

final double minAutocorrectHeight = 25;
final double maxAutocorrectHeight = 40;
final double autocorrectHeightSpan = maxAutocorrectHeight - minAutocorrectHeight;
final List<Treatments> autocorrectList = Treatments.latestAutocorrectionsForGraph(2000, loaded_start, loaded_end);
final double maxAutocorrectAmount = Treatments.getMaxAutocorrectionAmount(loaded_start, loaded_end);

if (!autocorrectList.isEmpty()) {
final List<PointValue> points = new ArrayList<>(autocorrectList.size() * 4);
final List<PointValue> captions = new ArrayList<>(autocorrectList.size());
for (Treatments item : autocorrectList) {
final float yValue = (float)unitized(item.insulin / maxAutocorrectAmount * autocorrectHeightSpan + minAutocorrectHeight);
points.add(new HPointValue((double) (item.timestamp - 50000) / FUZZER, 0));
points.add(new HPointValue((double) (item.timestamp - 50000 + 10) / FUZZER, yValue));
points.add(new HPointValue((double) (item.timestamp + 50000 - 10) / FUZZER, yValue));
points.add(new HPointValue((double) (item.timestamp + 50000) / FUZZER, 0));
PointValueExtended caption = new PointValueExtended((double) (item.timestamp / FUZZER + 0.8), defaultMaxY + unitized(8) - yValue);
caption.real_timestamp = item.timestamp;
caption.note = (JoH.qs(item.insulin, 3) + "u").replace(".0u", "u");
captions.add(caption);
}

final Line autocorrectLine = new Line(points);
autocorrectLine.setColor(Color.parseColor("#FF01B3DA"));
autocorrectLine.setReverseYAxis(true);
autocorrectLine.setStrokeWidth(1);
autocorrectLine.setHasPoints(false);
autocorrectLine.setFilled(true);
autocorrectLine.setFillFlipped(true);
autocorrectLine.setBackgroundUnclipped(true);
autocorrectLine.setAreaTransparency(150);
basalLines.add(autocorrectLine);

final Line autocorrectCaptionLine = new Line(captions);
autocorrectCaptionLine.setHasPoints(true);
autocorrectCaptionLine.setHasLines(false);
autocorrectCaptionLine.setPointRadius(5);
autocorrectCaptionLine.setColor(Color.TRANSPARENT);
autocorrectCaptionLine.setPointColor(Color.TRANSPARENT);
basalLines.add(autocorrectCaptionLine);
}

final double minAutoBasalHeight = 0;
final double maxAutoBasalHeight = 20;
Expand All @@ -414,18 +454,20 @@ private List<Line> pumpBasalLines() {
if (!autoBasalList.isEmpty()) {
final List<PointValue> points = new ArrayList<>(autoBasalList.size() * 4);
final List<PointValue> captions = new ArrayList<>(autoBasalList.size());
points.add(new HPointValue((double) start_time, 0));
for (PumpBasal item : autoBasalList) {
final float yValue = (float)unitized(item.autoBasalDelivery / maxAutoBasalAmount * autoBasalHeightSpan + minAutoBasalHeight);

points.add(new HPointValue((double) (item.timestamp - 150000) / FUZZER, 0));
points.add(new HPointValue((double) (item.timestamp - 150000 + 10) / FUZZER, yValue));
points.add(new HPointValue((double) (item.timestamp + 150000 - 10) / FUZZER, yValue));
points.add(new HPointValue((double) (item.timestamp + 150000) / FUZZER, 0));
PointValueExtended caption = new PointValueExtended((double) (item.timestamp / FUZZER + 0.5), defaultMaxY + unitized(5) - yValue);
PointValueExtended caption = new PointValueExtended((double) (item.timestamp / FUZZER + 0.5), defaultMaxY + unitized(8) - yValue);
caption.real_timestamp = item.timestamp;
caption.note = (JoH.qs(item.autoBasalDelivery, 3) + "u").replace(".0u", "u");
captions.add(caption);
}
points.add(new HPointValue((double) end_time, 0));

final Line autoBasalLine = new Line(points);
autoBasalLine.setColor(Color.parseColor("#FFD510D3"));
Expand All @@ -447,47 +489,6 @@ private List<Line> pumpBasalLines() {
basalLines.add(autoBasalCaptionLine);
}

final double minAutocorrectHeight = 25;
final double maxAutocorrectHeight = 40;
final double autocorrectHeightSpan = maxAutocorrectHeight - minAutocorrectHeight;
final List<Treatments> autocorrectList = Treatments.latestAutocorrectionsForGraph(2000, loaded_start, loaded_end);
final double maxAutocorrectAmount = Treatments.getMaxAutocorrectionAmount(loaded_start, loaded_end);

if (!autocorrectList.isEmpty()) {
final List<PointValue> points = new ArrayList<>(autocorrectList.size() * 4);
final List<PointValue> captions = new ArrayList<>(autocorrectList.size());
for (Treatments item : autocorrectList) {
final float yValue = (float)unitized(item.insulin / maxAutocorrectAmount * autocorrectHeightSpan + minAutocorrectHeight);
points.add(new HPointValue((double) (item.timestamp - 50000) / FUZZER, 0));
points.add(new HPointValue((double) (item.timestamp - 50000 + 10) / FUZZER, yValue));
points.add(new HPointValue((double) (item.timestamp + 50000 - 10) / FUZZER, yValue));
points.add(new HPointValue((double) (item.timestamp + 50000) / FUZZER, 0));
PointValueExtended caption = new PointValueExtended((double) (item.timestamp / FUZZER + 0.5), defaultMaxY + unitized(5) - yValue);
caption.real_timestamp = item.timestamp;
caption.note = (JoH.qs(item.insulin, 3) + "u").replace(".0u", "u");
captions.add(caption);
}

final Line autocorrectLine = new Line(points);
autocorrectLine.setColor(Color.parseColor("#FF01B3DA"));
autocorrectLine.setReverseYAxis(true);
autocorrectLine.setStrokeWidth(1);
autocorrectLine.setHasPoints(false);
autocorrectLine.setFilled(true);
autocorrectLine.setFillFlipped(true);
autocorrectLine.setBackgroundUnclipped(true);
autocorrectLine.setAreaTransparency(150);
basalLines.add(autocorrectLine);

final Line autocorrectCaptionLine = new Line(captions);
autocorrectCaptionLine.setHasPoints(true);
autocorrectCaptionLine.setHasLines(false);
autocorrectCaptionLine.setPointRadius(5);
autocorrectCaptionLine.setColor(Color.TRANSPARENT);
autocorrectCaptionLine.setPointColor(Color.TRANSPARENT);
basalLines.add(autocorrectCaptionLine);
}

return basalLines;
}

Expand Down Expand Up @@ -1376,6 +1377,15 @@ private synchronized void addBgReadingValues(final boolean simple) {
lowValues.add(new HPointValue((double) (bgReading.timestamp / FUZZER), (float) unitized(bgReading.calculated_value)));
} else if (bgReading.calculated_value > 13) {
lowValues.add(new HPointValue((double) (bgReading.timestamp / FUZZER), (float) unitized(40)));
} else if (bgReading.calculated_value > 0) {
PointValueExtended pv = new PointValueExtended((double) (bgReading.timestamp / FUZZER), (float) unitized(50));
pv.note = "Below " + unitized(50.0);
if (this.doMgdl) {
pv.note += " mg/dl";
} else {
pv.note += " mmol/l";
}
lowValues.add(pv);
}

if (illustrate_backfilled_data && bgReading.calculated_value > 13 && bgReading.calculated_value < 400 && bgReading.isBackfilled()) {
Expand Down

0 comments on commit d81832d

Please sign in to comment.