Implement workaround for bolus with timeshift carbs, improve registering implicitly cancelled TBRs and remove some redundant code
This commit is contained in:
parent
8a38ef4a97
commit
1d3f4d3591
|
@ -7,6 +7,7 @@ import android.content.ServiceConnection;
|
|||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Looper;
|
||||
import android.os.SystemClock;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
@ -34,9 +35,7 @@ import info.nightscout.androidaps.data.DetailedBolusInfo;
|
|||
import info.nightscout.androidaps.data.Profile;
|
||||
import info.nightscout.androidaps.data.PumpEnactResult;
|
||||
import info.nightscout.androidaps.db.ExtendedBolus;
|
||||
import info.nightscout.androidaps.db.Source;
|
||||
import info.nightscout.androidaps.db.TemporaryBasal;
|
||||
import info.nightscout.androidaps.db.Treatment;
|
||||
import info.nightscout.androidaps.events.EventAppExit;
|
||||
import info.nightscout.androidaps.events.EventAppInitialized;
|
||||
import info.nightscout.androidaps.events.EventPreferenceChange;
|
||||
|
@ -56,7 +55,6 @@ import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction;
|
|||
import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress;
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
|
||||
import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair;
|
||||
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
|
||||
|
@ -140,9 +138,10 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
|
|||
private long nextPodCheck;
|
||||
private boolean sentIdToFirebase;
|
||||
private long lastConnectionTimeMillis;
|
||||
private final Handler loopHandler = new Handler();
|
||||
private final Handler loopHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
private final Runnable statusChecker;
|
||||
private OmnipodCommandType currentCommand;
|
||||
|
||||
@Inject
|
||||
public OmnipodPumpPlugin(
|
||||
|
@ -322,8 +321,11 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
|
|||
// But it doesn't tell us the duration or amount, so we can only update TBR status in AAPS if
|
||||
// The pod is not running a TBR, while AAPS thinks it is
|
||||
if (!podStateManager.isTempBasalRunning()) {
|
||||
if (activePlugin.getActiveTreatments().isTempBasalInProgress() && !aapsOmnipodManager.hasSuspendedFakeTbr()) {
|
||||
aapsOmnipodManager.reportCancelledTbr();
|
||||
// Only report TBR cancellations if they haven't been explicitly requested
|
||||
if (currentCommand != OmnipodCommandType.CANCEL_TEMPORARY_BASAL) {
|
||||
if (activePlugin.getActiveTreatments().isTempBasalInProgress() && !aapsOmnipodManager.hasSuspendedFakeTbr()) {
|
||||
aapsOmnipodManager.reportCancelledTbr();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -596,7 +598,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
|
|||
public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) {
|
||||
if (detailedBolusInfo.insulin == 0 && detailedBolusInfo.carbs == 0) {
|
||||
// neither carbs nor bolus requested
|
||||
aapsLogger.error("deliverTreatment: Invalid input");
|
||||
aapsLogger.error("deliverTreatment: Invalid input: neither carbs nor insulin are set in treatment");
|
||||
return new PumpEnactResult(getInjector()).success(false).enacted(false).bolusDelivered(0d).carbsDelivered(0d)
|
||||
.comment(getResourceHelper().gs(info.nightscout.androidaps.core.R.string.invalidinput));
|
||||
} else if (detailedBolusInfo.insulin > 0) {
|
||||
|
@ -606,15 +608,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
|
|||
// no bolus required, carb only treatment
|
||||
activePlugin.getActiveTreatments().addToHistoryTreatment(detailedBolusInfo, true);
|
||||
|
||||
// FIXME do we need this??
|
||||
EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.INSTANCE;
|
||||
bolusingEvent.setT(new Treatment());
|
||||
bolusingEvent.getT().isSMB = detailedBolusInfo.isSMB;
|
||||
bolusingEvent.setPercent(100);
|
||||
rxBus.send(bolusingEvent);
|
||||
|
||||
aapsLogger.debug(LTag.PUMP, "deliverTreatment: Carb only treatment.");
|
||||
|
||||
return new PumpEnactResult(getInjector()).success(true).enacted(true).bolusDelivered(0d)
|
||||
.carbsDelivered(detailedBolusInfo.carbs).comment(getResourceHelper().gs(info.nightscout.androidaps.core.R.string.common_resultok));
|
||||
}
|
||||
|
@ -643,7 +636,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
|
|||
if (tbrCurrent != null && !enforceNew) {
|
||||
if (Round.isSame(tbrCurrent.absoluteRate, absoluteRate)) {
|
||||
aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - No enforceNew and same rate. Exiting.");
|
||||
rxBus.send(new EventRefreshOverview("Omnipod command: SetTemporaryBasal", false));
|
||||
return new PumpEnactResult(getInjector()).success(true).enacted(false);
|
||||
}
|
||||
}
|
||||
|
@ -665,23 +657,10 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
|
|||
|
||||
if (tbrCurrent == null) {
|
||||
aapsLogger.info(LTag.PUMP, "cancelTempBasal - TBR already cancelled.");
|
||||
rxBus.send(new EventRefreshOverview("Omnipod command: CancelTemporaryBasal", false));
|
||||
return new PumpEnactResult(getInjector()).success(true).enacted(false);
|
||||
}
|
||||
|
||||
PumpEnactResult result = executeCommand(OmnipodCommandType.CANCEL_TEMPORARY_BASAL, aapsOmnipodManager::cancelTemporaryBasal);
|
||||
|
||||
if (result.success) {
|
||||
// TODO is this necessary?
|
||||
TemporaryBasal tempBasal = new TemporaryBasal(getInjector()) //
|
||||
.date(System.currentTimeMillis()) //
|
||||
.duration(0) //
|
||||
.source(Source.USER);
|
||||
|
||||
activePlugin.getActiveTreatments().addToHistoryTempBasal(tempBasal);
|
||||
}
|
||||
|
||||
return result;
|
||||
return executeCommand(OmnipodCommandType.CANCEL_TEMPORARY_BASAL, aapsOmnipodManager::cancelTemporaryBasal);
|
||||
}
|
||||
|
||||
// TODO improve (i8n and more)
|
||||
|
@ -934,17 +913,21 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
|
|||
}
|
||||
|
||||
private <T> T executeCommand(OmnipodCommandType commandType, Supplier<T> supplier) {
|
||||
aapsLogger.debug(LTag.PUMP, "Executing command: {}", commandType);
|
||||
try {
|
||||
currentCommand = commandType;
|
||||
aapsLogger.debug(LTag.PUMP, "Executing command: {}", commandType);
|
||||
|
||||
rileyLinkUtil.getRileyLinkHistory().add(new RLHistoryItemOmnipod(getInjector(), commandType));
|
||||
rileyLinkUtil.getRileyLinkHistory().add(new RLHistoryItemOmnipod(getInjector(), commandType));
|
||||
|
||||
T pumpEnactResult = supplier.get();
|
||||
T pumpEnactResult = supplier.get();
|
||||
|
||||
rxBus.send(new EventRefreshOverview("Omnipod command: " + commandType.name(), false));
|
||||
rxBus.send(new EventRefreshOverview("Omnipod command: " + commandType.name(), false));
|
||||
rxBus.send(new EventOmnipodPumpValuesChanged());
|
||||
|
||||
rxBus.send(new EventOmnipodPumpValuesChanged());
|
||||
|
||||
return pumpEnactResult;
|
||||
return pumpEnactResult;
|
||||
} finally {
|
||||
currentCommand = null;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean verifyPodAlertConfiguration() {
|
||||
|
|
|
@ -46,8 +46,8 @@ public class BolusAction implements OmnipodAction<StatusResponse> {
|
|||
podStateManager.getCurrentNonce(), bolusDeliverySchedule);
|
||||
BolusExtraCommand bolusExtraCommand = new BolusExtraCommand(units, timeBetweenPulses,
|
||||
acknowledgementBeep, completionBeep);
|
||||
OmnipodMessage primeBolusMessage = new OmnipodMessage(podStateManager.getAddress(),
|
||||
OmnipodMessage bolusMessage = new OmnipodMessage(podStateManager.getAddress(),
|
||||
Arrays.asList(setInsulinScheduleCommand, bolusExtraCommand), podStateManager.getMessageNumber());
|
||||
return communicationService.exchangeMessages(StatusResponse.class, podStateManager, primeBolusMessage);
|
||||
return communicationService.exchangeMessages(StatusResponse.class, podStateManager, bolusMessage);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -374,7 +374,7 @@ public class AapsOmnipodManager {
|
|||
|
||||
sp.remove(OmnipodStorageKeys.Preferences.ACTIVE_BOLUS);
|
||||
|
||||
return new PumpEnactResult(injector).success(true).enacted(true).bolusDelivered(detailedBolusInfo.insulin);
|
||||
return new PumpEnactResult(injector).success(true).enacted(true).carbsDelivered(detailedBolusInfo.carbs).bolusDelivered(detailedBolusInfo.insulin);
|
||||
}
|
||||
|
||||
public PumpEnactResult cancelBolus() {
|
||||
|
@ -464,13 +464,22 @@ public class AapsOmnipodManager {
|
|||
public PumpEnactResult cancelTemporaryBasal() {
|
||||
try {
|
||||
delegate.cancelTemporaryBasal(isTbrBeepsEnabled());
|
||||
addSuccessToHistory(PodHistoryEntryType.CANCEL_TEMPORARY_BASAL, null);
|
||||
} catch (Exception ex) {
|
||||
String comment = handleAndTranslateException(ex);
|
||||
addFailureToHistory(PodHistoryEntryType.CANCEL_TEMPORARY_BASAL, comment);
|
||||
return new PumpEnactResult(injector).success(false).enacted(false).comment(comment);
|
||||
}
|
||||
|
||||
long pumpId = addSuccessToHistory(PodHistoryEntryType.CANCEL_TEMPORARY_BASAL, null);
|
||||
|
||||
TemporaryBasal tempBasal = new TemporaryBasal(injector) //
|
||||
.date(System.currentTimeMillis()) //
|
||||
.duration(0) //
|
||||
.pumpId(pumpId) //
|
||||
.source(Source.PUMP);
|
||||
|
||||
activePlugin.getActiveTreatments().addToHistoryTempBasal(tempBasal);
|
||||
|
||||
return new PumpEnactResult(injector).success(true).enacted(true);
|
||||
}
|
||||
|
||||
|
@ -568,9 +577,25 @@ public class AapsOmnipodManager {
|
|||
return timeChangeEventEnabled;
|
||||
}
|
||||
|
||||
public void addBolusToHistory(DetailedBolusInfo detailedBolusInfo) {
|
||||
public void addBolusToHistory(DetailedBolusInfo originalDetailedBolusInfo) {
|
||||
DetailedBolusInfo detailedBolusInfo = originalDetailedBolusInfo.copy();
|
||||
|
||||
long pumpId = addSuccessToHistory(detailedBolusInfo.date, PodHistoryEntryType.SET_BOLUS, detailedBolusInfo.insulin + ";" + detailedBolusInfo.carbs);
|
||||
detailedBolusInfo.pumpId = pumpId;
|
||||
|
||||
if (detailedBolusInfo.carbs > 0 && detailedBolusInfo.carbTime > 0) {
|
||||
// split out a separate carbs record without a pumpId
|
||||
DetailedBolusInfo carbInfo = new DetailedBolusInfo();
|
||||
carbInfo.date = detailedBolusInfo.date + detailedBolusInfo.carbTime * 60L * 1000L;
|
||||
carbInfo.carbs = detailedBolusInfo.carbs;
|
||||
carbInfo.source = Source.USER;
|
||||
activePlugin.getActiveTreatments().addToHistoryTreatment(carbInfo, false);
|
||||
|
||||
// remove carbs from bolusInfo to not trigger any unwanted code paths in
|
||||
// TreatmentsPlugin.addToHistoryTreatment() method
|
||||
detailedBolusInfo.carbTime = 0;
|
||||
detailedBolusInfo.carbs = 0;
|
||||
}
|
||||
activePlugin.getActiveTreatments().addToHistoryTreatment(detailedBolusInfo, false);
|
||||
}
|
||||
|
||||
|
@ -634,7 +659,7 @@ public class AapsOmnipodManager {
|
|||
.date(time) //
|
||||
.duration(tempBasalPair.getDurationMinutes()) //
|
||||
.absolute(tempBasalPair.getInsulinRate()) //
|
||||
.pumpId(pumpId)
|
||||
.pumpId(pumpId) //
|
||||
.source(Source.PUMP);
|
||||
|
||||
activePlugin.getActiveTreatments().addToHistoryTempBasal(tempStart);
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.content.Intent
|
|||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.text.TextUtils
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
|
@ -71,7 +72,7 @@ class OmnipodFragment : DaggerFragment() {
|
|||
|
||||
private var disposables: CompositeDisposable = CompositeDisposable()
|
||||
|
||||
private val loopHandler = Handler()
|
||||
private val loopHandler = Handler(Looper.getMainLooper())
|
||||
private lateinit var refreshLoop: Runnable
|
||||
|
||||
init {
|
||||
|
|
Loading…
Reference in a new issue