Use BeepConfigCommand as a workaround for strange beep behavior in CancelDeliveryCommand when cancelling multiple delivery types.
This commit is contained in:
parent
1e003ad188
commit
3cb58133dd
1 changed files with 26 additions and 8 deletions
|
@ -1,10 +1,16 @@
|
||||||
package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
|
package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService;
|
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.MessageBlock;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.BeepConfigCommand;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.CancelDeliveryCommand;
|
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.CancelDeliveryCommand;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
|
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.BeepConfigType;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.defs.BeepType;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.BeepType;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.defs.DeliveryType;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.DeliveryType;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
|
||||||
|
@ -13,7 +19,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.exception.ActionInitializ
|
||||||
public class CancelDeliveryAction implements OmnipodAction<StatusResponse> {
|
public class CancelDeliveryAction implements OmnipodAction<StatusResponse> {
|
||||||
private final PodSessionState podState;
|
private final PodSessionState podState;
|
||||||
private final EnumSet<DeliveryType> deliveryTypes;
|
private final EnumSet<DeliveryType> deliveryTypes;
|
||||||
private final BeepType beepType;
|
private final boolean acknowledgementBeep;
|
||||||
|
|
||||||
public CancelDeliveryAction(PodSessionState podState, EnumSet<DeliveryType> deliveryTypes,
|
public CancelDeliveryAction(PodSessionState podState, EnumSet<DeliveryType> deliveryTypes,
|
||||||
boolean acknowledgementBeep) {
|
boolean acknowledgementBeep) {
|
||||||
|
@ -25,11 +31,7 @@ public class CancelDeliveryAction implements OmnipodAction<StatusResponse> {
|
||||||
}
|
}
|
||||||
this.podState = podState;
|
this.podState = podState;
|
||||||
this.deliveryTypes = deliveryTypes;
|
this.deliveryTypes = deliveryTypes;
|
||||||
if (acknowledgementBeep) {
|
this.acknowledgementBeep = acknowledgementBeep;
|
||||||
beepType = BeepType.BIP_BIP;
|
|
||||||
} else {
|
|
||||||
beepType = BeepType.NO_BEEP;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public CancelDeliveryAction(PodSessionState podState, DeliveryType deliveryType,
|
public CancelDeliveryAction(PodSessionState podState, DeliveryType deliveryType,
|
||||||
|
@ -39,7 +41,23 @@ public class CancelDeliveryAction implements OmnipodAction<StatusResponse> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatusResponse execute(OmnipodCommunicationService communicationService) {
|
public StatusResponse execute(OmnipodCommunicationService communicationService) {
|
||||||
return communicationService.sendCommand(StatusResponse.class, podState,
|
List<MessageBlock> messageBlocks = new ArrayList<>();
|
||||||
new CancelDeliveryCommand(podState.getCurrentNonce(), beepType, deliveryTypes));
|
|
||||||
|
messageBlocks.add(new CancelDeliveryCommand(podState.getCurrentNonce(),
|
||||||
|
acknowledgementBeep && deliveryTypes.size() == 1 ? BeepType.BIP_BIP : BeepType.NO_BEEP, deliveryTypes));
|
||||||
|
|
||||||
|
if (acknowledgementBeep && deliveryTypes.size() > 1) {
|
||||||
|
// Workaround for strange beep behaviour when cancelling multiple delivery types at the same time
|
||||||
|
|
||||||
|
// FIXME we should use other constructor with all beep configs.
|
||||||
|
// Theoretically, if we would cancel multiple delivery types but not all,
|
||||||
|
// we should keep the beep config for delivery types that we're not cancelling.
|
||||||
|
// We currently have no use case that though,
|
||||||
|
// as we either cancel 1 type or all types,
|
||||||
|
messageBlocks.add(new BeepConfigCommand(BeepConfigType.BIP_BIP));
|
||||||
|
}
|
||||||
|
|
||||||
|
return communicationService.exchangeMessages(StatusResponse.class, podState,
|
||||||
|
new OmnipodMessage(podState.getAddress(), messageBlocks, podState.getMessageNumber()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue