- RileyStatusGeneral fixed in case fimrware is not set (no connection to RL yet, when page is opened) - Crashalytics

- Possible fix for SMB problem
- Possible fix for Treatments saving
- If last History entry has no date set, system doesn't crash (it crashed because it tryied to parse date and setting wrong values
This commit is contained in:
Andy Rozman 2019-05-02 20:22:44 +01:00
parent dbb9c132f4
commit 7f61f45b78
4 changed files with 89 additions and 49 deletions

View file

@ -1,9 +1,5 @@
package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog;
import java.util.Locale;
import org.joda.time.LocalDateTime;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
@ -11,10 +7,15 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.joda.time.LocalDateTime;
import java.util.Locale;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.pump.common.dialog.RefreshableInterface;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkFirmwareVersion;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData;
import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil;
@ -98,13 +99,15 @@ public class RileyLinkStatusGeneral extends Fragment implements RefreshableInter
if (rileyLinkServiceData != null) {
this.configuredAddress.setText(rileyLinkServiceData.rileylinkAddress);
this.connectionError.setText(rileyLinkServiceData.errorCode == null ? //
"-"
: MainApp.gs(rileyLinkServiceData.errorCode.getResourceId(targetDevice)));
"-"
: MainApp.gs(rileyLinkServiceData.errorCode.getResourceId(targetDevice)));
RileyLinkFirmwareVersion firmwareVersion = rileyLinkServiceData.versionCC110;
this.firmwareVersion.setText("BLE113: " + //
rileyLinkServiceData.versionBLE113 == null ? "-" : rileyLinkServiceData.versionBLE113 + //
"\nCC110: " + rileyLinkServiceData.versionCC110 == null ? "-" : rileyLinkServiceData.versionCC110
.toString());
rileyLinkServiceData.versionBLE113 == null ? "-" : rileyLinkServiceData.versionBLE113 + //
"\nCC110: " + firmwareVersion == null ? "-" : firmwareVersion.toString());
}
// TODO add handling for Omnipod pump status

View file

@ -4,12 +4,14 @@ package info.nightscout.androidaps.plugins.pump.common.utils;
* Created by andy on 10/25/18.
*/
import android.util.Log;
import org.joda.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.joda.time.LocalDateTime;
/**
* This is simple version of ATechDate, limited only to one format (yyyymmddHHMIss)
*/
@ -39,7 +41,13 @@ public class DateTimeUtil {
int second = (int)atechDateTime;
return new LocalDateTime(year, month, dayOfMonth, hourOfDay, minute, second);
try {
return new LocalDateTime(year, month, dayOfMonth, hourOfDay, minute, second);
} catch (Exception ex) {
Log.e("DateTimeUtil", String.format("Error creating LocalDateTime from values [atechDateTime=%d, year=%d, month=%d, day=%d, hour=%d, minute=%d, second=%d]", atechDateTime, year, month, dayOfMonth, hourOfDay, minute, second));
//return null;
throw ex;
}
}

View file

@ -174,26 +174,38 @@ public class MedtronicHistoryData {
this.setLastHistoryRecordTime(pheLast.atechDateTime);
LocalDateTime dt = DateTimeUtil.toLocalDateTime(pheLast.atechDateTime);
dt = dt.minusDays(1); // we keep 24 hours
LocalDateTime dt = null;
long dtRemove = DateTimeUtil.toATechDate(dt);
List<PumpHistoryEntry> removeList = new ArrayList<>();
for (PumpHistoryEntry pumpHistoryEntry : allHistory) {
if (!pumpHistoryEntry.isAfter(dtRemove)) {
removeList.add(pumpHistoryEntry);
}
try {
dt = DateTimeUtil.toLocalDateTime(pheLast.atechDateTime);
} catch (Exception ex) {
LOG.error("Problem decoding date from last record: {}" + pheLast);
}
this.allHistory.removeAll(removeList);
if (dt != null) {
this.sort(this.allHistory);
dt = dt.minusDays(1); // we keep 24 hours
LOG.debug("All History records [afterFilterCount={}, removedItemsCount={}, newItemsCount={}]",
allHistory.size(), removeList.size(), newHistory.size());
long dtRemove = DateTimeUtil.toATechDate(dt);
List<PumpHistoryEntry> removeList = new ArrayList<>();
for (PumpHistoryEntry pumpHistoryEntry : allHistory) {
if (!pumpHistoryEntry.isAfter(dtRemove)) {
removeList.add(pumpHistoryEntry);
}
}
this.allHistory.removeAll(removeList);
this.sort(this.allHistory);
LOG.debug("All History records [afterFilterCount={}, removedItemsCount={}, newItemsCount={}]",
allHistory.size(), removeList.size(), newHistory.size());
} else {
LOG.error("Since we couldn't determine date, we don't clean full history. This is just workaround.");
}
this.newHistory.clear();
@ -203,12 +215,12 @@ public class MedtronicHistoryData {
public boolean hasRelevantConfigurationChanged() {
return getStateFromFilteredList( //
PumpHistoryEntryType.ChangeBasalPattern, //
PumpHistoryEntryType.ClearSettings, //
PumpHistoryEntryType.SaveSettings, //
PumpHistoryEntryType.ChangeMaxBolus, //
PumpHistoryEntryType.ChangeMaxBasal, //
PumpHistoryEntryType.ChangeTempBasalType);
PumpHistoryEntryType.ChangeBasalPattern, //
PumpHistoryEntryType.ClearSettings, //
PumpHistoryEntryType.SaveSettings, //
PumpHistoryEntryType.ChangeMaxBolus, //
PumpHistoryEntryType.ChangeMaxBasal, //
PumpHistoryEntryType.ChangeTempBasalType);
}
@ -229,10 +241,10 @@ public class MedtronicHistoryData {
PumpHistoryEntryType pumpHistoryEntryType = items.get(0).getEntryType();
boolean isSuspended = !(pumpHistoryEntryType == PumpHistoryEntryType.TempBasalCombined || //
pumpHistoryEntryType == PumpHistoryEntryType.BasalProfileStart || //
pumpHistoryEntryType == PumpHistoryEntryType.Bolus || //
pumpHistoryEntryType == PumpHistoryEntryType.PumpResume || //
pumpHistoryEntryType == PumpHistoryEntryType.Prime);
pumpHistoryEntryType == PumpHistoryEntryType.BasalProfileStart || //
pumpHistoryEntryType == PumpHistoryEntryType.Bolus || //
pumpHistoryEntryType == PumpHistoryEntryType.PumpResume || //
pumpHistoryEntryType == PumpHistoryEntryType.Prime);
LOG.debug("isPumpSuspended. Last entry type={}, isSuspended={}", pumpHistoryEntryType, isSuspended);
@ -344,7 +356,7 @@ public class MedtronicHistoryData {
List<PumpHistoryEntry> suspends = getSuspends();
LOG.debug("ProcessHistoryData: FakeTBRs (suspend/resume) [count={}, items={}]", suspends.size(),
gsonPretty.toJson(suspends));
gsonPretty.toJson(suspends));
if (suspends.size() > 0) {
// processSuspends(treatments);
@ -369,7 +381,7 @@ public class MedtronicHistoryData {
TDD tddDbEntry = findTDD(tdd.atechDateTime, tddsDb);
DailyTotalsDTO totalsDTO = (DailyTotalsDTO)tdd.getDecodedData().get("Object");
DailyTotalsDTO totalsDTO = (DailyTotalsDTO) tdd.getDecodedData().get("Object");
LOG.debug("DailtyTotals: {}", totalsDTO);

View file

@ -255,6 +255,7 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
try {
Treatment old;
treatment.date = DatabaseHelper.roundDateToSec(treatment.date);
boolean changed = false;
if (treatment.source == Source.PUMP) {
// check for changed from pump change in NS
@ -262,16 +263,15 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
if (existingTreatment != null) {
boolean equalRePumpHistory = existingTreatment.equalsRePumpHistory(treatment);
boolean sameSource = existingTreatment.source == treatment.source;
if (!equalRePumpHistory) {
// another treatment exists. Update it with the treatment coming from the pump
if (L.isEnabled(L.DATATREATMENTS))
log.debug("Pump record already found in database: " + existingTreatment.toString() + " wanting to add " + treatment.toString());
long oldDate = existingTreatment.date;
//preserve carbs
if (existingTreatment.isValid && existingTreatment.carbs > 0 && treatment.carbs == 0) {
treatment.carbs = existingTreatment.carbs;
}
// preserve carbs & SMB
changed = preserveCarbsAndSMB(treatment, existingTreatment);
getDao().delete(existingTreatment); // need to delete/create because date may change too
existingTreatment.copyBasics(treatment);
@ -279,8 +279,9 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
DatabaseHelper.updateEarliestDataChange(oldDate);
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
scheduleTreatmentChange(treatment);
return new UpdateReturn(sameSource, false); //updating a pump treatment with another one from the pump is not counted as clash
return new UpdateReturn(sameSource || changed, false); //updating a pump treatment with another one from the pump is not counted as clash
}
return new UpdateReturn(equalRePumpHistory, false);
}
existingTreatment = getDao().queryForId(treatment.date);
@ -292,10 +293,8 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("Pump record already found in database: " + existingTreatment.toString() + " wanting to add " + treatment.toString());
//preserve carbs
if (existingTreatment.isValid && existingTreatment.carbs > 0 && treatment.carbs == 0) {
treatment.carbs = existingTreatment.carbs;
}
// preserve carbs & SMB
changed = preserveCarbsAndSMB(treatment, existingTreatment);
getDao().delete(existingTreatment); // need to delete/create because date may change too
existingTreatment.copyFrom(treatment);
@ -303,7 +302,7 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
DatabaseHelper.updateEarliestDataChange(oldDate);
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
scheduleTreatmentChange(treatment);
return new UpdateReturn(equalRePumpHistory || sameSource, false);
return new UpdateReturn(equalRePumpHistory || sameSource || changed, false);
}
getDao().create(treatment);
if (L.isEnabled(L.DATATREATMENTS))
@ -379,12 +378,28 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
return new UpdateReturn(false, false);
}
private boolean preserveCarbsAndSMB(Treatment treatment, Treatment existingTreatment) {
if (existingTreatment.isValid) {
if (existingTreatment.carbs > 0 && treatment.carbs == 0) {
treatment.carbs = existingTreatment.carbs;
}
treatment.isSMB = (existingTreatment.isSMB || treatment.isSMB);
return true;
}
return false;
}
private void treatmentCopy(Treatment oldTreatment, Treatment newTreatment, boolean fromNightScout) {
log.debug("treatmentCopy [old={}, new={}]", oldTreatment.toString(), newTreatment.toString());
if (fromNightScout) {
long pumpId_old = oldTreatment.pumpId;
boolean isSMB = (oldTreatment.isSMB || newTreatment.isSMB);
oldTreatment.copyFrom(newTreatment);
if (pumpId_old != 0) {
@ -395,6 +410,8 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
oldTreatment.source = Source.PUMP;
}
oldTreatment.isSMB = isSMB;
} else {
oldTreatment.copyFrom(newTreatment);
}