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 cdd786d1830..d0d3049afc4 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 06ea7e38318..c24bb1d8b1a 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 a2e2f723f13..902d74153c9 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 9387799bbb6..086f8aab9ef 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 9021bbf50c1..c4cde5b3a73 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 7ab66259516..ce96a5c2fab 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 249c94d74b3..c78d5b22ab7 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 69f3e7777af..66cfaae0476 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 67118d09089..f6706af96d1 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 3c1e6b57321..4ada1fb4976 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 b8f5396b13b..38c7e0a208c 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 c93a7e895f8..3c2db9c5ec8 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 3a51a9ff15a..686e5ededc8 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 2e7bb25b43b..5d3f33d2d95 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 7b9de286808..db617c7f081 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 3bd4bf76ca7..8f2ce738d78 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 b7f1d1540c9..0d4a16f3354 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 ee8dac6c47a..00000000000 --- 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 8d0a8691c12..0148b3438c4 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 5f13bfe3517..327583b6621 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 d64713d0ad1..d42d4c4b419 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 c18089c6c20..152a3fcb1d1 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 391fd5fed6a..fca80bd85b3 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 9c45de88ade..cb4e48454fb 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 f02488f617f..893baf09a26 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 59d9bc11114..5feb71b1048 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 6fbaa57ca27..5c453a3673f 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 40443b06e90..9d4378c01ba 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 fd7eced13c6..93579275e42 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 49845038908..4219ce68031 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 f651b0e7eee..019c43a8b84 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 d7a741436c5..d5fa3560398 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 40e1ff0aa0b..e99d79a334d 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 3c69328e3e1..8a4931617a8 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 b5f0d694e29..a3eff6d1e6d 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 64773a3739e..5ed73cf9d86 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 e9e2d67f847..c8642e2879a 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 f6abab15410..2e186bbf69e 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 a935d2f9221..1c54bb4eb4e 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 8812d30b600..133c9a1368f 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 3a808d3a306..94fb793a21d 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 29def33fd2a..1df8018334d 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 464cfdb7e1f..58b952a2abc 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 33289e55b3b..874463d112c 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 70ba734fdd8..754677d4624 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 756cafcab69..7c38f053d39 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 c62d2a2dfed..e57c6dae69e 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 69d7f3835eb..145ee0d1daf 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 10c4e30f107..7ff72768518 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 4c9a90f99a6..cca77188e81 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 3b2288d895a..7d2e89401e9 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 a596f0301f2..ab72bed8964 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 db9f8376e1b..ae440efd4f2 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 07b1afd24a4..a275b6cffb0 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 4fb7cb20b56..1f3c3eb50cd 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 32225ac81de..8f6eec6621e 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 f0b71ab5917..a4dd30318fe 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 391ef93c0b7..c3228198a6e 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 b88fd60ebdd..1be01b16d1e 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 fe2f46276b6..c08cf51b38e 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 bba0bf0739b..fd86b2ce05d 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 569c798f328..001a1bf3760 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 890601835ff..7ff363d7ea5 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 5707c254bc7..bb29cd4ab7d 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 c724f547649..66f5932818b 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 d2d57ec978e..94bf982a3ad 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 b046a04a58a..fc9e947a7f8 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 4cc37c73182..d229fceae51 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 953e931dccd..ecf5c2c2e4b 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 7780b8b1b3a..b35f0a179a0 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 62fe26605e1..f4dac8ace78 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 716f9e053b0..696d5e84f49 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 d289a19934d..6786619d6b7 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 2f4e8704837..c4c7b80b161 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 4b5a63bed62..793e713ae86 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 2000c331b4c..29cb87c6945 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 cef3434ebaf..2c33d1b032b 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 5b4dfdf4d4a..f3fd8c04f36 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 b0da6f5f9a8..0e02dcb5e12 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 c1382dadd30..a8fca7d3939 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 be00de0eb52..4a1032acfb3 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 940054731bf..a2186100846 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 1c5eed6792a..afcfa9f9e8f 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 6ef3826240f..14871c36c70 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 6c491057b55..1ca1a271517 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 38fd6e20033..258e97569ee 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 b23def69f56..53b940ebddb 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 a8731fa9619..6f3619cf856 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 6382ea38294..b531eea5688 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 e874779e5a7..039bd031f84 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 43052404e41..5ca903a6782 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 66acf8e27e5..03c1a4dff82 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -127,7 +127,7 @@