Small improvements and import order

This commit is contained in:
Bart Sopers 2020-08-23 21:48:25 +02:00
parent ddd9687425
commit 8911bcd508
5 changed files with 96 additions and 77 deletions

View file

@ -66,12 +66,12 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.Riley
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTaskExecutor;
import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.definition.OmnipodStorageKeys;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoRecentPulseLog;
import info.nightscout.androidaps.plugins.pump.omnipod.data.RLHistoryItemOmnipod;
import info.nightscout.androidaps.plugins.pump.omnipod.definition.OmnipodCommandType;
import info.nightscout.androidaps.plugins.pump.omnipod.definition.OmnipodCustomActionType;
import info.nightscout.androidaps.plugins.pump.omnipod.definition.OmnipodStatusRequestType;
import info.nightscout.androidaps.plugins.pump.omnipod.definition.OmnipodStorageKeys;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoRecentPulseLog;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodProgressStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager;
import info.nightscout.androidaps.plugins.pump.omnipod.manager.AapsOmnipodManager;

View file

@ -26,10 +26,10 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.AlertSl
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.AlertType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.DeliveryStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.FirmwareVersion;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.OmnipodConstants;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.OmnipodCrc;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodProgressStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.schedule.BasalSchedule;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.OmnipodCrc;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.OmnipodConstants;
// TODO add nullchecks on some setters
public abstract class PodStateManager {
@ -138,7 +138,7 @@ public abstract class PodStateManager {
}
public final void setMessageNumber(int messageNumber) {
setAndStore(() -> podState.setMessageNumber(messageNumber));
setAndStore(() -> podState.setMessageNumber(messageNumber), false);
}
public final int getPacketNumber() {
@ -146,7 +146,7 @@ public abstract class PodStateManager {
}
public final void setPacketNumber(int packetNumber) {
setAndStore(() -> podState.setPacketNumber(packetNumber));
setAndStore(() -> podState.setPacketNumber(packetNumber), false);
}
public final void increaseMessageNumber() {
@ -190,8 +190,8 @@ public abstract class PodStateManager {
return getSafe(() -> podState.getLastSuccessfulCommunication());
}
public final void setLastSuccessfulCommunication(DateTime dateTime) {
setAndStore(() -> podState.setLastSuccessfulCommunication(dateTime));
public final void setLastSuccessfulCommunication(DateTime dateTime, boolean notifyPodStateChanged) {
setAndStore(() -> podState.setLastSuccessfulCommunication(dateTime), notifyPodStateChanged);
}
public final DateTime getLastFailedCommunication() {

View file

@ -17,16 +17,6 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RLMe
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkBLEError;
import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.OmnipodAction;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.CommunicationException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalMessageAddressException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalMessageSequenceNumberException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalPacketTypeException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalResponseException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NonceOutOfSyncException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NonceResyncException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NotEnoughDataException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodFaultException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodReturnedErrorResponseException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.MessageBlock;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.OmnipodMessage;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.OmnipodPacket;
@ -36,11 +26,21 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.mess
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoFaultEvent;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.MessageBlockType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.OmnipodConstants;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PacketType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodInfoType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.CommunicationException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalMessageAddressException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalMessageSequenceNumberException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalPacketTypeException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalResponseException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NonceOutOfSyncException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NonceResyncException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NotEnoughDataException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.OmnipodException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.OmnipodConstants;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodFaultException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodReturnedErrorResponseException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager;
/**
* Created by andy on 6/29/18.
@ -125,12 +125,18 @@ public class OmnipodRileyLinkCommunicationManager extends RileyLinkCommunication
aapsLogger.debug(LTag.PUMPCOMM, "Received response from the Pod [responseMessageBlock={}]", responseMessageBlock);
boolean isExpectedResponseType = responseClass.isInstance(responseMessageBlock);
// Set last successful communication before updating from status response to prevent duplicately notifying Pod state changes
// as podStateManager.updateFromStatusResponse() also notifies of Pod state changes.
if (isExpectedResponseType) {
podStateManager.setLastSuccessfulCommunication(DateTime.now(), !(responseMessageBlock instanceof StatusResponse));
}
if (responseMessageBlock instanceof StatusResponse) {
podStateManager.updateFromStatusResponse((StatusResponse) responseMessageBlock);
}
if (responseClass.isInstance(responseMessageBlock)) {
podStateManager.setLastSuccessfulCommunication(DateTime.now());
if (isExpectedResponseType) {
return (T) responseMessageBlock;
} else {
if (responseMessageBlock.getType() == MessageBlockType.ERROR_RESPONSE) {

View file

@ -23,8 +23,8 @@ import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.definition.OmnipodStatusRequestType
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodProgressStatus
import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager
import info.nightscout.androidaps.plugins.pump.omnipod.manager.AapsOmnipodManager
import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodPumpValuesChanged
import info.nightscout.androidaps.plugins.pump.omnipod.manager.AapsOmnipodManager
import info.nightscout.androidaps.plugins.pump.omnipod.util.AapsOmnipodUtil
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.utils.DateUtil
@ -61,10 +61,10 @@ class OmnipodFragment : DaggerFragment() {
@Inject lateinit var rileyLinkServiceData: RileyLinkServiceData
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var aapsOmnipodManager: AapsOmnipodManager
@Inject lateinit var protectionCheck: ProtectionCheck
// TODO somehow obtain the pumpUnreachableThreshold in order to display last connection time red or white
// @Inject lateinit var localAlertUtils: LocalAlertUtils
@Inject lateinit var protectionCheck: ProtectionCheck
private var disposables: CompositeDisposable = CompositeDisposable()
@ -99,18 +99,16 @@ class OmnipodFragment : DaggerFragment() {
}
omnipod_refresh.setOnClickListener {
omnipod_pod_active_alerts_ack.isEnabled = false
omnipod_refresh.isEnabled = false
omnipod_pod_debug.isEnabled = false
disablePodActionButtons()
omnipodPumpPlugin.addPodStatusRequest(OmnipodStatusRequestType.GetPodState);
commandQueue.readStatus("Clicked Refresh", object : Callback() {
override fun run() {
activity?.runOnUiThread { updateOmipodUiElements() }
activity?.runOnUiThread { updatePodActionButtons() }
}
})
}
omnipod_stats.setOnClickListener {
omnipod_rileylink_stats.setOnClickListener {
if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() == true) {
startActivity(Intent(context, RileyLinkStatusActivity::class.java))
} else {
@ -122,13 +120,11 @@ class OmnipodFragment : DaggerFragment() {
if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() != true) {
displayNotConfiguredDialog()
} else {
omnipod_pod_active_alerts_ack.isEnabled = false
omnipod_refresh.isEnabled = false
omnipod_pod_debug.isEnabled = false
disablePodActionButtons()
omnipodPumpPlugin.addPodStatusRequest(OmnipodStatusRequestType.AcknowledgeAlerts);
commandQueue.readStatus("Clicked Alert Ack", object : Callback() {
override fun run() {
activity?.runOnUiThread { updateOmipodUiElements() }
activity?.runOnUiThread { updatePodActionButtons() }
}
})
}
@ -138,13 +134,11 @@ class OmnipodFragment : DaggerFragment() {
if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() != true) {
displayNotConfiguredDialog()
} else {
omnipod_pod_active_alerts_ack.isEnabled = false
omnipod_refresh.isEnabled = false
omnipod_pod_debug.isEnabled = false
disablePodActionButtons()
omnipodPumpPlugin.addPodStatusRequest(OmnipodStatusRequestType.GetPodPulseLog);
commandQueue.readStatus("Clicked Refresh", object : Callback() {
override fun run() {
activity?.runOnUiThread { updateOmipodUiElements() }
activity?.runOnUiThread { updatePodActionButtons() }
}
})
}
@ -157,36 +151,26 @@ class OmnipodFragment : DaggerFragment() {
disposables += rxBus
.toObservable(EventRileyLinkDeviceStatusChange::class.java)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ updateRileyLinkUiElements() }, { fabricPrivacy.logException(it) })
.subscribe({
updateRileyLinkStatus()
updatePodActionButtons()
}, { fabricPrivacy.logException(it) })
disposables += rxBus
.toObservable(EventOmnipodPumpValuesChanged::class.java)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ updateOmipodUiElements() }, { fabricPrivacy.logException(it) })
.subscribe({
updateOmipodStatus()
updatePodActionButtons()
}, { fabricPrivacy.logException(it) })
disposables += rxBus
.toObservable(EventPreferenceChange::class.java)
.observeOn(Schedulers.io())
.subscribe({
setVisibilityOfPodDebugButton()
updatePulseLogButton()
}, { fabricPrivacy.logException(it) })
updateUi()
}
fun setVisibilityOfPodDebugButton() {
if (aapsOmnipodManager.isPodDebuggingOptionsEnabled) {
omnipod_pod_debug.visibility = View.VISIBLE
omnipod_pod_debug.isEnabled = podStateManager.isPodActivationCompleted && rileyLinkServiceData.rileyLinkServiceState.isReady && !commandQueue.statusInQueue()
} else {
omnipod_pod_debug.visibility = View.GONE
}
}
private fun displayNotConfiguredDialog() {
context?.let {
OKDialog.show(it, resourceHelper.gs(R.string.omnipod_warning),
resourceHelper.gs(R.string.omnipod_error_operation_not_possible_no_configuration), null)
}
}
override fun onPause() {
super.onPause()
disposables.clear()
@ -194,12 +178,13 @@ class OmnipodFragment : DaggerFragment() {
}
fun updateUi() {
updateRileyLinkUiElements()
updateOmipodUiElements()
updateRileyLinkStatus()
updateOmipodStatus()
updatePodActionButtons()
}
@Synchronized
private fun updateRileyLinkUiElements() {
private fun updateRileyLinkStatus() {
val rileyLinkServiceState = rileyLinkServiceData.rileyLinkServiceState
val resourceId = rileyLinkServiceState.getResourceId()
@ -216,11 +201,9 @@ class OmnipodFragment : DaggerFragment() {
omnipod_rl_status.setTextColor(if (rileyLinkServiceState.isError || rileyLinkError != null) Color.RED else Color.WHITE)
}
fun updateOmipodUiElements() {
updateLastConnectionUiElements()
updateAcknowledgeAlertsUiElements()
updatePodStatusUiElements()
setVisibilityOfPodDebugButton()
fun updateOmipodStatus() {
updateLastConnection()
updatePodStatus()
val errors = ArrayList<String>();
val rileyLinkErrorDescription = omnipodPumpPlugin.rileyLinkService.errorDescription
@ -238,11 +221,11 @@ class OmnipodFragment : DaggerFragment() {
omnipod_pod_tid.text = "-"
omnipod_pod_firmware_version.text = "-"
omnipod_pod_expiry.text = "-"
omnipod_basabasalrate.text = "-"
omnipod_base_basal_rate.text = "-"
omnipod_reservoir.text = "-"
omnipod_tempbasal.text = "-"
omnipod_lastbolus.text = "-"
omnipod_lastconnection.setTextColor(Color.WHITE)
omnipod_pod_active_alerts.text = "-"
} else {
omnipod_pod_address.text = podStateManager.address.toString()
omnipod_pod_lot.text = podStateManager.lot.toString()
@ -265,7 +248,7 @@ class OmnipodFragment : DaggerFragment() {
}
// base basal rate
omnipod_basabasalrate.text = resourceHelper.gs(R.string.pump_basebasalrate, omnipodPumpPlugin.model().determineCorrectBasalSize(omnipodPumpPlugin.baseBasalRate))
omnipod_base_basal_rate.text = resourceHelper.gs(R.string.pump_basebasalrate, omnipodPumpPlugin.model().determineCorrectBasalSize(omnipodPumpPlugin.baseBasalRate))
omnipod_tempbasal.text = activePlugin.activeTreatments
.getTempBasalFromHistory(System.currentTimeMillis())?.toStringFull() ?: "-"
@ -278,6 +261,8 @@ class OmnipodFragment : DaggerFragment() {
omnipod_reservoir.text = resourceHelper.gs(R.string.omnipod_reservoir_left, podStateManager.reservoirLevel)
warnColors.setColorInverse(omnipod_reservoir, podStateManager.reservoirLevel, 50.0, 20.0)
}
omnipod_pod_active_alerts.text = TextUtils.join(System.lineSeparator(), aapsOmnipodUtil.getTranslatedActiveAlerts(podStateManager))
}
if (errors.size == 0) {
@ -295,12 +280,9 @@ class OmnipodFragment : DaggerFragment() {
omnipod_queue.visibility = View.VISIBLE
omnipod_queue.text = status
}
omnipod_refresh.isEnabled = rileyLinkServiceData.rileyLinkServiceState.isReady && podStateManager.isPodInitialized
&& podStateManager.podProgressStatus.isAtLeast(PodProgressStatus.PAIRING_COMPLETED) && !commandQueue.statusInQueue()
}
private fun updateLastConnectionUiElements() {
private fun updateLastConnection() {
if (podStateManager.isPodInitialized && podStateManager.lastSuccessfulCommunication != null) { // Null check for backwards compatibility
omnipod_lastconnection.text = readableDuration(podStateManager.lastSuccessfulCommunication)
omnipod_lastconnection.setTextColor(Color.WHITE)
@ -322,7 +304,7 @@ class OmnipodFragment : DaggerFragment() {
}
}
private fun updatePodStatusUiElements() {
private fun updatePodStatus() {
if (!podStateManager.hasPodState()) {
omnipod_pod_status.text = resourceHelper.gs(R.string.omnipod_pod_status_no_active_pod)
} else if (!podStateManager.isPodActivationCompleted) {
@ -360,16 +342,47 @@ class OmnipodFragment : DaggerFragment() {
}
}
private fun updateAcknowledgeAlertsUiElements() {
private fun updatePodActionButtons() {
updateRefreshStatusButton()
updateAcknowledgeAlertsButton()
updatePulseLogButton()
}
private fun disablePodActionButtons() {
omnipod_pod_active_alerts_ack.isEnabled = false
omnipod_refresh.isEnabled = false
omnipod_pod_debug.isEnabled = false
}
private fun updateRefreshStatusButton() {
omnipod_refresh.isEnabled = rileyLinkServiceData.rileyLinkServiceState.isReady && podStateManager.isPodInitialized
&& podStateManager.podProgressStatus.isAtLeast(PodProgressStatus.PAIRING_COMPLETED) && !commandQueue.statusInQueue()
}
private fun updateAcknowledgeAlertsButton() {
if (podStateManager.isPodInitialized && podStateManager.hasActiveAlerts() && !podStateManager.isPodDead) {
omnipod_pod_active_alerts.text = TextUtils.join(System.lineSeparator(), aapsOmnipodUtil.getTranslatedActiveAlerts(podStateManager))
omnipod_pod_active_alerts_ack.isEnabled = rileyLinkServiceData.rileyLinkServiceState.isReady && !commandQueue.statusInQueue()
} else {
omnipod_pod_active_alerts.text = "-"
omnipod_pod_active_alerts_ack.isEnabled = false
}
}
fun updatePulseLogButton() {
if (aapsOmnipodManager.isPodDebuggingOptionsEnabled) {
omnipod_pod_debug.visibility = View.VISIBLE
omnipod_pod_debug.isEnabled = podStateManager.isPodActivationCompleted && rileyLinkServiceData.rileyLinkServiceState.isReady && !commandQueue.statusInQueue()
} else {
omnipod_pod_debug.visibility = View.GONE
}
}
private fun displayNotConfiguredDialog() {
context?.let {
OKDialog.show(it, resourceHelper.gs(R.string.omnipod_warning),
resourceHelper.gs(R.string.omnipod_error_operation_not_possible_no_configuration), null)
}
}
private fun readableDuration(dateTime: DateTime): String {
val minutes = Duration(dateTime, DateTime.now()).standardMinutes.toInt()
when {

View file

@ -452,7 +452,7 @@
android:textSize="14sp" />
<TextView
android:id="@+id/omnipod_basabasalrate"
android:id="@+id/omnipod_base_basal_rate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -707,7 +707,7 @@
android:text="@string/omnipod_ack_short" />
<Button
android:id="@+id/omnipod_stats"
android:id="@+id/omnipod_rileylink_stats"
style="@style/ButtonSmallFontStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"