From 3cb07c215e85b75338c210ca4b465a4944a6eb44 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 7 Mar 2021 20:22:03 +0100 Subject: [PATCH 1/3] Refactor GlucoseStatusProvider out of GlucoseStatus --- .../androidaps/dialogs/CalibrationDialog.kt | 4 +- .../androidaps/dialogs/CareDialog.kt | 5 +- .../aps/openAPSAMA/OpenAPSAMAPlugin.kt | 6 +- .../aps/openAPSSMB/OpenAPSSMBPlugin.kt | 6 +- .../dataBroadcaster/DataBroadcastPlugin.kt | 21 ++- .../general/overview/OverviewFragment.kt | 31 ++-- .../PersistentNotificationPlugin.kt | 8 +- .../smsCommunicator/SmsCommunicatorPlugin.kt | 4 +- .../wearintegration/WatchUpdaterService.java | 9 +- .../androidaps/utils/wizard/BolusWizard.kt | 4 +- .../utils/wizard/QuickWizardEntry.kt | 6 +- .../interfaces/ConstraintsCheckerTest.kt | 8 +- .../SmsCommunicatorPluginTest.kt | 9 +- .../utils/wizard/BolusWizardTest.kt | 6 +- .../general/automation/triggers/Trigger.kt | 2 + .../general/automation/triggers/TriggerBg.kt | 2 +- .../automation/triggers/TriggerDelta.kt | 2 +- .../automation/triggers/TriggerTestBase.kt | 4 - .../iob/iobCobCalculator/GlucoseStatus.kt | 161 +++--------------- .../iobCobCalculator/GlucoseStatusProvider.kt | 112 ++++++++++++ .../iob/iobCalculator/GlucoseStatusTest.kt | 40 ++--- 21 files changed, 221 insertions(+), 229 deletions(-) create mode 100644 core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatusProvider.kt diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt index 63acaef52c..9a2910bee4 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt @@ -13,6 +13,7 @@ import info.nightscout.androidaps.databinding.DialogCalibrationBinding import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.utils.HtmlHelper import info.nightscout.androidaps.utils.XdripCalibrations import info.nightscout.androidaps.utils.alertDialogs.OKDialog @@ -28,6 +29,7 @@ class CalibrationDialog : DialogFragmentWithDate() { @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var xdripCalibrations: XdripCalibrations @Inject lateinit var uel: UserEntryLogger + @Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider private var _binding: DialogCalibrationBinding? = null @@ -51,7 +53,7 @@ class CalibrationDialog : DialogFragmentWithDate() { super.onViewCreated(view, savedInstanceState) val units = profileFunction.getUnits() - val bg = Profile.fromMgdlToUnits(GlucoseStatus(injector).glucoseStatusData?.glucose + val bg = Profile.fromMgdlToUnits(glucoseStatusProvider.glucoseStatusData?.glucose ?: 0.0, units) if (units == Constants.MMOL) binding.bg.setParams(savedInstanceState?.getDouble("bg") diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt index 962ac9bd4c..c595ede5d1 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt @@ -20,7 +20,7 @@ import info.nightscout.androidaps.interfaces.DatabaseHelperInterface import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.plugins.general.nsclient.NSUpload -import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.HtmlHelper import info.nightscout.androidaps.utils.Translator @@ -41,6 +41,7 @@ class CareDialog : DialogFragmentWithDate() { @Inject lateinit var translator: Translator @Inject lateinit var uel: UserEntryLogger @Inject lateinit var databaseHelper: DatabaseHelperInterface + @Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider enum class EventType { BGCHECK, @@ -132,7 +133,7 @@ class CareDialog : DialogFragmentWithDate() { } } - val bg = Profile.fromMgdlToUnits(GlucoseStatus(injector).glucoseStatusData?.glucose + val bg = Profile.fromMgdlToUnits(glucoseStatusProvider.glucoseStatusData?.glucose ?: 0.0, profileFunction.getUnits()) val bgTextWatcher: TextWatcher = object : TextWatcher { override fun afterTextChanged(s: Editable) {} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt index 2d5ce287f5..4cb3b48e67 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt @@ -16,6 +16,7 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy @@ -44,7 +45,8 @@ open class OpenAPSAMAPlugin @Inject constructor( private val profiler: Profiler, private val fabricPrivacy: FabricPrivacy, private val dateUtil: DateUtil, - private val repository: AppRepository + private val repository: AppRepository, + private val glucoseStatusProvider: GlucoseStatusProvider ) : PluginBase(PluginDescription() .mainType(PluginType.APS) .fragmentClass(OpenAPSAMAFragment::class.java.name) @@ -81,7 +83,7 @@ open class OpenAPSAMAPlugin @Inject constructor( aapsLogger.debug(LTag.APS, "invoke from $initiator tempBasalFallback: $tempBasalFallback") lastAPSResult = null val determineBasalAdapterAMAJS = DetermineBasalAdapterAMAJS(ScriptReader(context), injector) - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData val profile = profileFunction.getProfile() val pump = activePlugin.activePump if (profile == null) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt index 02061eb404..c575a91d70 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt @@ -18,6 +18,7 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.HardLimits @@ -45,7 +46,8 @@ open class OpenAPSSMBPlugin @Inject constructor( private val profiler: Profiler, private val sp: SP, private val dateUtil: DateUtil, - private val repository: AppRepository + private val repository: AppRepository, + private val glucoseStatusProvider: GlucoseStatusProvider ) : PluginBase(PluginDescription() .mainType(PluginType.APS) .fragmentClass(OpenAPSSMBFragment::class.java.name) @@ -89,7 +91,7 @@ open class OpenAPSSMBPlugin @Inject constructor( override fun invoke(initiator: String, tempBasalFallback: Boolean) { aapsLogger.debug(LTag.APS, "invoke from $initiator tempBasalFallback: $tempBasalFallback") lastAPSResult = null - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData val profile = profileFunction.getProfile() val pump = activePlugin.activePump if (profile == null) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/dataBroadcaster/DataBroadcastPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/dataBroadcaster/DataBroadcastPlugin.kt index 7ab5c30703..1f23c29588 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/dataBroadcaster/DataBroadcastPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/dataBroadcaster/DataBroadcastPlugin.kt @@ -8,12 +8,12 @@ import dagger.android.HasAndroidInjector import info.nightscout.androidaps.Config import info.nightscout.androidaps.R import info.nightscout.androidaps.data.IobTotal -import info.nightscout.androidaps.events.Event -import info.nightscout.androidaps.events.EventExtendedBolusChange -import info.nightscout.androidaps.events.EventNewBasalProfile -import info.nightscout.androidaps.events.EventTempBasalChange -import info.nightscout.androidaps.events.EventTreatmentChange -import info.nightscout.androidaps.interfaces.* +import info.nightscout.androidaps.events.* +import info.nightscout.androidaps.interfaces.ActivePluginProvider +import info.nightscout.androidaps.interfaces.PluginBase +import info.nightscout.androidaps.interfaces.PluginDescription +import info.nightscout.androidaps.interfaces.PluginType +import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.logging.LTag import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateGui @@ -21,9 +21,8 @@ import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.general.nsclient.data.NSDeviceStatus import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress -import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin -import info.nightscout.androidaps.events.EventAutosensCalculationFinished import info.nightscout.androidaps.receivers.ReceiverStatusStore import info.nightscout.androidaps.services.Intents import info.nightscout.androidaps.utils.DefaultValueHelper @@ -51,7 +50,7 @@ class DataBroadcastPlugin @Inject constructor( private val activePlugin: ActivePluginProvider, private var receiverStatusStore: ReceiverStatusStore, private val config: Config, - private val databaseHelper: DatabaseHelperInterface + private val glucoseStatusProvider: GlucoseStatusProvider ) : PluginBase(PluginDescription() .mainType(PluginType.GENERAL) @@ -123,14 +122,14 @@ class DataBroadcastPlugin @Inject constructor( private fun bgStatus(bundle: Bundle) { val lastBG = iobCobCalculatorPlugin.lastBg() ?: return - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData ?: return + val glucoseStatus = glucoseStatusProvider.glucoseStatusData ?: return bundle.putDouble("glucoseMgdl", lastBG.value) // last BG in mgdl bundle.putLong("glucoseTimeStamp", lastBG.timestamp) // timestamp bundle.putString("units", profileFunction.getUnits()) // units used in AAPS "mg/dl" or "mmol" bundle.putString("slopeArrow", lastBG.trendArrow.text) // direction arrow as string bundle.putDouble("deltaMgdl", glucoseStatus.delta) // bg delta in mgdl - bundle.putDouble("avgDeltaMgdl", glucoseStatus.avgDelta) // average bg delta + bundle.putDouble("avgDeltaMgdl", glucoseStatus.shortAvgDelta) // average bg delta bundle.putDouble("high", defaultValueHelper.determineHighLine()) // predefined top value of in range (green area) bundle.putDouble("low", defaultValueHelper.determineLowLine()) // predefined bottom value of in range } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt index 86259bd729..ae0f3240a2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt @@ -48,7 +48,7 @@ import info.nightscout.androidaps.plugins.general.overview.activities.QuickWizar import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationStore import info.nightscout.androidaps.plugins.general.wear.events.EventWearInitiateAction -import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -115,6 +115,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList @Inject lateinit var databaseHelper: DatabaseHelperInterface @Inject lateinit var uel: UserEntryLogger @Inject lateinit var repository: AppRepository + @Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider private val disposable = CompositeDisposable() @@ -296,14 +297,14 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList if (childFragmentManager.isStateSaved) return activity?.let { activity -> when (v.id) { - R.id.treatment_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) TreatmentDialog().show(childFragmentManager, "Overview") }) - R.id.wizard_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) WizardDialog().show(childFragmentManager, "Overview") }) - R.id.insulin_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) InsulinDialog().show(childFragmentManager, "Overview") }) + R.id.treatment_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) TreatmentDialog().show(childFragmentManager, "Overview") }) + R.id.wizard_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) WizardDialog().show(childFragmentManager, "Overview") }) + R.id.insulin_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) InsulinDialog().show(childFragmentManager, "Overview") }) R.id.quick_wizard_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) onClickQuickWizard() }) - R.id.carbs_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) CarbsDialog().show(childFragmentManager, "Overview") }) - R.id.temp_target -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) TempTargetDialog().show(childFragmentManager, "Overview") }) + R.id.carbs_button -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) CarbsDialog().show(childFragmentManager, "Overview") }) + R.id.temp_target -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) TempTargetDialog().show(childFragmentManager, "Overview") }) - R.id.active_profile -> { + R.id.active_profile -> { ProfileViewerDialog().also { pvd -> pvd.arguments = Bundle().also { it.putLong("time", DateUtil.now()) @@ -312,7 +313,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList }.show(childFragmentManager, "ProfileViewDialog") } - R.id.cgm_button -> { + R.id.cgm_button -> { if (xdripPlugin.isEnabled(PluginType.BGSOURCE)) openCgmApp("com.eveningoutpost.dexdrip") else if (dexcomPlugin.isEnabled(PluginType.BGSOURCE)) { @@ -323,7 +324,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } } - R.id.calibration_button -> { + R.id.calibration_button -> { if (xdripPlugin.isEnabled(PluginType.BGSOURCE)) { CalibrationDialog().show(childFragmentManager, "CalibrationDialog") } else if (dexcomPlugin.isEnabled(PluginType.BGSOURCE)) { @@ -338,7 +339,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } } - R.id.accept_temp_button -> { + R.id.accept_temp_button -> { profileFunction.getProfile() ?: return if (loopPlugin.isEnabled(PluginType.LOOP)) { val lastRun = loopPlugin.lastRun @@ -358,7 +359,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } } - R.id.aps_mode -> { + R.id.aps_mode -> { protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { if (isAdded) LoopDialog().also { dialog -> dialog.arguments = Bundle().also { it.putInt("showOkCancel", 1) } @@ -390,7 +391,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList return true } - R.id.aps_mode -> { + R.id.aps_mode -> { activity?.let { activity -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { LoopDialog().also { dialog -> @@ -400,8 +401,8 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } } - R.id.temp_target -> v.performClick() - R.id.active_profile -> activity?.let { activity -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { ProfileSwitchDialog().show(childFragmentManager, "Overview") }) } + R.id.temp_target -> v.performClick() + R.id.active_profile -> activity?.let { activity -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { ProfileSwitchDialog().show(childFragmentManager, "Overview") }) } } return false @@ -588,7 +589,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList binding.infoLayout.arrow.setImageResource(trendCalculator.getTrendArrow(lastBG).directionToIcon()) binding.infoLayout.arrow.setColorFilter(color) - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData if (glucoseStatus != null) { binding.infoLayout.deltaLarge.text = Profile.toSignedUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) binding.infoLayout.deltaLarge.setTextColor(color) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/persistentNotification/PersistentNotificationPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/persistentNotification/PersistentNotificationPlugin.kt index f770689e37..5428911382 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/persistentNotification/PersistentNotificationPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/persistentNotification/PersistentNotificationPlugin.kt @@ -16,6 +16,7 @@ import info.nightscout.androidaps.interfaces.* import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.utils.DecimalFormatter import info.nightscout.androidaps.utils.FabricPrivacy @@ -42,7 +43,8 @@ class PersistentNotificationPlugin @Inject constructor( private val context: Context, private val notificationHolder: NotificationHolderInterface, private val dummyServiceHelper: DummyServiceHelper, - private val iconsProvider: IconsProvider + private val iconsProvider: IconsProvider, + private val glucoseStatusProvider: GlucoseStatusProvider ) : PluginBase(PluginDescription() .mainType(PluginType.GENERAL) .neverVisible(true) @@ -130,13 +132,13 @@ class PersistentNotificationPlugin @Inject constructor( var line1aa: String val units = profileFunction.getUnits() val lastBG = iobCobCalculatorPlugin.lastBg() - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData if (lastBG != null) { line1aa = lastBG.valueToUnitsString(units) line1 = line1aa if (glucoseStatus != null) { line1 += (" Δ" + Profile.toSignedUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) - + " avgΔ" + Profile.toSignedUnitsString(glucoseStatus.avgDelta, glucoseStatus.avgDelta * Constants.MGDL_TO_MMOLL, units)) + + " avgΔ" + Profile.toSignedUnitsString(glucoseStatus.shortAvgDelta, glucoseStatus.shortAvgDelta * Constants.MGDL_TO_MMOLL, units)) line1aa += " " + lastBG.trendArrow.symbol } else { line1 += " " + diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt index 3ad255829f..0372ff89f7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt @@ -36,6 +36,7 @@ import info.nightscout.androidaps.plugins.general.overview.notifications.Notific import info.nightscout.androidaps.plugins.general.smsCommunicator.events.EventSmsCommunicatorUpdateGui import info.nightscout.androidaps.plugins.general.smsCommunicator.otp.OneTimePassword import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.receivers.BundleStore @@ -77,6 +78,7 @@ class SmsCommunicatorPlugin @Inject constructor( private val dateUtil: DateUtil, private val uel: UserEntryLogger, private val nsUpload: NSUpload, + private val glucoseStatusProvider: GlucoseStatusProvider, private val repository: AppRepository ) : PluginBase(PluginDescription() .mainType(PluginType.GENERAL) @@ -321,7 +323,7 @@ class SmsCommunicatorPlugin @Inject constructor( val agoMin = (agoMilliseconds / 60.0 / 1000.0).toInt() reply = resourceHelper.gs(R.string.sms_lastbg) + " " + lastBG.valueToUnitsString(units) + " " + String.format(resourceHelper.gs(R.string.sms_minago), agoMin) + ", " } - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData if (glucoseStatus != null) reply += resourceHelper.gs(R.string.sms_delta) + " " + Profile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units + ", " activePlugin.activeTreatments.updateTotalIOBTreatments() val bolusIob = activePlugin.activeTreatments.lastCalculationTreatments.round() diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java index 2e4eb71667..2de0652c56 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java @@ -51,6 +51,7 @@ import info.nightscout.androidaps.plugins.general.wear.WearPlugin; import info.nightscout.androidaps.plugins.general.wear.events.EventWearConfirmAction; import info.nightscout.androidaps.plugins.general.wear.events.EventWearInitiateAction; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin; import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; import info.nightscout.androidaps.receivers.ReceiverStatusStore; @@ -62,7 +63,7 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper; import info.nightscout.androidaps.utils.sharedPreferences.SP; public class WatchUpdaterService extends WearableListenerService implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { - @Inject public HasAndroidInjector injector; + @Inject public GlucoseStatusProvider glucoseStatusProvider; @Inject public AAPSLogger aapsLogger; @Inject public WearPlugin wearPlugin; @Inject public ResourceHelper resourceHelper; @@ -282,7 +283,7 @@ public class WatchUpdaterService extends WearableListenerService implements Goog GlucoseValue lastBG = iobCobCalculatorPlugin.lastBg(); // Log.d(TAG, logPrefix + "LastBg=" + lastBG); if (lastBG != null) { - GlucoseStatus glucoseStatus = new GlucoseStatus(injector).getGlucoseStatusData(); + GlucoseStatus glucoseStatus = glucoseStatusProvider.getGlucoseStatusData(); if (googleApiClient != null && !googleApiClient.isConnected() && !googleApiClient.isConnecting()) { googleApiConnect(); @@ -323,7 +324,7 @@ public class WatchUpdaterService extends WearableListenerService implements Goog } else { dataMap.putString("slopeArrow", slopeArrow(glucoseStatus.getDelta())); dataMap.putString("delta", deltastring(glucoseStatus.getDelta(), glucoseStatus.getDelta() * Constants.MGDL_TO_MMOLL, units)); - dataMap.putString("avgDelta", deltastring(glucoseStatus.getAvgDelta(), glucoseStatus.getAvgDelta() * Constants.MGDL_TO_MMOLL, units)); + dataMap.putString("avgDelta", deltastring(glucoseStatus.getShortAvgDelta(), glucoseStatus.getShortAvgDelta() * Constants.MGDL_TO_MMOLL, units)); } dataMap.putLong("sgvLevel", sgvLevel); dataMap.putDouble("sgvDouble", lastBG.getValue()); @@ -386,7 +387,7 @@ public class WatchUpdaterService extends WearableListenerService implements Goog if (last_bg == null) return; List graph_bgs = repository.compatGetBgReadingsDataFromTime(startTime, true).blockingGet(); - GlucoseStatus glucoseStatus = new GlucoseStatus(injector).getGlucoseStatusData(true); + GlucoseStatus glucoseStatus = glucoseStatusProvider.getGlucoseStatusData(true); if (!graph_bgs.isEmpty()) { DataMap entries = dataMapSingleBG(last_bg, glucoseStatus); diff --git a/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt b/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt index 9169179a5e..cd96428149 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt @@ -22,6 +22,7 @@ import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.utils.CarbTimer @@ -57,6 +58,7 @@ class BolusWizard @Inject constructor( @Inject lateinit var config: Config @Inject lateinit var uel: UserEntryLogger @Inject lateinit var carbTimer: CarbTimer + @Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider init { injector.androidInjector().inject(this) @@ -181,7 +183,7 @@ class BolusWizard @Inject constructor( } // Insulin from 15 min trend - glucoseStatus = GlucoseStatus(injector).glucoseStatusData + glucoseStatus = glucoseStatusProvider.glucoseStatusData glucoseStatus?.let { if (useTrend) { trend = it.shortAvgDelta diff --git a/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt b/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt index a4ce50b42f..21508cde51 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt @@ -10,6 +10,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin import info.nightscout.androidaps.utils.DateUtil @@ -32,6 +33,7 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec @Inject lateinit var iobCobCalculatorPlugin: IobCobCalculatorPlugin @Inject lateinit var repository: AppRepository @Inject lateinit var dateUtil: DateUtil + @Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider lateinit var storage: JSONObject var position: Int = -1 @@ -79,7 +81,7 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec fun doCalc(profile: Profile, profileName: String, lastBG: GlucoseValue, _synchronized: Boolean): BolusWizard { val dbRecord = repository.getTemporaryTargetActiveAt(dateUtil._now()).blockingGet() - val tempTarget = if (dbRecord is ValueWrapper.Existing) dbRecord.value else null + val tempTarget = if (dbRecord is ValueWrapper.Existing) dbRecord.value else null //BG var bg = 0.0 if (useBG() == YES) { @@ -114,7 +116,7 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec } if (loopPlugin.isEnabled(loopPlugin.getType()) && loopPlugin.isSuperBolus) superBolus = false // Trend - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData var trend = false if (useTrend() == YES) { trend = true diff --git a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt b/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt index 47d6a9626e..45c01dd259 100644 --- a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt @@ -23,6 +23,7 @@ import info.nightscout.androidaps.plugins.constraints.safety.SafetyPlugin import info.nightscout.androidaps.plugins.general.maintenance.LoggerUtils import info.nightscout.androidaps.plugins.general.nsclient.NSUpload import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.plugins.pump.combo.ComboPlugin import info.nightscout.androidaps.plugins.pump.common.bolusInfo.DetailedBolusInfoStorage @@ -138,6 +139,9 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { `when`(activePlugin.activePump).thenReturn(virtualPumpPlugin) constraintChecker = ConstraintChecker(activePlugin) + val glucoseStatusProvider = GlucoseStatusProvider(aapsLogger = aapsLogger, iobCobCalculatorPlugin = iobCobCalculatorPlugin) + + danaPump = DanaPump(aapsLogger, sp, injector) hardLimits = HardLimits(aapsLogger, rxBus, sp, resourceHelper, context, nsUpload) objectivesPlugin = ObjectivesPlugin(injector, aapsLogger, resourceHelper, activePlugin, sp, Config(), uel) @@ -145,8 +149,8 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, resourceHelper, constraintChecker, activePlugin, sp, commandQueue, danaPump, dateUtil, fabricPrivacy) danaRSPlugin = DanaRSPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, resourceHelper, constraintChecker, profileFunction, activePluginProvider, sp, commandQueue, danaPump, detailedBolusInfoStorage, fabricPrivacy, dateUtil) insightPlugin = LocalInsightPlugin(injector, aapsLogger, rxBus, resourceHelper, treatmentsInterface, sp, commandQueue, profileFunction, nsUpload, context, uploadQueue, Config(), dateUtil, databaseHelper) - openAPSSMBPlugin = OpenAPSSMBPlugin(injector, aapsLogger, rxBus, constraintChecker, resourceHelper, profileFunction, context, activePlugin, treatmentsInterface, iobCobCalculatorPlugin, hardLimits, profiler, sp, dateUtil, repository) - openAPSAMAPlugin = OpenAPSAMAPlugin(injector, aapsLogger, rxBus, constraintChecker, resourceHelper, profileFunction, context, activePlugin, treatmentsInterface, iobCobCalculatorPlugin, hardLimits, profiler, fabricPrivacy, dateUtil, repository) + openAPSSMBPlugin = OpenAPSSMBPlugin(injector, aapsLogger, rxBus, constraintChecker, resourceHelper, profileFunction, context, activePlugin, treatmentsInterface, iobCobCalculatorPlugin, hardLimits, profiler, sp, dateUtil, repository, glucoseStatusProvider) + openAPSAMAPlugin = OpenAPSAMAPlugin(injector, aapsLogger, rxBus, constraintChecker, resourceHelper, profileFunction, context, activePlugin, treatmentsInterface, iobCobCalculatorPlugin, hardLimits, profiler, fabricPrivacy, dateUtil, repository, glucoseStatusProvider) safetyPlugin = SafetyPlugin(injector, aapsLogger, resourceHelper, sp, rxBus, constraintChecker, openAPSAMAPlugin, openAPSSMBPlugin, sensitivityOref1Plugin, activePlugin, hardLimits, BuildHelper(Config(), loggerUtils), treatmentsInterface, Config()) val constraintsPluginsList = ArrayList() constraintsPluginsList.add(safetyPlugin) diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt index a585743ee7..ecc7b3374d 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt @@ -27,7 +27,7 @@ import info.nightscout.androidaps.plugins.general.nsclient.NSUpload import info.nightscout.androidaps.plugins.general.smsCommunicator.otp.OneTimePassword import info.nightscout.androidaps.plugins.general.smsCommunicator.otp.OneTimePasswordValidationResult import info.nightscout.androidaps.plugins.iob.iobCobCalculator.CobInfo -import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -91,10 +91,6 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { it.resourceHelper = resourceHelper it.otp = otp } - if (it is GlucoseStatus) { - it.aapsLogger = aapsLogger - it.iobCobCalculatorPlugin = iobCobCalculatorPlugin - } } } @@ -121,8 +117,9 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { repository.runTransactionForResult(anyObject()) ).thenReturn(Single.just(InsertTemporaryTargetAndCancelCurrentTransaction.TransactionResult().apply { })) + val glucoseStatusProvider = GlucoseStatusProvider(aapsLogger = aapsLogger, iobCobCalculatorPlugin = iobCobCalculatorPlugin) - smsCommunicatorPlugin = SmsCommunicatorPlugin(injector, aapsLogger, resourceHelper, aapsSchedulers, sp, constraintChecker, rxBus, profileFunction, fabricPrivacy, activePlugin, commandQueue, loopPlugin, iobCobCalculatorPlugin, xdripCalibrations, otp, Config(), DateUtil(context), uel, nsUpload, repository) + smsCommunicatorPlugin = SmsCommunicatorPlugin(injector, aapsLogger, resourceHelper, aapsSchedulers, sp, constraintChecker, rxBus, profileFunction, fabricPrivacy, activePlugin, commandQueue, loopPlugin, iobCobCalculatorPlugin, xdripCalibrations, otp, Config(), DateUtil(context), uel, nsUpload, glucoseStatusProvider, repository) smsCommunicatorPlugin.setPluginEnabled(PluginType.GENERAL, true) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(1) diff --git a/app/src/test/java/info/nightscout/androidaps/utils/wizard/BolusWizardTest.kt b/app/src/test/java/info/nightscout/androidaps/utils/wizard/BolusWizardTest.kt index 7d6cd613ea..40238e7c68 100644 --- a/app/src/test/java/info/nightscout/androidaps/utils/wizard/BolusWizardTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/utils/wizard/BolusWizardTest.kt @@ -16,6 +16,7 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin @@ -59,10 +60,7 @@ class BolusWizardTest : TestBase() { it.commandQueue = commandQueue it.loopPlugin = loopPlugin it.iobCobCalculatorPlugin = iobCobCalculatorPlugin - } - if (it is GlucoseStatus) { - it.aapsLogger = aapsLogger - it.iobCobCalculatorPlugin = iobCobCalculatorPlugin + it.glucoseStatusProvider = GlucoseStatusProvider(aapsLogger = aapsLogger, iobCobCalculatorPlugin = iobCobCalculatorPlugin) } } } diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt index a19f2bb5a3..b467a3b933 100644 --- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt +++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt @@ -20,6 +20,7 @@ import info.nightscout.androidaps.plugins.general.automation.dialogs.ChooseTrigg import info.nightscout.androidaps.plugins.general.automation.events.EventTriggerChanged import info.nightscout.androidaps.plugins.general.automation.events.EventTriggerClone import info.nightscout.androidaps.plugins.general.automation.events.EventTriggerRemove +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.services.LastLocationDataContainer import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.sharedPreferences.SP @@ -39,6 +40,7 @@ abstract class Trigger(val injector: HasAndroidInjector) { @Inject lateinit var treatmentsInterface: TreatmentsInterface @Inject lateinit var activePlugin: ActivePluginProvider @Inject lateinit var iobCobCalculatorPlugin: IobCobCalculatorInterface + @Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider init { injector.androidInjector().inject(this) diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerBg.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerBg.kt index e9bdee88de..373cfdd3c7 100644 --- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerBg.kt +++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerBg.kt @@ -46,7 +46,7 @@ class TriggerBg(injector: HasAndroidInjector) : Trigger(injector) { } override fun shouldRun(): Boolean { - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData if (glucoseStatus == null && comparator.value == Comparator.Compare.IS_NOT_AVAILABLE) { aapsLogger.debug(LTag.AUTOMATION, "Ready for execution: " + friendlyDescription()) return true diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerDelta.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerDelta.kt index 4e0e543a6d..b422d52ace 100644 --- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerDelta.kt +++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerDelta.kt @@ -64,7 +64,7 @@ class TriggerDelta(injector: HasAndroidInjector) : Trigger(injector) { } override fun shouldRun(): Boolean { - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus = glucoseStatusProvider.glucoseStatusData ?: return if (comparator.value == Comparator.Compare.IS_NOT_AVAILABLE) { aapsLogger.debug(LTag.AUTOMATION, "Ready for execution: " + friendlyDescription()) true diff --git a/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt b/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt index 53f805e162..2ff8a44a50 100644 --- a/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt +++ b/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt @@ -83,10 +83,6 @@ open class TriggerTestBase : TestBaseWithProfile() { if (it is InputTempTarget) { it.profileFunction = profileFunction } - if (it is GlucoseStatus) { - it.aapsLogger = aapsLogger - it.iobCobCalculatorPlugin = iobCobCalculatorPlugin - } if (it is StaticLabel) { it.resourceHelper = resourceHelper } diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.kt b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.kt index 80b6deb2a4..9173bf5d59 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.kt @@ -1,147 +1,28 @@ package info.nightscout.androidaps.plugins.iob.iobCobCalculator -import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.interfaces.IobCobCalculatorInterface -import info.nightscout.androidaps.logging.AAPSLogger -import info.nightscout.androidaps.logging.LTag -import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.DecimalFormatter import info.nightscout.androidaps.utils.Round -import java.util.* -import javax.inject.Inject -import kotlin.math.roundToLong -class GlucoseStatus(private val injector: HasAndroidInjector) { +data class GlucoseStatus( + val glucose: Double, + val noise: Double = 0.0, + val delta: Double = 0.0, + val shortAvgDelta: Double = 0.0, + val longAvgDelta: Double = 0.0, + val date: Long = 0L +) { - @Inject lateinit var aapsLogger: AAPSLogger - @Inject lateinit var iobCobCalculatorPlugin: IobCobCalculatorInterface + fun log(): String = "Glucose: " + DecimalFormatter.to0Decimal(glucose) + " mg/dl " + + "Noise: " + DecimalFormatter.to0Decimal(noise) + " " + + "Delta: " + DecimalFormatter.to0Decimal(delta) + " mg/dl" + + "Short avg. delta: " + " " + DecimalFormatter.to2Decimal(shortAvgDelta) + " mg/dl " + + "Long avg. delta: " + DecimalFormatter.to2Decimal(longAvgDelta) + " mg/dl" +} - var glucose = 0.0 - var noise = 0.0 - var delta = 0.0 - var avgDelta = 0.0 - var shortAvgDelta = 0.0 - var longAvgDelta = 0.0 - var date = 0L - - init { - injector.androidInjector().inject(this) - } - - fun log(): String { - return "Glucose: " + DecimalFormatter.to0Decimal(glucose) + " mg/dl " + - "Noise: " + DecimalFormatter.to0Decimal(noise) + " " + - "Delta: " + DecimalFormatter.to0Decimal(delta) + " mg/dl" + - "Short avg. delta: " + " " + DecimalFormatter.to2Decimal(shortAvgDelta) + " mg/dl " + - "Long avg. delta: " + DecimalFormatter.to2Decimal(longAvgDelta) + " mg/dl" - } - - fun round(): GlucoseStatus { - glucose = Round.roundTo(glucose, 0.1) - noise = Round.roundTo(noise, 0.01) - delta = Round.roundTo(delta, 0.01) - avgDelta = Round.roundTo(avgDelta, 0.01) - shortAvgDelta = Round.roundTo(shortAvgDelta, 0.01) - longAvgDelta = Round.roundTo(longAvgDelta, 0.01) - return this - } - - val glucoseStatusData: GlucoseStatus? - get() = getGlucoseStatusData(false) - - fun getGlucoseStatusData(allowOldData: Boolean): GlucoseStatus? { - synchronized(iobCobCalculatorPlugin.dataLock) { - val data = iobCobCalculatorPlugin.bgReadings - val sizeRecords = data.size - if (sizeRecords == 0) { - aapsLogger.debug(LTag.GLUCOSE, "sizeRecords==0") - return null - } - if (data[0].timestamp < DateUtil.now() - 7 * 60 * 1000L && !allowOldData) { - aapsLogger.debug(LTag.GLUCOSE, "oldData") - return null - } - val now = data[0] - val nowDate = now.timestamp - var change: Double - if (sizeRecords == 1) { - val status = GlucoseStatus(injector) - status.glucose = now.value - status.noise = 0.0 - status.shortAvgDelta = 0.0 - status.delta = 0.0 - status.longAvgDelta = 0.0 - status.avgDelta = 0.0 // for OpenAPS MA - status.date = nowDate - aapsLogger.debug(LTag.GLUCOSE, "sizeRecords==1") - return status.round() - } - val nowValueList = ArrayList() - val lastDeltas = ArrayList() - val shortDeltas = ArrayList() - val longDeltas = ArrayList() - - // Use the latest sgv value in the now calculations - nowValueList.add(now.value) - for (i in 1 until sizeRecords) { - if (data[i].value > 38) { - val then = data[i] - val thenDate = then.timestamp - - val minutesAgo = ((nowDate - thenDate) / (1000.0 * 60)).roundToLong() - // multiply by 5 to get the same units as delta, i.e. mg/dL/5m - change = now.value - then.value - val avgDel = change / minutesAgo * 5 - aapsLogger.debug(LTag.GLUCOSE, "$then minutesAgo=$minutesAgo avgDelta=$avgDel") - - // use the average of all data points in the last 2.5m for all further "now" calculations - if (0 < minutesAgo && minutesAgo < 2.5) { - // Keep and average all values within the last 2.5 minutes - nowValueList.add(then.value) - now.value = average(nowValueList) - // short_deltas are calculated from everything ~5-15 minutes ago - } else if (2.5 < minutesAgo && minutesAgo < 17.5) { - //console.error(minutesAgo, avgDelta); - shortDeltas.add(avgDel) - // last_deltas are calculated from everything ~5 minutes ago - if (2.5 < minutesAgo && minutesAgo < 7.5) { - lastDeltas.add(avgDel) - } - // long_deltas are calculated from everything ~20-40 minutes ago - } else if (17.5 < minutesAgo && minutesAgo < 42.5) { - longDeltas.add(avgDel) - } else { - // Do not process any more records after >= 42.5 minutes - break - } - } - } - val status = GlucoseStatus(injector) - status.glucose = now.value - status.date = nowDate - status.noise = 0.0 //for now set to nothing as not all CGMs report noise - status.shortAvgDelta = average(shortDeltas) - if (lastDeltas.isEmpty()) { - status.delta = status.shortAvgDelta - } else { - status.delta = average(lastDeltas) - } - status.longAvgDelta = average(longDeltas) - status.avgDelta = status.shortAvgDelta // for OpenAPS MA - aapsLogger.debug(LTag.GLUCOSE, status.log()) - return status.round() - } - } - - companion object { - - fun average(array: ArrayList): Double { - var sum = 0.0 - if (array.size == 0) return 0.0 - for (value in array) { - sum += value - } - return sum / array.size - } - } -} \ No newline at end of file +fun GlucoseStatus.asRounded() = copy( + glucose = Round.roundTo(glucose, 0.1), + noise = Round.roundTo(noise, 0.01), + delta = Round.roundTo(delta, 0.01), + shortAvgDelta = Round.roundTo(shortAvgDelta, 0.01), + longAvgDelta = Round.roundTo(longAvgDelta, 0.01) +) \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatusProvider.kt b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatusProvider.kt new file mode 100644 index 0000000000..a19eebb28b --- /dev/null +++ b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatusProvider.kt @@ -0,0 +1,112 @@ +package info.nightscout.androidaps.plugins.iob.iobCobCalculator + +import dagger.Reusable +import info.nightscout.androidaps.interfaces.IobCobCalculatorInterface +import info.nightscout.androidaps.logging.AAPSLogger +import info.nightscout.androidaps.logging.LTag +import info.nightscout.androidaps.utils.DateUtil +import java.util.* +import javax.inject.Inject +import kotlin.math.roundToLong + +@Reusable +class GlucoseStatusProvider @Inject constructor(private val aapsLogger: AAPSLogger, private val iobCobCalculatorPlugin: IobCobCalculatorInterface) { + + val glucoseStatusData: GlucoseStatus? + get() = getGlucoseStatusData() + + fun getGlucoseStatusData(allowOldData: Boolean = false): GlucoseStatus? { + synchronized(iobCobCalculatorPlugin.dataLock) { + val data = iobCobCalculatorPlugin.bgReadings + val sizeRecords = data.size + if (sizeRecords == 0) { + aapsLogger.debug(LTag.GLUCOSE, "sizeRecords==0") + return null + } + if (data[0].timestamp < DateUtil.now() - 7 * 60 * 1000L && !allowOldData) { + aapsLogger.debug(LTag.GLUCOSE, "oldData") + return null + } + val now = data[0] + val nowDate = now.timestamp + var change: Double + if (sizeRecords == 1) { + aapsLogger.debug(LTag.GLUCOSE, "sizeRecords==1") + return GlucoseStatus( + glucose = now.value, + noise = 0.0, + delta = 0.0, + shortAvgDelta = 0.0, + longAvgDelta = 0.0, + date = nowDate + ).asRounded() + } + val nowValueList = ArrayList() + val lastDeltas = ArrayList() + val shortDeltas = ArrayList() + val longDeltas = ArrayList() + + // Use the latest sgv value in the now calculations + nowValueList.add(now.value) + for (i in 1 until sizeRecords) { + if (data[i].value > 38) { + val then = data[i] + val thenDate = then.timestamp + + val minutesAgo = ((nowDate - thenDate) / (1000.0 * 60)).roundToLong() + // multiply by 5 to get the same units as delta, i.e. mg/dL/5m + change = now.value - then.value + val avgDel = change / minutesAgo * 5 + aapsLogger.debug(LTag.GLUCOSE, "$then minutesAgo=$minutesAgo avgDelta=$avgDel") + + // use the average of all data points in the last 2.5m for all further "now" calculations + if (0 < minutesAgo && minutesAgo < 2.5) { + // Keep and average all values within the last 2.5 minutes + nowValueList.add(then.value) + now.value = average(nowValueList) + // short_deltas are calculated from everything ~5-15 minutes ago + } else if (2.5 < minutesAgo && minutesAgo < 17.5) { + //console.error(minutesAgo, avgDelta); + shortDeltas.add(avgDel) + // last_deltas are calculated from everything ~5 minutes ago + if (2.5 < minutesAgo && minutesAgo < 7.5) { + lastDeltas.add(avgDel) + } + // long_deltas are calculated from everything ~20-40 minutes ago + } else if (17.5 < minutesAgo && minutesAgo < 42.5) { + longDeltas.add(avgDel) + } else { + // Do not process any more records after >= 42.5 minutes + break + } + } + } + val shortAverageDelta = average(shortDeltas) + val delta = if (lastDeltas.isEmpty()) { + shortAverageDelta + } else { + average(lastDeltas) + } + return GlucoseStatus( + glucose = now.value, + date = nowDate, + noise = 0.0, //for now set to nothing as not all CGMs report noise + shortAvgDelta = shortAverageDelta, + delta = delta, + longAvgDelta = average(longDeltas), + ).also { aapsLogger.debug(LTag.GLUCOSE, it.log()) }.asRounded() + } + } + + companion object { + + fun average(array: ArrayList): Double { + var sum = 0.0 + if (array.size == 0) return 0.0 + for (value in array) { + sum += value + } + return sum / array.size + } + } +} \ No newline at end of file diff --git a/core/src/test/java/info/nightscout/androidaps/plugins/iob/iobCalculator/GlucoseStatusTest.kt b/core/src/test/java/info/nightscout/androidaps/plugins/iob/iobCalculator/GlucoseStatusTest.kt index e84d12645f..d6a5abbb8b 100644 --- a/core/src/test/java/info/nightscout/androidaps/plugins/iob/iobCalculator/GlucoseStatusTest.kt +++ b/core/src/test/java/info/nightscout/androidaps/plugins/iob/iobCalculator/GlucoseStatusTest.kt @@ -1,11 +1,11 @@ package info.nightscout.androidaps.plugins.iob.iobCalculator -import dagger.android.AndroidInjector -import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.database.entities.GlucoseValue import info.nightscout.androidaps.interfaces.IobCobCalculatorInterface import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.asRounded import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.T import org.junit.Assert @@ -30,88 +30,74 @@ class GlucoseStatusTest : TestBase() { @Mock lateinit var dateUtil: DateUtil @Mock lateinit var iobCobCalculatorPlugin: IobCobCalculatorInterface - val injector = HasAndroidInjector { - AndroidInjector { - if (it is GlucoseStatus) { - it.aapsLogger = aapsLogger - it.iobCobCalculatorPlugin = iobCobCalculatorPlugin - } - } - } - @Test fun toStringShouldBeOverloaded() { - val glucoseStatus = GlucoseStatus(injector) + val glucoseStatus = GlucoseStatus(glucose = 0.0, noise = 0.0, delta = 0.0, shortAvgDelta = 0.0, longAvgDelta = 0.0, date = 0) Assert.assertEquals(true, glucoseStatus.log().contains("Delta")) } @Test fun roundTest() { - val glucoseStatus = GlucoseStatus(injector) - glucoseStatus.glucose = 100.11111 - Assert.assertEquals(100.1, glucoseStatus.round().glucose, 0.0001) + val glucoseStatus = GlucoseStatus(glucose = 100.11111, noise = 0.0, delta = 0.0, shortAvgDelta = 0.0, longAvgDelta = 0.0, date = 0) + Assert.assertEquals(100.1, glucoseStatus.asRounded().glucose, 0.0001) } @Test fun calculateValidGlucoseStatus() { PowerMockito.`when`(iobCobCalculatorPlugin.bgReadings).thenReturn(generateValidBgData()) - val glucoseStatus = GlucoseStatus(injector).glucoseStatusData!! + val glucoseStatus = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin).glucoseStatusData!! Assert.assertEquals(214.0, glucoseStatus.glucose, 0.001) Assert.assertEquals(-2.0, glucoseStatus.delta, 0.001) Assert.assertEquals(-2.5, glucoseStatus.shortAvgDelta, 0.001) // -2 -2.5 -3 deltas are relative to current value - Assert.assertEquals(-2.5, glucoseStatus.avgDelta, 0.001) // the same as short_avgdelta Assert.assertEquals(-2.0, glucoseStatus.longAvgDelta, 0.001) // -2 -2 -2 -2 Assert.assertEquals(1514766900000L, glucoseStatus.date) // latest date } @Test fun calculateMostRecentGlucoseStatus() { PowerMockito.`when`(iobCobCalculatorPlugin.bgReadings).thenReturn(generateMostRecentBgData()) - val glucoseStatus: GlucoseStatus = GlucoseStatus(injector).glucoseStatusData!! + val glucoseStatus: GlucoseStatus = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin).glucoseStatusData!! Assert.assertEquals(215.0, glucoseStatus.glucose, 0.001) // (214+216) / 2 Assert.assertEquals(-1.0, glucoseStatus.delta, 0.001) Assert.assertEquals(-1.0, glucoseStatus.shortAvgDelta, 0.001) - Assert.assertEquals(-1.0, glucoseStatus.avgDelta, 0.001) Assert.assertEquals(0.0, glucoseStatus.longAvgDelta, 0.001) Assert.assertEquals(1514766900000L, glucoseStatus.date) // latest date, even when averaging } @Test fun oneRecordShouldProduceZeroDeltas() { PowerMockito.`when`(iobCobCalculatorPlugin.bgReadings).thenReturn(generateOneCurrentRecordBgData()) - val glucoseStatus: GlucoseStatus = GlucoseStatus(injector).glucoseStatusData!! + val glucoseStatus: GlucoseStatus = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin).glucoseStatusData!! Assert.assertEquals(214.0, glucoseStatus.glucose, 0.001) Assert.assertEquals(0.0, glucoseStatus.delta, 0.001) Assert.assertEquals(0.0, glucoseStatus.shortAvgDelta, 0.001) // -2 -2.5 -3 deltas are relative to current value - Assert.assertEquals(0.0, glucoseStatus.avgDelta, 0.001) // the same as short_avgdelta Assert.assertEquals(0.0, glucoseStatus.longAvgDelta, 0.001) // -2 -2 -2 -2 Assert.assertEquals(1514766900000L, glucoseStatus.date) // latest date } @Test fun insufficientDataShouldReturnNull() { PowerMockito.`when`(iobCobCalculatorPlugin.bgReadings).thenReturn(generateInsufficientBgData()) - val glucoseStatus: GlucoseStatus? = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus: GlucoseStatus? = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin).glucoseStatusData Assert.assertEquals(null, glucoseStatus) } @Test fun oldDataShouldReturnNull() { PowerMockito.`when`(iobCobCalculatorPlugin.bgReadings).thenReturn(generateOldBgData()) - val glucoseStatus: GlucoseStatus? = GlucoseStatus(injector).glucoseStatusData + val glucoseStatus: GlucoseStatus? = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin).glucoseStatusData Assert.assertEquals(null, glucoseStatus) } @Test fun returnOldDataIfAllowed() { PowerMockito.`when`(iobCobCalculatorPlugin.bgReadings).thenReturn(generateOldBgData()) - val glucoseStatus: GlucoseStatus? = GlucoseStatus(injector).getGlucoseStatusData(true) + val glucoseStatus: GlucoseStatus? = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin).getGlucoseStatusData(true) Assert.assertNotEquals(null, glucoseStatus) } @Test fun averageShouldNotFailOnEmptyArray() { - Assert.assertEquals(0.0, GlucoseStatus.average(ArrayList()), 0.001) + Assert.assertEquals(0.0, GlucoseStatusProvider.average(ArrayList()), 0.001) } @Test fun calculateGlucoseStatusForLibreTestBgData() { PowerMockito.`when`(iobCobCalculatorPlugin.bgReadings).thenReturn(generateLibreTestData()) - val glucoseStatus: GlucoseStatus = GlucoseStatus(injector).glucoseStatusData!! + val glucoseStatus: GlucoseStatus = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin).glucoseStatusData!! Assert.assertEquals(100.0, glucoseStatus.glucose, 0.001) // Assert.assertEquals(-10.0, glucoseStatus.delta, 0.001) Assert.assertEquals(-10.0, glucoseStatus.shortAvgDelta, 0.001) - Assert.assertEquals(-10.0, glucoseStatus.avgDelta, 0.001) Assert.assertEquals(-10.0, glucoseStatus.longAvgDelta, 0.001) Assert.assertEquals(1514766900000L, glucoseStatus.date) // latest date } From d13d6a7fff28259d766428a2351a6bae04701a12 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 7 Mar 2021 22:38:18 +0100 Subject: [PATCH 2/3] glucose status provider test fix --- .../plugins/general/automation/triggers/TriggerTestBase.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt b/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt index 2ff8a44a50..37ecd1fcf9 100644 --- a/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt +++ b/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTestBase.kt @@ -15,6 +15,7 @@ import info.nightscout.androidaps.plugins.general.automation.elements.InputBg import info.nightscout.androidaps.plugins.general.automation.elements.InputTempTarget import info.nightscout.androidaps.plugins.general.automation.elements.StaticLabel import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.receivers.ReceiverStatusStore import info.nightscout.androidaps.services.LastLocationDataContainer import info.nightscout.androidaps.utils.sharedPreferences.SP @@ -57,6 +58,7 @@ open class TriggerTestBase : TestBaseWithProfile() { it.treatmentsInterface = treatmentsInterface it.activePlugin = activePlugin it.iobCobCalculatorPlugin = iobCobCalculatorPlugin + it.glucoseStatusProvider = GlucoseStatusProvider(aapsLogger, iobCobCalculatorPlugin) } if (it is TriggerBg) { it.profileFunction = profileFunction From 91e323b5f59634743513b2622139734651c78683 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 8 Mar 2021 20:22:45 +0100 Subject: [PATCH 3/3] New Crowdin updates (#388) * New translations exam.xml (Portuguese) * New translations validator.xml (Slovak) * New translations alert_descriptions.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations alert_titles.xml (Tamil) * New translations alert_descriptions.xml (Tamil) * New translations alert_codes.xml (Tamil) * New translations strings.xml (Tamil) * New translations validator.xml (Tamil) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations exam.xml (Tamil) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations strings.xml (Tamil) * New translations objectives.xml (Tamil) * New translations exceptions.xml (Tamil) * New translations strings.xml (Hebrew) * New translations strings.xml (Norwegian) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Swedish) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations exam.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Dutch) * New translations strings.xml (Romanian) * New translations strings.xml (Lithuanian) * New translations strings.xml (Korean) * New translations strings.xml (Italian) * New translations strings.xml (Greek) * New translations strings.xml (German) * New translations strings.xml (Czech) * New translations strings.xml (Bulgarian) * New translations strings.xml (Afrikaans) * New translations strings.xml (Spanish) * New translations strings.xml (French) * New translations strings.xml (German) * New translations validator.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Norwegian) * New translations strings.xml (Hebrew) * New translations objectives.xml (Hebrew) * New translations strings.xml (Czech) * New translations strings.xml (Italian) * New translations strings.xml (Portuguese) * New translations alert_titles.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations exam.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations validator.xml (French) * New translations alert_descriptions.xml (French) * New translations alert_titles.xml (French) * New translations strings.xml (French) * New translations strings.xml (German) * New translations strings.xml (French) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Czech) * New translations strings.xml (Italian) * New translations strings.xml (Norwegian) * New translations strings.xml (French) * New translations alert_descriptions.xml (Swedish) * New translations alert_titles.xml (Swedish) * New translations strings.xml (Swedish) * New translations exam.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) * New translations strings.xml (Swedish) --- app/src/main/res/values-af-rZA/strings.xml | 1 - app/src/main/res/values-bg-rBG/strings.xml | 1 - app/src/main/res/values-cs-rCZ/strings.xml | 12 +- app/src/main/res/values-de-rDE/strings.xml | 12 +- app/src/main/res/values-el-rGR/strings.xml | 1 - app/src/main/res/values-es-rES/strings.xml | 1 - app/src/main/res/values-fr-rFR/strings.xml | 12 +- app/src/main/res/values-it-rIT/strings.xml | 12 +- app/src/main/res/values-iw-rIL/objectives.xml | 2 +- app/src/main/res/values-iw-rIL/strings.xml | 20 +- app/src/main/res/values-ko-rKR/strings.xml | 1 - app/src/main/res/values-lt-rLT/strings.xml | 1 - app/src/main/res/values-nl-rNL/strings.xml | 1 - app/src/main/res/values-no-rNO/strings.xml | 12 +- app/src/main/res/values-pl-rPL/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt-rPT/exam.xml | 12 +- app/src/main/res/values-pt-rPT/strings.xml | 42 ++-- app/src/main/res/values-ro-rRO/strings.xml | 1 - app/src/main/res/values-ru-rRU/strings.xml | 12 +- app/src/main/res/values-sk-rSK/strings.xml | 5 +- app/src/main/res/values-sv-rSE/exam.xml | 3 + app/src/main/res/values-sv-rSE/strings.xml | 25 ++- app/src/main/res/values-ta-rIN/exam.xml | 2 + app/src/main/res/values-ta-rIN/objectives.xml | 2 + app/src/main/res/values-ta-rIN/strings.xml | 7 + app/src/main/res/values-zh-rCN/strings.xml | 1 - .../src/main/res/values-sk-rSK/strings.xml | 2 + .../src/main/res/values-sv-rSE/strings.xml | 2 + .../src/main/res/values-ta-rIN/strings.xml | 2 + combo/src/main/res/values-sk-rSK/strings.xml | 1 + combo/src/main/res/values-sv-rSE/strings.xml | 1 + combo/src/main/res/values-ta-rIN/strings.xml | 2 + core/src/main/res/values-cs-rCZ/strings.xml | 1 + core/src/main/res/values-de-rDE/strings.xml | 1 + core/src/main/res/values-fr-rFR/strings.xml | 3 +- core/src/main/res/values-fr-rFR/validator.xml | 24 ++- core/src/main/res/values-it-rIT/strings.xml | 1 + core/src/main/res/values-no-rNO/strings.xml | 1 + core/src/main/res/values-pt-rPT/strings.xml | 3 + core/src/main/res/values-pt-rPT/validator.xml | 24 ++- core/src/main/res/values-ru-rRU/strings.xml | 1 + core/src/main/res/values-sk-rSK/strings.xml | 34 ++++ core/src/main/res/values-sk-rSK/validator.xml | 24 ++- core/src/main/res/values-ta-rIN/strings.xml | 30 +++ core/src/main/res/values-ta-rIN/validator.xml | 2 + dana/src/main/res/values-ta-rIN/strings.xml | 2 + .../res/values-fr-rFR/alert_descriptions.xml | 4 + .../main/res/values-fr-rFR/alert_titles.xml | 1 + .../main/res/values-pt-rPT/alert_titles.xml | 4 +- .../src/main/res/values-pt-rPT/strings.xml | 4 +- .../res/values-sk-rSK/alert_descriptions.xml | 5 + .../res/values-sv-rSE/alert_descriptions.xml | 5 + .../main/res/values-sv-rSE/alert_titles.xml | 1 + .../main/res/values-ta-rIN/alert_codes.xml | 2 + .../res/values-ta-rIN/alert_descriptions.xml | 2 + .../main/res/values-ta-rIN/alert_titles.xml | 2 + .../src/main/res/values-ta-rIN/exceptions.xml | 2 + .../src/main/res/values-ta-rIN/strings.xml | 2 + .../src/main/res/values-pt-rPT/strings.xml | 8 +- .../src/main/res/values-ta-rIN/strings.xml | 17 ++ .../src/main/res/values-pt-rPT/strings.xml | 11 +- .../src/main/res/values-sk-rSK/strings.xml | 181 ++++++++++++++++++ .../src/main/res/values-sv-rSE/strings.xml | 169 ++++++++++++++++ .../src/main/res/values-ta-rIN/strings.xml | 18 ++ .../src/main/res/values-pt-rPT/strings.xml | 3 + .../src/main/res/values-sk-rSK/strings.xml | 3 + .../src/main/res/values-ta-rIN/strings.xml | 6 + .../src/main/res/values-pt-rPT/strings.xml | 9 +- .../src/main/res/values-sk-rSK/strings.xml | 60 ++++++ .../src/main/res/values-sv-rSE/strings.xml | 60 ++++++ .../src/main/res/values-ta-rIN/strings.xml | 13 ++ .../src/main/res/values-ta-rIN/strings.xml | 10 + wear/src/main/res/values-pt-rPT/strings.xml | 2 +- wear/src/main/res/values-sv-rSE/strings.xml | 7 + wear/src/main/res/values-ta-rIN/strings.xml | 2 + 76 files changed, 914 insertions(+), 63 deletions(-) create mode 100644 app/src/main/res/values-ta-rIN/exam.xml create mode 100644 app/src/main/res/values-ta-rIN/objectives.xml create mode 100644 app/src/main/res/values-ta-rIN/strings.xml create mode 100644 automation/src/main/res/values-ta-rIN/strings.xml create mode 100644 combo/src/main/res/values-ta-rIN/strings.xml create mode 100644 core/src/main/res/values-ta-rIN/strings.xml create mode 100644 core/src/main/res/values-ta-rIN/validator.xml create mode 100644 dana/src/main/res/values-ta-rIN/strings.xml create mode 100644 insight/src/main/res/values-ta-rIN/alert_codes.xml create mode 100644 insight/src/main/res/values-ta-rIN/alert_descriptions.xml create mode 100644 insight/src/main/res/values-ta-rIN/alert_titles.xml create mode 100644 insight/src/main/res/values-ta-rIN/exceptions.xml create mode 100644 insight/src/main/res/values-ta-rIN/strings.xml create mode 100644 medtronic/src/main/res/values-ta-rIN/strings.xml create mode 100644 omnipod-common/src/main/res/values-ta-rIN/strings.xml create mode 100644 omnipod-dash/src/main/res/values-ta-rIN/strings.xml create mode 100644 omnipod-eros/src/main/res/values-ta-rIN/strings.xml create mode 100644 rileylink/src/main/res/values-ta-rIN/strings.xml create mode 100644 wear/src/main/res/values-ta-rIN/strings.xml diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 3d409736b0..293300a757 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -153,7 +153,6 @@ Loop is geaktiveerd Lus geaktiveer %1$.2f beperk tot %2$.2f - Waarde %1$s is uit harde perke Afstandbeheerde bevel word nie toegelaat nie Afstandbeheerde bolus nie beskikbaar nie. Probeer later weer. Om profiel te verander na %1$s %2$d%% antwoord met %3$s diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 882cb46ce4..bb42ac8f69 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -194,7 +194,6 @@ APS е активиран APS е включен %1$.2f ограничен до %2$.2f - Стойността %1$s е извън ограниченията За свързване с помпа отговорете с код %1$s Връзката с помпата е неуспешна За да спрете помпата за %1$d минути отговорете с код %2$s diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 13de0a19af..2a9942bad8 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -194,7 +194,7 @@ Smyčka byla povolena Smyčka je povolena %1$.2f omezeno na %2$.2f - Hodnota %1$s je mimo přednastavený rozsah + »%1$s« je mimo pevně nastavené limity Chcete-li připojit pumpu, odpovězte pomocí SMS s kódem %1$s Připojení k pumpě selhalo Chcete-li odpojit pumpu na %1$d minut, odpovězte pomocí SMS s kódem %2$s @@ -904,4 +904,14 @@ E-mailová adresa Nastavení soukromí Pokud chcete být upozorněni na selhání aplikace, můžete zadat volitelně e-mailovou adresu. Toto není automatizovaná služba. Vývojáři vás budou kontaktovat v nebezpečných situacích. + Dolní cíl profilu + Horní cíl profilu + Dolní hodnota dočasného cíle + Horní hodnota dočasného cíle + Hodnota dočasného cíle + Hodnota DIA profilu + Hodnota citlivosti profilu + Maximální hodnota bazálu profilu + Aktuální hodnota bazálu + Inzulino-sacharidový poměr profilu diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 7d54772e32..5f81bf4d03 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -194,7 +194,7 @@ Lopp wurde aktiviert. Loop ist aktiviert. %1$.2f limitiert auf %2$.2f - Wert %1$s ist außerhalb des festen Limits. + »%1$s« ist außerhalb der fest programmierten Grenzen Um die Pumpe zu verbinden, antworte mit dem Code %1$s Verbindung zur Pumpe fehlgeschlagen Um die Verbindung zur Pumpe für %1$d Minuten zu trennen, antworte mit dem Code %2$s @@ -905,4 +905,14 @@ Unerwartetes Verhalten. E‐Mail‐Adresse Privatsphäre-Einstellungen Du kannst optional eine E-Mail-Adresse angeben, wenn Du bei Absturzberichten kontaktiert werden möchtest. Dies ist keine Automatik, Du wirst von den Entwicklern in gefährlichen Situationen kontaktiert. + Profil unteres Ziel + Profil oberes Ziel + Temp. Ziel unterer Wert + Temp. Ziel oberer Wert + Temp. Ziel Wert + Profil Insulinwirkdauer + Profil Sensitivitätswert + Profil max. Basalwert + Aktueller Basalwert + Profil KH-Faktor diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 909911df43..924430ae11 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -155,7 +155,6 @@ Το κύκλωμα ενεργοποιήθηκε Κύκλωμα ενεργοποιημένο Το %1$.2f περιορίζεται σε %2$.2f - Η τιμή %1$s είναι έξω από τα όρια Δεν επιτρέπεται απομακρυσμένη εντολή Απομακρυσμένο bolus μη διαθέσιμο. Δοκιμάστε ξανά αργότερα. Για αλλαγή προφίλ σε %1$s %2$d%% στείλτε κωδικό %3$s diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e09dad14af..fcf922f3bd 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -194,7 +194,6 @@ Lazo se ha activado Lazo activo %1$.2f limitado a %2$.2f - El valor %1$s está fuera de límites Para conectar la infusora responder con el código %1$s Error al conectar a la bomba Para desconectar la bomba durante %1$dminutos responde con el código %2$s diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 8deff9b849..2c3d722213 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -195,7 +195,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S La Boucle a été activée La Boucle est activée %1$.2f limité à %2$.2f - La valeur %1$s est en dehors des limites + \"%1$s\" est en dehors des limites Pour connecter la pompe, renvoyez le code %1$s Echec de la connexion pompe Pour déconnecter la pompe pendant %1$d min, renvoyez le code %2$s @@ -905,4 +905,14 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Adresse e-mail Paramètres de confidentialité Vous pouvez fournir une adresse e-mail facultative si vous voulez être informé des plantages de l\'application. Ce n\'est pas un service automatisé. Vous serez contacté par les développeurs dans des situations dangereuses. + Cible basse du profil + Cible haute du profil + Valeur basse de cible temporaire + Valeur haute de cible temporaire + Valeur de cible temporaire + Valeur DAI du profil + Valeur de sensibilité du profil + Basale maximale du profil + Basale actuelle + Rapport glucides/insuline de profil diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index b694e8440c..31dac31765 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -194,7 +194,7 @@ Il loop è stato abilitato Il loop è abilitato %1$.2f limitato a %2$.2f - Il valore %1$s è fuori limite massimo + »%1$s« è fuori dai limiti consentiti Per connettere il micro rispondi col codice %1$s Connessione al micro fallita Per disconnettere il micro per %1$d minuti rispondi col codice %2$s @@ -904,4 +904,14 @@ Indirizzo email Impostazioni privacy Puoi fornire un indirizzo e-mail opzionale se desideri essere avvisato in caso di arresti anomali dell\'app. Questo non è un servizio automatizzato. Sarai contattato dagli sviluppatori in situazioni pericolose. + Target basso (profilo) + Target alto (profilo) + Valore inferiore target temporaneo + Valore superiore target temporaneo + Valore target temporaneo + Valore DIA (profilo) + Valore sensibilità (profilo) + Valore max basale (profilo) + Valore basale corrente + Valore rapporto CHO (profilo) diff --git a/app/src/main/res/values-iw-rIL/objectives.xml b/app/src/main/res/values-iw-rIL/objectives.xml index 14e4f06937..a13719bc18 100644 --- a/app/src/main/res/values-iw-rIL/objectives.xml +++ b/app/src/main/res/values-iw-rIL/objectives.xml @@ -14,7 +14,7 @@ מתחילים לסגור את הלולאה עם השהיה עקב רמת גלוקוז נמוכה הרץ בלולאה סגורה עם ערך IOB מקסימלי = 0 למשך מספר ימים, עם מעט ארועי השהיה עקב גלוקוז נמוך (LGS) כוונון הלולאה הסגורה, תוך העלאה של ערך ה- IOB מעל 0 ובסופו של דבר הורדת ערכי המטרה של רמת הסוכר - לפני הורדת ערך רמת הסוכר, הפעל במשך מס\' ימים, עם לפחות לילה אחד ללא התרעת רמת סוכר נמוכה + לפני הורדת ערך רמת הסוכר, הפעילו במשך מס\' ימים, עם לפחות לילה אחד ללא התרעת רמת סוכר נמוכה במידת הצורך, בצעו התאמת בזאלי ויחסים, ולאחר מכן הפעילו את Autosens שבוע של הפעלה מוצלחת של הלולאה במשך שעות היום, עם הוספת ערכי פחמימות רגילים הפעלת פונקציות נוספות לשימוש במשך היום, לדוגמה AMA (סיוע ארוחות מתקדם) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 023385ae20..42edc7855f 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -194,7 +194,7 @@ הלולאה הופעלה לולאה פעילה %1$.2f מוגבלת ל- %2$.2f - ערך %1$s הינו מחוץ לתחום + »הערך %1$s« מחוץ לתחום הקשיח לחיבור המשאבה יש להשיב עם הקוד %1$s החיבור אל המשאבה נכשל לניתוק המשאבה למשך %1$d דקות השיבו עם הקוד %2$s @@ -520,7 +520,7 @@ נבחר APS ל-NSClient יש הרשאת כתיבה מצב סגור מופעל - IOB מקסימלי הוגדר כראוי + ערך IOB מקסימלי הוגדר כראוי ערכי סוכר זמינים מהמקור הנבחר שגיאה במתן הבולוס הממושך הפעלת SMB תמיד @@ -586,8 +586,8 @@ SMB מושבת בהעדפות UAM מושבת בהעדפות UAM מושבת מפני שהוא מסתמך על תוסף רגישות של Oref1 - מכפלת בזאלי מירבי - מכפלת בזאלי יומי מירבי + מכפלת בזאלי מרבי + מכפלת בזאלי יומי מרבי ניתן בולוס ב-3 הדקות האחרונות, מדלג על SMB הבזאלי הוגדר כהלכה הגבלת בולוס ממושך ל- %1$.1f יח\' בגלל %2$s @@ -627,7 +627,7 @@ יחס Autosens מקסימלי יחס Autosens מינימלי נמנום בולוס - מחלק משך פעילות אינסולין - מכפלת בטיחות בזאלי יומי מירבי + מכפלת בטיחות בזאלי יומי מרבי מכפלת בטיחות בזאלי נוכחי לא זמין סוג משאבה וירטואלית @@ -904,4 +904,14 @@ כתובת דוא\"ל הגדרות פרטיות אם תרצו, תוכלו לספק כתובת דוא\"ל כדי לקבל דיווח על קריסות יישום. שירות זה אינו אוטומטי. המפתחים יצרו איתכם קשר במצבים מסוכנים. + ערך המטרה הנמוך של הפרופיל + ערך המטרה הגבוה של הפרופיל + ערך תחתון של המטרה הזמנית + ערך עליון של המטרה הזמנית + ערך המטרה הזמני + ערך DIA של הפרופיל + ערך הרגישות של הפרופיל + ערך מינון בזאלי מרבי של הפרופיל + מינון בזאלי נוכחי + יחס הפחמימות של הפרופיל diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 161196948b..14efe2be1e 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -166,7 +166,6 @@ Loop가 실행되었습니다. Loop가 실행중입니다. %1$.2f, %2$.2f으로 제한됨 - %1$s값이 하드한계를 벗어났습니다 원격 명령이 허가되지 않았습니다 원격 주입이 불가능합니다. 나중에 다시 시도해주세요. 프로파일 %1$s %2$d%%로 변경하려면 %3$s 를 입력하고 답장하세요 diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index bb7261a3a9..36bf8ba82c 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -192,7 +192,6 @@ Ciklas buvo įjungtas Ciklas įjungtas %1$.2f apribotas iki %2$.2f - Vertė %1$s viršija griežtą limitą Pompos prijungimui atsakykite su kodu %1$s Nepavyko prisijungti prie pompos Norėdami atjungti pompą %1$d min., atsakykite kodu %2$s diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 81b0fec281..7c7d4810dd 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -194,7 +194,6 @@ Loop was ingeschakeld Loop is ingeschakeld %1$.2f gelimiteerd tot %2$.2f - Waarde %1$s valt buiten de toegestane harde limieten Om verbinding te maken met pomp antwoord met code %1$s Verbinding maken met pomp is mislukt Om de pomp te ontkoppelen gedurende %1$d minuten antwoord met code %2$s diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 2a4b07c9d0..c8df51b4e3 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -194,7 +194,7 @@ Loop har blitt aktivert Loop er aktivert %1$.2f begrenset til %2$.2f - Verdien %1$s er utenfor angitt begrensning + »%1$s« er utenfor lovlige grenseverdier For å koble til pumpen, svar med kode %1$s Tilkobling til pumpen mislyktes For å koble fra pumpen i %1$d minutter, svar med koden %2$s @@ -904,4 +904,14 @@ E-postadresse Personverninnstillinger Du kan oppgi valgfri e-postadresse hvis du ønsker å bli varslet om krasj. Dette er ikke en automatisert tjeneste. Du vil bli kontaktet av utviklere ved farlige hendelser. + Profil lavt blodsukkermål + Profil høyt blodsukkermål + Midlertidig mål bunnverdi + Midlertidig mål toppverdi + Midlertidig målverdi + Profil insulinvarighet (DIA) + Profil sensitivitetsverdi (IF) + Profil maksimal basal dose + Aktiv basal dose + Profil karbohydratfaktor (IK) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 751d32d1d3..e366d84f55 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -194,7 +194,6 @@ Pętla (Loop) została włączona Pętla (Loop) jest włączona %1$.2f ograniczone do %2$.2f - Wartość %1$s jest poza dopuszczalną granicą Aby podłączyć pompę odpowiedz kodem %1$s Połączenie z pompą nie powiodło się Aby odłączyć pompę na %1$d minut odpowiedz kodem %2$s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fb8d3fddfe..7ef4568df7 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -181,7 +181,6 @@ Loop foi ativado Loop ativado %1$.2f limitado a %2$.2f - O valor %1$s está fora dos limites permitidos Bomba desconectada Bomba reconectada O comando remoto não é permitido diff --git a/app/src/main/res/values-pt-rPT/exam.xml b/app/src/main/res/values-pt-rPT/exam.xml index 5dbbe3b464..c46168cd0d 100644 --- a/app/src/main/res/values-pt-rPT/exam.xml +++ b/app/src/main/res/values-pt-rPT/exam.xml @@ -1,12 +1,12 @@ O que é verdade sobre DIA? - Duração da Acção de Insulina (DIA) + Duração da Acção da Insulina (DIA) Deve definir o valor da DIA no seu perfil. O valor mínimo permitido são 5 horas. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin - Se estiver satisfeito com o valor para a DIA que utilizou na bomba antes do AndroidAPS e funcionou bem, não há necessidade de alterar isso quando inicia o loop. - Deve determinar para si mesmo o valor adequado para a DIA. + Se estiver satisfeito com o valor da DIA que utilizava na bomba antes da AndroidAPS e que funcionava bem, não há necessidade de o alterar quando iniciar o loop. + Deve determinar para o seu valor adequado para a DIA. Hipo Alvo-Temp Qual é a principal razão para definir um alvo temporário? Para corrigir hipos causadas por configurações de taxa de basal incorretas. @@ -110,7 +110,7 @@ https://www.facebook.com/groups/AndroidAPSUsers/ https://gitter.im/MilosKozak/AndroidAPS Plugins de Insulina - Qual insulina deve utilizar com o plugin Ultra-Rapid Oref? + Que insulina deve utilizar com o plugin Oref Ultra-Rápida ? Fiasp® NovoRapid®/Novolog® Humalog ® @@ -193,8 +193,8 @@ FSI será 20% maior. Troca de Perfil Se você se levanta 2 horas mais cedo do que o normal, como deve notificar o AndroidAPS da alteração no seu horário? - Iniciar uma mudança de perfil com uma alteração de turno de 2 - Iniciar uma mudança de perfil com uma alteração de turno de -2 + Iniciar uma mudança de perfil com um deslocamento temporal de 2 + Iniciar uma mudança de perfil com uma deslocamento temporal de -2 Defina um alvo temporário de comer brevemente. Faça troca de perfil para mais de 100%. https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 4a68cfa699..f595e19a4d 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -33,7 +33,7 @@ Integração para as pessoas que fazem múltiplas injeções diárias para a sua terapia de diabetes Integração para as bombas que não têm qualquer driver ainda (Open Loop) A sensibilidade é calculada da mesma forma que Oref0, mas pode especificar o período de tempo para o passado. A absorção mínima de hidratos de carbono é calculada a partir do tempo máximo de absorção de hidratos de carbono das preferências. - A sensibilidade é calculada a partir de dados das últimas 8h ou 24h (usando qualquer um que é mais sensível). Hidratos são cortados (se não absorvidos) após o tempo especificado nas preferências. O Plugin também calcula o UAM. + A sensibilidade é calculada a partir de dados das últimas 8h ou 24h (usando o que é mais sensível). Os hidratos de carbono são descartados (se não absorvidos) após o tempo especificado nas preferências. O Plugin também calcula o RNA. A sensibilidade é calculada como uma média ponderada de desvios. Desvios mais recentes têm maior peso. A absorção mínima de hidratos de carbono é calculada a partir do tempo máximo de absorção de hidratos de carbono das preferências. Este algoritmo é o mais rápido em seguir as mudanças de sensibilidade. Receber valores Glicose da aplicação Eversense modificada. Receber valores Glicose do Glimp. @@ -194,7 +194,7 @@ Loop foi activado Loop activado %1$.2f limitado a %2$.2f - O valor %1$s está fora dos limites permitidos + »%1$s« está fora dos limites máximos Para ligar a bomba responda com o código %1$s Ligação à bomba falhou Para remover a bomba por %1$d minutos responda com o código %2$s @@ -449,21 +449,21 @@ Activar transmissões para outras aplicações (como xDrip+). Não habilite se tiver mais de uma instância de AAPS ou ClienteNS instalado! Activar partilha local. OpenAPS SMB - Activar UAM + Activar RNA Activar SMB Use Super Micro Boluses em vez de basal temp para uma acção mais rápida - Detecção de Refeições Não Introduzidas - Tempo Pico da curva de IOB + Deteção de Refeições Não Anunciadas (RNA) + Tempo do Pico da curva de IOB Tempo Pico [min] Oref Pico-Livre - Oref Acção Rápida - Ultra-Rapid Oref + Oref Acção-Rápida + Oref Ultra-Rápida Lyumjev Duração de Acção da Insulina (DIA) de %1$f demasiado curto - corrigido para %2$f! Activar perfil INVÁLIDO Percentagem - Alteração Turno + Deslocamento temporal Alvo-Temp padrão duração comerbreve alvo comerbreve @@ -500,8 +500,8 @@ Mostrar delta com mais um ponto decimal Com que frequência em min os SMBs serão dados Limite de minutos de basal para SMB - UAM SMB máx minutos - Max minutos de basal para limitar SMB para UAM + RNA SMB máx minutos + Max minutos de basal para limitar SMB para RNA Mínimo De Hidratos Necessários Para Sugestão Mínimo de gramas de hidratos de carbono ara exibir um alerta de sugestão de hidratos. As sugestões de hidratos abaixo deste número não activarão uma notificação. Enviar dados Glicose para xDrip+ @@ -584,8 +584,8 @@ Loop fecchado disabilitado nas preferências Autosens desabilitado nas preferências SMB desactivado nas configurações - UAM desactivado nas configurações - UAM desactivado porque confia no plugin de sensibilidade Oref1 + RNA desactivada nas configurações + RNA desactivada porque confia no plugin de sensibilidade Oref1 multiplicador de basal máx multiplicador de basal máx diária Um bólus foi administrado nos últimos 3 minutos, a ignorar SMB @@ -800,8 +800,8 @@ Menu do Gráfico Hora de solicitação SMB Hora de execução do SMB - Hora de solicitação Basal Temp - Hora de execução Basal Temp + Hora de solicitação da BT + Hora de execução da BT da app Authenticator para: %1$s seguido pelo PIN PIN obrigatório adicional no token final @@ -900,4 +900,18 @@ Cânula Entrada de Utilizador Utilize valores da sua maior refeição que normalmente come\n + Este endereço de email irá anexado aos relatórios de erros para que possamos entrar em contato consigo em casos urgentes. É opcional. + Endereço de email + Definições de privacidade + Opcionalmente pode fornecer um endereço de e-mail se quiser ser notificado sobre os erros da app. Este não é um serviço automatizado. Será contactado por desenvolvedores em situações perigosas. + Perfil Alvo Baixo + Perfil Alvo Alto + Valor Alvo Temporário Inferior + Valor Alvo Temporário Superior + Valor Alvo Temporário + Valor Perfil DIA + Valor Perfil Sensibilidade + Valor Perfil Basal Máxima + Valor Actual Basal + Valor Perfil Rácio Hidratos diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 1d7581c1f4..5a3312c2f1 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -194,7 +194,6 @@ Bucla a fost activată Bucla este activată %1$.2f este limitată la %2$.2f - Valoarea %1$s este mai mare decât limita stabilită Pentru a conecta pompa raspundeti cu codul %1$s Conectarea cu pompa a esuat Pentru a deconecta pompa timp de %1$d minute, răspundeți cu: %2$s diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index d5e723f9e6..d346f51db0 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -194,7 +194,7 @@ зцикл был активирован зцикл работает %1$.2f ограничено до %2$.2f - Значение %1$s недопустимо + »%1$s«за пределами жестких ограничений Чтобы подсоединить помпу ответьте кодом %1$s Ошибка подключения к помпе Для разъединения с помпой на %1$d мин ответьте кодом %2$s @@ -906,4 +906,14 @@ Context | Edit Context Адрес электронной почты Настройки конфиденцальности Вы можете указать дополнительно адрес электронной почты, если хотите получать уведомления о сбоях приложения; что является не автоматизированной рассылкой, а способом связи с разработчиками в опасных ситуациях. + Нижнее целевое значение профиля + Верхнее целевое значение профиля + Нижнее значение временного целевого уровня + Верхнее значение временного целевого уровня + Временное целевое значение + Значение длительности действия инсулина DIA в профиле + Значение чувствительности в профиле + Максимальное значение базала в профиле + Текущее значение базала + Коэффициент углеводов в профиле diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index e03b9acd98..ede593d880 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -194,7 +194,6 @@ Uzavretý okruh bol aktivovaný Uzavretý okruh je aktivovaný %1$.2f obmedzené na %2$.2f - Hodnota %1$s je mimo prednastavený rozsah Ak chcete pripojiť pumpu, odpovedzte pomocou SMS s kódom %1$s Pripojenie k pumpe zlyhalo Ak chcete odpojiť pumpu na %1$d minút, odpovedzte pomocou SMS s kódom %2$s @@ -900,4 +899,8 @@ Kanyla Vstup používateľa Použite hodnoty pre najväčšie jedlo, aké obvykle jete\n + Táto e-mailová adresa bude pripojená ku správam o zlyhaniach, aby sme vás mohli kontaktovať v naliehavých prípadoch. Je to dobrovoľné. + Emailová adresa + Nastavenia súkromia + Pokiaľ chcete byť upozornení na zlyhanie aplikácie, môžete zadať voliteľne e-mailovú adresu. Toto nie je automatizovaná služba. Vývojári vás budú kontaktovať v nebezpečných situáciách. diff --git a/app/src/main/res/values-sv-rSE/exam.xml b/app/src/main/res/values-sv-rSE/exam.xml index 73482ca24b..8882927073 100644 --- a/app/src/main/res/values-sv-rSE/exam.xml +++ b/app/src/main/res/values-sv-rSE/exam.xml @@ -8,6 +8,7 @@ Om du tycker att värdet för DIA som du använde i din pump före AndroidAPS fungerade väl, behöver du inte ändra det här när du börjar looping. Du bör själv fastställa det lämpliga värdet för DIA. Hypo tempmål + Vad är huvudskälet till att ange ett hypo tempmål? För att korrigera känningar som orsakas av felaktiga basalinställningar. För att förhindra att AndroidAPS överkorrigerar för de snabbverkande kolhydraterna som används för att behandla en insulinkänning. För att korrigera för en känning om ett resultat av motion. @@ -40,12 +41,14 @@ Brusiga CGM-värden Vad bör göras om CGM-datat är brusigt? Gör inget-AndroidAPS tar hand om det. + Inaktivera closed loop-läge för att undvika över- eller underdosering. Byt ut brusiga eller felaktiga sensorer. Kontrollera att din CGM-app ger utjämnade data. https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data Träning och profiler Hur kan du använda profiler för att bäst hjälpa systemet att hantera aerobisk träning? Gör ett profilbyte till mindre än 100%. + Gör ett profilbyte till mer än 100%. Lämna profilen på 100%. Pausa loopen. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index b69a0d9327..7a8600f51e 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -195,7 +195,7 @@ Eversense-appen. Loop aktiverad Loop är aktiverad %1$.2f begränsat till %2$.2f - Värdet %1$s är utanför hård begränsning + »%1$s« är utanför de hårda gränserna För att ansluta pumpen, svara med kod %1$s Anslutning till pump misslyckades För att koppla från pumpen i %1$d minuter, svara med kod %2$s @@ -398,6 +398,7 @@ Eversense-appen. Bas Dev Akt + -BGI Abs Devslope Om @@ -471,6 +472,7 @@ Eversense-appen. Mål vid träning Hypo [min] Mål vid Hypo + Återanvänd %1$d%% %2$dtim Kontrollera från klockan Sätt temp målvärde och ange behandlingar från klockan. Matdatabas @@ -568,6 +570,7 @@ Eversense-appen. Hämta saknad BG-data från Nightscout SMB satt i pump Insulinaktivitet (5m) + Blodglukospåverkan Känslighet (Sens) Avvikelser (Dev) Aktiva KH (COB) @@ -892,4 +895,24 @@ Eversense-appen. Dags att äta Uppladdning av kraschloggar inaktiverad! Graf + Diagrammeny + Rensa filter + Trendpil + Kanyl + Angivet av användare + Använd värden för den största måltiden som du vanligen äter\n + Den här mejladressen kommer att bifogas till kraschrapporter så att vi kan kontakta dig i brådskande fall. Det är frivilligt. + E-postadress + Sekretessinställningar + Du kan ange valfri e-postadress om du vill få meddelanden om appkrascher. Det här är ingen automatiserad tjänst. Du kommer att kontaktas av utvecklare i farliga situationer. + 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 diff --git a/app/src/main/res/values-ta-rIN/exam.xml b/app/src/main/res/values-ta-rIN/exam.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/app/src/main/res/values-ta-rIN/exam.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/values-ta-rIN/objectives.xml b/app/src/main/res/values-ta-rIN/objectives.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/app/src/main/res/values-ta-rIN/objectives.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..718d414505 --- /dev/null +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 07f7abefd3..cb0650e342 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -152,7 +152,6 @@ 闭环已经被启用 闭环被启用 %1$.2f 超过 %2$.2f的限制 - 值 %1$s 超过了硬限制 远程命令没有被允许 远程大剂量不可用。请稍后再试。 要切换配置文件到 %1$s %2$d%% 请回复代码 %3$s diff --git a/automation/src/main/res/values-sk-rSK/strings.xml b/automation/src/main/res/values-sk-rSK/strings.xml index e309392322..2bbc42e016 100644 --- a/automation/src/main/res/values-sk-rSK/strings.xml +++ b/automation/src/main/res/values-sk-rSK/strings.xml @@ -7,6 +7,7 @@ Prosím, zadajte aspoň jednu podmienku. Prosím, zadajte aspoň jednu akciu. Výstraha: %1$s + Alarm: Spr: Už aktivované Už deaktivované @@ -88,6 +89,7 @@ Glykémia [%1$s]: Od posledného bolusu Čas posledného bolusu: pred %1$s %2$s min + COB COB %1$s %2$.0f IOB [JI]: Vzdial. [m]: diff --git a/automation/src/main/res/values-sv-rSE/strings.xml b/automation/src/main/res/values-sv-rSE/strings.xml index 6f44ab2c36..c6bc9051e1 100644 --- a/automation/src/main/res/values-sv-rSE/strings.xml +++ b/automation/src/main/res/values-sv-rSE/strings.xml @@ -7,6 +7,7 @@ Specificera åtminstone en utlösare. Specificera åtminstone en åtgärd. Larm: %1$s + Larm: Medd: Redan aktiverad Redan inaktiverad @@ -88,6 +89,7 @@ BG [%1$s]: Senaste bolus Senaste bolus %1$s %2$s min sedan + COB COB %1$s %2$.0f IOB [U]: Dist [m]: diff --git a/automation/src/main/res/values-ta-rIN/strings.xml b/automation/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/automation/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/combo/src/main/res/values-sk-rSK/strings.xml b/combo/src/main/res/values-sk-rSK/strings.xml index 37aadf3560..d6fae8cdb6 100644 --- a/combo/src/main/res/values-sk-rSK/strings.xml +++ b/combo/src/main/res/values-sk-rSK/strings.xml @@ -3,6 +3,7 @@ Ovládač pumpy pre Accu-Check Combo, vyžaduje nainštalovanú aplikáciu Ruffy Programovanie pumpy pre bolus Stav + Aktivita Žiadne spojenie už %1$d min %1$d%% (%2$d min zostáva) Inicializácia diff --git a/combo/src/main/res/values-sv-rSE/strings.xml b/combo/src/main/res/values-sv-rSE/strings.xml index 378a1c3b50..6019e91527 100644 --- a/combo/src/main/res/values-sv-rSE/strings.xml +++ b/combo/src/main/res/values-sv-rSE/strings.xml @@ -3,6 +3,7 @@ Pumpintegration för Accu-Chek Combo. Kräver att Ruffy är installerat Programmerar bolus i pump Läge + Insulinaktivitet (5m) Ingen anslutning på %1$d min %1$d%% (%2$d min återstår) Initierar diff --git a/combo/src/main/res/values-ta-rIN/strings.xml b/combo/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/combo/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/core/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml index 0fd29c44b7..325db6d4dc 100644 --- a/core/src/main/res/values-cs-rCZ/strings.xml +++ b/core/src/main/res/values-cs-rCZ/strings.xml @@ -118,6 +118,7 @@ POTVRDIT Bluetooth Low Energy nepodporováno. + Bluetooth Low Energy není podporováno, nebo zařízení není spárováno. Bluetooth není povoleno. Zjišťování polohy není povoleno Pro vyhledání Bluetooth zařízení na novějších telefonech musí být povoleno zjišťování polohy. AAPS vás nesleduje a po provedení párování můžete tuto volbu opět zakázat. diff --git a/core/src/main/res/values-de-rDE/strings.xml b/core/src/main/res/values-de-rDE/strings.xml index 8305a6e5a4..31254f0e57 100644 --- a/core/src/main/res/values-de-rDE/strings.xml +++ b/core/src/main/res/values-de-rDE/strings.xml @@ -118,6 +118,7 @@ VERWERFEN Bluetooth-Low-Energy nicht unterstützt. + Bluetooth Low Energy nicht unterstützt oder Gerät nicht verbunden. Bluetooth nicht aktiviert. Standortdienst ist nicht aktiviert Auf neueren Geräten muss für die Bluetooth-Erkennung der Standortdienst aktiviert sein. AAPS speichert keine Standortdaten und der Dienst kann nach erfolgreichem Pairing wieder deaktiviert werden. diff --git a/core/src/main/res/values-fr-rFR/strings.xml b/core/src/main/res/values-fr-rFR/strings.xml index b1949cea34..7886371ea2 100644 --- a/core/src/main/res/values-fr-rFR/strings.xml +++ b/core/src/main/res/values-fr-rFR/strings.xml @@ -12,7 +12,7 @@ %1$.2f U vont être injectées Attente connection pompe Connexion à %1$d en cours - %1$.2f U en cours d\'injection + %1$.2f U ont été injectées Connexion Connection en cours Connectée @@ -118,6 +118,7 @@ REJETER Bluetooth Low Energy non pris en charge. + Bluetooth Low Energy non pris en charge ou appareil non appairé. Bluetooth désactivé. Localisation désactivée La localisation doit être activée sur les nouveaux appareils pour que la recherche Bluetooth fonctionne. AAPS n\'enregistre pas votre localisation et la localisation peut être désactivée après l\'appairage. diff --git a/core/src/main/res/values-fr-rFR/validator.xml b/core/src/main/res/values-fr-rFR/validator.xml index 3ea04e700d..e4b9589d21 100644 --- a/core/src/main/res/values-fr-rFR/validator.xml +++ b/core/src/main/res/values-fr-rFR/validator.xml @@ -1,2 +1,24 @@ - + + Seuls les chiffres sont autorisés. + Seuls les chiffres entre %1$s et %2$s sont autorisés. + Ce champ ne doit pas contenir de caractères spéciaux + Seules les lettres sont autorisées + Le champ ne doit pas être vide + Adresse e-mail invalide + Le numéro de carte de crédit est invalide + Numéro de téléphone invalide + Nom de domaine invalide + Adresse IP invalide + Le lien web (url) est invalide + Prénom ou le nom de famille invalide. + Nom complet invalide. + Format invalide + Doit avoir 4 chiffres + Doit avoir 6 chiffres + Doit avoir 12 caractères parmi ABCDEF0123456789 + Doit avoir 8 caractères parmi ABCDEF0123456789 + Doit avoir 4 caractères parmi ABCDEF0123456789 + Longueur minimale non respectée + Le PIN doit avoir entre 3 et 6 chiffres différents et non en série + diff --git a/core/src/main/res/values-it-rIT/strings.xml b/core/src/main/res/values-it-rIT/strings.xml index 5372c4b67b..86baa4b4f0 100644 --- a/core/src/main/res/values-it-rIT/strings.xml +++ b/core/src/main/res/values-it-rIT/strings.xml @@ -118,6 +118,7 @@ RIMUOVI Bluetooth Low Energy non supportato. + Bluetooth Low Energy non supportato o dispositivo non associato. Bluetooth non abilitato. La localizzazione non è abilitata Affinché la ricerca bluetooth funzioni sui dispositivi più recenti, la localizzazione deve essere abilitata, ma può essere disabilitata dopo l\'associazione. AAPS non tiene traccia della tua posizione. diff --git a/core/src/main/res/values-no-rNO/strings.xml b/core/src/main/res/values-no-rNO/strings.xml index 3c97491598..cb0f6a6e5e 100644 --- a/core/src/main/res/values-no-rNO/strings.xml +++ b/core/src/main/res/values-no-rNO/strings.xml @@ -118,6 +118,7 @@ Avvis Lavenergi Bluetooth BLE er ikke støttet. + Bluetooth Low Energy er ikke støttet eller enheten er ikke paret. Bluetooth er ikke aktivert. Stedstjeneste er ikke aktivert Bluetooth søk på nye mobiler virker bare når posisjonstjeneste er aktivert. AAPS lagrer ikke dine posisjonsdata og den kan derfor slås av etter vellykket sammenkobling. diff --git a/core/src/main/res/values-pt-rPT/strings.xml b/core/src/main/res/values-pt-rPT/strings.xml index 87b24b45b0..d378cfb776 100644 --- a/core/src/main/res/values-pt-rPT/strings.xml +++ b/core/src/main/res/values-pt-rPT/strings.xml @@ -73,9 +73,11 @@ Bólus %1$.2f U administrado com sucesso OK Nenhum valor de basal válido foi lido da bomba + A limitar IOB máx. para %1$.1f U porque %2$s uso não seguro Bomba inacessível Bólus Prolongado + Hora da bomba actualizada Sair Número de Série Remover registo @@ -116,6 +118,7 @@ DISPENSAR Bluetooth Low Energy não suportado. + Bluetooth Low Energy não suportado ou dispositivo não emparalhado. Bluetooth não está activado. Localização Não Está Activa Para a Pesquisa Bluetooth funcionar em dispositivos mais recentes, a localização deve ser activada. AAPS não acompanha a sua localização e pode ser desactivada após o emparelhamento bem-sucedido. diff --git a/core/src/main/res/values-pt-rPT/validator.xml b/core/src/main/res/values-pt-rPT/validator.xml index 3ea04e700d..9d59e92799 100644 --- a/core/src/main/res/values-pt-rPT/validator.xml +++ b/core/src/main/res/values-pt-rPT/validator.xml @@ -1,2 +1,24 @@ - + + Apenas dígitos numéricos são permitidos. + Apenas são permitidos dígitos numéricos dentro do intervalo de %1$s - %2$s. + Este campo não pode conter qualquer caractere especial + Apenas letras padrão são permitidas + Este campo não deve estar vazio + Endereço de e-mail inválido + Número do cartão de crédito não é válido + Número de telefone inválido + Nome do domínio não válido + Endereço IP inválido + O URL não é válido + Não é um nome ou sobrenome válido. + Nome completo inválido. + Formato inválido + Deve ser um número de 4 dígitos + Deve ser um número de 6 dígitos + Deve ter 12 caracteres de ABCDEF0123456789 + Deve ter 8 caracteres de ABCDEF0123456789 + Deve ter 4 caracteres de ABCDEF0123456789 + Não tem o tamanho mínimo + Pino deve ser de 3 a 6 dígitos, não iguais ou em série + diff --git a/core/src/main/res/values-ru-rRU/strings.xml b/core/src/main/res/values-ru-rRU/strings.xml index 432b398155..a19ebd733c 100644 --- a/core/src/main/res/values-ru-rRU/strings.xml +++ b/core/src/main/res/values-ru-rRU/strings.xml @@ -118,6 +118,7 @@ ОТКЛОНИТЬ Bluetooth с низким энергопотреблением не поддерживается. + Bluetooth Low Energy не поддерживается или устройство не сопряжено. Bluetooth не включен. Геолокация не включена Для обнаружения Bluetooth на новых устройствах необходимо включить геолокацию. AAPS не отслеживает ваше местоположение и может быть отключен после успешного сопряжения. diff --git a/core/src/main/res/values-sk-rSK/strings.xml b/core/src/main/res/values-sk-rSK/strings.xml index 5b9008352c..89c22d99ef 100644 --- a/core/src/main/res/values-sk-rSK/strings.xml +++ b/core/src/main/res/values-sk-rSK/strings.xml @@ -69,6 +69,40 @@ Párovanie Áno Nie + UZAVRETÝ OKRUH DEAKTIVOVANÝ OBMEDZENÍM + Bolus %1$.2f JI podaný úspešne + OK + Nenačítaný žiadny platný bazál z pumpy + Max IOB obmedzený na %1$.1f JI: %2$s + nebezpečné použitie + Pumpa nedostupná + Predĺžený bolus + Čas v pumpe bol aktualizovaný + Koniec + Sériové číslo + Odstrániť záznam + Uzavretý okruh je deaktivovaný + Alarm + Deaktivovať uzavretý okruh + Aktivovať uzavretý okruh + Pokračovať v uzavretom okruhu + Pozastaviť uzavretý okruh + Trvanie [min] + Notifikácia + Zatiaľ nebol načítaný žiadny profil z NS + existuje + neexistuje + Glykémia + IOB + COB + Meno: + Čas + WiFi SSID + Načítavanie... + Čas udalosti + Poznámky + Vymazať + Pridať nový Max bazál obmedzený na %1$.2f JI/h: %2$s limit pumpy diff --git a/core/src/main/res/values-sk-rSK/validator.xml b/core/src/main/res/values-sk-rSK/validator.xml index 3ea04e700d..60f1bc5fa5 100644 --- a/core/src/main/res/values-sk-rSK/validator.xml +++ b/core/src/main/res/values-sk-rSK/validator.xml @@ -1,2 +1,24 @@ - + + Povolené sú iba číslice. + Povolené sú iba čísla v rozsahu %1$s - %2$s. + Toto pole nemôže obsahovať žiadne špeciálne znaky + Sú povolené iba štandardné písmená + Toto pole nesmie byť prázdne + E-mailová adresa je neplatná + Číslo kreditnej karty je neplatné + Neplatné telefónne číslo + Názov domény je neplatný + IP Adresa je neplatná + Webová adresa je neplatná + Neplatné krstné meno, alebo priezvisko. + Nie je platné celé meno. + Formát nie je platný + Musí byť 4-miestne číslo + Musí byť 6-miestne číslo + Musí byť 12 znakov ABCDEF0123456789 + Musí byť 8 znakov ABCDEF0123456789 + Musí obsahovať 4 znaky ABCDEF0123456789 + Nie je splnená minimálna dĺžka + PIN by mal byť z 3 až 6 číslic, nie rovnakých, alebo za sebou nasledujúcich číslic + diff --git a/core/src/main/res/values-ta-rIN/strings.xml b/core/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..e293a4e025 --- /dev/null +++ b/core/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/values-ta-rIN/validator.xml b/core/src/main/res/values-ta-rIN/validator.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/core/src/main/res/values-ta-rIN/validator.xml @@ -0,0 +1,2 @@ + + diff --git a/dana/src/main/res/values-ta-rIN/strings.xml b/dana/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/dana/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/insight/src/main/res/values-fr-rFR/alert_descriptions.xml b/insight/src/main/res/values-fr-rFR/alert_descriptions.xml index c5864e0e65..a785e0a3bc 100644 --- a/insight/src/main/res/values-fr-rFR/alert_descriptions.xml +++ b/insight/src/main/res/values-fr-rFR/alert_descriptions.xml @@ -4,6 +4,7 @@ %1$s U]]> Changer la batterie. Régler heure/date. + Contacter l\'assistance Accu-Chek. %1$d%%
Durée : %2$s h]]>
%1$s U
Délivrée: %2$s U]]>
Insérer le réservoir. @@ -12,9 +13,12 @@ Vérifier l\'état de la pompe. Remplacer le dispositif de perfusion. Contacter l\'assistance Accu-Check. + Changer le réservoir. Recommencer le transfert des données. + Vérifier l\'état de la pompe. Choisir le type de pile. Choisir le type de réservoir. Remplacer pile et réservoir. + Changer le réservoir. Changer la langue. diff --git a/insight/src/main/res/values-fr-rFR/alert_titles.xml b/insight/src/main/res/values-fr-rFR/alert_titles.xml index d8aaf9caeb..fc4c3bb62e 100644 --- a/insight/src/main/res/values-fr-rFR/alert_titles.xml +++ b/insight/src/main/res/values-fr-rFR/alert_titles.xml @@ -3,6 +3,7 @@ Injecter le Bolus Bolus manqués Réveil + Remplacer le dispositif de perfusion DBT terminé Réservoir bas Batterie faible diff --git a/insight/src/main/res/values-pt-rPT/alert_titles.xml b/insight/src/main/res/values-pt-rPT/alert_titles.xml index 75b8f9b172..df54007930 100644 --- a/insight/src/main/res/values-pt-rPT/alert_titles.xml +++ b/insight/src/main/res/values-pt-rPT/alert_titles.xml @@ -4,12 +4,12 @@ Bolus Não Administrado Alarme Mudar o conjunto de infusão - DBT concluído + DBT concluída Reservatório quase vazio Bateria fraca Hora/Data inválida Fora da Garantia - DBT cancelado + DBT cancelada Bolus cancelado Aviso de periodo de empréstimo Cartucho não inserido diff --git a/insight/src/main/res/values-pt-rPT/strings.xml b/insight/src/main/res/values-pt-rPT/strings.xml index 24a3ab0ba4..e0d426c849 100644 --- a/insight/src/main/res/values-pt-rPT/strings.xml +++ b/insight/src/main/res/values-pt-rPT/strings.xml @@ -34,7 +34,7 @@ Desactivar vibrações na entrega manual de bólus Para bólus e bólus estendidos (só disponível com o firmware Insight 3.x) Desactivar vibrações na entrega automática de bólus - Para SMB e Basal Temp com emulação DBT (só disponível com firmware Insight 3.x) + Para SMB e Basal Temporária com emulação DBT (só disponível com firmware Insight 3.x) Tempo de operação excedido - reinicar bluetooth Bomba parada Bomba iniciada @@ -64,7 +64,7 @@ Registar mudanças de bateria Alterações do modo de funcionamento de registo Alertas de registo - Activar a emulação DBT + Activar a emulação da DBT Utilizar bólus prolongados em vez de basais temporárias para contornar o limite de 250%% Atraso de remoção [s] Duração máxima da recuperação [s] diff --git a/insight/src/main/res/values-sk-rSK/alert_descriptions.xml b/insight/src/main/res/values-sk-rSK/alert_descriptions.xml index 30fa470343..a5c09db55c 100644 --- a/insight/src/main/res/values-sk-rSK/alert_descriptions.xml +++ b/insight/src/main/res/values-sk-rSK/alert_descriptions.xml @@ -2,7 +2,9 @@ %1$d%%\nTrvanie: %2$s h]]> %1$s U]]> + Vymeňte batériu. Nastaviť čas/dátum. + Kontaktujte podporu Accu-Check. %1$d%%
Trvanie: %2$s h]]>
%1$s U
Podané: %2$s U]]>
Vložte zásobník. @@ -11,9 +13,12 @@ Skontrolujte stav pumpy. Vymeňte infúzny set. Kontaktujte podporu Accu-Check. + Vymeňte zásobník. Obnoviť sťahovanie dát. + Skontrolujte stav pumpy. Nastavte typ batérie. Nastavte typ zásobníka. Vymeňte batériu a zásobník. + Vymeňte zásobník. Zmeniť jazyk.
diff --git a/insight/src/main/res/values-sv-rSE/alert_descriptions.xml b/insight/src/main/res/values-sv-rSE/alert_descriptions.xml index 04d0ca9496..a4aeafa1b0 100644 --- a/insight/src/main/res/values-sv-rSE/alert_descriptions.xml +++ b/insight/src/main/res/values-sv-rSE/alert_descriptions.xml @@ -2,7 +2,9 @@ %1$d%%\nDuration: %2$s h]]> %1$s U]]> + Byt batteri. Ställ in tid/datum. + Kontakta Accu-Cheks support. %1$d%%
Duration: %2$s h]]>
%1$s U
Levererat: %2$s U]]>
Sätt i reservoar. @@ -11,9 +13,12 @@ Kontrollera pumpstatus. Byt infusionsset. Kontakta Accu-Cheks support. + Byt reservoar. Hämta data på nytt. + Kontrollera pumpstatus. Ange typ av batteri. Ange typ av reservoar. Byt batteri och reservoar. + Byt reservoar. Byt språk.
diff --git a/insight/src/main/res/values-sv-rSE/alert_titles.xml b/insight/src/main/res/values-sv-rSE/alert_titles.xml index 87cc430143..647a2adf59 100644 --- a/insight/src/main/res/values-sv-rSE/alert_titles.xml +++ b/insight/src/main/res/values-sv-rSE/alert_titles.xml @@ -3,6 +3,7 @@ Leverera bolus Missad bolus Väckarklocka + Byt infusionsset Temp basal avslutad Låg nivå reservoar Låg batterinivå diff --git a/insight/src/main/res/values-ta-rIN/alert_codes.xml b/insight/src/main/res/values-ta-rIN/alert_codes.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/insight/src/main/res/values-ta-rIN/alert_codes.xml @@ -0,0 +1,2 @@ + + diff --git a/insight/src/main/res/values-ta-rIN/alert_descriptions.xml b/insight/src/main/res/values-ta-rIN/alert_descriptions.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/insight/src/main/res/values-ta-rIN/alert_descriptions.xml @@ -0,0 +1,2 @@ + + diff --git a/insight/src/main/res/values-ta-rIN/alert_titles.xml b/insight/src/main/res/values-ta-rIN/alert_titles.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/insight/src/main/res/values-ta-rIN/alert_titles.xml @@ -0,0 +1,2 @@ + + diff --git a/insight/src/main/res/values-ta-rIN/exceptions.xml b/insight/src/main/res/values-ta-rIN/exceptions.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/insight/src/main/res/values-ta-rIN/exceptions.xml @@ -0,0 +1,2 @@ + + diff --git a/insight/src/main/res/values-ta-rIN/strings.xml b/insight/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/insight/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/medtronic/src/main/res/values-pt-rPT/strings.xml b/medtronic/src/main/res/values-pt-rPT/strings.xml index 349f2607ed..b1b169e48b 100644 --- a/medtronic/src/main/res/values-pt-rPT/strings.xml +++ b/medtronic/src/main/res/values-pt-rPT/strings.xml @@ -51,13 +51,13 @@ Histórico da Bomba Medtronic Cancelou o Bolus, depois de ele já ter sido definido na Bomba. Uma vez que a Bomba Medtronic não suporta cancelamento, precisará de cancelar manualmente. Coloque a Bomba no modo de Suspender e depois Retome (se ainda quiser cancelar). A aplicação irá obter as alterações, na próxima actualização (em menos de 5 minutos). - Não foi possível ler o DBT actual. - Não foi possível cancelar o DBT actual. A parar a operação. + Não foi possível ler a DBT actual. + Não foi possível cancelar a DBT actual. A parar a operação. Falhou Definir Perfil devido aos seguintes padrões, tem uma taxa de basal muito grande: %1$s O bólus não pôde ser administrado. Bólus não foi administado, porque o quantidade de insulina disponível (%1$.2f) é menor que o bólus necessário (%2$.2f). - DBT não pode ser definido. - Não foi possível cancelar o DBT actual. + DBT não pode ser definida. + Não foi possível cancelar a DBT actual. Perfil Basal não pôde ser definido. Perfil Basal é o mesmo, então não será definido novamente. Obter Histórico - Página %1$d (%2$d/16) diff --git a/medtronic/src/main/res/values-ta-rIN/strings.xml b/medtronic/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..e370c4a256 --- /dev/null +++ b/medtronic/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/omnipod-common/src/main/res/values-pt-rPT/strings.xml b/omnipod-common/src/main/res/values-pt-rPT/strings.xml index 7abb46a892..d234902624 100644 --- a/omnipod-common/src/main/res/values-pt-rPT/strings.xml +++ b/omnipod-common/src/main/res/values-pt-rPT/strings.xml @@ -18,8 +18,10 @@ Bólus não foi bem-sucedido. Falha ao definir o perfil basal: recebido um perfil vazio. Certifique-se de ativar o seu perfil basal. Não há perfil basal activo. Certifique-se de activar o seu perfil basal. + Comando personalizado não suportado: %1$s Falhou ao actualizar o estado Falha ao actualizar estado na inicialização + Falha ao silenciar alertas Falha ao suspender a administração Falha ao definir a hora Falha ao retomar a administração @@ -37,15 +39,20 @@ Configuração de alerta foi actualizada no Pod. A hora no Pod foi actualizada. Toda administração de insulina foi suspensa. + Alertas activos foram silenciados. A administração de insulina foi retomada. Definir hora Suspender Retomar Administração Gestão Pod + Silenciar Alertas Estado do Pod Total Administrado %1$.2f U + ID Único + Número de LOTE + Número da Sequência Pod Expira Última Ligação Último Bólus @@ -93,13 +100,14 @@ Beeps bólus activados Beeps de basal activados Beeps SMB activado - Beeps TBR activados + Beeps DBT activados Mostrar Botão Suspender Administração no separador Omnipod Detecção de DST/Fuso Horário Activado Lembrete de expiração activado Horas antes de desligar Alerta de reservatório baixo activado No. Unidades + Silenciar automaticamente alertas do Pod Outro Alertas Beeps de Confirmação @@ -126,6 +134,7 @@ Obter Pod Info Definir Hora Configurar Alertas + Silenciar Alertas Suspender Administração Retomar Administração Entrada Desconhecida diff --git a/omnipod-common/src/main/res/values-sk-rSK/strings.xml b/omnipod-common/src/main/res/values-sk-rSK/strings.xml index e35fcaa95a..afd53a9869 100644 --- a/omnipod-common/src/main/res/values-sk-rSK/strings.xml +++ b/omnipod-common/src/main/res/values-sk-rSK/strings.xml @@ -2,17 +2,198 @@ + Správa Podu + Akcie + Nástroje + Aktivovať Pod + Deaktivovať Pod + Vyradiť Pod + Pokiaľ zahodíte Pod, už s ním nebudete môcť komunikovať. Mali by ste to urobiť iba vtedy, pokiaľ celá komunikácia s Podom trvalo zlyháva. Pokiaľ stále môžete komunikovať s Podom, použite možnosť Deaktivovať Pod.\n\nPokiaľ si prajete pokračovať, uistite sa prosím, že odstránite Pod z tela! + Prehrať testovacie pípnutie + Prehrávanie testovacieho pípnutia… + História Podu + Žiadny aktívny Pod + Nastavenie bazálneho profilu zlyhalo. + Podanie bolusu nebolo úspešné. + Nepodarilo sa nastaviť bazálny profil: bol prijatý prázdny profil. Uistite sa, že ste aktivovali svoj bazálny profil. + Žiadny bazálny profil nie je aktívny. Uistite sa, že ste aktivovali svoj bazálny profil. + Nepodporovaný vlastný príkaz: %1$s + Nepodarilo sa obnoviť stav + Nepodarilo se aktualizovať stav pri spustení + Nepodarilo sa potvrdiť výstrahy + Nepodarilo sa pozastaviť podávanie inzulínu + Nepodarilo sa nastaviť čas + Podávanie inzulínu sa nepodarilo spustiť + Nepodarilo sa inicializovať Pod + Nepodarilo sa vložiť kanylu + Bol prekročený čas aktivácie Podu. Tento Pod sa už nedá aktivovať. + Nepodarilo sa overiť priebeh aktivácie. Skúste to znova. + Pod pozastavený + Nepodarilo se prehrať testovacie pípnutie + Čas na Pode nie je synchronizovaný. Aktualizujte prosím čas na záložke Omnipod. + Došlo k neočakávanej chybe. Prosíme o jej nahlásenie! (%1$s: %2$s). + Potvrdenie + Čas a/alebo časová zóna zmenená na Pode. + Nastavenie výstrahy bolo v Pode aktualizované. + Čas na Pode bol aktualizovaný. + Všetko podávanie inzulínu bolo pozastavené. + Aktívne výstrahy boli potvrdené. + Podávanie inzulínu bolo obnovené. + Nastavenie času + Pozastavenia + Pokračovať v dodávaní inzulínu + Správa Podu + Stíšiť alarmy + Stav Podu + Celkovo podané + %1$.2f JI + Jedinečné ID + Číslo šarže + Poradové číslo + Expirácia Podu + Posledné spojenie + Posledný bolus + Dočasná bazálna dávka + Základná hodnota bazálu + Zásobník + Výstrahy aktívneho Podu + Verzia firmvéru + Čas na Pode + %1$.2fJI/h @%2$s (%3$d/%4$d minút) + Zostáva %1$.2f JI + Zostáva viac ako 50 JI + Chyby + Zrušiť + Dokončiť + Ďalšia + Opakovať + Deaktivovať Pod + Vyradiť Pod + Doposiaľ ste nedokončili všetky kroky. Ste si istý, že chcete ukončiť prácu? + Ukončiť + Naplniť Pod + Inicializovať Pod + Nasaďte Pod + Pripravte infúzne miesto. Odstráňte krytku ihly a náplasti a nalepte Pod.\n\nPokiaľ sa kanyla odlepí, stlačíte Zrušiť a zahoďte Pod.\n\nStlačte Ďalšia pre vloženie kanyly a spustenie bazálu. + Keď stlačíte OK, kanyla se vloží. Uistite sa, že ste pripojili Pod k infuznemu miestu. + Vložiť kanylu + Snažím sa nastaviť počiatočný základný bazál a vložiť kanylu.\n\nPo úspešnom vložení kanyly môžete stlačiť tlačítko Ďalšia. + Pod aktivovaný + Pod je teraz aktívny.\n\nVáš bazál bol naprogramovaný a kanyla bola vložená.\n\nOverte prosím, že kanyla bola vložená správne a prípadne vymeňte Pod. + Deaktivovať Pod + StlačteĎalšia pre deaktiváciu Podu.\n\nPoznámka: Úplne zastavíte podávanie inzulínu a deaktivujete Pod. + Deaktivácia Podu + Deaktivácia Podu.\n\nPo úspešnom dokončení deaktivácie môžete stlačiť Ďalšia. + Pod deaktivovaný + Pod deaktivovaný.\n\nOdstráňte Pod z tela a znehodnoťte ho. + Pod vyradený + Stav Podu bol vyradený. Podávanie inzulínu nebolo pozastavené, pretože Pod nebol riadne deaktivovaný!\n\nOdstráňte Pod z vašeho tela a recyklujte ho. + Pokiaľ tento Pod vyradíte, nebudete s ním už mocť komunikovať. Túto operáciu by ste mali urobiť iba v prípade, že celá komunikácia s týmto Podom trvale zlyháva. Naozaj chcete vyradiť Pod? + Vyradiť Pod + Pípnutie pri boluse povolené + Pípnutie pri bazále povolené + Pípnutie pri SMB povolené + Pípnutie pri TBR povolené + Zobraziť tlačítko \"Pozastaviť podávanie\" na záložke Omnipod + Letný čas / Detekcia časového pásma povolená + Pripomenutie vypršania platnosti povolené + Hodiny pred vypnutím + Upozornenie na nízký stav zásobníka povolené + Počet jednotiek + Automaticky potvrdzovať výstrahy Podu + Iné + Výstrahy + Potvrdzovacie pípnutia + Žiadny aktívny Pod + Prebieha inštalácia (čaká sa na aktiváciu Podu) + Inštalácia prebieha (čaká sa na vloženie kanyly) + V prevádzke + Pozastavené + Chyba Podu + Bol prekročený čas aktivácie + Neaktívny + Chyba Podu: %1$03d %2$s + Deaktivovať Pod + Vyradiť Pod + Nastavovanie bolusu + Zrušiť bolus + Nastavovanie dočasného bazálu + Zrušiť dočasný bazál (interne ovládačom) + Zrušiť dočasný bazál + Nastaviť plán bazálu + Zistiť stav Podu + Zistiť informácie o Pode + Nastaviť čas + Nastaviť výstrahy + Stíšiť alarmy + Pozastaviť dodávanie inzulínu + Pokračovať v dodávaní inzulínu + Neznáma položka + Inicializovať Pod + Vložiť kanylu + Čítať protokol pulzov + Nastaviť falošný dočasný bazál, pretože Pod je pozastavený + Zrušiť falošný dočasný bazál ktorý bol vytvorený, pretože Pod bol pozastavený + Rozdeliť dočasný bazál kvôli neistej chybe pri zrušení + Nastavenie pípnutia + Prehrať testovacie pípnutie + Pripomienka ukončenia párovania + Pripomienka ukončenia nastavenia + Pod čoskoro expiruje + Pod čoskoro expiruje + Vypnutie je bezprostredné + Nízka hladina zásobníka + Neznáma výstraha + Žiadny aktívny Pod + Posledné spoj: pred %1$d min + Posledný Bolus: %1$s @ %2$s + Doč. bazál: %1$s + Predl. bolus: %1$s + Zásobník: %1$sJI + Áno + Nie + OK + Zrušiť + Upozornenie + Pred chvíľou + Pred menej ako minútou + %1$s a %2$s + pred %1$s min + + %1$d minúta + %1$d minút + %1$d minút + %1$d minút + + + %1$d hodina + %1$d hodín + %1$d hodín + %1$d hodín + + + %1$d deň + %1$d dní + %1$d dní + %1$d dní + + + Výstraha Podu: %1$s + Výstrahy Podu: %1$s + Výstrahy Podu: %1$s + Výstrahy Podu: %1$s + 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 e35fcaa95a..b23def69f5 100644 --- a/omnipod-common/src/main/res/values-sv-rSE/strings.xml +++ b/omnipod-common/src/main/res/values-sv-rSE/strings.xml @@ -2,17 +2,186 @@ + Podhantering + Åtgärder + Verktyg + Aktivera Pod + Inaktivera pod + Ta bort Pod + Om du tar bort Pod, kommer du inte att kunna kommunicera med den längre. Du bör bara göra detta när all kommunikation med Pod ständigt misslyckas. Om du fortfarande kan kommunicera med Pod, använd alternativet Inaktivera Pod.\n\nOm du vill fortsätta, se till att ta bort Pod från kroppen! + Spela upp testljud + Spelar testljud… + Pod-historik + Ingen aktiv pod + Lyckades inte sätta basalprofilen. + Bolus misslyckades. + Det gick inte att ställa in basalprofilen: Tog emot en tom profil. Se till att du aktiverar basalprofilen. + Ingen basalprofil är aktiv. Se till att du aktiverar basalprofilen. + Anpassat kommando stöds ej: %1$s + Det gick inte att uppdatera status + Det gick inte att uppdatera status vid start + Det gick inte att kvittera larm + Det gick inte att stoppa leverans + Det gick inte att ange tid + Misslyckades återuppta leveransen + Misslyckades att initiera Pod + Misslyckades att skjuta in kanylen + Podens aktiveringstid har överskridits. Denna Pod kan inte längre aktiveras. + Det gick inte att verifiera aktiveringen. Försök igen. + Pod pausad + Det gick inte att spela testpip + Tiden på Podden är ur synk. Vänligen uppdatera tiden i Omnipod fliken. + Ett oväntat fel uppstod. Vänligen rapportera! (%1$s: %2$s). + Bekräftelse + Tid och/eller tidszon ändrad på Pod. + Varningskonfigurationen har uppdaterats i Pod. + Tiden på Pod har uppdaterats. + All insulinleverans har stoppats. + Aktiva varningar har kvitterats. + Insulinleveransen har återupptagits. + Ställ in tid + Pausa + Återuppta insulintillförsel + Omnipod + Kvittera Larm + Pod-status + Totalt levererat + %1$.2fU + Unikt ID + LOT-nummer + Sekvensnummer + Pod går ut + Senaste anslutning + Senaste bolus + Temp basaldos + Profilens basaldos + Reservoar + Aktiva pod-varningar + Firmwareversion + Tid i Pod + %1$.2fU/h @%2$s (%3$d/%4$d min) + %1$.2f U återstår + Mer än 50 U kvar + Fel + Avbryt + Slutför + Nästa + Försök igen + Inaktivera pod + Ta bort Pod + Du har inte gjort alla steg än. Är du säker på att du vill avsluta? + Avsluta + Fyll Pod + Initiera Pod + Fäst Pod + Förbered infusionsplatsen. Ta bort Podens nålskydd och fäst Pod på infusionsplatsen.\n\nOm kanylen sticker ut, tryck Avbryt och kassera din Pod.\n\nTryck Nästa för att skjuta in kanylen och påbörja basaleverans. + När du trycker på OK, kommer kanylen att skjutas in. Se till att du har fäst Poden på infusionsplatsen. + Skjut in kanylen + Försöker ställa in basalprogram och skjuta in kanylen.\n\nNär kanylen är på plats kan du trycka på Nästa. + Pod aktiverad + Den nya Poden är nu aktiv.\n\nDitt basalprogram har lagrats och kanylen är inne.\n\nKontrollera att kanylen har skjutits in på rätt sätt. Byt Pod om du tror att den inte har gjort det. + Inaktivera pod + Tryck på Nästa för att inaktivera podden.\n\nOBS! Det här stoppar all insulintillförsel och inaktiverar podden. + Inaktiverar Pod + Inaktiverar Pod.\n\nNär inaktiveringen har slutförts kan du trycka på Nästa. + Pod inaktiverad + Din Pod har inaktiverats.\n\nTa bort Pod från kroppen och lämna in för återvinning. + Pod kasserad + Podden har tagits bort. Insulinleveransen har inte stoppats eftersom podden inte har inaktiverats korrekt!\n\nTa bort podden från kroppen och lämna in för återvinning. + Om du tar bort podden, kommer du inte att kunna kommunicera med den längre. Du bör bara göra detta när all kommunikation med Pod fortsätter att misslyckas. Är du säker på att du vill ta bort podden? + Ta bort Pod + Bolus pip aktiverade + Basalpip aktiverade + SMB-pip aktiverade + Temp basal-pip aktiverade + Visa knapp för Pausa Leverans i Omnipod-fliken + Automatisk avkänning av tidszon aktiverad + Påminnelse för utgångstid aktiverad + Timmar före avstängning + Varning för låg reservoar aktiverad + Antal Enheter + Kvittera Podlarm automatiskt + Annat + Varningar + Bekräftelsepip + Ingen aktiv pod + Konfiguration pågår (väntar på Pod-aktivering) + Konfiguration pågår (väntar på kanylinsättning) + Körs + Pausad + Podfel + Aktiveringstiden har överskridits + Inaktiv + Podfel: %1$03d %2$s + Inaktivera pod + Ta bort Pod + Leverera bolus + Avbryt Bolus + Sätt temp basal + Avbryt temp basal (internt av drivrutinen) + Avbryt temporär basal + Ange basaldoser + Hämta Pod-status + Hämta Pod-information + Ställ in tid + Konfigurera varningar + Kvittera Larm + Pausa insulintillförsel + Återuppta insulintillförsel + Okänd post + Initiera Pod + Skjut in kanylen + Läs pulslogg + Ställ in simulerad temp basal eftersom podden är avaktiverad + Avbryt simulerad temp basal eftersom podden är avaktiverad + Dela upp temp basal på grund av okänt fel vid avbrott + Pipkonfiguration + Spela upp testljud + Påminnelse att slutföra parkoppling + Påminnelse att slutföra installation + Pod löper snart ut + Pod löper snart ut + Pod kommer snart att stängas av + Låg reservoar + Okänd varning + Ingen aktiv pod + Sen ansl: %1$d min sedan + Sen Bolus: %1$s @ %2$s + Temp: %1$s + Förl: %1$s + Res: %1$sU + Ja + Nej + OK + Avbryt + Varning + nyss + mindre än en minut sedan + %1$s och %2$s + %1$s sedan + + %1$d min + %1$d min + + + %1$d tim + %1$d tim + + + %1$d dag + %1$d dagar + diff --git a/omnipod-common/src/main/res/values-ta-rIN/strings.xml b/omnipod-common/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..e35fcaa95a --- /dev/null +++ b/omnipod-common/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/omnipod-dash/src/main/res/values-pt-rPT/strings.xml b/omnipod-dash/src/main/res/values-pt-rPT/strings.xml index c690568d07..76989f77ef 100644 --- a/omnipod-dash/src/main/res/values-pt-rPT/strings.xml +++ b/omnipod-dash/src/main/res/values-pt-rPT/strings.xml @@ -1,6 +1,9 @@ + Integração para a Omnipod Dash (o novo modelo, habilitado para o Bluetooth com uma proteção de agulha azul). + Estado do Bluetooth + Endereço Bluetooth diff --git a/omnipod-dash/src/main/res/values-sk-rSK/strings.xml b/omnipod-dash/src/main/res/values-sk-rSK/strings.xml index c690568d07..d12d39dc7d 100644 --- a/omnipod-dash/src/main/res/values-sk-rSK/strings.xml +++ b/omnipod-dash/src/main/res/values-sk-rSK/strings.xml @@ -1,6 +1,9 @@ + Integrácia pumpy pre Omnipod Dash (nový model s funkciou Bluetooth a modrým krytom). + Stav Bluetooth + Adresa Bluetooth diff --git a/omnipod-dash/src/main/res/values-ta-rIN/strings.xml b/omnipod-dash/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..c690568d07 --- /dev/null +++ b/omnipod-dash/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/omnipod-eros/src/main/res/values-pt-rPT/strings.xml b/omnipod-eros/src/main/res/values-pt-rPT/strings.xml index e43733df5d..61cce22a75 100644 --- a/omnipod-eros/src/main/res/values-pt-rPT/strings.xml +++ b/omnipod-eros/src/main/res/values-pt-rPT/strings.xml @@ -1,6 +1,7 @@ + Integração da bomba para Omnipod Eros (o modelo mais antigo). Requer um dispositivo RileyLink com pelo menos firmware versão 2.0. @@ -10,7 +11,7 @@ Mostrar botão de Estatísticas do RileyLink no menu de Gestão do Pod Activar o registo de mudança da bateria em Acções RileyLink - Som activado para notificações DBT incerto + Som activado para notificações incertas da DBT Som activado para notificações SMB incerto Som activado para notificações de bolús incerto @@ -46,8 +47,8 @@ Falha na configuração do perfil basal. A administração está suspensa! Por favor, retome manualmente a administração a partir do separador Omnipod. O cancelamento de basal temporária pode ter falhado. Por favor, actualize manualmente o estado do Pod no separador Omnipod. Falha ao configurar basal temporária. Se uma basal temporária foi executada anteriormente, ela pode ter sido cancelada. Por favor, actualize manualmente o estado do Pod no separador Omnipod. - Configuração de basal temporária pode ter falhado basal. Se uma basal temp foi executada anteriormente, ela foi cancelada. Por favor, actualize manualmente o estado do Pod no separador Omnipod. - A duração do DBT deve ser maior que zero e um múltiplo de %1$s minutos. + Configuração de basal temporária pode ter feito falhar a basal. Se uma basal temporária foi executada anteriormente, ela foi cancelada. Por favor, actualize manualmente o estado do Pod no separador Omnipod. + A duração da DBT deve ser maior que zero e um múltiplo de %1$s minutos. Configuração da hora pode ter falhado. A administração pode estar suspensa! Por favor, actualize manualmente o estado do Pod no separador Omnipod e retome a administração, se necessário. Configuração da Hora falhou. A administração está suspensa! Por favor, retome manualmente a administração no separador do Omnipod. Falha ao ler o Pulse Log @@ -55,7 +56,7 @@ A operação não é possível.\n\nPrecisa configurar o Omnipod primeiro, antes de pode usar esta operação. Não é possível verificar se o bólus foi bem sucedido. Por favor, verifique manualmente se o Pod está administrar bólus ouvindo os cliques. <b>Se tem certeza de que o bólus não foi bem sucedido, deve apagar manualmente a entrada de bólus dos Tratamentos, mesmo se clicar em \'Cancelar Bólus\' agora! <b></b> Não é possível verificar se o bólus SMB (%1$.2f U) foi bem sucedido. Se tiver certeza de que o Bólus não foi bem sucedido, deve excluir manualmente a entrada SMB a partir de Tratamentos. - Uma basal temporária está sendo executada no Pod, mas o AAPS não está ciente desta basal temporária. Por favor, cancele sua basal temporária manualmente. + Uma basal temporária está sendo executada no Pod, mas a AAPS não está ciente desta basal temporária. Por favor, cancele a sua basal temporária manualmente. Estatísticas do RileyLink À espera de ligação RileyLink… diff --git a/omnipod-eros/src/main/res/values-sk-rSK/strings.xml b/omnipod-eros/src/main/res/values-sk-rSK/strings.xml index bc89093c83..0f0c97996d 100644 --- a/omnipod-eros/src/main/res/values-sk-rSK/strings.xml +++ b/omnipod-eros/src/main/res/values-sk-rSK/strings.xml @@ -1,13 +1,73 @@ + Integrácia pumpy pre Omnipod Eros (starší model s priehľadným krytom ihly). Vyžaduje zariadenie RileyLink s firmware aspoň verzie 2.0. + Konfigurácia RileyLinku + Notifikácie + Zobraziť tlačítko Pulzný Log v menu Správa Podu + Zobraziť tlačítko Štatistika RileyLink v menu Správa Podu + V Akciách povoliť zaznamenávanie výmeny batérie + RileyLink + Zvuk upozornenia pre neistý dočasný bazál povolený + Zvuk upozornenia pre neistý SMB povolený + Zvuk upozornenia pre neistý bolus povolený + História Podu + Popis + Zdroj + Dátum + Typ: + %1$.2f JI + %1$.2f JI, SACH=%2$.1f g + Rýchlosť: %1$.2f JI, Doba trvania: %2$d minút + RLBat: %1$d + Neplatná adresa RileyLinku. + Komunikácia zlyhala: overenie integrity správy zlyhalo + Komunikácia zlyhala: boli prijaté neplatné pakety z Podu + Komunikácia zlyhala: Pod je v chybnom stave + Komunikácia zlyhala: bola prijatá neplatná odozva z Podu + Komunikácia zlyhala: bola prijatá správa s neplatným poradovým číslom z Podu + Komunikácia zlyhala: bola prijatá správa s neplatnou adresou z Podu + Komunikácia zlyhala: nepodarilo se dekódovať správu z Podu + Komunikácia zlyhala: opakovaná synchronizácia Nonce hodnoty zlyhala + Komunikácia zlyhala: hodnota Nonce nebola synchronizovaná + Komunikácia zlyhala: nedostatok dát prijatých z Podu + Bola zistená chyba Podu (%1$03d %2$s). Deaktivujte Pod a spustite nový + Komunikácia zlyhala: Pod vrátil chybovú odozvu + Žiadna odpoveď od RileyLinku + RileyLink prerušený + Žiadna odpoveď z Podu + Nastavenie bazálneho profilu zlyhalo. Podávanie môže byť pozastavené! Manuálne obnovte stav Podu zo záložky Omnipod a pokračujte v podávaní, ak je to potrebné. + Nastavenie bazálneho profilu zlyhalo. Podávanie môže byť pozastavené! Manuálne obnovte stav Podu zo záložky Omnipod a pokračujte v podávaní, ak je to potrebné. + Nastavenie bazálneho profilu zlyhalo. Podávanie je pozastavené! Manuálne obnovte podávanie zo záložky Omnipod. + Zrušenie dočasného bazalu mohlo zlyhať. Manuálne obnovte stav Podu zo záložky Omnipod. + Nastavenie dočasného bazálu zlyhalo. Ak bol predtým spustený dočasný bazál, mohol byť zrušený. Manuálne obnovte stav Podu zo záložky Omnipod. + Nastavenie dočasného bazálu mohlo byť neúspešné. Ak bol predtým spustený dočasný bazál, mohol byť zrušený. Manuálne obnovte stav Podu zo záložky Omnipod. + Doba trvania TBR musí byť väčšia ako nula, a musí byť násobkom %1$s minút. + Nastavenie času, pravdepodobne zlyhalo. Podávanie môže byť pozastavené! Manuálne obnovte stav Podu zo záložky Omnipod a pokračujte v podávaní, ak je to potrebné. + Nastavenie času zlyhalo. Podávanie je pozastavené! Manuálne obnovte podávanie zo záložky Omnipod. + Zlyhalo načítanie Pulse Log + Nepodarilo sa automaticky zmeniť čas na Pode. Mali by ste ručne synchronizovať čas na záložke Omnipod. + Operácia nie je možná.\n\nNajskôr je nutné nakonfigurovať Omnipod, kým bude možné túto funkciu použiť. + Nedá sa overiť, či bol bolus úspešný. Prosím manuálne overte, či Váš Pod podáva bolus počúvaním klikania. Ak ste si istý, že bolus nebol úspešný, mali by ste ručne odstrániť záznam o boluse z ošetrení, aj keď kliknete na \'Zrušiť bolus\' teraz! + Nedá sa overiť, či bol bolus SMB (%1$.2f JI) úspešne podaný. Pokiaľ ste si istý, že bolus nebol podaný, mali by ste ručne odstrániť položku SMB z Ošetrení. + Dočasný bazál na Pode prebieha, ale AAPS o tomto dočasnom bazále nevie. Prosím zrušte svoj dočasný bazál ručne. + Štatistika RileyLink + Čakám na pripojenie RileyLink… + Resetovať konfiguráciu RileyLinku + Čítať protokol pulzov + Čítanie protokolu pulzov… + Pulse Log + Protokol pulzov (skopírované do schránky) + Naplňte nový Pod dostatkom inzulínu na 3 dni.\n\nSledujte dve pípnutia z Podu v priebehu procesu plnenia. Tieto ukazujú, že minimálne množstvo 85U bolo naplnené. Uistite sa, že striekačka je úplne vyprázdnená a to aj po vypočutí dvoch pípnutí.\n\nPo naplnení Podu, prosím, stlačte Ďalšia.\n\nPoznámka: zatiaľ nesnímajte kryt z ihly.\nPoznámka:prosím umiestnite RileyLink vo zvislej polohe blízko Podu. + Snažíte sa spárovať nový Pod a naplniť ho.\n\nKeď bol úspešne dokončený inicializačný proces, môžete stlačiť tlačítko Ďalšia.\n\nPoznámka: položte RileyLink vo vzpriamenej polohe a umiestnite ho pár centimetrov od Podu. + neznáme diff --git a/omnipod-eros/src/main/res/values-sv-rSE/strings.xml b/omnipod-eros/src/main/res/values-sv-rSE/strings.xml index bc89093c83..d4445ab951 100644 --- a/omnipod-eros/src/main/res/values-sv-rSE/strings.xml +++ b/omnipod-eros/src/main/res/values-sv-rSE/strings.xml @@ -1,13 +1,73 @@ + Pumpintegration för Omnipod Eros (den äldre modellen med ett genomskinligt nålskydd). Kräver en rileyLink-enhet med minst firmware version 2.0. + Konfiguration av Riley Link + Notiser + Visa Pulse Log-knapp i menyn Podhantering + Visa knappen Riley Link-statistik i menyn Pod-hantering + Aktivera inloggning av batteribyte i Åtgärder + Riley Link + Ljud aktiverade för osäker tempbasal + Ljud aktiverade för osäker SMB + Ljud aktiverade för osäker bolus + Pod-historik + Beskrivning + Källa + Datum + Typ: + %1$.2fU + %1$.2f U, KH=%2$.1f g + Dos: %1$.2f U, Duration: %2$d min + RLBatt: %1$d + Riley Link adress felaktig. + Kommunikationsfel: Lyckades inte verifiera meddelandet + Kommunikationsfel: Mottog ett ogiltigt datapaket från pod + Kommunikationsfel: Pod är i fel tillstånd + Kommunikationsfel: Mottog ett felaktig svar från pod + Kommunikationsfel: Tog emot ett meddelande med ett ogiltigt sekvensnummer från podden + Kommunikationsfel: Tog emot ett meddelande med en ogiltig adress från podden + Kommunikationsfel: Misslyckades avkoda meddelandet från pod + Kommunikationsfel: \"nonce resync\" misslyckades + Kommunikationsfel: \"nonce\" är inte i synk + Kommunikationsfel: Mottog inte tillräckligt mycket data från pod + Ett pod-fel (%1$03d %2$s) har upptäckts. Vänligen inaktivera din pod och starta en ny + Kommunikationsfel: Pod returnerade ett fel + Riley Link svarar inte + Länken till Riley Link bröts + Inget svar från pod + Det gick inte att ställa in basalprofilen. Leveransen kan vara avstängd! Uppdatera Pod-status manuellt från Omnipod-fliken och återuppta leveransen om det behövs. + Det gick inte att ställa in basalprofilen. Leveransen kan vara avstängd! Uppdatera Pod-status manuellt från Omnipod-fliken och återuppta leveransen om det behövs. + Det gick inte att ställa in basalprofilen. Leveransen är avstängd! Återuppta leverans manuellt från Omnipod-fliken. + Misslyckades troligen att avbryta temp basaldos. Uppdatera Pod-status manuellt från Omnipod-fliken. + Temp basal-inställningen misslyckades. Om en temp basal kördes tidigare, kan den ha avbrutits. Uppdatera Pod-status manuellt från Omnipod-fliken. + Temp basal-inställningen kan ha misslyckats. Om en temp basal kördes tidigare, kan den ha avbrutits. Uppdatera Pod-status manuellt från Omnipod-fliken. + Längden på en temp basal måste vara större än noll och en multipel av %1$s minuter. + Tidsuppdatering av podden kan ha misslyckats. Leveransen kan vara avstängd! Uppdatera Pod-status manuellt från Omnipod-fliken och återuppta leveransen om det behövs. + Tidsuppdatering av podden misslyckades. Leveransen kan vara avstängd! Uppdatera Pod-status manuellt från Omnipod-fliken och återuppta leveransen om det behövs. + Misslyckades att läsa Pulsloggen + Det gick inte att automatiskt ändra tiden på Pod. Du bör synkronisera tiden manuellt på fliken Omnipod. + Operationen inte möjlig.\n\n Du måste konfigurera Omnipod innan du kan använda denna funktion. + Det går inte att verifiera om bolus slutfördes. Kontrollera manuellt att din Pod levererar genom att lyssna på klick. Om du är säker på att bolus misslyckades, bör du manuellt ta bort posten från Behandlingar, även om du klickar på \"Avbryt bolus\" nu! + Det gick inte att verifiera om SMB bolus (%1$.2f U) lyckades. Om du är säker på att bolus misslyckades, bör du manuellt ta bort posten från Behandlingar. + En temp basal körs på podden, men AAPS är inte medveten om denna. Vänligen avbryt din tillfälliga basal manuellt. + Riley Link-statistik + Väntar på RileyLink-anslutning… + Återställ Riley Link-konfiguration + Läs pulslogg + Läser pulslogg… + Pulslogg + Pulslogg (kopierad till klippbordet) + Fyll en ny Pod med tillräckligt med insulin i 3 dagar.\n\nLyssna på två pip från Pod under fyllningsprocessen. Dessa tyder på att den minsta mängden (85U) har nåtts. Var noga med att helt tömma fyllnadssprutan, även efter att ha hört de två pipen.\n\nEfter fyllning av Pod, tryck Nästa.\n\nObs: Ta inte bort Pods nålskydd ännu.\nObs: Placera Riley Link i ett upprätt läge och placera Pod några centimeter därifrån. + Försöker parkoppla den nya Poden och förfylla den.\n\nNär initieringsprocessen har slutförts kan du trycka på Nästa.\n\nObs: placera Riley Link i ett upprätt läge och placera Pod några centimeter bort från den. + osäker diff --git a/omnipod-eros/src/main/res/values-ta-rIN/strings.xml b/omnipod-eros/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..bc89093c83 --- /dev/null +++ b/omnipod-eros/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/rileylink/src/main/res/values-ta-rIN/strings.xml b/rileylink/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..0a73dfc845 --- /dev/null +++ b/rileylink/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/wear/src/main/res/values-pt-rPT/strings.xml b/wear/src/main/res/values-pt-rPT/strings.xml index 41770c1989..279ddaabb1 100644 --- a/wear/src/main/res/values-pt-rPT/strings.xml +++ b/wear/src/main/res/values-pt-rPT/strings.xml @@ -88,7 +88,7 @@ Predefinição 3 Valor livre CONFIRMAR - alteração turno + Deslocamento temporal bólus Progresso do Bólus pressione para cancelar diff --git a/wear/src/main/res/values-sv-rSE/strings.xml b/wear/src/main/res/values-sv-rSE/strings.xml index e3ef66030b..0a2cbb4140 100644 --- a/wear/src/main/res/values-sv-rSE/strings.xml +++ b/wear/src/main/res/values-sv-rSE/strings.xml @@ -90,6 +90,9 @@ BEKRÄFTA tidsförskjutning bolus + Bolusförlopp + tryck för att avbryta + AVBRYT BOLUS Pump APS CPP @@ -129,4 +132,8 @@ Färg: Färgmättnad: Opacitet: + AAPS Bolusförlopp + AAPS Bolusförlopp (tyst) + Bolusförlopp och avbryt + Bolusförlopp och avbryt med mindre vibrationer diff --git a/wear/src/main/res/values-ta-rIN/strings.xml b/wear/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/wear/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,2 @@ + +