use of com.faltenreich.diaguard.shared.data.database.entity.Insulin in project Diaguard by Faltenreich.
the class MeasurementDao method getAvgMeasurement.
public Measurement getAvgMeasurement(Category category, Interval interval) {
long daysBetween = interval.toDuration().getStandardDays() + 1;
switch(category) {
case BLOODSUGAR:
BloodSugar bloodSugar = new BloodSugar();
bloodSugar.setMgDl(function(SqlFunction.AVG, BloodSugar.Column.MGDL, interval));
return bloodSugar;
case INSULIN:
Insulin insulin = new Insulin();
insulin.setBolus(function(SqlFunction.SUM, Insulin.Column.BOLUS, interval) / daysBetween);
insulin.setBasal(function(SqlFunction.SUM, Insulin.Column.BASAL, interval) / daysBetween);
insulin.setCorrection(function(SqlFunction.SUM, Insulin.Column.CORRECTION, interval) / daysBetween);
return insulin;
case MEAL:
Meal meal = new Meal();
float avg = function(SqlFunction.SUM, Meal.Column.CARBOHYDRATES, interval) / daysBetween;
float foodEatenSum = 0;
List<FoodEaten> foodEatenList = FoodEatenDao.getInstance().getAll(interval);
for (FoodEaten foodEaten : foodEatenList) {
foodEatenSum += foodEaten.getCarbohydrates();
}
avg = avg + (foodEatenSum / daysBetween);
meal.setCarbohydrates(avg);
return meal;
case ACTIVITY:
Activity activity = new Activity();
activity.setMinutes((int) (function(SqlFunction.SUM, Activity.Column.MINUTES, interval) / daysBetween));
return activity;
case HBA1C:
HbA1c hbA1c = new HbA1c();
hbA1c.setPercent(function(SqlFunction.AVG, HbA1c.Column.PERCENT, interval));
return hbA1c;
case WEIGHT:
Weight weight = new Weight();
weight.setKilogram(function(SqlFunction.AVG, Weight.Column.KILOGRAM, interval));
return weight;
case PULSE:
Pulse pulse = new Pulse();
pulse.setFrequency(function(SqlFunction.AVG, Pulse.Column.FREQUENCY, interval));
return pulse;
case PRESSURE:
Pressure pressure = new Pressure();
pressure.setSystolic(function(SqlFunction.AVG, Pressure.Column.SYSTOLIC, interval));
pressure.setDiastolic(function(SqlFunction.AVG, Pressure.Column.DIASTOLIC, interval));
return pressure;
case OXYGEN_SATURATION:
OxygenSaturation oxygenSaturation = new OxygenSaturation();
oxygenSaturation.setPercent(function(SqlFunction.AVG, OxygenSaturation.Column.PERCENT, interval));
return oxygenSaturation;
default:
return null;
}
}
use of com.faltenreich.diaguard.shared.data.database.entity.Insulin in project Diaguard by Faltenreich.
the class MeasurementView method init.
private void init() {
binding = ListItemMeasurementBinding.inflate(LayoutInflater.from(getContext()), this);
View inputView;
Category category = measurement.getCategory();
switch(category) {
case INSULIN:
inputView = new InsulinInputView(getContext(), (Insulin) measurement);
break;
case MEAL:
inputView = new MealInputView(getContext(), (Meal) measurement);
break;
case PRESSURE:
inputView = new PressureInputView(getContext(), (Pressure) measurement);
break;
default:
inputView = new GenericInputView<>(getContext(), category.toClass(), measurement);
}
// noinspection unchecked
this.inputView = (MeasurementInputView<?, T>) inputView;
}
use of com.faltenreich.diaguard.shared.data.database.entity.Insulin in project Diaguard by Faltenreich.
the class CalculatorFragment method storeValues.
private void storeValues(float mgDl, float carbohydrates, float bolus, float correction) {
DateTime now = DateTime.now();
Entry entry = new Entry();
entry.setDate(now);
EntryDao.getInstance().createOrUpdate(entry);
BloodSugar bloodSugar = new BloodSugar();
bloodSugar.setMgDl(mgDl);
bloodSugar.setEntry(entry);
MeasurementDao.getInstance(BloodSugar.class).createOrUpdate(bloodSugar);
List<FoodEaten> foodEatenList = new ArrayList<>();
if (carbohydrates > 0) {
FoodInputView foodInputView = getBinding().foodInputView;
foodEatenList.addAll(foodInputView.getFoodEatenList());
meal.setCarbohydrates(foodInputView.getInputCarbohydrates());
meal.setEntry(entry);
MeasurementDao.getInstance(Meal.class).createOrUpdate(meal);
for (FoodEaten foodEaten : foodEatenList) {
if (foodEaten.getAmountInGrams() > 0) {
foodEaten.setMeal(meal);
FoodEatenDao.getInstance().createOrUpdate(foodEaten);
}
}
}
if (bolus > 0 || correction > 0) {
Insulin insulin = new Insulin();
insulin.setBolus(bolus);
insulin.setCorrection(correction);
insulin.setEntry(entry);
MeasurementDao.getInstance(Insulin.class).createOrUpdate(insulin);
}
Events.post(new EntryAddedEvent(entry, null, foodEatenList));
openEntry(entry);
clearInput();
update();
}
use of com.faltenreich.diaguard.shared.data.database.entity.Insulin in project Diaguard by Faltenreich.
the class EntryDao method getAverageDataTable.
/**
* @return HashMap with non-null but zeroed and default values for given categories and time periods
*/
public LinkedHashMap<Category, CategoryValueListItem[]> getAverageDataTable(DateTime day, Category[] categories, int hoursToSkip) {
if (day == null) {
return new LinkedHashMap<>();
}
int indices = DateTimeConstants.HOURS_PER_DAY / hoursToSkip;
// Key: Category, Value: Fixed-size array of values per hour-index
LinkedHashMap<Category, CategoryValueListItem[]> values = new LinkedHashMap<>();
for (Category category : categories) {
values.put(category, new CategoryValueListItem[indices]);
}
for (Category category : categories) {
// Key: Hour-index, Value: Values of hour-index
LinkedHashMap<Integer, List<CategoryValueListItem>> valuesOfHours = new LinkedHashMap<>();
for (int index = 0; index < indices; index++) {
valuesOfHours.put(index, new ArrayList<>());
}
List<Measurement> measurements = MeasurementDao.getInstance(category.toClass()).getMeasurements(day);
for (Measurement measurement : measurements) {
int index = measurement.getEntry().getDate().hourOfDay().get() / hoursToSkip;
CategoryValueListItem item = new CategoryValueListItem(category);
switch(category) {
case INSULIN:
Insulin insulin = (Insulin) measurement;
item.setValueOne(insulin.getBolus());
item.setValueTwo(insulin.getCorrection());
item.setValueThree(insulin.getBasal());
break;
case PRESSURE:
Pressure pressure = (Pressure) measurement;
item.setValueOne(pressure.getSystolic());
item.setValueTwo(pressure.getDiastolic());
break;
default:
float value = category.stackValues() ? ArrayUtils.sum(measurement.getValues()) : ArrayUtils.avg(measurement.getValues());
if (category == Category.MEAL) {
for (FoodEaten foodEaten : ((Meal) measurement).getFoodEaten()) {
value += foodEaten.getCarbohydrates();
}
}
item.setValueOne(value);
break;
}
List<CategoryValueListItem> valuesOfHour = valuesOfHours.get(index);
if (valuesOfHour == null) {
valuesOfHours.put(index, new ArrayList<>());
}
valuesOfHours.get(index).add(item);
}
// Average for old values
for (int index = 0; index < indices; index++) {
List<CategoryValueListItem> valuesOfHour = valuesOfHours.get(index);
CategoryValueListItem value = category.stackValues() ? CategoryListItemUtils.sum(category, valuesOfHour) : CategoryListItemUtils.avg(category, valuesOfHour);
values.get(category)[index] = value;
}
}
return values;
}
use of com.faltenreich.diaguard.shared.data.database.entity.Insulin in project Diaguard by Faltenreich.
the class CalculatorFragment method showResult.
// Values are normalized
private void showResult(String formula, String formulaContent, final float bloodSugar, final float meal, final float bolus, final float correction) {
float insulin = bolus + correction;
// Build AlertDialog
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View viewPopup = inflater.inflate(R.layout.dialog_calculator_result, null);
final ViewGroup infoLayout = viewPopup.findViewById(R.id.dialog_calculator_result_info);
TextView textViewFormula = viewPopup.findViewById(R.id.dialog_calculator_result_formula);
textViewFormula.setText(formula);
TextView textViewFormulaContent = viewPopup.findViewById(R.id.dialog_calculator_result_formula_content);
textViewFormulaContent.setText(formulaContent);
// Handle negative insulin
TextView textViewInfo = viewPopup.findViewById(R.id.textViewInfo);
if (insulin <= 0) {
// Advice skipping bolus
viewPopup.findViewById(R.id.result).setVisibility(View.GONE);
textViewInfo.setVisibility(View.VISIBLE);
if (insulin < -1) {
// Advice consuming carbohydrates
textViewInfo.setText(String.format("%s %s", textViewInfo.getText().toString(), getString(R.string.bolus_no2)));
}
} else {
viewPopup.findViewById(R.id.result).setVisibility(View.VISIBLE);
textViewInfo.setVisibility(View.GONE);
}
TextView textViewValue = viewPopup.findViewById(R.id.textViewResult);
textViewValue.setText(FloatUtils.parseFloat(insulin));
TextView textViewUnit = viewPopup.findViewById(R.id.textViewUnit);
textViewUnit.setText(PreferenceStore.getInstance().getUnitAcronym(Category.INSULIN));
dialogBuilder.setView(viewPopup).setTitle(R.string.bolus).setNegativeButton(R.string.info, (dialog, id) -> {
/* Set down below */
}).setPositiveButton(R.string.store_values, (dialog, id) -> storeValues(bloodSugar, meal, bolus, correction)).setNeutralButton(R.string.back, (dialog, id) -> dialog.cancel());
AlertDialog dialog = dialogBuilder.create();
dialog.setCanceledOnTouchOutside(true);
dialog.show();
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(view -> {
infoLayout.setVisibility(View.VISIBLE);
view.setEnabled(false);
});
}
Aggregations