From 5f5df3424eda966b88cacbfecc6206fc367fb63e Mon Sep 17 00:00:00 2001 From: bubble_devteam Date: Tue, 25 May 2021 18:42:03 +0800 Subject: [PATCH 001/294] Add search device before Bluetooth connection --- medtronic/src/main/res/xml/pref_medtronic.xml | 6 +- .../main/res/xml/omnipod_eros_preferences.xml | 5 + .../common/hw/rileylink/RileyLinkConst.java | 1 + .../common/hw/rileylink/ble/RileyLinkBLE.java | 147 +++++++++++++++++- .../tasks/DiscoverGattServicesTask.java | 2 +- rileylink/src/main/res/values/strings.xml | 4 +- 6 files changed, 156 insertions(+), 9 deletions(-) diff --git a/medtronic/src/main/res/xml/pref_medtronic.xml b/medtronic/src/main/res/xml/pref_medtronic.xml index cdd786d1830e..d0d3049afc4b 100644 --- a/medtronic/src/main/res/xml/pref_medtronic.xml +++ b/medtronic/src/main/res/xml/pref_medtronic.xml @@ -98,7 +98,11 @@ android:title="RileyLink Configuration"> - + + buildScanFilters() { + ArrayList scanFilterList = new ArrayList<>(); + ScanFilter.Builder scanFilterBuilder = new ScanFilter.Builder(); + scanFilterBuilder.setDeviceAddress(macAddress); + scanFilterList.add(scanFilterBuilder.build()); + return scanFilterList; + } + + private ScanSettings buildScanSettings() { + ScanSettings.Builder scanSettingBuilder = new ScanSettings.Builder(); + scanSettingBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY); + scanSettingBuilder.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE); + scanSettingBuilder.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES); + return scanSettingBuilder.build(); + } + + public void startScan() { + try { + stopScan(); + aapsLogger.debug(LTag.PUMPBTCOMM, "startScan"); + handler.sendEmptyMessageDelayed(TIME_OUT_WHAT, TIME_OUT); + BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); + if (bluetoothLeScanner == null) { + bluetoothAdapter.startLeScan(mLeScanCallback); + return; + } + bluetoothLeScanner.startScan(buildScanFilters(), buildScanSettings(), scanCallback); + } catch (Exception e) { + e.printStackTrace(); + aapsLogger.error(LTag.PUMPBTCOMM, e.getMessage()); + } + + + } + + ScanCallback scanCallback = new ScanCallback() { + @Override + public void onScanResult(int callbackType, ScanResult result) { + super.onScanResult(callbackType, result); + String name = result.getDevice().getName(); + String address = result.getDevice().getAddress(); + if (macAddress.equals(address)) { + stopScan(); + rileyLinkDevice = result.getDevice(); + connectGatt(); + + } + } + + @Override + public void onBatchScanResults(List results) { + super.onBatchScanResults(results); + } + + @Override + public void onScanFailed(int errorCode) { + super.onScanFailed(errorCode); + stopScan(); + } + }; + private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { + public void onLeScan(final BluetoothDevice device, final int rssi, + final byte[] scanRecord) { + if (macAddress.equals(device.getAddress())) { + stopScan(); + rileyLinkDevice = device; + connectGatt(); + } + } + }; + public static final int TIME_OUT = 90 * 1000; + public static final int TIME_OUT_WHAT = 0x12; + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case TIME_OUT_WHAT: + stopScan(); + break; + } + } + }; + + public void stopScan() { + handler.removeMessages(TIME_OUT_WHAT); + if (bluetoothAdapter == null) { + return; + } + try { + BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); + if (bluetoothLeScanner == null) { + if (isBluetoothAvailable()) { + bluetoothAdapter.stopLeScan(mLeScanCallback); + } + return; + } + if (isBluetoothAvailable()) { + bluetoothLeScanner.stopScan(scanCallback); + } + } catch (Exception e) { + e.printStackTrace(); + aapsLogger.error(LTag.PUMPBTCOMM, e.getMessage()); + } + + } + + public boolean isBluetoothAvailable() { + return (bluetoothAdapter != null && + bluetoothAdapter.isEnabled() && + bluetoothAdapter.getState() == BluetoothAdapter.STATE_ON); + } } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java index 06ea7e38318e..c24bb1d8b1a2 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java @@ -38,7 +38,7 @@ public void run() { RileyLinkPumpDevice pumpDevice = (RileyLinkPumpDevice) activePlugin.getActivePump(); if (needToConnect) { - pumpDevice.getRileyLinkService().getRileyLinkBLE().connectGatt(); + pumpDevice.getRileyLinkService().getRileyLinkBLE().connectGattCheckOrange(); } pumpDevice.getRileyLinkService().getRileyLinkBLE().discoverServices(); diff --git a/rileylink/src/main/res/values/strings.xml b/rileylink/src/main/res/values/strings.xml index a2e2f723f13e..902d74153c94 100644 --- a/rileylink/src/main/res/values/strings.xml +++ b/rileylink/src/main/res/values/strings.xml @@ -88,5 +88,7 @@ %1$d hour %1$d hours - + Use Scanning + Scan before connecting to OrangeLink, it should improve connections (can also be used with other RileyLink clones, if needed) + pref_orange_use_scanning \ No newline at end of file From 1d01a8ecd5f008852ab30f05a3ff503fc1175b83 Mon Sep 17 00:00:00 2001 From: bubble_devteam Date: Tue, 5 Oct 2021 22:10:58 +0800 Subject: [PATCH 002/294] add Orange Firmware/Hardware Version --- .../common/hw/rileylink/ble/RileyLinkBLE.java | 28 ++++++++++++++++++- .../hw/rileylink/ble/data/GattAttributes.java | 6 ++++ .../RileyLinkStatusGeneralFragment.java | 10 +++++-- .../service/RileyLinkServiceData.java | 3 ++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RileyLinkBLE.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RileyLinkBLE.java index 9387799bbb6c..086f8aab9ef5 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RileyLinkBLE.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RileyLinkBLE.java @@ -92,6 +92,17 @@ public void onCharacteristicChanged(final BluetoothGatt gatt, if (radioResponseCountNotified != null) { radioResponseCountNotified.run(); } + + if (characteristic.getUuid().toString().equals(GattAttributes.UUID_NOTIF_CHARACTER.toString())) { + final byte[] data = characteristic.getValue(); + int first = 0xff & data[0]; + aapsLogger.info(LTag.PUMPBTCOMM, + "onCharacteristicChanged " + ByteUtil.shortHexString(characteristic.getValue()) + "=====" + first); + String fv = data[3] + "." + data[4]; + String hv = data[5] + "." + data[6]; + rileyLinkServiceData.versionOrangeFV = fv; + rileyLinkServiceData.versionOrangeHV = hv; + } } @@ -242,6 +253,9 @@ public void onServicesDiscovered(final BluetoothGatt gatt, int status) { if (gattDebugEnabled) { debugService(service, 0); } + if (GattAttributes.isOrange(uuidService)) { + rileyLinkServiceData.isOrange = true; + } } if (gattDebugEnabled) { @@ -369,9 +383,21 @@ public boolean enableNotifications() { aapsLogger.error(LTag.PUMPBTCOMM, "Error setting response count notification"); return false; } + if(rileyLinkServiceData.isOrange){ + enableNotificationsOrange(); + } + return true; + } + public boolean enableNotificationsOrange() { + aapsLogger.error(LTag.PUMPBTCOMM, "enableNotificationsORG"); + BLECommOperationResult result = setNotification_blocking(GattAttributes.UUID_NOTIF_SERVICE, // + GattAttributes.UUID_NOTIF_CHARACTER); + if (result.resultCode != BLECommOperationResult.RESULT_SUCCESS) { + aapsLogger.error(LTag.PUMPBTCOMM, "Error setting response count notification"); + return false; + } return true; } - String macAddress; public void findRileyLink(String RileyLinkAddress) { diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/GattAttributes.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/GattAttributes.java index 9021bbf50c12..c4cde5b3a738 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/GattAttributes.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/data/GattAttributes.java @@ -29,6 +29,9 @@ public class GattAttributes { public static String CHARA_RADIO_CUSTOM_NAME = "d93b2af0-1e28-11e4-8c21-0800200c9a66"; public static String CHARA_RADIO_VERSION = "30d99dc9-7c91-4295-a051-0a104d238cf2"; public static String CHARA_RADIO_LED_MODE = "c6d84241-f1a7-4f9c-a25f-fce16732f14e"; + //Orange Radio Service + public static UUID UUID_NOTIF_SERVICE = UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e"); + public static UUID UUID_NOTIF_CHARACTER = UUID.fromString("6e400003-b5a3-f393-e0a9-e50e24dcca9e"); private static final Map attributes; private static final Map attributesRileyLinkSpecific; @@ -83,5 +86,8 @@ public static String lookup(String uuid, String defaultName) { public static boolean isRileyLink(UUID uuid) { return attributesRileyLinkSpecific.containsKey(uuid.toString()); } + public static boolean isOrange(UUID uuid) { + return UUID_NOTIF_SERVICE.equals(uuid.toString()); + } } 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 7ab662595169..ce96a5c2fab7 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 @@ -107,8 +107,14 @@ public void onResume() { 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))); + + if(rileyLinkServiceData.isOrange){ + this.firmwareVersion.setText("FV:"+Optional.ofNullable(rileyLinkServiceData.versionOrangeFV).orElse(PLACEHOLDER)+"\nHV:"+Optional.ofNullable(rileyLinkServiceData.versionOrangeHV).orElse(PLACEHOLDER)); + }else{ + this.firmwareVersion.setText(resourceHelper.gs(R.string.rileylink_firmware_version_value, + Optional.ofNullable(rileyLinkServiceData.versionBLE113).orElse(PLACEHOLDER), Optional.ofNullable(rileyLinkServiceData.versionCC110).orElse(PLACEHOLDER))); + + } } RileyLinkPumpDevice rileyLinkPumpDevice = (RileyLinkPumpDevice) activePlugin.getActivePump(); 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 249c94d74b3c..c78d5b22ab73 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 @@ -48,6 +48,9 @@ public class RileyLinkServiceData { public String versionBLE113; // radio version public String versionCC110; + public boolean isOrange; + public String versionOrangeFV; + public String versionOrangeHV; public RileyLinkTargetDevice targetDevice; From f8bedc15b45f5e5b76ca2be725e5d93dd98a0724 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 08:08:11 +0000 Subject: [PATCH 003/294] Bump byteBuddyVersion from 1.11.18 to 1.11.19 Bumps `byteBuddyVersion` from 1.11.18 to 1.11.19. Updates `byte-buddy` from 1.11.18 to 1.11.19 - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.11.18...byte-buddy-1.11.19) Updates `byte-buddy-android` from 1.11.18 to 1.11.19 - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.11.18...byte-buddy-1.11.19) Updates `byte-buddy-agent` from 1.11.18 to 1.11.19 - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.11.18...byte-buddy-1.11.19) --- updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: net.bytebuddy:byte-buddy-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: net.bytebuddy:byte-buddy-agent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 69f3e7777afe..66cfaae0476e 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ buildscript { dexmakerVersion = "1.2" retrofit2Version = '2.9.0' okhttp3Version = '4.9.0' - byteBuddyVersion = '1.11.18' + byteBuddyVersion = '1.11.19' androidx_junit = '1.1.2' androidx_rules = '1.4.0-alpha04' From c228b8923864710cc5ada711aef1c7acd89da972 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 6 Oct 2021 21:26:28 +0200 Subject: [PATCH 004/294] VERY_HARD_LIMIT_MIN_BG = 80 --- .../main/java/info/nightscout/androidaps/utils/HardLimits.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt b/core/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt index 67118d09089f..f6706af96d17 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt @@ -40,7 +40,7 @@ class HardLimits @Inject constructor( // Very Hard Limits Ranges // First value is the Lowest and second value is the Highest a Limit can define - val VERY_HARD_LIMIT_MIN_BG = intArrayOf(72, 180) + val VERY_HARD_LIMIT_MIN_BG = intArrayOf(80, 180) val VERY_HARD_LIMIT_MAX_BG = intArrayOf(90, 270) val VERY_HARD_LIMIT_TARGET_BG = intArrayOf(80, 200) From b4e7d4b7204b144befb84ce79c1ab829e1e41a7c Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 6 Oct 2021 21:53:11 +0200 Subject: [PATCH 005/294] fix tests --- .../java/info/nightscout/androidaps/data/ProfileTest.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/test/java/info/nightscout/androidaps/data/ProfileTest.kt b/core/src/test/java/info/nightscout/androidaps/data/ProfileTest.kt index 3c1e6b573216..4ada1fb49763 100644 --- a/core/src/test/java/info/nightscout/androidaps/data/ProfileTest.kt +++ b/core/src/test/java/info/nightscout/androidaps/data/ProfileTest.kt @@ -45,7 +45,8 @@ class ProfileTest : TestBase() { private lateinit var testPumpPlugin: TestPumpPlugin private lateinit var hardLimits: HardLimits - private var okProfile = "{\"dia\":\"5\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"sens\":[{\"time\":\"00:00\",\"value\":\"6\"},{\"time\":\"2:00\",\"value\":\"6.2\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" + private var okProfile = "{\"dia\":\"5\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}]," + + "\"sens\":[{\"time\":\"00:00\",\"value\":\"6\"},{\"time\":\"2:00\",\"value\":\"6.2\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" private var belowLimitValidProfile = "{\"dia\":\"5\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"100\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.001\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" private var notAlignedBasalValidProfile = "{\"dia\":\"5\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"100\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:30\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" private var notStartingAtZeroValidProfile = "{\"dia\":\"5\",\"carbratio\":[{\"time\":\"00:30\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"100\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" @@ -102,11 +103,11 @@ class ProfileTest : TestBase() { Assert.assertEquals(2.4, p.percentageBasalSum(), 0.01) Assert.assertEquals(2.4, p.baseBasalSum(), 0.01) // Assert.assertEquals(81.0, p.getTargetMgdl(2 * 60 * 60), 0.01) - Assert.assertEquals(72.0, p.getTargetLowMgdl(c.timeInMillis), 0.01) + Assert.assertEquals(90.0, p.getTargetLowMgdl(c.timeInMillis), 0.01) // Assert.assertEquals(4.0, p.getTargetLowTimeFromMidnight(2 * 60 * 60), 0.01) Assert.assertEquals(90.0, p.getTargetHighMgdl(c.timeInMillis), 0.01) // Assert.assertEquals(5.0, p.getTargetHighTimeFromMidnight(2 * 60 * 60), 0.01) - Assert.assertEquals("00:00 4,0 - 5,0 mmol", p.getTargetList(resourceHelper, dateUtil).replace(".", ",")) + Assert.assertEquals("00:00 5,0 - 5,0 mmol", p.getTargetList(resourceHelper, dateUtil).replace(".", ",")) Assert.assertEquals(100, p.percentage) Assert.assertEquals(0, p.timeshift) Assert.assertEquals(0.1, Profile.toMgdl(0.1, GlucoseUnit.MGDL), 0.01) From a9e08f4a1ef45013ff4bc2f885c555a38ec62ba7 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 6 Oct 2021 22:22:35 +0200 Subject: [PATCH 006/294] prevent NPE --- .../androidaps/extensions/EffectiveProfileSwitchExtension.kt | 1 + .../androidaps/plugins/pump/insight/LocalInsightPlugin.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt index b8f5396b13bb..38c7e0a208c0 100644 --- a/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt +++ b/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt @@ -35,6 +35,7 @@ fun EffectiveProfileSwitch.toJson(isAdd: Boolean, dateUtil: DateUtil): JSONObjec .put("originalPercentage", originalPercentage) .put("originalDuration", originalDuration) .put("originalEnd", originalEnd) + .put("notes", originalCustomizedName) .also { if (interfaceIDs.pumpId != null) it.put("pumpId", interfaceIDs.pumpId) if (interfaceIDs.pumpType != null) it.put("pumpType", interfaceIDs.pumpType!!.name) diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java index c93a7e895f8c..3c2db9c5ec8d 100644 --- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java +++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java @@ -1081,7 +1081,7 @@ public PumpDescription getPumpDescription() { @NonNull @Override public String shortStatus(boolean veryShort) { StringBuilder ret = new StringBuilder(); - if (connectionService.getLastConnected() != 0) { + if (connectionService != null && connectionService.getLastConnected() != 0) { long agoMsec = dateUtil.now() - connectionService.getLastConnected(); int agoMin = (int) (agoMsec / 60d / 1000d); ret.append(resourceHelper.gs(R.string.short_status_last_connected, agoMin)).append("\n"); From 7eccb6e379ed412b849846bf50b1eaf3ae7c7bc0 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 7 Oct 2021 14:18:15 +0200 Subject: [PATCH 007/294] key not translatable --- diaconn/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diaconn/src/main/res/values/strings.xml b/diaconn/src/main/res/values/strings.xml index 3a51a9ff15a0..686e5ededc8c 100644 --- a/diaconn/src/main/res/values/strings.xml +++ b/diaconn/src/main/res/values/strings.xml @@ -142,7 +142,7 @@ Meal Failed Success Meal Success - diaconn_g8_logtubechange + diaconn_g8_logtubechange Can\'t lookup due to packet CRC error. Can\'t be set to an input parameter error. Can\'t be set to a protocol specification error. From bdffe22803b3b38bb255a87fd1f513a31647339d Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 7 Oct 2021 22:53:46 +0200 Subject: [PATCH 008/294] fix duration sync to NSClient --- .../dependencyInjection/WorkersModule.kt | 2 - .../plugins/general/food/FoodPlugin.kt | 4 +- .../nsclient/NSClientAddUpdateWorker.kt | 33 +++- .../general/nsclient/NSClientMbgWorker.kt | 2 +- .../general/nsclient/NSClientRemoveWorker.kt | 182 ------------------ .../nsclient/services/NSClientService.kt | 24 +-- .../nightscout/androidaps/data/IobTotal.kt | 2 +- .../extensions/ExtendedBolusExtension.kt | 4 +- .../extensions/OfflineEventExtension.kt | 4 +- .../extensions/TemporaryBasalExtension.kt | 4 +- .../extensions/TemporaryTargetExtension.kt | 4 +- .../extensions/TherapyEventExtension.kt | 4 +- .../plugins/iob/iobCobCalculator/CobInfo.kt | 2 +- .../transactions/SyncNsBolusTransaction.kt | 4 +- .../transactions/SyncNsCarbsTransaction.kt | 4 +- ...SyncNsEffectiveProfileSwitchTransaction.kt | 4 +- .../SyncNsExtendedBolusTransaction.kt | 11 +- .../transactions/SyncNsFoodTransaction.kt | 4 +- .../SyncNsOfflineEventTransaction.kt | 11 +- .../SyncNsProfileSwitchTransaction.kt | 4 +- .../SyncNsTemporaryBasalTransaction.kt | 12 +- .../SyncNsTemporaryTargetTransaction.kt | 11 +- .../SyncNsTherapyEventTransaction.kt | 11 +- 23 files changed, 94 insertions(+), 253 deletions(-) delete mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt diff --git a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt index 2e7bb25b43b5..5d3f33d2d959 100644 --- a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt +++ b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt @@ -6,7 +6,6 @@ import info.nightscout.androidaps.plugins.general.food.FoodPlugin import info.nightscout.androidaps.plugins.general.nsclient.NSClientAddAckWorker import info.nightscout.androidaps.plugins.general.nsclient.NSClientAddUpdateWorker import info.nightscout.androidaps.plugins.general.nsclient.NSClientMbgWorker -import info.nightscout.androidaps.plugins.general.nsclient.NSClientRemoveWorker import info.nightscout.androidaps.plugins.general.nsclient.NSClientUpdateRemoveAckWorker import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin @@ -29,7 +28,6 @@ abstract class WorkersModule { @ContributesAndroidInjector abstract fun contributesNSClientWorker(): NSClientAddUpdateWorker @ContributesAndroidInjector abstract fun contributesNSClientAddAckWorker(): NSClientAddAckWorker @ContributesAndroidInjector abstract fun contributesNSClientUpdateRemoveAckWorker(): NSClientUpdateRemoveAckWorker - @ContributesAndroidInjector abstract fun contributesNSClientRemoveWorker(): NSClientRemoveWorker @ContributesAndroidInjector abstract fun contributesNSClientMbgWorker(): NSClientMbgWorker @ContributesAndroidInjector abstract fun contributesFoodWorker(): FoodPlugin.FoodWorker } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt index 7b9de286808b..db617c7f0810 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt @@ -75,7 +75,7 @@ class FoodPlugin @Inject constructor( isValid = false ).also { it.interfaceIDs.nightscoutId = JsonHelper.safeGetString(jsonFood, "_id") } - repository.runTransactionForResult(SyncNsFoodTransaction(delFood, true)) + repository.runTransactionForResult(SyncNsFoodTransaction(delFood)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while removing food", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -89,7 +89,7 @@ class FoodPlugin @Inject constructor( else -> { val food = foodFromJson(jsonFood) if (food != null) { - repository.runTransactionForResult(SyncNsFoodTransaction(food, false)) + repository.runTransactionForResult(SyncNsFoodTransaction(food)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while adding/updating food", it) ret = Result.failure(workDataOf("Error" to it.toString())) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt index 3bd4bf76ca7d..8f2ce738d788 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt @@ -74,7 +74,7 @@ class NSClientAddUpdateWorker( if (insulin > 0) { if (sp.getBoolean(R.string.key_ns_receive_insulin, false) && buildHelper.isEngineeringMode() || config.NSCLIENT) { bolusFromJson(json)?.let { bolus -> - repository.runTransactionForResult(SyncNsBolusTransaction(bolus, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsBolusTransaction(bolus)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving bolus", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -105,7 +105,7 @@ class NSClientAddUpdateWorker( if (carbs > 0) { if (sp.getBoolean(R.string.key_ns_receive_carbs, false) && buildHelper.isEngineeringMode() || config.NSCLIENT) { carbsFromJson(json)?.let { carb -> - repository.runTransactionForResult(SyncNsCarbsTransaction(carb, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsCarbsTransaction(carb)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving carbs", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -145,7 +145,7 @@ class NSClientAddUpdateWorker( eventType == TherapyEvent.Type.TEMPORARY_TARGET.text -> if (sp.getBoolean(R.string.key_ns_receive_temp_target, false) && buildHelper.isEngineeringMode() || config.NSCLIENT) { temporaryTargetFromJson(json)?.let { temporaryTarget -> - repository.runTransactionForResult(SyncNsTemporaryTargetTransaction(temporaryTarget, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsTemporaryTargetTransaction(temporaryTarget)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving temporary target", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -182,13 +182,16 @@ class NSClientAddUpdateWorker( result.updatedNsId.forEach { aapsLogger.debug(LTag.DATABASE, "Updated nsId TemporaryTarget $it") } + result.updatedDuration.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated duration TemporaryTarget $it") + } } } ?: aapsLogger.error("Error parsing TT json $json") } eventType == TherapyEvent.Type.NOTE.text && json.isEffectiveProfileSwitch() -> // replace this by new Type when available in NS if (sp.getBoolean(R.string.key_ns_receive_profile_switch, false) && buildHelper.isEngineeringMode() || config.NSCLIENT) { effectiveProfileSwitchFromJson(json, dateUtil)?.let { effectiveProfileSwitch -> - repository.runTransactionForResult(SyncNsEffectiveProfileSwitchTransaction(effectiveProfileSwitch, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsEffectiveProfileSwitchTransaction(effectiveProfileSwitch)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving EffectiveProfileSwitch", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -223,7 +226,7 @@ class NSClientAddUpdateWorker( eventType == TherapyEvent.Type.PUMP_BATTERY_CHANGE.text -> if (sp.getBoolean(R.string.key_ns_receive_therapy_events, false) || config.NSCLIENT) { therapyEventFromJson(json)?.let { therapyEvent -> - repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEvent, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEvent)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -254,13 +257,16 @@ class NSClientAddUpdateWorker( result.updatedNsId.forEach { aapsLogger.debug(LTag.DATABASE, "Updated nsId TherapyEvent $it") } + result.updatedDuration.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId TherapyEvent $it") + } } } ?: aapsLogger.error("Error parsing TherapyEvent json $json") } eventType == TherapyEvent.Type.COMBO_BOLUS.text -> if (config.NSCLIENT) { extendedBolusFromJson(json)?.let { extendedBolus -> - repository.runTransactionForResult(SyncNsExtendedBolusTransaction(extendedBolus, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsExtendedBolusTransaction(extendedBolus)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving extended bolus", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -297,13 +303,16 @@ class NSClientAddUpdateWorker( result.updatedNsId.forEach { aapsLogger.debug(LTag.DATABASE, "Updated nsId ExtendedBolus $it") } + result.updatedDuration.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated duration ExtendedBolus $it") + } } } ?: aapsLogger.error("Error parsing ExtendedBolus json $json") } eventType == TherapyEvent.Type.TEMPORARY_BASAL.text -> if (config.NSCLIENT) { temporaryBasalFromJson(json)?.let { temporaryBasal -> - repository.runTransactionForResult(SyncNsTemporaryBasalTransaction(temporaryBasal, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsTemporaryBasalTransaction(temporaryBasal)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving temporary basal", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -337,13 +346,16 @@ class NSClientAddUpdateWorker( result.updatedNsId.forEach { aapsLogger.debug(LTag.DATABASE, "Updated nsId TemporaryBasal $it") } + result.updatedDuration.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated duration TemporaryBasal $it") + } } } ?: aapsLogger.error("Error parsing TemporaryBasal json $json") } eventType == TherapyEvent.Type.PROFILE_SWITCH.text -> if (sp.getBoolean(R.string.key_ns_receive_profile_switch, false) && buildHelper.isEngineeringMode() || config.NSCLIENT) { profileSwitchFromJson(json, dateUtil, activePlugin)?.let { profileSwitch -> - repository.runTransactionForResult(SyncNsProfileSwitchTransaction(profileSwitch, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsProfileSwitchTransaction(profileSwitch)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving ProfileSwitch", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -369,7 +381,7 @@ class NSClientAddUpdateWorker( eventType == TherapyEvent.Type.APS_OFFLINE.text -> if (sp.getBoolean(R.string.key_ns_receive_offline_event, false) && buildHelper.isEngineeringMode() || config.NSCLIENT) { offlineEventFromJson(json)?.let { offlineEvent -> - repository.runTransactionForResult(SyncNsOfflineEventTransaction(offlineEvent, invalidateByNsOnly = false)) + repository.runTransactionForResult(SyncNsOfflineEventTransaction(offlineEvent)) .doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving OfflineEvent", it) ret = Result.failure(workDataOf("Error" to it.toString())) @@ -400,6 +412,9 @@ class NSClientAddUpdateWorker( result.updatedNsId.forEach { aapsLogger.debug(LTag.DATABASE, "Updated nsId OfflineEvent $it") } + result.updatedDuration.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated duration OfflineEvent $it") + } } } ?: aapsLogger.error("Error parsing OfflineEvent json $json") } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt index b7f1d1540c96..0d4a16f33548 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt @@ -41,7 +41,7 @@ class NSClientMbgWorker( for (i in 0 until mbgArray.length()) { val nsMbg = NSMbg(mbgArray.getJSONObject(i)) if (!nsMbg.isValid()) continue - repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEventFromNsMbg(nsMbg), false)) + repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEventFromNsMbg(nsMbg))) .doOnError { aapsLogger.error("Error while saving therapy event", it) ret = Result.failure(workDataOf("Error" to it.toString())) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt deleted file mode 100644 index ee8dac6c47a1..000000000000 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt +++ /dev/null @@ -1,182 +0,0 @@ -package info.nightscout.androidaps.plugins.general.nsclient - -import android.content.Context -import androidx.work.Worker -import androidx.work.WorkerParameters -import androidx.work.workDataOf -import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.R -import info.nightscout.androidaps.database.AppRepository -import info.nightscout.androidaps.database.entities.UserEntry.Action -import info.nightscout.androidaps.database.entities.UserEntry.Sources -import info.nightscout.androidaps.database.entities.ValueWithUnit -import info.nightscout.androidaps.database.transactions.* -import info.nightscout.androidaps.extensions.* -import info.nightscout.androidaps.interfaces.Config -import info.nightscout.androidaps.logging.AAPSLogger -import info.nightscout.androidaps.logging.LTag -import info.nightscout.androidaps.logging.UserEntryLogger -import info.nightscout.androidaps.plugins.bus.RxBusWrapper -import info.nightscout.androidaps.receivers.DataWorker -import info.nightscout.androidaps.utils.JsonHelper -import info.nightscout.androidaps.utils.buildHelper.BuildHelper -import info.nightscout.androidaps.utils.sharedPreferences.SP -import java.util.concurrent.TimeUnit -import javax.inject.Inject - -// This will not be needed fpr NS v3 -// Now NS provides on _id of removed records - -class NSClientRemoveWorker( - context: Context, - params: WorkerParameters) : Worker(context, params) { - - @Inject lateinit var nsClientPlugin: NSClientPlugin - @Inject lateinit var dataWorker: DataWorker - @Inject lateinit var aapsLogger: AAPSLogger - @Inject lateinit var buildHelper: BuildHelper - @Inject lateinit var sp: SP - @Inject lateinit var config: Config - @Inject lateinit var repository: AppRepository - @Inject lateinit var rxBus: RxBusWrapper - @Inject lateinit var uel: UserEntryLogger - - override fun doWork(): Result { - // Do not accept removed data over WS. Only invalidated trough NSClient - @Suppress("ConstantConditionIf") - if (true) return Result.success() - - var ret = Result.success() - - val treatments = dataWorker.pickupJSONArray(inputData.getLong(DataWorker.STORE_KEY, -1)) - ?: return Result.failure(workDataOf("Error" to "missing input data")) - - for (i in 0 until treatments.length()) { - val json = treatments.getJSONObject(i) - val nsId = JsonHelper.safeGetString(json, "_id") ?: continue - - // room Temporary target - val temporaryTarget = temporaryTargetFromNsIdForInvalidating(nsId) - repository.runTransactionForResult(SyncNsTemporaryTargetTransaction(temporaryTarget, invalidateByNsOnly = true)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while invalidating temporary target", it) - ret = Result.failure(workDataOf("Error" to it.toString())) - } - .blockingGet() - .also { result -> - result.invalidated.forEach { tt -> - uel.log( - Action.TT_REMOVED, Sources.NSClient, - ValueWithUnit.TherapyEventTTReason(tt.reason), - ValueWithUnit.Mgdl(tt.lowTarget), - ValueWithUnit.Mgdl(tt.highTarget).takeIf { tt.lowTarget != tt.highTarget }, - ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(tt.duration).toInt()).takeIf { tt.duration != 0L } - ) - } - } - - // room Therapy Event - val therapyEvent = therapyEventFromNsIdForInvalidating(nsId) - repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEvent, invalidateByNsOnly = true)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while invalidating therapy event", it) - ret = Result.failure(workDataOf("Error" to it.toString())) - } - .blockingGet() - .also { result -> - result.invalidated.forEach { - uel.log(Action.CAREPORTAL_REMOVED, Sources.NSClient, - (it.note ?: ""), - ValueWithUnit.Timestamp(it.timestamp), - ValueWithUnit.TherapyEventType(it.type)) - } - } - - // room Bolus - val bolus = bolusFromNsIdForInvalidating(nsId) - repository.runTransactionForResult(SyncNsBolusTransaction(bolus, invalidateByNsOnly = true)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while invalidating bolus", it) - ret = Result.failure(workDataOf("Error" to it.toString())) - } - .blockingGet() - .also { result -> - result.invalidated.forEach { - uel.log(Action.CAREPORTAL_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp), - ValueWithUnit.Insulin(it.amount)) - } - } - - // room Carbs - val carbs = carbsFromNsIdForInvalidating(nsId) - repository.runTransactionForResult(SyncNsCarbsTransaction(carbs, invalidateByNsOnly = true)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while invalidating carbs", it) - ret = Result.failure(workDataOf("Error" to it.toString())) - } - .blockingGet() - .also { result -> - result.invalidated.forEach { - uel.log(Action.CAREPORTAL_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp), - ValueWithUnit.Gram(it.amount.toInt())) - } - } - - // room TemporaryBasal - val temporaryBasal = temporaryBasalFromNsIdForInvalidating(nsId) - repository.runTransactionForResult(SyncNsTemporaryBasalTransaction(temporaryBasal, invalidateByNsOnly = true)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while invalidating temporary basal", it) - ret = Result.failure(workDataOf("Error" to it.toString())) - } - .blockingGet() - .also { result -> - result.invalidated.forEach { - uel.log( - Action.CAREPORTAL_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp), - ValueWithUnit.UnitPerHour(it.rate)) - } - } - // room ExtendedBolus - val extendedBolus = extendedBolusFromNsIdForInvalidating(nsId) - repository.runTransactionForResult(SyncNsExtendedBolusTransaction(extendedBolus, invalidateByNsOnly = true)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while invalidating extended bolus", it) - ret = Result.failure(workDataOf("Error" to it.toString())) - } - .blockingGet() - .also { result -> - result.invalidated.forEach { - uel.log( - Action.CAREPORTAL_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp), - ValueWithUnit.UnitPerHour(it.rate)) - } - } - - // room ProfileSwitch - repository.runTransactionForResult(InvalidateNsIdProfileSwitchTransaction(nsId)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while invalidating ProfileSwitch", it) - ret = Result.failure(workDataOf("Error" to it.toString())) - } - .blockingGet() - .also { result -> - result.invalidated.forEach { - uel.log( - Action.CAREPORTAL_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp)) - } - } - } - - return ret - } - - init { - (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) - } -} \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt index 8d0a8691c123..0148b3438c4a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt @@ -491,30 +491,13 @@ class NSClientService : DaggerService() { } if (data.has("treatments")) { val treatments = data.getJSONArray("treatments") - val removedTreatments = JSONArray() val addedOrUpdatedTreatments = JSONArray() if (treatments.length() > 0) rxBus.send(EventNSClientNewLog("DATA", "received " + treatments.length() + " treatments")) for (index in 0 until treatments.length()) { val jsonTreatment = treatments.getJSONObject(index) val action = safeGetStringAllowNull(jsonTreatment, "action", null) - val mills = safeGetLong(jsonTreatment, "mills") - if (action == null) addedOrUpdatedTreatments.put(jsonTreatment) else if (action == "update") addedOrUpdatedTreatments.put(jsonTreatment) else if (action == "remove" && mills > dateUtil.now() - days(1).msecs()) // handle 1 day old deletions only - removedTreatments.put(jsonTreatment) - } - if (removedTreatments.length() > 0) { - dataWorker.enqueue( - OneTimeWorkRequest.Builder(NSClientRemoveWorker::class.java) - .setInputData(dataWorker.storeInputData(removedTreatments, null)) - .build()) - if (sp.getBoolean(R.string.key_nsclient_localbroadcasts, false)) { - val bundle = Bundle() - bundle.putString("treatments", removedTreatments.toString()) - bundle.putBoolean("delta", isDelta) - val intent = Intent(Intents.ACTION_REMOVED_TREATMENT) - intent.putExtras(bundle) - intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES) - broadcast(intent) - } + if (action == null) addedOrUpdatedTreatments.put(jsonTreatment) + else if (action == "update") addedOrUpdatedTreatments.put(jsonTreatment) } if (addedOrUpdatedTreatments.length() > 0) { dataWorker.enqueue( @@ -602,7 +585,8 @@ class NSClientService : DaggerService() { message.put("_id", _id) message.put("data", data) socket?.emit("dbUpdate", message, NSUpdateAck("dbUpdate", _id, aapsLogger, rxBus, originalObject)) - rxBus.send(EventNSClientNewLog("DBUPDATE $collection", "Sent " + originalObject.javaClass.simpleName + " " + _id + " " + progress)) + rxBus.send(EventNSClientNewLog("DBUPDATE $collection", "Sent " + originalObject.javaClass.simpleName + " " + + "" + _id + " " + data + progress)) } catch (e: JSONException) { aapsLogger.error("Unhandled exception", e) } diff --git a/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt b/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt index 5f13bfe3517c..327583b66216 100644 --- a/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt +++ b/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt @@ -8,7 +8,7 @@ import org.json.JSONException import org.json.JSONObject @Suppress("SpellCheckingInspection") -class IobTotal(var time: Long) : DataPointWithLabelInterface { +class IobTotal(val time: Long) : DataPointWithLabelInterface { @JvmField var iob = 0.0 @JvmField var activity = 0.0 diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/ExtendedBolusExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/ExtendedBolusExtension.kt index d64713d0ad19..d42d4c4b4197 100644 --- a/core/src/main/java/info/nightscout/androidaps/extensions/ExtendedBolusExtension.kt +++ b/core/src/main/java/info/nightscout/androidaps/extensions/ExtendedBolusExtension.kt @@ -63,6 +63,7 @@ fun ExtendedBolus.toRealJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = .put("enteredBy", "openaps://" + "AndroidAPS") .put("eventType", TherapyEvent.Type.COMBO_BOLUS.text) .put("duration", T.msecs(duration).mins()) + .put("durationInMilliseconds", duration) .put("splitNow", 0) .put("splitExt", 100) .put("enteredinsulin", amount) @@ -99,6 +100,7 @@ fun extendedBolusFromJson(jsonObject: JSONObject): ExtendedBolus? { if (JsonHelper.safeGetIntAllowNull(jsonObject, "splitExt") != 100) return null val amount = JsonHelper.safeGetDoubleAllowNull(jsonObject, "enteredinsulin") ?: return null val duration = JsonHelper.safeGetLongAllowNull(jsonObject, "duration") ?: return null + val durationInMilliseconds = JsonHelper.safeGetLongAllowNull(jsonObject, "durationInMilliseconds") val isValid = JsonHelper.safeGetBoolean(jsonObject, "isValid", true) val isEmulatingTempBasal = JsonHelper.safeGetBoolean(jsonObject, "isEmulatingTempBasal", false) val id = JsonHelper.safeGetStringAllowNull(jsonObject, "_id", null) ?: return null @@ -114,7 +116,7 @@ fun extendedBolusFromJson(jsonObject: JSONObject): ExtendedBolus? { return ExtendedBolus( timestamp = timestamp, amount = amount, - duration = T.mins(duration).msecs(), + duration = durationInMilliseconds ?: T.mins(duration).msecs(), isEmulatingTempBasal = isEmulatingTempBasal, isValid = isValid ).also { diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt index c18089c6c202..152a3fcb1d1e 100644 --- a/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt +++ b/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt @@ -15,6 +15,7 @@ fun OfflineEvent.toJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = .put("eventType", TherapyEvent.Type.APS_OFFLINE.text) .put("isValid", isValid) .put("duration", T.msecs(duration).mins()) + .put("durationInMilliseconds", duration) .put("reason", reason.name) .also { if (interfaceIDs.pumpId != null) it.put("pumpId", interfaceIDs.pumpId) @@ -39,6 +40,7 @@ fun OfflineEvent.toJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = fun offlineEventFromJson(jsonObject: JSONObject): OfflineEvent? { val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null val duration = JsonHelper.safeGetLong(jsonObject, "duration") + val durationInMilliseconds = JsonHelper.safeGetLongAllowNull(jsonObject, "durationInMilliseconds") val isValid = JsonHelper.safeGetBoolean(jsonObject, "isValid", true) val id = JsonHelper.safeGetStringAllowNull(jsonObject, "_id", null) val pumpId = JsonHelper.safeGetLongAllowNull(jsonObject, "pumpId", null) @@ -50,7 +52,7 @@ fun offlineEventFromJson(jsonObject: JSONObject): OfflineEvent? { return OfflineEvent( timestamp = timestamp, - duration = T.mins(duration).msecs(), + duration = durationInMilliseconds ?: T.mins(duration).msecs(), isValid = isValid, reason = reason ).also { diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryBasalExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryBasalExtension.kt index 391fd5fed6a0..fca80bd85b31 100644 --- a/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryBasalExtension.kt +++ b/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryBasalExtension.kt @@ -69,6 +69,7 @@ fun TemporaryBasal.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil, .put("eventType", TherapyEvent.Type.TEMPORARY_BASAL.text) .put("isValid", isValid) .put("duration", T.msecs(duration).mins()) + .put("durationInMilliseconds", duration) // rounded duration leads to different basal IOB .put("rate", rate) .put("type", type.name) .also { @@ -99,6 +100,7 @@ fun temporaryBasalFromJson(jsonObject: JSONObject): TemporaryBasal? { val percent = JsonHelper.safeGetDoubleAllowNull(jsonObject, "percent") val absolute = JsonHelper.safeGetDoubleAllowNull(jsonObject, "absolute") val duration = JsonHelper.safeGetLongAllowNull(jsonObject, "duration") ?: return null + val durationInMilliseconds = JsonHelper.safeGetLongAllowNull(jsonObject, "durationInMilliseconds") val type = fromString(JsonHelper.safeGetString(jsonObject, "type")) val isValid = JsonHelper.safeGetBoolean(jsonObject, "isValid", true) val id = JsonHelper.safeGetStringAllowNull(jsonObject, "_id", null) ?: return null @@ -114,7 +116,7 @@ fun temporaryBasalFromJson(jsonObject: JSONObject): TemporaryBasal? { return TemporaryBasal( timestamp = timestamp, rate = rate, - duration = T.mins(duration).msecs(), + duration = durationInMilliseconds ?: T.mins(duration).msecs(), type = type, isAbsolute = percent == null, isValid = isValid diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryTargetExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryTargetExtension.kt index 9c45de88ade2..cb4e48454fb3 100644 --- a/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryTargetExtension.kt +++ b/core/src/main/java/info/nightscout/androidaps/extensions/TemporaryTargetExtension.kt @@ -50,6 +50,7 @@ fun temporaryTargetFromJson(jsonObject: JSONObject): TemporaryTarget? { val units = GlucoseUnit.fromText(JsonHelper.safeGetString(jsonObject, "units", Constants.MGDL)) val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null val duration = JsonHelper.safeGetLongAllowNull(jsonObject, "duration", null) ?: return null + val durationInMilliseconds = JsonHelper.safeGetLongAllowNull(jsonObject, "durationInMilliseconds") var low = JsonHelper.safeGetDouble(jsonObject, "targetBottom") low = Profile.toMgdl(low, units) var high = JsonHelper.safeGetDouble(jsonObject, "targetTop") @@ -81,7 +82,7 @@ fun temporaryTargetFromJson(jsonObject: JSONObject): TemporaryTarget? { } val tt = TemporaryTarget( timestamp = timestamp, - duration = TimeUnit.MINUTES.toMillis(duration), + duration = durationInMilliseconds ?: T.mins(duration).msecs(), reason = reason, lowTarget = low, highTarget = high, @@ -95,6 +96,7 @@ fun TemporaryTarget.toJson(isAdd: Boolean, units: GlucoseUnit, dateUtil: DateUti JSONObject() .put("eventType", TherapyEvent.Type.TEMPORARY_TARGET.text) .put("duration", T.msecs(duration).mins()) + .put("durationInMilliseconds", duration) .put("isValid", isValid) .put("created_at", dateUtil.toISOString(timestamp)) .put("enteredBy", "AndroidAPS").also { diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt index f02488f617f9..893baf09a269 100644 --- a/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt +++ b/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt @@ -73,6 +73,7 @@ fun therapyEventFromJson(jsonObject: JSONObject): TherapyEvent? { val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null val type = TherapyEvent.Type.fromString(JsonHelper.safeGetString(jsonObject, "eventType", TherapyEvent.Type.NONE.text)) val duration = JsonHelper.safeGetLong(jsonObject, "duration") + val durationInMilliseconds = JsonHelper.safeGetLongAllowNull(jsonObject, "durationInMilliseconds") val glucose = JsonHelper.safeGetDoubleAllowNull(jsonObject, "glucose") val glucoseType = TherapyEvent.MeterType.fromString(JsonHelper.safeGetString(jsonObject, "glucoseType")) val enteredBy = JsonHelper.safeGetStringAllowNull(jsonObject, "enteredBy", null) @@ -84,7 +85,7 @@ fun therapyEventFromJson(jsonObject: JSONObject): TherapyEvent? { val te = TherapyEvent( timestamp = timestamp, - duration = TimeUnit.MINUTES.toMillis(duration), + duration = durationInMilliseconds ?: T.mins(duration).msecs(), glucoseUnit = glucoseUnit, type = type, glucose = glucose, @@ -106,6 +107,7 @@ fun TherapyEvent.toJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = .put("units", if (glucoseUnit == TherapyEvent.GlucoseUnit.MGDL) Constants.MGDL else Constants.MMOL) .also { if (duration != 0L) it.put("duration", T.msecs(duration).mins()) + if (duration != 0L) it.put("durationInMilliseconds", duration) if (note != null) it.put("notes", note) if (glucose != null) it.put("glucose", glucose) if (glucoseType != null) it.put("glucoseType", glucoseType!!.text) diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt index 59d9bc111144..5feb71b10486 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt @@ -24,7 +24,7 @@ class CobInfo(val timestamp: Long, val displayCob: Double?, val futureCarbs: Dou var cobText = resourceHelper.gs(R.string.format_carbs, displayCob.toInt()) if (futureCarbs > 0) cobText += "(" + DecimalFormatter.to0Decimal(futureCarbs) + ")" // This is only temporary for debugging - if (isDev) cobText += "\n" + dateUtil.timeStringWithSeconds(timestamp) + if (isDev) cobText += "\n" + dateUtil.timeString(timestamp) cobText } else null } diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsBolusTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsBolusTransaction.kt index 6fbaa57ca27a..5c453a3673f5 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsBolusTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsBolusTransaction.kt @@ -5,7 +5,7 @@ import info.nightscout.androidaps.database.entities.Bolus /** * Sync the Bolus from NS */ -class SyncNsBolusTransaction(private val bolus: Bolus, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsBolusTransaction(private val bolus: Bolus) : Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -25,8 +25,6 @@ class SyncNsBolusTransaction(private val bolus: Bolus, private val invalidateByN return result } - if (invalidateByNsOnly) return result - // not known nsId val existing = database.bolusDao.findByTimestamp(bolus.timestamp) if (existing != null && existing.interfaceIDs.nightscoutId == null) { diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsCarbsTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsCarbsTransaction.kt index 40443b06e90b..9d4378c01ba9 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsCarbsTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsCarbsTransaction.kt @@ -5,7 +5,7 @@ import info.nightscout.androidaps.database.entities.Carbs /** * Sync the carbs from NS */ -class SyncNsCarbsTransaction(private val carbs: Carbs, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsCarbsTransaction(private val carbs: Carbs) : Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -25,8 +25,6 @@ class SyncNsCarbsTransaction(private val carbs: Carbs, private val invalidateByN return result } - if (invalidateByNsOnly) return result - // not known nsId val existing = database.carbsDao.findByTimestamp(carbs.timestamp) if (existing != null && existing.interfaceIDs.nightscoutId == null) { diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsEffectiveProfileSwitchTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsEffectiveProfileSwitchTransaction.kt index fd7eced13c60..93579275e42c 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsEffectiveProfileSwitchTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsEffectiveProfileSwitchTransaction.kt @@ -5,7 +5,7 @@ import info.nightscout.androidaps.database.entities.EffectiveProfileSwitch /** * Sync the EffectiveProfileSwitch from NS */ -class SyncNsEffectiveProfileSwitchTransaction(private val effectiveProfileSwitch: EffectiveProfileSwitch, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsEffectiveProfileSwitchTransaction(private val effectiveProfileSwitch: EffectiveProfileSwitch) : Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -25,8 +25,6 @@ class SyncNsEffectiveProfileSwitchTransaction(private val effectiveProfileSwitch return result } - if (invalidateByNsOnly) return result - // not known nsId val existing = database.effectiveProfileSwitchDao.findByTimestamp(effectiveProfileSwitch.timestamp) if (existing != null && existing.interfaceIDs.nightscoutId == null) { diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsExtendedBolusTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsExtendedBolusTransaction.kt index 49845038908e..4219ce680312 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsExtendedBolusTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsExtendedBolusTransaction.kt @@ -7,7 +7,8 @@ import kotlin.math.abs /** * Sync the Extended bolus from NS */ -class SyncNsExtendedBolusTransaction(private val extendedBolus: ExtendedBolus, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsExtendedBolusTransaction(private val extendedBolus: ExtendedBolus) : + Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -26,11 +27,14 @@ class SyncNsExtendedBolusTransaction(private val extendedBolus: ExtendedBolus, p database.extendedBolusDao.updateExistingEntry(current) result.invalidated.add(current) } + if (current.duration != extendedBolus.duration) { + current.duration = extendedBolus.duration + database.extendedBolusDao.updateExistingEntry(current) + result.updatedDuration.add(current) + } return result } - if (invalidateByNsOnly) return result - // not known nsId val running = database.extendedBolusDao.getExtendedBolusActiveAt(extendedBolus.timestamp).blockingGet() if (running != null && abs(running.timestamp - extendedBolus.timestamp) < 1000 && running.interfaceIDs.nightscoutId == null) { // allow missing milliseconds @@ -66,6 +70,7 @@ class SyncNsExtendedBolusTransaction(private val extendedBolus: ExtendedBolus, p class TransactionResult { val updatedNsId = mutableListOf() + val updatedDuration = mutableListOf() val inserted = mutableListOf() val invalidated = mutableListOf() val ended = mutableListOf() diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsFoodTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsFoodTransaction.kt index f651b0e7eee4..019c43a8b84c 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsFoodTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsFoodTransaction.kt @@ -5,7 +5,7 @@ import info.nightscout.androidaps.database.entities.Food /** * Sync the TherapyEvents from NS */ -class SyncNsFoodTransaction(private val food: Food, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsFoodTransaction(private val food: Food) : Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -26,8 +26,6 @@ class SyncNsFoodTransaction(private val food: Food, private val invalidateByNsOn return result } - if (invalidateByNsOnly) return result - // not known nsId, add database.foodDao.insertNewEntry(food) result.inserted.add(food) diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsOfflineEventTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsOfflineEventTransaction.kt index d7a741436c59..d5fa3560398e 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsOfflineEventTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsOfflineEventTransaction.kt @@ -7,7 +7,8 @@ import kotlin.math.abs /** * Sync the OfflineEvent from NS */ -class SyncNsOfflineEventTransaction(private val offlineEvent: OfflineEvent, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsOfflineEventTransaction(private val offlineEvent: OfflineEvent) : + Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -26,11 +27,14 @@ class SyncNsOfflineEventTransaction(private val offlineEvent: OfflineEvent, priv database.offlineEventDao.updateExistingEntry(current) result.invalidated.add(current) } + if (current.duration != offlineEvent.duration) { + current.duration = offlineEvent.duration + database.offlineEventDao.updateExistingEntry(current) + result.updatedDuration.add(current) + } return result } - if (invalidateByNsOnly) return result - // not known nsId val running = database.offlineEventDao.getOfflineEventActiveAt(offlineEvent.timestamp).blockingGet() if (running != null && abs(running.timestamp - offlineEvent.timestamp) < 1000 && running.interfaceIDs.nightscoutId == null) { // allow missing milliseconds @@ -66,6 +70,7 @@ class SyncNsOfflineEventTransaction(private val offlineEvent: OfflineEvent, priv class TransactionResult { val updatedNsId = mutableListOf() + val updatedDuration = mutableListOf() val inserted = mutableListOf() val invalidated = mutableListOf() val ended = mutableListOf() diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsProfileSwitchTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsProfileSwitchTransaction.kt index 40e1ff0aa0b9..e99d79a334d8 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsProfileSwitchTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsProfileSwitchTransaction.kt @@ -5,7 +5,7 @@ import info.nightscout.androidaps.database.entities.ProfileSwitch /** * Sync the ProfileSwitch from NS */ -class SyncNsProfileSwitchTransaction(private val profileSwitch: ProfileSwitch, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsProfileSwitchTransaction(private val profileSwitch: ProfileSwitch) : Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -25,8 +25,6 @@ class SyncNsProfileSwitchTransaction(private val profileSwitch: ProfileSwitch, p return result } - if (invalidateByNsOnly) return result - // not known nsId val existing = database.profileSwitchDao.findByTimestamp(profileSwitch.timestamp) if (existing != null && existing.interfaceIDs.nightscoutId == null) { diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryBasalTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryBasalTransaction.kt index 3c69328e3e12..8a4931617a87 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryBasalTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryBasalTransaction.kt @@ -7,7 +7,9 @@ import kotlin.math.abs /** * Sync the Temporary Basal from NS */ -class SyncNsTemporaryBasalTransaction(private val temporaryBasal: TemporaryBasal, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsTemporaryBasalTransaction( + private val temporaryBasal: TemporaryBasal +) : Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -26,11 +28,14 @@ class SyncNsTemporaryBasalTransaction(private val temporaryBasal: TemporaryBasal database.temporaryBasalDao.updateExistingEntry(current) result.invalidated.add(current) } + if (current.duration != temporaryBasal.duration) { + current.duration = temporaryBasal.duration + database.temporaryBasalDao.updateExistingEntry(current) + result.updatedDuration.add(current) + } return result } - if (invalidateByNsOnly) return result - // not known nsId val running = database.temporaryBasalDao.getTemporaryBasalActiveAt(temporaryBasal.timestamp).blockingGet() if (running != null && abs(running.timestamp - temporaryBasal.timestamp) < 1000 && running.interfaceIDs.nightscoutId == null) { // allow missing milliseconds @@ -57,6 +62,7 @@ class SyncNsTemporaryBasalTransaction(private val temporaryBasal: TemporaryBasal class TransactionResult { val updatedNsId = mutableListOf() + val updatedDuration = mutableListOf() val inserted = mutableListOf() val invalidated = mutableListOf() val ended = mutableListOf() diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryTargetTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryTargetTransaction.kt index b5f0d694e292..a3eff6d1e6db 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryTargetTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryTargetTransaction.kt @@ -7,7 +7,8 @@ import kotlin.math.abs /** * Sync the TemporaryTarget from NS */ -class SyncNsTemporaryTargetTransaction(private val temporaryTarget: TemporaryTarget, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsTemporaryTargetTransaction(private val temporaryTarget: TemporaryTarget) : + Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -26,11 +27,14 @@ class SyncNsTemporaryTargetTransaction(private val temporaryTarget: TemporaryTar database.temporaryTargetDao.updateExistingEntry(current) result.invalidated.add(current) } + if (current.duration != temporaryTarget.duration) { + current.duration = temporaryTarget.duration + database.temporaryTargetDao.updateExistingEntry(current) + result.updatedDuration.add(current) + } return result } - if (invalidateByNsOnly) return result - // not known nsId val running = database.temporaryTargetDao.getTemporaryTargetActiveAt(temporaryTarget.timestamp).blockingGet() if (running != null && abs(running.timestamp - temporaryTarget.timestamp) < 1000 && running.interfaceIDs.nightscoutId == null) { // allow missing milliseconds @@ -66,6 +70,7 @@ class SyncNsTemporaryTargetTransaction(private val temporaryTarget: TemporaryTar class TransactionResult { val updatedNsId = mutableListOf() + val updatedDuration = mutableListOf() val inserted = mutableListOf() val invalidated = mutableListOf() val ended = mutableListOf() diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTherapyEventTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTherapyEventTransaction.kt index 64773a3739e1..5ed73cf9d862 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTherapyEventTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTherapyEventTransaction.kt @@ -5,7 +5,8 @@ import info.nightscout.androidaps.database.entities.TherapyEvent /** * Sync the TherapyEvents from NS */ -class SyncNsTherapyEventTransaction(private val therapyEvent: TherapyEvent, private val invalidateByNsOnly: Boolean) : Transaction() { +class SyncNsTherapyEventTransaction(private val therapyEvent: TherapyEvent) : + Transaction() { override fun run(): TransactionResult { val result = TransactionResult() @@ -22,11 +23,14 @@ class SyncNsTherapyEventTransaction(private val therapyEvent: TherapyEvent, priv database.therapyEventDao.updateExistingEntry(current) result.invalidated.add(current) } + if (current.duration != therapyEvent.duration) { + current.duration = therapyEvent.duration + database.therapyEventDao.updateExistingEntry(current) + result.updatedDuration.add(current) + } return result } - if (invalidateByNsOnly) return result - // not known nsId val existing = database.therapyEventDao.findByTimestamp(therapyEvent.type, therapyEvent.timestamp) if (existing != null && existing.interfaceIDs.nightscoutId == null) { @@ -46,6 +50,7 @@ class SyncNsTherapyEventTransaction(private val therapyEvent: TherapyEvent, priv class TransactionResult { val updatedNsId = mutableListOf() + val updatedDuration = mutableListOf() val inserted = mutableListOf() val invalidated = mutableListOf() } From 59ecd1818d7047731164e1c81956ec7969147d8b Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 7 Oct 2021 23:30:16 +0200 Subject: [PATCH 009/294] New Crowdin updates (#714) * Update source file strings.xml * New translations strings.xml (German) * New translations strings.xml (Hebrew) * New translations strings.xml (Hebrew) * New translations strings.xml (Hebrew) * New translations strings.xml (Hebrew) * New translations strings.xml (Hebrew) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Hebrew) * New translations strings.xml (Norwegian) * Update source file strings.xml * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Korean) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Dutch) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Swedish) * New translations exam.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Hebrew) * New translations strings.xml (Spanish) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (Bulgarian) * New translations strings.xml (Romanian) * New translations strings.xml (Swedish) * New translations strings.xml (German) * New translations strings.xml (German) * New translations strings.xml (German) * New translations strings.xml (Irish) * New translations strings.xml (Czech) * New translations strings.xml (Czech) * New translations strings.xml (Czech) * New translations strings.xml (Swedish) * New translations strings.xml (Czech) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) * New translations validator.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (French) --- app/src/main/res/values-fr-rFR/strings.xml | 1 + app/src/main/res/values-no-rNO/strings.xml | 1 + app/src/main/res/values-sk-rSK/strings.xml | 1 + app/src/main/res/values-sv-rSE/exam.xml | 1 + app/src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values-no-rNO/strings.xml | 4 + .../src/main/res/values-sv-rSE/strings.xml | 4 + core/src/main/res/values-cs-rCZ/strings.xml | 3 + core/src/main/res/values-de-rDE/strings.xml | 3 + core/src/main/res/values-fr-rFR/strings.xml | 3 + core/src/main/res/values-iw-rIL/strings.xml | 5 +- core/src/main/res/values-no-rNO/strings.xml | 18 +++ core/src/main/res/values-sk-rSK/strings.xml | 3 + core/src/main/res/values-sv-rSE/strings.xml | 152 ++++++++++++++++++ core/src/main/res/values-sv-rSE/validator.xml | 3 + dana/src/main/res/values-bg-rBG/strings.xml | 2 - dana/src/main/res/values-cs-rCZ/strings.xml | 3 +- dana/src/main/res/values-de-rDE/strings.xml | 3 +- dana/src/main/res/values-es-rES/strings.xml | 2 - dana/src/main/res/values-fr-rFR/strings.xml | 3 +- dana/src/main/res/values-ga-rIE/strings.xml | 2 - dana/src/main/res/values-it-rIT/strings.xml | 2 - dana/src/main/res/values-iw-rIL/strings.xml | 3 +- dana/src/main/res/values-ko-rKR/strings.xml | 2 - dana/src/main/res/values-lt-rLT/strings.xml | 2 - dana/src/main/res/values-nl-rNL/strings.xml | 2 - dana/src/main/res/values-no-rNO/strings.xml | 3 +- dana/src/main/res/values-pl-rPL/strings.xml | 2 - dana/src/main/res/values-pt-rBR/strings.xml | 2 - dana/src/main/res/values-pt-rPT/strings.xml | 2 - dana/src/main/res/values-ro-rRO/strings.xml | 2 - dana/src/main/res/values-ru-rRU/strings.xml | 2 - dana/src/main/res/values-sk-rSK/strings.xml | 3 +- dana/src/main/res/values-sv-rSE/strings.xml | 3 +- .../src/main/res/values-cs-rCZ/strings.xml | 35 ++++ .../src/main/res/values-de-rDE/strings.xml | 1 - .../src/main/res/values-fr-rFR/strings.xml | 1 - .../src/main/res/values-it-rIT/strings.xml | 1 - .../src/main/res/values-iw-rIL/strings.xml | 1 - .../src/main/res/values-ko-rKR/strings.xml | 1 - .../src/main/res/values-no-rNO/strings.xml | 1 - .../src/main/res/values-ru-rRU/strings.xml | 1 - .../src/main/res/values-sk-rSK/strings.xml | 25 ++- .../src/main/res/values-cs-rCZ/strings.xml | 1 + .../src/main/res/values-de-rDE/strings.xml | 1 + .../src/main/res/values-fr-rFR/strings.xml | 1 + .../src/main/res/values-iw-rIL/strings.xml | 1 + .../src/main/res/values-no-rNO/strings.xml | 1 + .../src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values-no-rNO/strings.xml | 4 + .../src/main/res/values-sv-rSE/strings.xml | 8 + .../src/main/res/values-no-rNO/strings.xml | 12 ++ .../src/main/res/values-no-rNO/strings.xml | 9 ++ .../src/main/res/values-sv-rSE/strings.xml | 9 ++ .../src/main/res/values-iw-rIL/strings.xml | 4 +- 55 files changed, 315 insertions(+), 52 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index e9e2d67f8477..c8642e2879a2 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -495,6 +495,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Transmettre les Gly vers xDrip+ Dans xDrip+ veuillez séléctionner 640g/Eversense comme source de données Glycémie NSClient + Gly NS Calcul de Glycémie Calcul IA du Bolus Calcul IA du Basal diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index f6abab15410c..2e186bbf69ed 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -494,6 +494,7 @@ Send BS data til xDrip+ I xDrip+ velg 640G/Eversens som datakilde NSClient BS + NS BS BS beregning Bolus IOB beregning Basal IOB beregning diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index a935d2f92218..1c54bb4eb4e4 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -494,6 +494,7 @@ Odosielať glykémie do xDrip+ V xDrip+ vyberte zdroj dát 640g/Eversense Glykémie z NS + NS GL Výpočet glykémie Výpočet bolusového IOB Výpočet bazálneho IOB diff --git a/app/src/main/res/values-sv-rSE/exam.xml b/app/src/main/res/values-sv-rSE/exam.xml index 8812d30b6004..133c9a1368fe 100644 --- a/app/src/main/res/values-sv-rSE/exam.xml +++ b/app/src/main/res/values-sv-rSE/exam.xml @@ -132,6 +132,7 @@ Fel i bolusinmatning Vad ska du göra om du fått mindre insulin än vad pumpens historik visar, t.ex. på grund av en ocklusion, en felaktig kanyl eller om du glömt att sätta fast pumpen efter en dusch?  Ta bort insulindata från Nightscout för att ta bort den från pumpens historik. + Jämför värden i AndroidAPS och pumpens historia (om pumpen stöder detta). Ge en bolus med en del av det insulin du saknar antingen med penna eller genom att använda förfyllningsfunktionen. Gör ingenting och låt AndroidAPS korrigera eventuella höga blodglukosnivåer. Aktivt Insulin (IOB) diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 3a808d3a306a..94fb793a21da 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -495,6 +495,7 @@ Eversense-appen. Skicka BG-data till xDrip+ Välj \"640G/Eversense\" som datakälla i xDrip+ NSClient BG + NS BG Använd BG Använd bolus-IOB Använd basal-IOB diff --git a/automation/src/main/res/values-no-rNO/strings.xml b/automation/src/main/res/values-no-rNO/strings.xml index 29def33fd2a4..1df8018334de 100644 --- a/automation/src/main/res/values-no-rNO/strings.xml +++ b/automation/src/main/res/values-no-rNO/strings.xml @@ -38,6 +38,9 @@ BS data er ikke tilgjengelig BS %1$s %2$.0f %3$s BS %1$s %2$.1f %3$s + Temp target finnes ikke + Temp target %1$s %2$.0f %3$s + Temp target %1$s %2$.1f %3$s Profil prosent %1$s %2$d IOB %1$s %2$.1f Og @@ -86,6 +89,7 @@ Lat: Long: Glukose [%1$s]: + Target [%1$s]: Siste bolus Siste bolus for %1$s %2$s min siden COB diff --git a/automation/src/main/res/values-sv-rSE/strings.xml b/automation/src/main/res/values-sv-rSE/strings.xml index 464cfdb7e1f6..58b952a2abc1 100644 --- a/automation/src/main/res/values-sv-rSE/strings.xml +++ b/automation/src/main/res/values-sv-rSE/strings.xml @@ -38,6 +38,9 @@ BG-data är inte tillgängligt BG %1$s %2$.0f %3$s BG %1$s %2$.1f %3$s + Temp mål finns inte + Temp mål %1$s %2$.0f %3$s + Temp mål %1$s %2$.1f %3$s Profil pct %1$s %2$d IOB %1$s %2$.1f och @@ -86,6 +89,7 @@ Lat: Lon: BG [%1$s]: + Mål [%1$s]: Senaste bolus Senaste bolus %1$s %2$s min sedan COB diff --git a/core/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml index 33289e55b3b2..874463d112c6 100644 --- a/core/src/main/res/values-cs-rCZ/strings.xml +++ b/core/src/main/res/values-cs-rCZ/strings.xml @@ -18,6 +18,7 @@ Připojeno Odpojeno Odpojuji + Čekám na odpojení AndroidAPS restartován %1$.1f U %1$.2f U @@ -213,6 +214,8 @@ Smyčka NS Záznam + Načítání historie pumpy + Ikona pumpy Vypršel čas připojování diff --git a/core/src/main/res/values-de-rDE/strings.xml b/core/src/main/res/values-de-rDE/strings.xml index 70ba734fdd87..754677d4624b 100644 --- a/core/src/main/res/values-de-rDE/strings.xml +++ b/core/src/main/res/values-de-rDE/strings.xml @@ -18,6 +18,7 @@ Verbunden Getrennt Verbindung wird getrennt + Warte auf Trennung der Verbindung AndroidAPS gestartet %1$.1f IE %1$.2f IE @@ -213,6 +214,8 @@ Loop NS Eintrag + Pumpen-Historie wird gelesen + Pumpen-Symbol Zeitüberschreitung bei Verbindung diff --git a/core/src/main/res/values-fr-rFR/strings.xml b/core/src/main/res/values-fr-rFR/strings.xml index 756cafcab69d..7c38f053d39d 100644 --- a/core/src/main/res/values-fr-rFR/strings.xml +++ b/core/src/main/res/values-fr-rFR/strings.xml @@ -18,6 +18,7 @@ Connectée Déconnectée Déconnexion en cours + Attente de déconnexion AndroidAPS est lancé %1$.1f U %1$.2f U @@ -213,6 +214,8 @@ Boucle NS Enregistrement + Lecture historique pompe + Icône Pompe Connexion expirée diff --git a/core/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml index c62d2a2dfed9..e57c6dae69e9 100644 --- a/core/src/main/res/values-iw-rIL/strings.xml +++ b/core/src/main/res/values-iw-rIL/strings.xml @@ -18,6 +18,7 @@ מחובר מנותק מתנתק + ממתין לניתוק AndroidAPS הופעל %1$.1f יח\' %1$.2f יח\' @@ -29,7 +30,7 @@ %1$d דק\' המשאבה אינה פנויה שגיאה בחיבור המשאבה - הגיעתם למגבלה המותרת + הגעתם למגבלה המותרת משימות סגור נא להמתין… @@ -213,6 +214,8 @@ לולאה נייטסקאוט הקלטה + קורא היסטוריית משאבה + צלמית משאבה החיבור חרג ממגבלת הזמן diff --git a/core/src/main/res/values-no-rNO/strings.xml b/core/src/main/res/values-no-rNO/strings.xml index 69d7f3835ebb..145ee0d1daf6 100644 --- a/core/src/main/res/values-no-rNO/strings.xml +++ b/core/src/main/res/values-no-rNO/strings.xml @@ -18,6 +18,7 @@ Tilkoblet Frakoblet Frakobler + Venter på frakobling AndroidAPS startet %1$.1f E %1$.2f E @@ -196,6 +197,7 @@ OpenAPS offline Bytte pumpebatteri Temp mål + Temp target verdi Avbryt temp mål Bolus assistent Finger @@ -212,6 +214,8 @@ Loop NS Registrer + Leser pumpehistorikk + Pumpe ikon Tilkoblingen ble tidsavbrutt @@ -385,6 +389,20 @@ LOOP FJERNET ANNET + Profil lavt blodsukkermål + Profil høyt blodsukkermål + Midlertidig mål nedre grense + Midlertidig mål øvre grense + Midlertidig målverdi + Profil DIA verdi + Profil insulin følsomhet (IF) + Maksimal profil basalverdi + Nåværende basalverdi + Profil karbohydratfaktor (IK) + %1$.2f begrenset til %2$.2f + »%1$s« er utenfor lovlige grenseverdier + »%1$s« %2$.2f er utenfor lovlige grenseverdier + Basal verdi %1$d dag %1$d dager diff --git a/core/src/main/res/values-sk-rSK/strings.xml b/core/src/main/res/values-sk-rSK/strings.xml index 10c4e30f107e..7ff72768518b 100644 --- a/core/src/main/res/values-sk-rSK/strings.xml +++ b/core/src/main/res/values-sk-rSK/strings.xml @@ -18,6 +18,7 @@ Pripojené Odpojené Odpájanie + Čakám na odpojenie AndroidAPS spustený %1$.1f JI %1$.2f JI @@ -213,6 +214,8 @@ Uzavretý okruh NS Záznam + Načítavam históriu z pumpy + Ikona pumpy Vypršal čas na pripojenie diff --git a/core/src/main/res/values-sv-rSE/strings.xml b/core/src/main/res/values-sv-rSE/strings.xml index 4c9a90f99a6b..cca77188e81e 100644 --- a/core/src/main/res/values-sv-rSE/strings.xml +++ b/core/src/main/res/values-sv-rSE/strings.xml @@ -2,6 +2,7 @@ + Uppdatera Fel Ej vald Lyckades inte uppdatera basalprofilen @@ -17,6 +18,7 @@ Ansluten Frånkopplad Kopplar från + Väntar på frånkoppling AndroidAPS startad %1$.1fU %1$.2fU @@ -61,6 +63,8 @@ Händelsetyp mg/dl mmol/l + g + % Avancerade inställningar Bluetooth Bluetooth-övervakare @@ -70,26 +74,38 @@ Nej LOOP INAKTIVERAD PGA BEGRÄNSNINGAR Bolus %1$.2f enheter levererat + OK Ingen giltig data om temp basaler fanns i pumpen Begränsar max IOB till %1$.1f pga %2$s osäker användning Pumpen kan inte nås + Förlängd bolus Tiden uppdaterad i pumpen + Avsluta Ta bort post + Loop är inaktiverad + Larm Inaktivera loop Aktivera loop Återuppta loop Pausa loop + Duration [min] Avisering Ingen profil laddad från Nightscout ännu finns finns inte Glukos + IOB + COB Namn: Tid WiFi nätverksnamn + Laddar… När + Anteckning + Ta bort Lägg till + Data kommer från en annan pump. Byt pumpdrivrutin för att återställa. Max basal: %1$.2f E/h pga %2$s pumpbegränsning @@ -105,6 +121,7 @@ TA BORT Enheten stöder inte BLE. + Bluetooth Low Energy stöds inte, eller så är enheten inte parkopplad. Bluetooth är avstängt. Platsdata är inte aktiverat För att Bluetooth ska fungera med nyare enheter, måste platsdata vara aktiverat. AAPS sparar inte din plats och det kan stängas av efter att enheten har parkopplats. @@ -155,6 +172,7 @@ %1$s: ∑: %2$.2fU Bol: %3$.2fU Bas: %4$.2fU(%5$.0f%%)]]> %1$s: ∑: %2$.2fU Bol: %3$.2fU Bas: %4$.2fU(%5$.0f%%) KH: %6$.0fg]]> + %1$s: %2$s om %3$d dagar
]]>
BG-kontroll Manuellt BG eller kalibrering @@ -165,6 +183,8 @@ Byte pumpkanyl Byte CGM-sensor Start CGM-sensor + Stoppa CGM-sensor + Diabeteshundlarm Byte insulinreservoar Profilbyte Mellanmålsbolus @@ -177,6 +197,7 @@ OpenAPS Offline Byte pumpbatteri Temp mål + Temp målvärde Avbryt temp mål Kalkylator Finger @@ -189,6 +210,12 @@ Klocka (Wear) Automation Anpassad + Pump + Loop + NS + Post + Läser historik från pumpen + Pumpikon Anslutningen tog för lång tid @@ -222,6 +249,7 @@ %1$dh %2$dm Tysta i 5 minuter + Filformat Skapad AAPS-version Build-variant @@ -260,7 +288,131 @@ Du kör en ogiltig version. Loop avstängd! Version %1$s tillgänglig + Starta om telefonen eller AndroidAPS från systeminställningar,\nannars kommer AndroidAPS inte kunna logga fel (viktigt att kunna spåra och verifiera att algoritmerna fungerar korrekt)! + M + T + O + T + F + L + S + BOLUS + BOLUS KALKYLATOR + FÖRLÄNGD BOLUS + SUPERBOLUS TEMPBASAL + KH + FÖRLÄNGDA KH + TEMP BASAL + TEMP MÅL + NY PROFIL + KLONA PROFIL + SPARA PROFIL + PROFILBYTE + PROFILBYTE KLONAT + CLOSED LOOP-LÄGE + LGS LOOP-LÄGE + OPEN LOOP-LÄGE + LOOP INAKTIVERAD + LOOP AKTIVERAD + ÅTERANSLUT + KOPPLA IFRÅN + ÅTERUPPTA + PAUSA + HW PUMP TILLÅTEN + RADERA PARKOPPLINGSNYCKLAR + TILLÅTER TEMP BASAL + AVBRYT TEMP BASAL + AVBRYT BOLUS + AVBRYT FÖRLÄNGD BOLUS + AVBRYT TEMP MÅL + CAREPORTAL + NÅLBYTE + RESERVOARBYTE + KALIBRERING + FÖRFYLLNINGSBOLUS + BEHANDLING + HÄMTA CAREPORTAL NS + HÄMTA PROFILBYTEN NS + HÄMTA BEHANDLINGAR NS + HÄMTA TEMP MÅL NS + AUTOMATION BORTTAGEN + BG BORTTAGET + CAREBORTAL BORTTAGEN + BOLUS BORTTAGEN + KH BORTTAGNA + TEMP BASAL BORTTAGEN + FÖRLÄNGD BOLUS BORTTAGEN + MAT + MAT BORTTAGEN + PROFIL BORTTAGEN + PROFILBYTE BORTTAGET + OMSTARTER BORTTAGNA + BEHANDLING BORTTAGEN + TEMP MÅL BORTTAGET + NS PAUSAT + ÅTERUPPTA NS + NS KÖ TÖMD + NS INSTÄLLNINGAR KOPIERADE + FELDIALOG OK + FELDIALOG SNOOZAD + FELDIALOG SNOOZAD 5 MIN + MÅL STARTAT + MÅL EJ STARTAT + MÅL SKIPPAT + ÅTERSTÄLL STATISTIK + RADERA LOGGAR + RADERA FRAMTIDA BEHANDLINGAR + EXPORTERA INSTÄLLNINGAR + IMPORTERA INSTÄLLNINGAR + ÅTERSTÄLL DATABASERNA + EXPORTERA DATABASERNA + IMPORTERA DATABASER + EXPORTERA OTP + ÅTERSTÄLL OTP + STOPPA SMS + EXPORTERA ANVÄNDARINMATNINGAR + STARTA AAPS + AVSLUTA AAPS + INSTICKSMODUL AKTIVERAD + INSTICKSMODUL INAKTIVERAD + OKÄND + Sträng + Källa + UTC Offset + Åtgärd + Tidsstämpel + Ingen enhet + Exportera användarposter till Excel (csv) + LOOP ÄNDRAD + LOOP BORTTAGEN + ANNAT + Nedre målvärde för profilen + Övre målvärde för profilen + Nedre värde för temp mål + Övre värde för temp mål + Temp målvärde + Profilens DIA + Profilens insulinkänslighetsvärde + Maximal basaldos för profil + Nuvarande basaldos + Profilens KH-kvot + %1$.2f begränsat till %2$.2f + »%1$s« är utanför de hårda gränserna + »%1$s« %2$.2f är utanför hårda gränser + Basaldos + + %1$d dag + %1$d dagar + + + %1$d tim + %1$d tim + + + %1$d min + %1$d min +
diff --git a/core/src/main/res/values-sv-rSE/validator.xml b/core/src/main/res/values-sv-rSE/validator.xml index 3b2288d895a6..7d2e89401e94 100644 --- a/core/src/main/res/values-sv-rSE/validator.xml +++ b/core/src/main/res/values-sv-rSE/validator.xml @@ -16,6 +16,9 @@ Ogiltigt format Måste vara fyra siffror Måste vara sex siffror + Måste vara 12 tecken med ABCDEF0123456789 + Måste vara 8 tecken med ABCDEF0123456789 + Måste vara 4 tecken med ABCDEF0123456789 För kort Pin ska vara 3-6 siffror, inte samma eller efter varandra diff --git a/dana/src/main/res/values-bg-rBG/strings.xml b/dana/src/main/res/values-bg-rBG/strings.xml index a596f0301f23..ab72bed8964d 100644 --- a/dana/src/main/res/values-bg-rBG/strings.xml +++ b/dana/src/main/res/values-bg-rBG/strings.xml @@ -92,8 +92,6 @@ Неуспешно задаване на базален профил Bluetooh статус IOB на помпата - Стъпка при базал - Стъпка при болус Фърмуер DanaR настройки 12ч diff --git a/dana/src/main/res/values-cs-rCZ/strings.xml b/dana/src/main/res/values-cs-rCZ/strings.xml index db9f8376e1b2..ae440efd4f2e 100644 --- a/dana/src/main/res/values-cs-rCZ/strings.xml +++ b/dana/src/main/res/values-cs-rCZ/strings.xml @@ -94,8 +94,6 @@ Nastavení bazálního profilu selhalo Stav Bluetooth IOB z pumpy - Krok bazálu - Krok bolusu Firmware Nastavení pumpy Dana 12h @@ -117,4 +115,5 @@ Stiskněte OK na pumpě\na zadejte 2 zobrazená čísla\nUdržujte display na pumpě zapnutý stisknutím tlačítka minus dokud nedokončíte zadání kódu. 1: (12 číslic) 2: (8 číslic) + Bazální/bolusový krok diff --git a/dana/src/main/res/values-de-rDE/strings.xml b/dana/src/main/res/values-de-rDE/strings.xml index 07b1afd24a4c..a275b6cffb0d 100644 --- a/dana/src/main/res/values-de-rDE/strings.xml +++ b/dana/src/main/res/values-de-rDE/strings.xml @@ -94,8 +94,6 @@ Setzen des Basal-Profils fehlgeschlagen Bluetooth-Status Pumpen-IOB - Basal-Schritt - Bolus-Schritt Firmware Dana Pumpen-Einstellungen 12h @@ -117,4 +115,5 @@ Drücke OK auf der Pumpe\nund gib die beiden angezeigten Ziffernfolgen ein.\nHalte das Pumpendisplay aktiv indem Du den Minus-Button gedrückt hälst, bis Du den Code eingegeben hast. 1: (12 Zeichen) 2: (8 Zeichen) + Basal/Bolus Schrittgröße diff --git a/dana/src/main/res/values-es-rES/strings.xml b/dana/src/main/res/values-es-rES/strings.xml index 4fb7cb20b56f..1f3c3eb50cd6 100644 --- a/dana/src/main/res/values-es-rES/strings.xml +++ b/dana/src/main/res/values-es-rES/strings.xml @@ -92,8 +92,6 @@ Error al activar perfil basal Estado de bluetooth Bomba IOB - Nivel base - Nivel bolo Firmware Ajustes de la bomba Dana 12 h diff --git a/dana/src/main/res/values-fr-rFR/strings.xml b/dana/src/main/res/values-fr-rFR/strings.xml index 32225ac81de4..8f6eec6621e5 100644 --- a/dana/src/main/res/values-fr-rFR/strings.xml +++ b/dana/src/main/res/values-fr-rFR/strings.xml @@ -94,8 +94,6 @@ Echec Paramétrage Profil Basal État Bluetooth IA pompe - Incrément Basal - Incrément Bolus Firmware Paramètres pompe Dana 12h @@ -117,4 +115,5 @@ Appuyez sur OK sur la pompe\net entrez les 2 numéros affichés\nConserver l\'affichage ACTIF sur la pompe en appuyant sur le bouton <b>moins<b> jusqu\'à ce que le code soit entré. 1: (12 chiffres) 2: (8 chiffres) + Étape Basal/Bolus diff --git a/dana/src/main/res/values-ga-rIE/strings.xml b/dana/src/main/res/values-ga-rIE/strings.xml index f0b71ab59177..a4dd30318fed 100644 --- a/dana/src/main/res/values-ga-rIE/strings.xml +++ b/dana/src/main/res/values-ga-rIE/strings.xml @@ -19,8 +19,6 @@ DanaR DanaRv2 Bluetooth stádas - Bunaidh Céim - Bólas Céim 12u 24u DanaR Bluetooth gléas diff --git a/dana/src/main/res/values-it-rIT/strings.xml b/dana/src/main/res/values-it-rIT/strings.xml index 391ef93c0b70..c3228198a6e6 100644 --- a/dana/src/main/res/values-it-rIT/strings.xml +++ b/dana/src/main/res/values-it-rIT/strings.xml @@ -94,8 +94,6 @@ Impostazione profilo basale fallita Stato bluetooth IOB micro - Incremento basale - Incremento bolo Firmware Impostazioni micro Dana 12h diff --git a/dana/src/main/res/values-iw-rIL/strings.xml b/dana/src/main/res/values-iw-rIL/strings.xml index b88fd60ebdd7..1be01b16d1e8 100644 --- a/dana/src/main/res/values-iw-rIL/strings.xml +++ b/dana/src/main/res/values-iw-rIL/strings.xml @@ -94,8 +94,6 @@ הגדרת פרופיל הבזאלי נכשל מצב בלוטות\' אינסולין פעיל מהמשאבה - צעד במינון בזאלי - צעד במינון בולוס קושחה הגדרות משאבת Dana 12 שעות @@ -117,4 +115,5 @@ לחצו OK במשאבה\nוהכניסו את שני המספרים המוצגים\nהשאירו את מסך המשאבה מופעל ע\"י לחיצה על לחצן מינוס עד סיום הכנסת הקוד. 1: (12 ספרות) 2: (8 ספרות) + צעד בזאלי\\בולוס diff --git a/dana/src/main/res/values-ko-rKR/strings.xml b/dana/src/main/res/values-ko-rKR/strings.xml index fe2f46276b60..c08cf51b38ef 100644 --- a/dana/src/main/res/values-ko-rKR/strings.xml +++ b/dana/src/main/res/values-ko-rKR/strings.xml @@ -92,8 +92,6 @@ Basal 프로파일 설정이 실패하였습니다 블루투스 상태 펌프 IOB - Basal 단위 - Bolus 단위 펌웨어 다나 펌프 설정 12h diff --git a/dana/src/main/res/values-lt-rLT/strings.xml b/dana/src/main/res/values-lt-rLT/strings.xml index bba0bf0739b4..fd86b2ce05d5 100644 --- a/dana/src/main/res/values-lt-rLT/strings.xml +++ b/dana/src/main/res/values-lt-rLT/strings.xml @@ -92,8 +92,6 @@ Nepavyko nustatyti bazės profilio Bluetooth statusas Pompos AIO - Bazės žingsnis - Boluso žingsnis Programinė įranga Dana pompos nustatymai 12h diff --git a/dana/src/main/res/values-nl-rNL/strings.xml b/dana/src/main/res/values-nl-rNL/strings.xml index 569c798f328d..001a1bf3760e 100644 --- a/dana/src/main/res/values-nl-rNL/strings.xml +++ b/dana/src/main/res/values-nl-rNL/strings.xml @@ -92,8 +92,6 @@ Instellen van basaal profiel mislukt Bluetooth status Pomp IOB - Basaal Stap - Bolus Stap Firmware Dana pomp instellingen 12u diff --git a/dana/src/main/res/values-no-rNO/strings.xml b/dana/src/main/res/values-no-rNO/strings.xml index 890601835ff7..7ff363d7ea53 100644 --- a/dana/src/main/res/values-no-rNO/strings.xml +++ b/dana/src/main/res/values-no-rNO/strings.xml @@ -94,8 +94,6 @@ Innstilling av basalprofil mislyktes Status for Bluetooth Pumpens IOB - Basal trinn - Bolus trinn Firmware Innstillinger for Dana pumpe 12t @@ -117,4 +115,5 @@ Trykk OK på pumpen\nog skriv inn de 2 viste tallene\nHold skjermen på pumpen PÅ ved å trykke minus knappen til du fullfører inntastingen. 1: (12 tall) 2: (8 tall) + Basal/bolus trinn diff --git a/dana/src/main/res/values-pl-rPL/strings.xml b/dana/src/main/res/values-pl-rPL/strings.xml index 5707c254bc75..bb29cd4ab7d3 100644 --- a/dana/src/main/res/values-pl-rPL/strings.xml +++ b/dana/src/main/res/values-pl-rPL/strings.xml @@ -92,8 +92,6 @@ Ustawienie profilu bazy nie powiodło się Status Bluetooth IOB w pompie - Krok bazy - Krok bolusa Firmware Ustawienia pompy Dana 12h diff --git a/dana/src/main/res/values-pt-rBR/strings.xml b/dana/src/main/res/values-pt-rBR/strings.xml index c724f5476497..66f5932818b0 100644 --- a/dana/src/main/res/values-pt-rBR/strings.xml +++ b/dana/src/main/res/values-pt-rBR/strings.xml @@ -84,8 +84,6 @@ Não foi possivel configurar o perfil de basal Estado Bluetooth IOB Bomba - Valor da Basal - Incremento de bolus Firmware Configurações da bomba Dana Ligado diff --git a/dana/src/main/res/values-pt-rPT/strings.xml b/dana/src/main/res/values-pt-rPT/strings.xml index d2d57ec978e5..94bf982a3ad5 100644 --- a/dana/src/main/res/values-pt-rPT/strings.xml +++ b/dana/src/main/res/values-pt-rPT/strings.xml @@ -92,8 +92,6 @@ Não foi possível configurar o perfil de basal Estado do Bluetooth IA Bomba - Incremento Basal - Incremento Bólus Firmware Definições da bomba Dana 12h diff --git a/dana/src/main/res/values-ro-rRO/strings.xml b/dana/src/main/res/values-ro-rRO/strings.xml index b046a04a58a2..fc9e947a7f81 100644 --- a/dana/src/main/res/values-ro-rRO/strings.xml +++ b/dana/src/main/res/values-ro-rRO/strings.xml @@ -92,8 +92,6 @@ Setarea profilului bazalei a eșuat Status Bluetooth IOB din pompă - Pas bazală - Pas bolus Firmware Setări pompă Dana 12h diff --git a/dana/src/main/res/values-ru-rRU/strings.xml b/dana/src/main/res/values-ru-rRU/strings.xml index 4cc37c73182e..d229fceae51c 100644 --- a/dana/src/main/res/values-ru-rRU/strings.xml +++ b/dana/src/main/res/values-ru-rRU/strings.xml @@ -94,8 +94,6 @@ настройка базального профиля не состоялась статус блутус активный инсулин на помпе - шаг базала - шаг болюса прошивка Настройки помпы Dana 12 ч diff --git a/dana/src/main/res/values-sk-rSK/strings.xml b/dana/src/main/res/values-sk-rSK/strings.xml index 953e931dccdd..ecf5c2c2e4b7 100644 --- a/dana/src/main/res/values-sk-rSK/strings.xml +++ b/dana/src/main/res/values-sk-rSK/strings.xml @@ -94,8 +94,6 @@ Nastavenie bazálneho profilu zlyhalo Stav Bluetooth IOB z pumpy - Krok bazálu - Krok bolusu Firmware Nastavenie pumpy Dana 12h @@ -117,4 +115,5 @@ Stlačte OK na pumpe\na zadajte 2 zobrazené čísla\nUdržujte display na pumpe zapnutý stlačením tlačítka mínus, kým nedokončíte zadanie kódu. 1: (12 číslic) 2: (8 číslic) + Krok bazálu/bolusu diff --git a/dana/src/main/res/values-sv-rSE/strings.xml b/dana/src/main/res/values-sv-rSE/strings.xml index 7780b8b1b3a9..b35f0a179a03 100644 --- a/dana/src/main/res/values-sv-rSE/strings.xml +++ b/dana/src/main/res/values-sv-rSE/strings.xml @@ -94,8 +94,6 @@ Lyckades inte sätta basalprofilen Bluetoothstatus Pumpens IOB - Basalsteg - Bolussteg Firmwareversion Dana R pumpinställningar 12 tim @@ -117,4 +115,5 @@ Tryck på OK på pumpen och skriv in nycklarna som visas på skärmen. För att förhindra att pumpskärmen släcks, tryck på minus (-) ibland. 1: (12 tecken) 2: (8 tecken) + Basal/bolus steg diff --git a/diaconn/src/main/res/values-cs-rCZ/strings.xml b/diaconn/src/main/res/values-cs-rCZ/strings.xml index 62fe26605e16..f4dac8ace783 100644 --- a/diaconn/src/main/res/values-cs-rCZ/strings.xml +++ b/diaconn/src/main/res/values-cs-rCZ/strings.xml @@ -94,10 +94,13 @@ Nedostatek inzulínu Slabá baterie Plnění jehly :%1$.2fU + Plnění zásobníku: %1$.2fU + Plnění kanyly: %1$.2fU Resetovat po obnovení továrního nastavení Resetovat po nouzovém vypnutí Resetovat po výměně baterie Po kalibraci resetovat + Reset po úvodním nastavení Neočekávaný reset systému Dokončeno Zablokované vydávání @@ -110,11 +113,43 @@ BAZÁL BOLUS NA JÍDLO NORMÁLNÍ BOLUS + KOMBINOVANÝ BOLUS + DUÁLNÍ BOLUS + VYMĚNIT HADIČKU + VYMĚNIT JEHLU + VYMĚNIT ZÁSOBNÍK + Zablokované vydávání (%s) + vydání bazálu (%s) + pozastavení bazálu (%s) + Dual Nomal úspěch + Kombinovaný bolus start + Kombinovaný bolus úspěch + Kombinovaný bolus start + Kombinovaný bolus úspěch + Bolus selhal Úspěch + Bolus úspěšný Nemohu vyhledat kvůli chybě CRC paketu. + Chyba parametru. + Chyba protokolu. + Časový limit vypršel. Zrušeno pumpou Přijímání dalších akcí, omezení nastavení aplikace. V průběhu podávání Bolusu je další Bolus omezen. Vyžaduje obnovení bazálu Zrušeno, protože pumpa neodpovídá. + Nízký stav baterie. + Nedostatek inzulínu. + Překročen limit. + Překročen denní limit inzulínu. + Po dokončení nastavení může být bazál spuštěn. + Příkaz nebyl proveden. Zkuste to prosím znovu. + Zaznamenat výměnu hadičky + Přidat událost \"Výměna setu\" do portálu pěče, pokud je zjištěna v historii + Dočasný bazál začátek + Během LGS je podávání izulínu omezeno + LGS status je zapnutý, ON příkaz je odmítnut. + LGS status je vypnutý, OFF příkaz je odmítnut. + Spuštění dočasného bazálu je odmítnuto, pokud je již spuštěn jiný + Zastavení dočasného bazálu je odmítnuto, pokud žádný není spuštěn diff --git a/diaconn/src/main/res/values-de-rDE/strings.xml b/diaconn/src/main/res/values-de-rDE/strings.xml index 716f9e053b09..696d5e84f49f 100644 --- a/diaconn/src/main/res/values-de-rDE/strings.xml +++ b/diaconn/src/main/res/values-de-rDE/strings.xml @@ -129,7 +129,6 @@ Mahlzeit fehlgeschlagen Erfolgreich Mahlzeit erfolgreich - diaconn_g8_logtubechange CRC Fehler - Lookup nicht möglich. Kann nicht auf fehlerhaften Eingabeparameter gesetzt werden. Kann nicht auf fehlerhafte Protokollspezifikation gesetzt werden. diff --git a/diaconn/src/main/res/values-fr-rFR/strings.xml b/diaconn/src/main/res/values-fr-rFR/strings.xml index d289a19934de..6786619d6b7a 100644 --- a/diaconn/src/main/res/values-fr-rFR/strings.xml +++ b/diaconn/src/main/res/values-fr-rFR/strings.xml @@ -129,7 +129,6 @@ Repas échoué Effectué Repas réussi - diaconn_g8_logtubechange Recherche impossible en raison d\'une erreur CRC de paquets. Impossible de définir à cause d\'une erreur de paramètre d\'entrée. Impossible de définir à cause d\'une erreur de spécification de protocole. diff --git a/diaconn/src/main/res/values-it-rIT/strings.xml b/diaconn/src/main/res/values-it-rIT/strings.xml index 2f4e87048375..c4c7b80b161e 100644 --- a/diaconn/src/main/res/values-it-rIT/strings.xml +++ b/diaconn/src/main/res/values-it-rIT/strings.xml @@ -129,7 +129,6 @@ Pasto: fallito OK Pasto: OK - diaconn_g8_logtubechange Ricerca non possibile a causa di un errore CRC del pacchetto. Impostazione non possibile - errore di un parametro di input. Impostazione non possibile - errore di specifica del protocollo. diff --git a/diaconn/src/main/res/values-iw-rIL/strings.xml b/diaconn/src/main/res/values-iw-rIL/strings.xml index 4b5a63bed62c..793e713ae863 100644 --- a/diaconn/src/main/res/values-iw-rIL/strings.xml +++ b/diaconn/src/main/res/values-iw-rIL/strings.xml @@ -119,7 +119,6 @@ רישום המזון נכשל הצלחה רישום המזון הצליח - רישום החלפת צינורית לא ניתן להגדיר שגיאת פרוטוקול ספציפי. הארוחה נרשמה, לא ניתן להזריק. בוטל על ידי המשאבה diff --git a/diaconn/src/main/res/values-ko-rKR/strings.xml b/diaconn/src/main/res/values-ko-rKR/strings.xml index 2000c331b4c6..29cb87c69453 100644 --- a/diaconn/src/main/res/values-ko-rKR/strings.xml +++ b/diaconn/src/main/res/values-ko-rKR/strings.xml @@ -129,7 +129,6 @@ 식사 실패 성공 식사 성공 - 디아콘_g8_로그튜브변경 패킷 CRC 오류로 조회 불가합니다. 입력 파라미터 오류로 설정 불가합니다. 프로토콜 규격 오류로 설정 불가합니다. diff --git a/diaconn/src/main/res/values-no-rNO/strings.xml b/diaconn/src/main/res/values-no-rNO/strings.xml index cef3434ebaf6..2c33d1b032b2 100644 --- a/diaconn/src/main/res/values-no-rNO/strings.xml +++ b/diaconn/src/main/res/values-no-rNO/strings.xml @@ -129,7 +129,6 @@ Måltidsbolus feilet Suksess Måltidsbolus vellykket - diaconn_g8_logtubechange Kan ikke lese på grunn av feil med kommunikasjonen Kan ikke settes på grunn av feil i parameterverdi. Kan ikke settes på grunn av feil i kommunikasjonsprotokollen. diff --git a/diaconn/src/main/res/values-ru-rRU/strings.xml b/diaconn/src/main/res/values-ru-rRU/strings.xml index 5b4dfdf4d4a9..f3fd8c04f36e 100644 --- a/diaconn/src/main/res/values-ru-rRU/strings.xml +++ b/diaconn/src/main/res/values-ru-rRU/strings.xml @@ -129,7 +129,6 @@ Прием пищи не записан Успешно Прием пиши записан - diaconn_g8_logtubechange Не удается найти из-за ошибки пакета CRC. Не удается установить ошибку входного параметра. Не удается установить ошибку спецификации протокола. diff --git a/diaconn/src/main/res/values-sk-rSK/strings.xml b/diaconn/src/main/res/values-sk-rSK/strings.xml index b0da6f5f9a89..0e02dcb5e12f 100644 --- a/diaconn/src/main/res/values-sk-rSK/strings.xml +++ b/diaconn/src/main/res/values-sk-rSK/strings.xml @@ -85,15 +85,16 @@ aps_incarnation_no pump_serial_no Zaznamenať výmenu zásobníka - Pridať udalosť \"Výmena inzulínu\" do portálu starostlivosti, pokiaľ je zistená v histórii + Pridať udalosť \"Výmena inzulínu\" do portálu starostlivosti, pokiaľ bola zistená v histórii Zaznamenať výmenu kanyly - Pridať udalosť \"Výmena setu\" do portálu starostlivosti, pokiaľ je zistená v histórii - Pridať udalosť \"Výmena batérie\" do portálu starostlivosti, pokiaľ je zistená v histórii + Pridať udalosť \"Výmena setu\" do portálu starostlivosti, pokiaľ bola zistená v histórii + Pridať udalosť \"Výmena batérie\" do portálu starostlivosti, pokiaľ bola zistená v histórii Zaznamenať výmenu batérie Prebieha synchronizácia logov Nedostatok inzulínu Slabá batéria Plnenie ihly :%1$.2fJI + Plnenie kanyly:%1$.2fJI Plnenie hadičky :%1$.2fJI Resetovať po obnovení na továrenské nastavenia Resetovať po núdzovom vypnutí @@ -121,10 +122,13 @@ výdaj bazálu (%s) bazál pozastavený (%s) Kombinovaný bolus vydaný + Začiatok kombinovaného bolusu + Kombinovaný bolus úspešne vydaný + Začiatok oneskoreného bolusu + Oneskorený bolus podaný Jedlo zlyhalo Hotovo Jedlo úspešné - diaconn_g8_logtubechange Nie je možné vyhľadať kvôli chybe CRC. Nemôže byť nastavené na základe chybných vstupných parametrov. Nemôže byť nastavené na základe chyby špecifikácie protokolu. @@ -135,4 +139,17 @@ Vyžaduje sa obnovenie bazálu Zrušené, pretože pumpa neodpovedá. Podávanie nie je možné z dôvodu slabej batérie. + Podanie nie je možné, z dôvodu nedostatku inzulínu. + Nemôžete podať, pretože bol prekročený limit jednorázovej dávky. + Dávka nemôže byť podaná, pretože bol prekročený denný limit. + Potom, čo je nastavenie bazálov hotové, môže byť podávanie bazálu úspešné. + Príkaz nebol vykonaný. Prosím skúste to znovu. + Zaznamenať výmenu hadičky + Pridať udalosť \"Výmena hadičky\" do portálu starostlivosti, pokiaľ bola zistená v histórii + Začiatok dočasného bazálu + Počas bežiaceho LGS, je podávanie obmedzené + Stav LGS je ZAP, príkaz ZAP je zamietnutý. + Stav LGS je VYP, príkaz VYP je zamietnutý. + Začiatok dočasného bazálu nie je možný, ak už beží dočasný bazál + Koniec dočasného bazálu nie je možný, ak nebeží dočasný bazál diff --git a/insight/src/main/res/values-cs-rCZ/strings.xml b/insight/src/main/res/values-cs-rCZ/strings.xml index c1382dadd302..a8fca7d39390 100644 --- a/insight/src/main/res/values-cs-rCZ/strings.xml +++ b/insight/src/main/res/values-cs-rCZ/strings.xml @@ -21,6 +21,7 @@ %1$d%% for %2$d / %3$d min Duální bolus %1$.2f / %2$.2f U for %3$d min + Poslední bolus Vyhledávání zařízení… Párování dokončeno Souhlasí kódy zobrazené na tomto zařízení a na pumpě? diff --git a/insight/src/main/res/values-de-rDE/strings.xml b/insight/src/main/res/values-de-rDE/strings.xml index be00de0eb529..4a1032acfb3d 100644 --- a/insight/src/main/res/values-de-rDE/strings.xml +++ b/insight/src/main/res/values-de-rDE/strings.xml @@ -21,6 +21,7 @@ %1$d%% für %2$d / %3$d min Multiwave-Bolus %1$.2f / %2$.2f IE für %3$d min + Letzter Bolus Geräte werden gesucht… Kopplung abgeschlossen Stimmen die Codes auf diesem Gerät und auf deiner Pumpe überein? diff --git a/insight/src/main/res/values-fr-rFR/strings.xml b/insight/src/main/res/values-fr-rFR/strings.xml index 940054731bf9..a2186100846f 100644 --- a/insight/src/main/res/values-fr-rFR/strings.xml +++ b/insight/src/main/res/values-fr-rFR/strings.xml @@ -21,6 +21,7 @@ %1$d%% pour %2$d / %3$d min Bolus mixte %1$.2f / %2$.2f U pour %3$d min + Dernier bolus Recherche d\'appareils en cours… Appairage terminé Les codes affichés sur cet appareil et sur la pompe sont-ils identiques ? diff --git a/insight/src/main/res/values-iw-rIL/strings.xml b/insight/src/main/res/values-iw-rIL/strings.xml index 1c5eed6792a0..afcfa9f9e8ff 100644 --- a/insight/src/main/res/values-iw-rIL/strings.xml +++ b/insight/src/main/res/values-iw-rIL/strings.xml @@ -21,6 +21,7 @@ %1$d%% למשך %2$d/%3$d דק\' בולוס רב שלבי %1$.2f / %2$.2f יח\' במשך %3$d דק\' + בולוס אחרון מחפש התקנים… הצימוד הושלם האם הקודים המוצגים בהתקן זה ובמשאבה זהים? diff --git a/insight/src/main/res/values-no-rNO/strings.xml b/insight/src/main/res/values-no-rNO/strings.xml index 6ef3826240fc..14871c36c702 100644 --- a/insight/src/main/res/values-no-rNO/strings.xml +++ b/insight/src/main/res/values-no-rNO/strings.xml @@ -21,6 +21,7 @@ %1$d%% i %2$d / %3$d min Kombinasjonsbolus %1$.2f / %2$.2f E i %3$d min + Siste bolus Søker etter enheter… Sammenkobling fullført Stemmer de viste kodene overens mellom denne enheten og din pumpe? diff --git a/insight/src/main/res/values-sv-rSE/strings.xml b/insight/src/main/res/values-sv-rSE/strings.xml index 6c491057b55d..1ca1a2715172 100644 --- a/insight/src/main/res/values-sv-rSE/strings.xml +++ b/insight/src/main/res/values-sv-rSE/strings.xml @@ -21,6 +21,7 @@ %1$d%% i %2$d / %3$d min Kombi-bolus %1$.2f / %2$.2f U i %3$d min + Senaste bolus Söker enheter… Parkoppling lyckades Stämmer koderna överens mellan denna enhet och din pump? diff --git a/omnipod-common/src/main/res/values-no-rNO/strings.xml b/omnipod-common/src/main/res/values-no-rNO/strings.xml index 38fd6e20033e..258e97569eef 100644 --- a/omnipod-common/src/main/res/values-no-rNO/strings.xml +++ b/omnipod-common/src/main/res/values-no-rNO/strings.xml @@ -111,6 +111,10 @@ Annet Varsler Bekreftelse lyd + Varsler + Lydvarsel for ubekreftet temp basal dosering (TBR) er aktivert + Lydvarsel for ubekreftet SMB er aktivert + Lydvarsel for ubekreftet bolus er aktivert Ingen aktiv Pod Oppsett pågår (venter på Pod aktivering) diff --git a/omnipod-common/src/main/res/values-sv-rSE/strings.xml b/omnipod-common/src/main/res/values-sv-rSE/strings.xml index b23def69f568..53b940ebddb9 100644 --- a/omnipod-common/src/main/res/values-sv-rSE/strings.xml +++ b/omnipod-common/src/main/res/values-sv-rSE/strings.xml @@ -111,6 +111,10 @@ Annat Varningar Bekräftelsepip + Aviseringar + Ljud ifall AAPS är osäker om temp basal aktiverades + Ljud ifall AAPS är osäker om SMB leverades + Ljud ifall AAPS är osäker om bolus levererades Ingen aktiv pod Konfiguration pågår (väntar på Pod-aktivering) @@ -184,4 +188,8 @@ %1$d dag %1$d dagar
+ + Pod-varning: %1$s + Pod-varningar: %1$s + diff --git a/omnipod-dash/src/main/res/values-no-rNO/strings.xml b/omnipod-dash/src/main/res/values-no-rNO/strings.xml index a8731fa9619d..6f3619cf856c 100644 --- a/omnipod-dash/src/main/res/values-no-rNO/strings.xml +++ b/omnipod-dash/src/main/res/values-no-rNO/strings.xml @@ -4,6 +4,18 @@ Pumpeintegrering for Omnipod Dash (den nye, Bluetooth-aktiverte modellen med en blå kanylehette). + Bluetooth status + Bluetooth adresse + Firmware %1$s / Bluetooth %2$s + Tilkoblingskvalitet Bluetooth + Leveringsstatus + Fyll en ny Pod med nok insulin for 3 dager.\n\nLytt etter to lydsignaler fra Pod under fyllingen. De indikerer at minimums volum på 80E er fylt opp. Vær nøye med å tømme fyllingssprøyten helt, selv etter at du har hørt de to lydsignalene.\n\nEtter fylling av Pod, vennligst trykk Neste.\n\nMerk: vent med å fjerne kanylebeskyttelsen til Pod. + Prøver å parre med den nye Pod og prime den.\n\nNår oppstartsprosessen er ferdig, kan du trykke Neste. + Lydvarsel aktivert hvis insulinlevering blir stanset + Klarte ikke å koble seg til pod + Fant for mange podder for aktivering + Fant ingen pod tilgjengelig for aktivering + Generell feil: %1$s diff --git a/openhumans/src/main/res/values-no-rNO/strings.xml b/openhumans/src/main/res/values-no-rNO/strings.xml index 6382ea382945..b531eea56888 100644 --- a/openhumans/src/main/res/values-no-rNO/strings.xml +++ b/openhumans/src/main/res/values-no-rNO/strings.xml @@ -2,9 +2,18 @@ Open Humans OH + Open Humans lar deg laste opp dine diabetesdata og donere dem til vitenskapelige prosjekter. Utlogging + Oppsett + Open Humans er konfigurert. Hvis du vil stoppe opplastinger, klikk \"Logg ut\". + Open Humans er inaktiv. For å starte opplasting av data, klikk på \"Oppsett\". + Prosjektmedlems ID: %1$s Last opp kun dersom du er koblet til WiFi Last opp kun ved mobillading + Laster opp til Open Humans… + Open Humans notifikasjon + AndroidAPS laster opp til Open Humans. Dette kan ta en stund. Du har blitt logget ut fra Open Humans Klikk her for å logge inn igjen hvis dette ikke var hensikten. + Last opp nå diff --git a/openhumans/src/main/res/values-sv-rSE/strings.xml b/openhumans/src/main/res/values-sv-rSE/strings.xml index e874779e5a71..039bd031f84e 100644 --- a/openhumans/src/main/res/values-sv-rSE/strings.xml +++ b/openhumans/src/main/res/values-sv-rSE/strings.xml @@ -2,9 +2,18 @@ Open Humans OH + Med Open Humans kan du ladda upp din diabetesdata och donera den till vetenskapliga projekt. Logga ut + Konfiguration + Open Humans har konfigurerats. Om du vill sluta ladda upp, klicka på \"Logga ut\". + Open Humans-uppladdningar är för närvarande inte aktiverade. För att börja ladda upp data, klicka på \"Konfiguration\". + Projektmedlems-ID: %1$s Ladda bara upp om ansluten till WiFi Ladda bara upp vid laddning + Laddar upp till Open Humans… + Aviseringar från Open Humans + AndroidAPS laddar upp till Open Humans. Det kan ta ett tag. Du har loggats ut från Open Humans Klicka här om du vill logga in igen. + Ladda upp nu diff --git a/rileylink/src/main/res/values-iw-rIL/strings.xml b/rileylink/src/main/res/values-iw-rIL/strings.xml index 43052404e417..5ca903a67821 100644 --- a/rileylink/src/main/res/values-iw-rIL/strings.xml +++ b/rileylink/src/main/res/values-iw-rIL/strings.xml @@ -32,7 +32,7 @@ סוג מכשיר: דגם המכשיר המוגדר: דגם המכשיר המחובר: - תדירות השימוש לאחרונה: + תדר בשימוש האחרון: קשר אחרון עם המכשיר: גרסת קושחה: BLE113: %1$s\nCC110: %2$s @@ -52,7 +52,7 @@ ריילילינק מוכן ההתקן אינו ריילילינק - ריילילינק לא נגיש + ריילילינק בלתי נגיש בלוטות\' כבוי אין מתאם בלוטות\' כוונון נכשל From ddc37324a81921fb65ded480f5775e1530a3d3b9 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 8 Oct 2021 09:42:11 +0200 Subject: [PATCH 010/294] cleanup --- .idea/codeStyles/Project.xml | 2 +- .../nightscout/androidaps/dana/DanaPump.kt | 133 ++++++--- .../danaRv2/comm/MessageHashTableRv2.kt | 2 +- .../danaRv2/comm/MsgHistoryEventsV2.kt | 276 ++++++++++++++++++ .../danaRv2/comm/MsgHistoryEvents_v2.kt | 214 -------------- .../services/DanaRv2ExecutionService.java | 10 +- .../danar/comm/MsgSetUserOptions.kt | 22 +- .../danar/comm/MsgSettingUserOptions.kt | 2 +- .../androidaps/danar/di/DanaRCommModule.kt | 4 +- .../danaRv2/comm/MsgHistoryEventsRv2Test.kt | 4 +- .../comm/DanaRSPacketAPSHistoryEvents.kt | 185 ++++++++---- .../comm/DanaRSPacketAPSSetEventHistory.kt | 2 +- .../danars/services/DanaRSService.kt | 15 +- 13 files changed, 526 insertions(+), 345 deletions(-) create mode 100644 danar/src/main/java/info/nightscout/androidaps/danaRv2/comm/MsgHistoryEventsV2.kt delete mode 100644 danar/src/main/java/info/nightscout/androidaps/danaRv2/comm/MsgHistoryEvents_v2.kt diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 66acf8e27e50..03c1a4dff82c 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -127,7 +127,7 @@