diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt index 67b80ed0b4..9d90abe3fc 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt @@ -25,6 +25,7 @@ import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction import info.nightscout.androidaps.plugins.general.overview.StatusLightHandler +import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.skins.SkinProvider import info.nightscout.androidaps.utils.FabricPrivacy @@ -254,7 +255,7 @@ class ActionsFragment : DaggerFragment() { val activeBgSource = activePlugin.activeBgSource actions_historybrowser.visibility = (profile != null).toVisibility() actions_fill?.visibility = (pump.pumpDescription.isRefillingCapable && pump.isInitialized && !pump.isSuspended).toVisibility() - actions_pumpbatterychange?.visibility = pump.pumpDescription.isBatteryReplaceable.toVisibility() + actions_pumpbatterychange?.visibility = (pump.pumpDescription.isBatteryReplaceable || (pump is OmnipodPumpPlugin && pump.isUseRileyLinkBatteryLevel && pump.isBatteryChangeLoggingEnabled)).toVisibility() actions_temptarget?.visibility = (profile != null && config.APS).toVisibility() actions_tddstats?.visibility = pump.pumpDescription.supportsTDDs.toVisibility() diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java index a451ddff6c..b962bedb9b 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java @@ -48,7 +48,6 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.common.ManufacturerType; import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction; import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType; -import info.nightscout.androidaps.queue.commands.CustomCommand; import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.general.overview.notifications.Notification; import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract; @@ -86,6 +85,7 @@ import info.nightscout.androidaps.plugins.pump.medtronic.events.EventMedtronicPu import info.nightscout.androidaps.plugins.pump.medtronic.service.RileyLinkMedtronicService; import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicConst; import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil; +import info.nightscout.androidaps.queue.commands.CustomCommand; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.FabricPrivacy; import info.nightscout.androidaps.utils.TimeChangeType; @@ -327,11 +327,10 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter } @Override public RileyLinkPumpInfo getPumpInfo() { - String pumpDescription = pumpType.getDescription(); String frequency = resourceHelper.gs(medtronicPumpStatus.pumpFrequency.equals("medtronic_pump_frequency_us_ca") ? R.string.medtronic_pump_frequency_us_ca : R.string.medtronic_pump_frequency_worldwide); String model = medtronicPumpStatus.medtronicDeviceType == null ? "???" : "Medtronic " + medtronicPumpStatus.medtronicDeviceType.getPumpModel(); String serialNumber = medtronicPumpStatus.serialNumber; - return new RileyLinkPumpInfo(pumpDescription, frequency, model, serialNumber); + return new RileyLinkPumpInfo(frequency, model, serialNumber); } @Override public long getLastConnectionTimeMillis() { diff --git a/medtronic/src/main/res/values/strings.xml b/medtronic/src/main/res/values/strings.xml index 065bc6c735..12c1900a27 100644 --- a/medtronic/src/main/res/values/strings.xml +++ b/medtronic/src/main/res/values/strings.xml @@ -15,7 +15,6 @@ pref_medtronic_encoding pref_medtronic_battery_type pref_medtronic_bolus_debug - pref_rileylink_mac_address medtronic_pump_frequency_us_ca medtronic_pump_frequency_worldwide medtronic_pump_encoding_4b6b_local diff --git a/medtronic/src/main/res/xml/pref_medtronic.xml b/medtronic/src/main/res/xml/pref_medtronic.xml index 78e20e8ef8..5006bf32b9 100644 --- a/medtronic/src/main/res/xml/pref_medtronic.xml +++ b/medtronic/src/main/res/xml/pref_medtronic.xml @@ -98,6 +98,12 @@ + + { - private Integer batteryLevel; // This empty constructor must be kept, otherwise dagger injection might break! @Inject @@ -86,18 +83,7 @@ public class OmnipodRileyLinkCommunicationManager extends RileyLinkCommunication } @Override protected OmnipodPacket sendAndListen(OmnipodPacket msg, int timeout_ms, int repeatCount, int retryCount, Integer extendPreamble_ms) throws RileyLinkCommunicationException { - OmnipodPacket response = super.sendAndListen(msg, timeout_ms, repeatCount, retryCount, extendPreamble_ms); - - PumpInterface activePump = activePluginProvider.getActivePump(); - if (activePump instanceof OmnipodPumpPlugin && ((OmnipodPumpPlugin) activePump).isUseRileyLinkBatteryLevel()) { - updateBatteryLevel(); - } - - return response; - } - - public Integer getBatteryLevel() { - return batteryLevel; + return super.sendAndListen(msg, timeout_ms, repeatCount, retryCount, extendPreamble_ms); } public T sendCommand(Class responseClass, PodStateManager podStateManager, MessageBlock command) { @@ -402,8 +388,4 @@ public class OmnipodRileyLinkCommunicationManager extends RileyLinkCommunication throw new RileyLinkUnreachableException(); } - - private void updateBatteryLevel() { - batteryLevel = rfspy.getBatteryLevel(); - } } diff --git a/omnipod/src/main/res/values/strings.xml b/omnipod/src/main/res/values/strings.xml index 6a141672ab..62440af057 100644 --- a/omnipod/src/main/res/values/strings.xml +++ b/omnipod/src/main/res/values/strings.xml @@ -11,7 +11,7 @@ AAPS.Omnipod.suspend_delivery_button_enabled AAPS.Omnipod.pulse_log_button_enabled AAPS.Omnipod.rileylink_stats_button_enabled - AAPS.Omnipod.use_riley_link_battery_level + AAPS.Omnipod.enable_battery_change_logging AAPS.Omnipod.time_change_enabled AAPS.Omnipod.expiration_reminder_enabled AAPS.Omnipod.expiration_reminder_hours_before_shutdown @@ -45,8 +45,7 @@ Show Suspend Delivery button in Omnipod tab Show Pulse Log button in Pod Management menu Show RileyLink Stats button in Pod Management menu - Use battery level reported by OrangeLink/EmaLink - DOES NOT work with the original RileyLink. May not work with other RileyLink alternatives. + Enable battery change logging in Actions DST/Time zone detection enabled Expiration reminder enabled Hours before shutdown diff --git a/omnipod/src/main/res/xml/pref_omnipod.xml b/omnipod/src/main/res/xml/pref_omnipod.xml index 853d5eda9e..a56ea0ce0b 100644 --- a/omnipod/src/main/res/xml/pref_omnipod.xml +++ b/omnipod/src/main/res/xml/pref_omnipod.xml @@ -11,6 +11,18 @@ + + + + @@ -114,12 +126,6 @@ android:key="@string/key_omnipod_riley_link_stats_button_enabled" android:title="@string/omnipod_config_rileylink_stats_button_enabled" /> - - = nextBatteryCheck) { + updateBatteryLevel(); + } + + return rfSpyResponse; } + private void updateBatteryLevel() { + rileyLinkServiceData.batteryLevel = retrieveBatteryLevel(); + nextBatteryCheck = System.currentTimeMillis() + + (Optional.ofNullable(rileyLinkServiceData.batteryLevel).orElse(0) <= LOW_BATTERY_PERCENTAGE_THRESHOLD ? LOW_BATTERY_BATTERY_CHECK_INTERVAL_MILLIS : DEFAULT_BATTERY_CHECK_INTERVAL_MILLIS); + + // The Omnipod plugin reports the RL battery as the pump battery (as the Omnipod battery level is unknown) + // So update overview when the battery level has been updated + rxBus.send(new EventRefreshOverview("RL battery level updated", false)); + } private RFSpyResponse updateRegister(CC111XRegister reg, int val) { - RFSpyResponse resp = writeToData(new UpdateRegister(reg, (byte) val), EXPECTED_MAX_BLUETOOTH_LATENCY_MS); - return resp; + return writeToData(new UpdateRegister(reg, (byte) val), EXPECTED_MAX_BLUETOOTH_LATENCY_MS); } - public void setBaseFrequency(double freqMHz) { int value = (int) (freqMHz * 1000000 / ((double) (RILEYLINK_FREQ_XTAL) / Math.pow(2.0, 16.0))); updateRegister(CC111XRegister.freq0, (byte) (value & 0xff)); @@ -316,69 +293,56 @@ public class RFSpy { configureRadioForRegion(rileyLinkServiceData.rileyLinkTargetFrequency); } - private void configureRadioForRegion(RileyLinkTargetFrequency frequency) { - // we update registers only on first run, or if region changed aapsLogger.error(LTag.PUMPBTCOMM, "RileyLinkTargetFrequency: " + frequency); switch (frequency) { - case Medtronic_WorldWide: { - // updateRegister(CC111X_MDMCFG4, (byte) 0x59); + case Medtronic_WorldWide: setRXFilterMode(RXFilterMode.Wide); - // updateRegister(CC111X_MDMCFG3, (byte) 0x66); - // updateRegister(CC111X_MDMCFG2, (byte) 0x33); updateRegister(CC111XRegister.mdmcfg1, 0x62); updateRegister(CC111XRegister.mdmcfg0, 0x1A); updateRegister(CC111XRegister.deviatn, 0x13); setMedtronicEncoding(); - } - break; + break; - case Medtronic_US: { - // updateRegister(CC111X_MDMCFG4, (byte) 0x99); + case Medtronic_US: setRXFilterMode(RXFilterMode.Narrow); - // updateRegister(CC111X_MDMCFG3, (byte) 0x66); - // updateRegister(CC111X_MDMCFG2, (byte) 0x33); updateRegister(CC111XRegister.mdmcfg1, 0x61); updateRegister(CC111XRegister.mdmcfg0, 0x7E); updateRegister(CC111XRegister.deviatn, 0x15); setMedtronicEncoding(); - } - break; + break; - case Omnipod: { - RFSpyResponse r = null; + case Omnipod: // RL initialization for Omnipod is a copy/paste from OmniKit implementation. // Last commit from original repository: 5c3beb4144 // so if something is terribly wrong, please check git diff PodCommsSession.swift since that commit - r = updateRegister(CC111XRegister.pktctrl1, 0x20); - r = updateRegister(CC111XRegister.agcctrl0, 0x00); - r = updateRegister(CC111XRegister.fsctrl1, 0x06); - r = updateRegister(CC111XRegister.mdmcfg4, 0xCA); - r = updateRegister(CC111XRegister.mdmcfg3, 0xBC); - r = updateRegister(CC111XRegister.mdmcfg2, 0x06); - r = updateRegister(CC111XRegister.mdmcfg1, 0x70); - r = updateRegister(CC111XRegister.mdmcfg0, 0x11); - r = updateRegister(CC111XRegister.deviatn, 0x44); - r = updateRegister(CC111XRegister.mcsm0, 0x18); - r = updateRegister(CC111XRegister.foccfg, 0x17); - r = updateRegister(CC111XRegister.fscal3, 0xE9); - r = updateRegister(CC111XRegister.fscal2, 0x2A); - r = updateRegister(CC111XRegister.fscal1, 0x00); - r = updateRegister(CC111XRegister.fscal0, 0x1F); + updateRegister(CC111XRegister.pktctrl1, 0x20); + updateRegister(CC111XRegister.agcctrl0, 0x00); + updateRegister(CC111XRegister.fsctrl1, 0x06); + updateRegister(CC111XRegister.mdmcfg4, 0xCA); + updateRegister(CC111XRegister.mdmcfg3, 0xBC); + updateRegister(CC111XRegister.mdmcfg2, 0x06); + updateRegister(CC111XRegister.mdmcfg1, 0x70); + updateRegister(CC111XRegister.mdmcfg0, 0x11); + updateRegister(CC111XRegister.deviatn, 0x44); + updateRegister(CC111XRegister.mcsm0, 0x18); + updateRegister(CC111XRegister.foccfg, 0x17); + updateRegister(CC111XRegister.fscal3, 0xE9); + updateRegister(CC111XRegister.fscal2, 0x2A); + updateRegister(CC111XRegister.fscal1, 0x00); + updateRegister(CC111XRegister.fscal0, 0x1F); - r = updateRegister(CC111XRegister.test1, 0x31); - r = updateRegister(CC111XRegister.test0, 0x09); - r = updateRegister(CC111XRegister.paTable0, 0x84); - r = updateRegister(CC111XRegister.sync1, 0xA5); - r = updateRegister(CC111XRegister.sync0, 0x5A); + updateRegister(CC111XRegister.test1, 0x31); + updateRegister(CC111XRegister.test0, 0x09); + updateRegister(CC111XRegister.paTable0, 0x84); + updateRegister(CC111XRegister.sync1, 0xA5); + updateRegister(CC111XRegister.sync0, 0x5A); - r = setRileyLinkEncoding(RileyLinkEncodingType.Manchester); - r = setPreamble(0x6665); - - } - break; + setRileyLinkEncoding(RileyLinkEncodingType.Manchester); + setPreamble(0x6665); + break; default: aapsLogger.warn(LTag.PUMPBTCOMM, "No region configuration for RfSpy and {}", frequency.name()); break; @@ -386,7 +350,6 @@ public class RFSpy { } } - private void setMedtronicEncoding() { RileyLinkEncodingType encoding = RileyLinkEncodingType.FourByteSixByteLocal; @@ -403,7 +366,6 @@ public class RFSpy { aapsLogger.debug(LTag.PUMPBTCOMM, "Set Encoding for Medtronic: " + encoding.name()); } - private RFSpyResponse setPreamble(int preamble) { RFSpyResponse resp = null; try { @@ -414,7 +376,6 @@ public class RFSpy { return resp; } - public RFSpyResponse setRileyLinkEncoding(RileyLinkEncodingType encoding) { RFSpyResponse resp = writeToData(new SetHardwareEncoding(encoding), EXPECTED_MAX_BLUETOOTH_LATENCY_MS); @@ -426,9 +387,7 @@ public class RFSpy { return resp; } - private void setRXFilterMode(RXFilterMode mode) { - byte drate_e = (byte) 0x9; // exponent of symbol rate (16kbps) byte chanbw = mode.value; @@ -442,9 +401,4 @@ public class RFSpy { if (this.currentFrequencyMHz != null) this.setBaseFrequency(this.currentFrequencyMHz); } - - - public void stopReader() { - reader.stop(); - } } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/command/SetPreamble.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/command/SetPreamble.java index a8a782e3c5..df7ed3dde4 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/command/SetPreamble.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/command/SetPreamble.java @@ -1,9 +1,9 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.command; -import java.nio.ByteBuffer; - import org.apache.commons.lang3.NotImplementedException; +import java.nio.ByteBuffer; + import javax.inject.Inject; import dagger.android.HasAndroidInjector; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bGo.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bGo.java index 94ae52f788..be46985459 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bGo.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bGo.java @@ -1,10 +1,10 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.encoding; +import org.slf4j.Logger; + import java.util.HashMap; import java.util.Map; -import org.slf4j.Logger; - import info.nightscout.androidaps.logging.StacktraceLoggerWrapper; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RileyLinkCommunicationException; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkBLEError; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bLoop.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bLoop.java index 8dfaf16b0f..ff609d2750 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bLoop.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/encoding/Encoding4b6bLoop.java @@ -1,12 +1,12 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.encoding; +import org.slf4j.Logger; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.slf4j.Logger; - import info.nightscout.androidaps.logging.StacktraceLoggerWrapper; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RileyLinkCommunicationException; import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java index 55c2ce9539..663ed099e5 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java @@ -3,7 +3,6 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs; import java.util.HashMap; import java.util.Map; - import info.nightscout.androidaps.plugins.pump.common.R; import info.nightscout.androidaps.utils.resources.ResourceHelper; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/operations/BLECommOperation.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/operations/BLECommOperation.java index 81fe52f890..2106a6131e 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/operations/BLECommOperation.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/operations/BLECommOperation.java @@ -1,10 +1,10 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.operations; +import android.bluetooth.BluetoothGatt; + import java.util.UUID; import java.util.concurrent.Semaphore; -import android.bluetooth.BluetoothGatt; - import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RileyLinkBLE; /** diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpInfo.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpInfo.java index 9759a9adc7..034b9ae283 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpInfo.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpInfo.java @@ -1,13 +1,11 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs; public class RileyLinkPumpInfo { - private final String connectedDeviceModel; - private final String pumpDescription; - private final String connectedDeviceSerialNumber; private final String pumpFrequency; + private final String connectedDeviceModel; + private final String connectedDeviceSerialNumber; - public RileyLinkPumpInfo(String pumpDescription, String pumpFrequency, String connectedDeviceModel, String connectedDeviceSerialNumber) { - this.pumpDescription = pumpDescription; + public RileyLinkPumpInfo(String pumpFrequency, String connectedDeviceModel, String connectedDeviceSerialNumber) { this.pumpFrequency = pumpFrequency; this.connectedDeviceModel = connectedDeviceModel; this.connectedDeviceSerialNumber = connectedDeviceSerialNumber; @@ -17,10 +15,6 @@ public class RileyLinkPumpInfo { return connectedDeviceModel; } - public String getPumpDescription() { - return pumpDescription; - } - public String getConnectedDeviceSerialNumber() { return connectedDeviceSerialNumber; } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkTargetDevice.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkTargetDevice.java index d1e999b2fb..1e560d0801 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkTargetDevice.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkTargetDevice.java @@ -9,8 +9,7 @@ import info.nightscout.androidaps.plugins.pump.common.R; public enum RileyLinkTargetDevice { MedtronicPump(R.string.rileylink_target_device_medtronic, true), // - Omnipod(R.string.rileylink_target_device_omnipod, false), // - ; + Omnipod(R.string.rileylink_target_device_omnipod, false); private final int resourceId; private final boolean tuneUpEnabled; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusDevice.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusDevice.java index 5d45d7d1fa..3faff82981 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusDevice.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusDevice.java @@ -1,11 +1,6 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import android.os.Bundle; -import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -14,6 +9,11 @@ import android.widget.Button; import android.widget.ListView; import android.widget.TextView; +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import info.nightscout.androidaps.plugins.pump.common.R; import info.nightscout.androidaps.plugins.pump.common.dialog.RefreshableInterface; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.java index 947c30a1a9..cfafc835e7 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.java @@ -6,10 +6,9 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import org.apache.commons.lang3.StringUtils; import org.joda.time.LocalDateTime; -import java.util.Locale; +import java.util.Optional; import javax.inject.Inject; @@ -18,6 +17,7 @@ import info.nightscout.androidaps.interfaces.ActivePluginProvider; import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.plugins.pump.common.R; import info.nightscout.androidaps.plugins.pump.common.dialog.RefreshableInterface; +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpInfo; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice; @@ -25,6 +25,7 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.Riley import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.resources.ResourceHelper; +import info.nightscout.androidaps.utils.sharedPreferences.SP; /** * Created by andy on 5/19/18. @@ -39,14 +40,18 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re @Inject AAPSLogger aapsLogger; @Inject RileyLinkServiceData rileyLinkServiceData; @Inject DateUtil dateUtil; + @Inject SP sp; private TextView connectionStatus; private TextView configuredRileyLinkAddress; private TextView configuredRileyLinkName; - private TextView connectedDevice; + private View batteryLevelRow; + private TextView batteryLevel; private TextView connectionError; + private View connectedDeviceDetails; private TextView deviceType; - private TextView deviceModel; + private TextView configuredDeviceModel; + private TextView connectedDeviceModel; private TextView serialNumber; private TextView pumpFrequency; private TextView lastUsedFrequency; @@ -59,16 +64,19 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re } @Override - public void onStart() { - super.onStart(); + public void onResume() { + super.onResume(); this.connectionStatus = getActivity().findViewById(R.id.rls_t1_connection_status); this.configuredRileyLinkAddress = getActivity().findViewById(R.id.rls_t1_configured_riley_link_address); this.configuredRileyLinkName = getActivity().findViewById(R.id.rls_t1_configured_riley_link_name); - this.connectedDevice = getActivity().findViewById(R.id.rls_t1_connected_device); + this.batteryLevelRow = getActivity().findViewById(R.id.rls_t1_battery_level_row); + this.batteryLevel = getActivity().findViewById(R.id.rls_t1_battery_level); this.connectionError = getActivity().findViewById(R.id.rls_t1_connection_error); + this.connectedDeviceDetails = getActivity().findViewById(R.id.rls_t1_connected_device_details); this.deviceType = getActivity().findViewById(R.id.rls_t1_device_type); - this.deviceModel = getActivity().findViewById(R.id.rls_t1_device_model); + this.configuredDeviceModel = getActivity().findViewById(R.id.rls_t1_configured_device_model); + this.connectedDeviceModel = getActivity().findViewById(R.id.rls_t1_connected_device_model); this.serialNumber = getActivity().findViewById(R.id.rls_t1_serial_number); this.pumpFrequency = getActivity().findViewById(R.id.rls_t1_pump_frequency); this.lastUsedFrequency = getActivity().findViewById(R.id.rls_t1_last_used_frequency); @@ -85,34 +93,42 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re // BS FIXME rileyLinkServiceData is injected so I suppose it cannot be null? if (rileyLinkServiceData != null) { - this.configuredRileyLinkAddress.setText(StringUtils.isEmpty(rileyLinkServiceData.rileyLinkAddress) ? PLACEHOLDER : rileyLinkServiceData.rileyLinkAddress); - this.configuredRileyLinkName.setText(StringUtils.isEmpty(rileyLinkServiceData.rileyLinkName) ? PLACEHOLDER : rileyLinkServiceData.rileyLinkName); - this.connectionError.setText(rileyLinkServiceData.rileyLinkError == null ? // - PLACEHOLDER - : resourceHelper.gs(rileyLinkServiceData.rileyLinkError.getResourceId(targetDevice))); + this.configuredRileyLinkAddress.setText(Optional.ofNullable(rileyLinkServiceData.rileyLinkAddress).orElse(PLACEHOLDER)); + this.configuredRileyLinkName.setText(Optional.ofNullable(rileyLinkServiceData.rileyLinkName).orElse(PLACEHOLDER)); - if (firmwareVersion == null) { - this.firmwareVersion.setText("BLE113: " + PLACEHOLDER + "\nCC110: " + PLACEHOLDER); + if (sp.getBoolean(resourceHelper.gs(R.string.key_riley_link_show_battery_level), false)) { + batteryLevelRow.setVisibility(View.VISIBLE); + Integer batteryLevel = rileyLinkServiceData.batteryLevel; + this.batteryLevel.setText(batteryLevel == null ? PLACEHOLDER : resourceHelper.gs(R.string.rileylink_battery_level_value, batteryLevel)); } else { - this.firmwareVersion.setText("BLE113: " + rileyLinkServiceData.versionBLE113 + - "\nCC110: " + rileyLinkServiceData.versionCC110); + batteryLevelRow.setVisibility(View.GONE); } + + RileyLinkError rileyLinkError = rileyLinkServiceData.rileyLinkError; + this.connectionError.setText(rileyLinkError == null ? PLACEHOLDER : resourceHelper.gs(rileyLinkError.getResourceId(targetDevice))); + + this.firmwareVersion.setText(resourceHelper.gs(R.string.rileylink_firmware_version_value, + Optional.ofNullable(rileyLinkServiceData.versionBLE113).orElse(PLACEHOLDER), Optional.ofNullable(rileyLinkServiceData.versionCC110).orElse(PLACEHOLDER))); } - RileyLinkPumpDevice pumpPlugin = (RileyLinkPumpDevice) activePlugin.getActivePump(); - RileyLinkPumpInfo pumpInfo = pumpPlugin.getPumpInfo(); - this.deviceType.setText(rileyLinkServiceData.targetDevice.getResourceId()); - this.deviceModel.setText(pumpInfo.getPumpDescription()); - this.serialNumber.setText(pumpInfo.getConnectedDeviceSerialNumber()); - this.pumpFrequency.setText(pumpInfo.getPumpFrequency()); - this.connectedDevice.setText(pumpInfo.getConnectedDeviceModel()); + RileyLinkPumpDevice rileyLinkPumpDevice = (RileyLinkPumpDevice) activePlugin.getActivePump(); + RileyLinkPumpInfo rileyLinkPumpInfo = rileyLinkPumpDevice.getPumpInfo(); + this.deviceType.setText(targetDevice.getResourceId()); + if (targetDevice == RileyLinkTargetDevice.MedtronicPump) { + this.connectedDeviceDetails.setVisibility(View.VISIBLE); + this.configuredDeviceModel.setText(activePlugin.getActivePump().getPumpDescription().pumpType.getDescription()); + this.connectedDeviceModel.setText(rileyLinkPumpInfo.getConnectedDeviceModel()); + } else { + this.connectedDeviceDetails.setVisibility(View.GONE); + } + this.serialNumber.setText(rileyLinkPumpInfo.getConnectedDeviceSerialNumber()); + this.pumpFrequency.setText(rileyLinkPumpInfo.getPumpFrequency()); if (rileyLinkServiceData.lastGoodFrequency != null) { - this.lastUsedFrequency.setText(String.format(Locale.ENGLISH, "%.2f MHz", - rileyLinkServiceData.lastGoodFrequency)); + this.lastUsedFrequency.setText(resourceHelper.gs(R.string.rileylink_pump_frequency_value, rileyLinkServiceData.lastGoodFrequency)); } - long lastConnectionTimeMillis = pumpPlugin.getLastConnectionTimeMillis(); + long lastConnectionTimeMillis = rileyLinkPumpDevice.getLastConnectionTimeMillis(); if (lastConnectionTimeMillis == 0) { this.lastDeviceContact.setText(resourceHelper.gs(R.string.riley_link_ble_config_connected_never)); } else { diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusHistoryFragment.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusHistoryFragment.java index 4d9eb8a4e1..a59cfbfb78 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusHistoryFragment.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusHistoryFragment.java @@ -18,13 +18,11 @@ import java.util.List; import javax.inject.Inject; import dagger.android.support.DaggerFragment; - import info.nightscout.androidaps.plugins.pump.common.R; import info.nightscout.androidaps.plugins.pump.common.defs.PumpDeviceState; 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.data.RLHistoryItem; - import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.resources.ResourceHelper; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java index ed48733680..e7f38d0a58 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java @@ -20,6 +20,7 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLin * Created by andy on 16/05/2018. */ +// FIXME encapsulation @Singleton public class RileyLinkServiceData { @@ -36,6 +37,7 @@ public class RileyLinkServiceData { public RileyLinkTargetFrequency rileyLinkTargetFrequency; public String rileyLinkAddress; public String rileyLinkName; + public Integer batteryLevel; long lastTuneUpTime = 0L; public Double lastGoodFrequency; @@ -76,7 +78,6 @@ public class RileyLinkServiceData { } private synchronized RileyLinkServiceState workWithServiceState(RileyLinkServiceState newState, RileyLinkError errorCode, boolean set) { - if (set) { rileyLinkServiceState = newState; lastServiceStateChange = System.currentTimeMillis(); @@ -90,7 +91,6 @@ public class RileyLinkServiceData { } else { return rileyLinkServiceState; } - } } diff --git a/rileylink/src/main/res/layout/rileylink_status_general.xml b/rileylink/src/main/res/layout/rileylink_status_general.xml index befef08f4c..ca60ec1ced 100644 --- a/rileylink/src/main/res/layout/rileylink_status_general.xml +++ b/rileylink/src/main/res/layout/rileylink_status_general.xml @@ -42,7 +42,7 @@ android:layout_marginLeft="30dp" android:layout_weight="35" android:gravity="center_vertical" - android:text="@string/rileylink_configured_riley_link_address" /> + android:text="@string/rileylink_address" /> + android:text="@string/rileylink_name" /> + android:orientation="horizontal" + android:visibility="gone"> + android:text="@string/rileylink_battery_level" /> - + android:orientation="vertical" + android:visibility="gone"> - + android:orientation="horizontal"> - + + + + + + android:orientation="horizontal"> + + + + + + - medtronic_pump_encoding_4b6b_rileylink pref_rileylink_mac_address pref_rileylink_name + pref_riley_link_show_reported_battery_level pref_medtronic_encoding @@ -30,19 +31,23 @@ Pump Status RileyLink Settings RileyLink - Configured RileyLink Address: - Configured RileyLink Name: - Connected Device: + Address: + Name: + Battery Level: + %1$d%% Connection Status: Connection Error: Device Device Type: - Device Model: + Configured Device Model: + Connected Device Model: Last Used Frequency: Last Device Contact: Firmware Version: + BLE113: %1$s\nCC110: %2$s Pump Serial Number: Pump Frequency: + %1$.2f MHz Bluetooth Initializing… @@ -67,10 +72,14 @@ Medtronic Pump - Omnipod + Omnipod (Eros) Yes No + + Show battery level reported by OrangeLink/EmaLink + DOES NOT work with the original RileyLink. May not work with other RileyLink alternatives. + %1$d day %1$d days