Merge remote-tracking branch 'Nightscout/dev' into Autotune/TuneWeekDaysClean

This commit is contained in:
Philoul 2022-10-30 19:01:50 +01:00
commit 08f36b1b7c
340 changed files with 1755 additions and 1980 deletions

View file

@ -3,12 +3,7 @@
<option name="AUTODETECT_INDENTS" value="false" />
<option name="WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN" value="true" />
<JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value />
</option>
<option name="ALIGN_IN_COLUMNS_CASE_BRANCH" value="true" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
<option name="BLANK_LINES_AROUND_BLOCK_WHEN_BRANCHES" value="1" />
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>

View file

@ -1,6 +1,6 @@
This document speciffy hints and good practices for source code contributions.
AndroidAPS is community effort and all contributions are welcome! If you wish help us improving AndroidAPS - please read and try to adhere to
AndroidAPS is community effort and all contributions are welcome! If you wish help us improving AAPS - please read and try to adhere to
this guidelines, to make the development and process of change aproval as smooth as possible :)
General rules
@ -19,7 +19,7 @@ Coding convetions
1. Use Android Studio with default indents (4 chars, use spaces)
2. Use autoformat feature CTRL-ALT-L in every changed file before commit
Commiting Changes / Pull Requests
Committing Changes / Pull Requests
---------------------------------
1. Make fork of repository on github

View file

@ -1,12 +1,12 @@
# AndroidAPS
* Check the wiki: https://androidaps.readthedocs.io
* Everyone whos been looping with AndroidAPS needs to fill out the form after 3 days of looping https://docs.google.com/forms/d/14KcMjlINPMJHVt28MDRupa4sz4DDIooI4SrW0P3HSN8/viewform?c=0&w=1
# AAPS
* Check the wiki: https://wiki.aaps.app
* Everyone whos been looping with AAPS needs to fill out the form after 3 days of looping https://docs.google.com/forms/d/14KcMjlINPMJHVt28MDRupa4sz4DDIooI4SrW0P3HSN8/viewform?c=0&w=1
[![Support Server](https://img.shields.io/discord/629952586895851530.svg?label=Discord&logo=Discord&colorB=7289da&style=for-the-badge)](https://discord.gg/4fQUWHZ4Mw)
[![CircleCI](https://circleci.com/gh/nightscout/AndroidAPS/tree/master.svg?style=svg)](https://circleci.com/gh/nightscout/AndroidAPS/tree/master)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/androidaps/localized.svg)](https://translations.androidaps.org/project/androidaps)
[![Documentation Status](https://readthedocs.org/projects/androidaps/badge/?version=latest)](https://androidaps.readthedocs.io/en/latest/?badge=latest)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/androidaps/localized.svg)](https://translations.aaps.app/project/androidaps)
[![Documentation Status](https://readthedocs.org/projects/androidaps/badge/?version=latest)](https://wiki.aaps.app/en/latest/?badge=latest)
[![codecov](https://codecov.io/gh/nightscout/AndroidAPS/branch/master/graph/badge.svg)](https://codecov.io/gh/MilosKozak/AndroidAPS)
DEV:

View file

@ -105,7 +105,7 @@ android {
defaultConfig {
multiDexEnabled true
versionCode 1500
version "3.1.0.3-dev-b"
version "3.1.0.3-dev-c"
buildConfigField "String", "VERSION", '"' + version + '"'
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'
@ -119,7 +119,7 @@ android {
full {
applicationId "info.nightscout.androidaps"
dimension "standard"
resValue "string", "app_name", "AndroidAPS"
resValue "string", "app_name", "AAPS"
versionName version
manifestPlaceholders = [
appIcon : "@mipmap/ic_launcher",
@ -136,21 +136,21 @@ android {
appIconRound: "@null"
]
}
nsclient {
applicationId "info.nightscout.nsclient"
aapsclient {
applicationId "info.nightscout.aapsclient"
dimension "standard"
resValue "string", "app_name", "NSClient"
versionName version + "-nsclient"
resValue "string", "app_name", "AAPSClient"
versionName version + "-aapsclient"
manifestPlaceholders = [
appIcon : "@mipmap/ic_yellowowl",
appIconRound: "@null"
]
}
nsclient2 {
applicationId "info.nightscout.nsclient2"
aapsclient2 {
applicationId "info.nightscout.aapsclient2"
dimension "standard"
resValue "string", "app_name", "NSClient2"
versionName version + "-nsclient"
resValue "string", "app_name", "AAPSClient2"
versionName version + "-aapsclient"
manifestPlaceholders = [
appIcon : "@mipmap/ic_yellowowl",
appIconRound: "@null"
@ -169,6 +169,10 @@ allprojects {
dependencies {
wearApp project(':wear')
// in order to use internet's versions you'd need to enable Jetifier again
// https://github.com/nightscout/graphview.git
// https://github.com/nightscout/iconify.git
implementation project(':libraries')
implementation project(':shared')
implementation project(':core')
implementation project(':automation')

View file

@ -6,6 +6,64 @@
"storage_bucket": "androidaps-c34f8.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:477603612366:android:56b8fa16651fb8dbfcb29f",
"android_client_info": {
"package_name": "info.nightscout.aapsclient"
}
},
"oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:477603612366:android:8e749a9253635bcafcb29f",
"android_client_info": {
"package_name": "info.nightscout.aapsclient2"
}
},
"oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:477603612366:android:aef229914e3e5448",
@ -21,7 +79,7 @@
],
"api_key": [
{
"current_key": "AIzaSyDcZpDRMaGjdhihXp531cVYM6LkEL8KbgM"
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
@ -50,7 +108,7 @@
],
"api_key": [
{
"current_key": "AIzaSyDcZpDRMaGjdhihXp531cVYM6LkEL8KbgM"
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
@ -79,7 +137,7 @@
],
"api_key": [
{
"current_key": "AIzaSyDcZpDRMaGjdhihXp531cVYM6LkEL8KbgM"
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
@ -108,7 +166,7 @@
],
"api_key": [
{
"current_key": "AIzaSyDcZpDRMaGjdhihXp531cVYM6LkEL8KbgM"
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {

View file

@ -3,6 +3,8 @@ package info.nightscout.androidaps
import android.content.Context
import android.content.Intent
import android.graphics.Rect
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.PersistableBundle
import android.text.SpannableString
@ -28,7 +30,6 @@ import com.google.android.material.tabs.TabLayoutMediator
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.joanzapata.iconify.Iconify
import com.joanzapata.iconify.fonts.FontAwesomeModule
import dev.doubledot.doki.ui.DokiActivity
import info.nightscout.androidaps.activities.*
import info.nightscout.androidaps.database.entities.UserEntry.Action
import info.nightscout.androidaps.database.entities.UserEntry.Sources
@ -48,7 +49,6 @@ import info.nightscout.androidaps.setupwizard.SetupWizardActivity
import info.nightscout.androidaps.utils.AndroidPermission
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.androidaps.utils.extensions.isRunningRealPumpTest
import info.nightscout.androidaps.utils.locale.LocaleHelper
import info.nightscout.androidaps.utils.protection.PasswordCheck
@ -349,7 +349,14 @@ class MainActivity : NoSplashAppCompatActivity() {
.setIcon(iconsProvider.getIcon())
.setMessage(messageSpanned)
.setPositiveButton(rh.gs(R.string.ok), null)
.setNeutralButton(rh.gs(R.string.cta_dont_kill_my_app_info)) { _, _ -> DokiActivity.start(context = this@MainActivity) }
.setNeutralButton(rh.gs(R.string.cta_dont_kill_my_app_info)) { _, _ ->
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://dontkillmyapp.com/" + Build.MANUFACTURER.lowercase().replace(" ", "-"))
)
)
}
.create().apply {
show()
findViewById<TextView>(android.R.id.message)?.movementMethod = LinkMovementMethod.getInstance()
@ -375,12 +382,12 @@ class MainActivity : NoSplashAppCompatActivity() {
})
return true
}
/*
R.id.nav_survey -> {
startActivity(Intent(this, SurveyActivity::class.java))
return true
}
*/
/*
R.id.nav_survey -> {
startActivity(Intent(this, SurveyActivity::class.java))
return true
}
*/
R.id.nav_defaultprofile -> {
startActivity(Intent(this, ProfileHelperActivity::class.java))
return true
@ -407,6 +414,7 @@ class MainActivity : NoSplashAppCompatActivity() {
binding.mainPager.currentItem = 0
return
}
@Suppress("DEPRECATION")
super.onBackPressed()
}

View file

@ -139,10 +139,10 @@ class MainApp : DaggerApplication() {
}, 10000
)
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"KeepAlive",
KeepAliveWorker.KA_0,
ExistingPeriodicWorkPolicy.REPLACE,
PeriodicWorkRequest.Builder(KeepAliveWorker::class.java, 15, TimeUnit.MINUTES)
.setInputData(Data.Builder().putString("schedule", "KeepAlive").build())
.setInputData(Data.Builder().putString("schedule", KeepAliveWorker.KA_0).build())
.setInitialDelay(5, TimeUnit.SECONDS)
.build()
)
@ -184,7 +184,7 @@ class MainApp : DaggerApplication() {
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
return@setErrorHandler
}
aapsLogger.warn(LTag.CORE, "Undeliverable exception received, not sure what to do", e)
aapsLogger.warn(LTag.CORE, "Undeliverable exception received, not sure what to do", e.toString())
}
}

View file

@ -72,6 +72,7 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
@Suppress("DEPRECATION")
onBackPressed()
true
}

View file

@ -21,12 +21,17 @@ import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.defaultProfile.DefaultProfile
import info.nightscout.androidaps.utils.defaultProfile.DefaultProfileDPV
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.utils.stats.TddCalculator
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import java.text.DecimalFormat
import javax.inject.Inject
@ -40,6 +45,8 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var activePlugin: ActivePlugin
@Inject lateinit var repository: AppRepository
@Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var fabricPrivacy: FabricPrivacy
enum class ProfileType {
MOTOL_DEFAULT,
@ -64,6 +71,7 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
private val profileSwitchUsed = arrayOf(0, 0)
private lateinit var binding: ActivityProfilehelperBinding
private val disposable = CompositeDisposable()
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
@ -158,13 +166,13 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
binding.basalPctFromTdd.setParams(32.0, 32.0, 37.0, 1.0, DecimalFormat("0"), false, null)
binding.tdds.addView(TextView(this).apply { text = rh.gs(R.string.tdd) + ": " + rh.gs(R.string.calculation_in_progress) })
Thread {
val tdds = tddCalculator.stats(this)
runOnUiThread {
binding.tdds.removeAllViews()
binding.tdds.addView(tdds)
}
}.start()
disposable += Single.fromCallable { tddCalculator.stats(this) }
.subscribeOn(aapsSchedulers.io)
.observeOn(aapsSchedulers.main)
.subscribe({
binding.tdds.removeAllViews()
binding.tdds.addView(it)
}, fabricPrivacy::logException)
// Current profile
binding.currentProfileText.text = profileFunction.getProfileName()
@ -303,4 +311,8 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
}
override fun onPause() {
super.onPause()
disposable.clear()
}
}

View file

@ -9,10 +9,15 @@ import info.nightscout.androidaps.database.entities.UserEntry.Sources
import info.nightscout.androidaps.databinding.ActivityStatsBinding
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.utils.ActivityMonitor
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.utils.stats.DexcomTirCalculator
import info.nightscout.androidaps.utils.stats.TddCalculator
import info.nightscout.androidaps.utils.stats.TirCalculator
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import javax.inject.Inject
class StatsActivity : NoSplashAppCompatActivity() {
@ -22,8 +27,11 @@ class StatsActivity : NoSplashAppCompatActivity() {
@Inject lateinit var dexcomTirCalculator: DexcomTirCalculator
@Inject lateinit var activityMonitor: ActivityMonitor
@Inject lateinit var uel: UserEntryLogger
@Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var fabricPrivacy: FabricPrivacy
private lateinit var binding: ActivityStatsBinding
private val disposable = CompositeDisposable()
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
@ -35,34 +43,34 @@ class StatsActivity : NoSplashAppCompatActivity() {
binding.tir.addView(TextView(this).apply { text = getString(R.string.tir) + ": " + rh.gs(R.string.calculation_in_progress) })
binding.activity.addView(TextView(this).apply { text = getString(R.string.activitymonitor) + ": " + rh.gs(R.string.calculation_in_progress) })
Thread {
val tdds = tddCalculator.stats(this)
runOnUiThread {
binding.tdds.removeAllViews()
binding.tdds.addView(tdds)
}
}.start()
Thread {
val tir = tirCalculator.stats(this)
runOnUiThread {
binding.tir.removeAllViews()
binding.tir.addView(tir)
}
}.start()
Thread {
val dexcomTir = dexcomTirCalculator.stats(this)
runOnUiThread {
binding.dexcomTir.removeAllViews()
binding.dexcomTir.addView(dexcomTir)
}
}.start()
Thread {
val activity = activityMonitor.stats(this)
runOnUiThread {
binding.activity.removeAllViews()
binding.activity.addView(activity)
}
}.start()
disposable += Single.fromCallable { tddCalculator.stats(this) }
.subscribeOn(aapsSchedulers.io)
.observeOn(aapsSchedulers.main)
.subscribe({
binding.tdds.removeAllViews()
binding.tdds.addView(it)
}, fabricPrivacy::logException)
disposable += Single.fromCallable { tirCalculator.stats(this) }
.subscribeOn(aapsSchedulers.io)
.observeOn(aapsSchedulers.main)
.subscribe({
binding.tir.removeAllViews()
binding.tir.addView(it)
}, fabricPrivacy::logException)
disposable += Single.fromCallable { dexcomTirCalculator.stats(this) }
.subscribeOn(aapsSchedulers.io)
.observeOn(aapsSchedulers.main)
.subscribe({
binding.dexcomTir.removeAllViews()
binding.dexcomTir.addView(it)
}, fabricPrivacy::logException)
disposable += Single.fromCallable { activityMonitor.stats(this) }
.subscribeOn(aapsSchedulers.io)
.observeOn(aapsSchedulers.main)
.subscribe({
binding.activity.removeAllViews()
binding.activity.addView(it)
}, fabricPrivacy::logException)
binding.ok.setOnClickListener { finish() }
binding.reset.setOnClickListener {
@ -73,4 +81,9 @@ class StatsActivity : NoSplashAppCompatActivity() {
}
}
}
override fun onPause() {
super.onPause()
disposable.clear()
}
}

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps.db
import android.content.Context
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.*
import info.nightscout.androidaps.events.*
@ -7,6 +8,7 @@ import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventNewHistoryData
import info.nightscout.androidaps.widget.updateWidget
import io.reactivex.rxjava3.disposables.Disposable
import javax.inject.Inject
import javax.inject.Singleton
@ -15,13 +17,15 @@ import javax.inject.Singleton
class CompatDBHelper @Inject constructor(
val aapsLogger: AAPSLogger,
val repository: AppRepository,
val rxBus: RxBus
val rxBus: RxBus,
val context: Context
) {
fun dbChangeDisposable(): Disposable = repository
.changeObservable()
.doOnSubscribe {
rxBus.send(EventNewBG(null))
updateWidget(context)
}
.subscribe {
/**
@ -34,6 +38,7 @@ class CompatDBHelper @Inject constructor(
it.filterIsInstance<GlucoseValue>().maxByOrNull { gv -> gv.timestamp }?.let { gv ->
aapsLogger.debug(LTag.DATABASE, "Firing EventNewBg $gv")
rxBus.send(EventNewBG(gv))
updateWidget(context)
newestGlucoseValue = gv
}
it.filterIsInstance<GlucoseValue>().minOfOrNull { gv -> gv.timestamp }?.let { timestamp ->

View file

@ -47,16 +47,18 @@ import javax.inject.Singleton
open class AppModule {
@Provides
fun providesPlugins(config: Config,
fun providesPlugins(config: Config, buildHelper: BuildHelper,
@PluginsModule.AllConfigs allConfigs: Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards PluginBase>,
@PluginsModule.PumpDriver pumpDrivers: Lazy<Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards PluginBase>>,
@PluginsModule.NotNSClient notNsClient: Lazy<Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards PluginBase>>,
@PluginsModule.APS aps: Lazy<Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards PluginBase>>)
@PluginsModule.APS aps: Lazy<Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards PluginBase>>,
@PluginsModule.Unfinished unfinished: Lazy<Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards PluginBase>>)
: List<@JvmSuppressWildcards PluginBase> {
val plugins = allConfigs.toMutableMap()
if (config.PUMPDRIVERS) plugins += pumpDrivers.get()
if (config.APS) plugins += aps.get()
if (!config.NSCLIENT) plugins += notNsClient.get()
if (buildHelper.isUnfinishedMode()) plugins += unfinished.get()
return plugins.toList().sortedBy { it.first }.map { it.second }
}

View file

@ -3,15 +3,40 @@ package info.nightscout.androidaps.di
import dagger.Module
import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.activities.MyPreferenceFragment
import info.nightscout.androidaps.dialogs.*
import info.nightscout.androidaps.activities.fragments.TreatmentsBolusCarbsFragment
import info.nightscout.androidaps.activities.fragments.TreatmentsCareportalFragment
import info.nightscout.androidaps.activities.fragments.TreatmentsExtendedBolusesFragment
import info.nightscout.androidaps.activities.fragments.TreatmentsProfileSwitchFragment
import info.nightscout.androidaps.activities.fragments.TreatmentsTempTargetFragment
import info.nightscout.androidaps.activities.fragments.TreatmentsTemporaryBasalsFragment
import info.nightscout.androidaps.activities.fragments.TreatmentsUserEntryFragment
import info.nightscout.androidaps.dialogs.CalibrationDialog
import info.nightscout.androidaps.dialogs.CarbsDialog
import info.nightscout.androidaps.dialogs.CareDialog
import info.nightscout.androidaps.dialogs.ExtendedBolusDialog
import info.nightscout.androidaps.dialogs.FillDialog
import info.nightscout.androidaps.dialogs.InsulinDialog
import info.nightscout.androidaps.dialogs.LoopDialog
import info.nightscout.androidaps.dialogs.NtpProgressDialog
import info.nightscout.androidaps.dialogs.ProfileSwitchDialog
import info.nightscout.androidaps.dialogs.TempBasalDialog
import info.nightscout.androidaps.dialogs.TempTargetDialog
import info.nightscout.androidaps.dialogs.TreatmentDialog
import info.nightscout.androidaps.dialogs.WizardDialog
import info.nightscout.androidaps.dialogs.WizardInfoDialog
import info.nightscout.androidaps.plugins.aps.OpenAPSFragment
import info.nightscout.androidaps.plugins.aps.loop.LoopFragment
import info.nightscout.androidaps.plugins.aps.openAPSAMA.OpenAPSAMAFragment
import info.nightscout.androidaps.plugins.aps.openAPSSMB.OpenAPSSMBFragment
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderFragment
import info.nightscout.androidaps.plugins.constraints.objectives.ObjectivesFragment
import info.nightscout.androidaps.plugins.constraints.objectives.activities.ObjectivesExamDialog
import info.nightscout.androidaps.plugins.general.actions.ActionsFragment
import info.nightscout.androidaps.plugins.general.automation.AutomationFragment
import info.nightscout.androidaps.plugins.general.automation.dialogs.ChooseActionDialog
import info.nightscout.androidaps.plugins.general.automation.dialogs.ChooseOperationDialog
import info.nightscout.androidaps.plugins.general.automation.dialogs.ChooseTriggerDialog
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditActionDialog
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditTriggerDialog
import info.nightscout.androidaps.plugins.general.autotune.AutotuneFragment
import info.nightscout.androidaps.plugins.general.food.FoodFragment
import info.nightscout.androidaps.plugins.general.maintenance.MaintenanceFragment
@ -25,8 +50,6 @@ import info.nightscout.androidaps.plugins.insulin.InsulinFragment
import info.nightscout.androidaps.plugins.profile.local.LocalProfileFragment
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpFragment
import info.nightscout.androidaps.plugins.source.BGSourceFragment
import info.nightscout.androidaps.activities.fragments.*
import info.nightscout.androidaps.plugins.general.automation.dialogs.*
import info.nightscout.androidaps.utils.protection.PasswordCheck
@Module
@ -46,8 +69,7 @@ abstract class FragmentsModule {
@ContributesAndroidInjector abstract fun contributesInsulinFragment(): InsulinFragment
@ContributesAndroidInjector abstract fun contributesLocalProfileFragment(): LocalProfileFragment
@ContributesAndroidInjector abstract fun contributesObjectivesFragment(): ObjectivesFragment
@ContributesAndroidInjector abstract fun contributesOpenAPSAMAFragment(): OpenAPSAMAFragment
@ContributesAndroidInjector abstract fun contributesOpenAPSSMBFragment(): OpenAPSSMBFragment
@ContributesAndroidInjector abstract fun contributesOpenAPSFragment(): OpenAPSFragment
@ContributesAndroidInjector abstract fun contributesOverviewFragment(): OverviewFragment
@ContributesAndroidInjector abstract fun contributesLoopFragment(): LoopFragment
@ContributesAndroidInjector abstract fun contributesMaintenanceFragment(): MaintenanceFragment
@ -89,6 +111,6 @@ abstract class FragmentsModule {
@ContributesAndroidInjector abstract fun contributesTreatmentDialog(): TreatmentDialog
@ContributesAndroidInjector abstract fun contributesWizardDialog(): WizardDialog
@ContributesAndroidInjector abstract fun contributesWizardInfoDialog(): WizardInfoDialog
@ContributesAndroidInjector abstract fun contributesNtpProgressDialog(): NtpProgressDialog
@ContributesAndroidInjector abstract fun contributesPasswordCheck(): PasswordCheck
}

View file

@ -34,6 +34,7 @@ import info.nightscout.androidaps.plugins.general.overview.OverviewPlugin
import info.nightscout.androidaps.plugins.general.persistentNotification.PersistentNotificationPlugin
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
import info.nightscout.androidaps.plugins.general.themes.ThemeSwitcherPlugin
import info.nightscout.androidaps.plugins.general.tidepool.TidepoolPlugin
import info.nightscout.androidaps.plugins.general.wear.WearPlugin
import info.nightscout.androidaps.plugins.general.xdripStatusline.StatusLinePlugin
import info.nightscout.androidaps.plugins.insulin.InsulinLyumjevPlugin
@ -292,6 +293,12 @@ abstract class PluginsModule {
@IntKey(360)
abstract fun bindNSClientPlugin(plugin: NSClientPlugin): PluginBase
@Binds
@Unfinished
@IntoMap
@IntKey(368)
abstract fun bindTidepoolPlugin(plugin: TidepoolPlugin): PluginBase
@Binds
@AllConfigs
@IntoMap
@ -382,12 +389,6 @@ abstract class PluginsModule {
@IntKey(475)
abstract fun bindRandomBgPlugin(plugin: RandomBgPlugin): PluginBase
// @Binds
// @NotNSClient
// @IntoMap
// @IntKey(480)
// abstract fun bindOpenHumansPlugin(plugin: OpenHumansUploader): PluginBase
@Binds
@NotNSClient
@IntoMap
@ -418,4 +419,6 @@ abstract class PluginsModule {
@Qualifier
annotation class APS
@Qualifier
annotation class Unfinished
}

View file

@ -92,11 +92,13 @@ class WizardDialog : DaggerDialogFragment() {
}
private val timeTextWatcher = object : TextWatcher {
override fun afterTextChanged(s: Editable) {}
override fun afterTextChanged(s: Editable) {
binding.alarm.isChecked = binding.carbTimeInput.value > 0
}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
calculateInsulin()
binding.alarm.isChecked = binding.carbTimeInput.value > 0
}
}
@ -367,7 +369,7 @@ class WizardDialog : DaggerDialogFragment() {
// Set BG if not old
binding.bgInput.value = iobCobCalculator.ads.actualBg()?.valueToUnits(units) ?: 0.0
binding.ttCheckbox.isEnabled = tempTarget is ValueWrapper.Existing
binding.ttCheckbox.isEnabled = tempTarget is ValueWrapper.Existing
binding.ttCheckboxIcon.visibility = binding.ttCheckbox.isEnabled.toVisibility()
binding.iobInsulin.text = rh.gs(R.string.formatinsulinunits, -bolusIob.iob - basalIob.basaliob)

View file

@ -1,14 +1,20 @@
package info.nightscout.androidaps.plugins.aps.openAPSSMB
package info.nightscout.androidaps.plugins.aps
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.Handler
import android.os.HandlerThread
import android.text.TextUtils
import android.view.*
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.OpenapsamaFragmentBinding
import info.nightscout.androidaps.databinding.OpenapsFragmentBinding
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateGui
@ -26,7 +32,7 @@ import org.json.JSONArray
import org.json.JSONException
import javax.inject.Inject
class OpenAPSSMBFragment : DaggerFragment(), MenuProvider {
class OpenAPSFragment : DaggerFragment(), MenuProvider {
private var disposable: CompositeDisposable = CompositeDisposable()
@ -42,14 +48,15 @@ class OpenAPSSMBFragment : DaggerFragment(), MenuProvider {
@Suppress("PrivatePropertyName")
private val ID_MENU_RUN = 503
private var _binding: OpenapsamaFragmentBinding? = null
private var _binding: OpenapsFragmentBinding? = null
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
OpenapsamaFragmentBinding.inflate(inflater, container, false).also {
OpenapsFragmentBinding.inflate(inflater, container, false).also {
_binding = it
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
}.root
@ -57,12 +64,10 @@ class OpenAPSSMBFragment : DaggerFragment(), MenuProvider {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
with(binding.swipeRefresh) {
setColorSchemeColors(rh.gac(context, R.attr.colorPrimaryDark), rh.gac(context, R.attr.colorPrimary), rh.gac(context, R.attr.colorSecondary))
setOnRefreshListener {
binding.lastrun.text = rh.gs(R.string.executing)
Thread { activePlugin.activeAPS.invoke("OpenAPSSMB swipe refresh", false) }.start()
}
binding.swipeRefresh.setColorSchemeColors(rh.gac(context, R.attr.colorPrimaryDark), rh.gac(context, R.attr.colorPrimary), rh.gac(context, R.attr.colorSecondary))
binding.swipeRefresh.setOnRefreshListener {
binding.lastrun.text = rh.gs(R.string.executing)
handler.post { activePlugin.activeAPS.invoke("OpenAPS swipe refresh", false) }
}
}
@ -75,7 +80,7 @@ class OpenAPSSMBFragment : DaggerFragment(), MenuProvider {
when (item.itemId) {
ID_MENU_RUN -> {
binding.lastrun.text = rh.gs(R.string.executing)
Thread { activePlugin.activeAPS.invoke("OpenAPSSMB menu", false) }.start()
handler.post { activePlugin.activeAPS.invoke("OpenAPS menu", false) }
true
}
@ -85,6 +90,7 @@ class OpenAPSSMBFragment : DaggerFragment(), MenuProvider {
@Synchronized
override fun onResume() {
super.onResume()
disposable += rxBus
.toObservable(EventOpenAPSUpdateGui::class.java)
.observeOn(aapsSchedulers.main)
@ -105,6 +111,7 @@ class OpenAPSSMBFragment : DaggerFragment(), MenuProvider {
override fun onPause() {
super.onPause()
disposable.clear()
handler.removeCallbacksAndMessages(null)
}
@Synchronized
@ -114,36 +121,36 @@ class OpenAPSSMBFragment : DaggerFragment(), MenuProvider {
}
@Synchronized
fun updateGUI() {
private fun updateGUI() {
if (_binding == null) return
val openAPSSMBPlugin = activePlugin.activeAPS
openAPSSMBPlugin.lastAPSResult?.let { lastAPSResult ->
val openAPSPlugin = activePlugin.activeAPS
openAPSPlugin.lastAPSResult?.let { lastAPSResult ->
binding.result.text = jsonFormatter.format(lastAPSResult.json)
binding.request.text = lastAPSResult.toSpanned()
}
openAPSSMBPlugin.lastDetermineBasalAdapter?.let { determineBasalAdapterSMBJS ->
binding.glucosestatus.text = jsonFormatter.format(determineBasalAdapterSMBJS.glucoseStatusParam)
binding.currenttemp.text = jsonFormatter.format(determineBasalAdapterSMBJS.currentTempParam)
openAPSPlugin.lastDetermineBasalAdapter?.let { determineBasalAdapter ->
binding.glucosestatus.text = jsonFormatter.format(determineBasalAdapter.glucoseStatusParam)
binding.currenttemp.text = jsonFormatter.format(determineBasalAdapter.currentTempParam)
try {
val iobArray = JSONArray(determineBasalAdapterSMBJS.iobDataParam)
val iobArray = JSONArray(determineBasalAdapter.iobDataParam)
binding.iobdata.text = TextUtils.concat(rh.gs(R.string.array_of_elements, iobArray.length()) + "\n", jsonFormatter.format(iobArray.getString(0)))
} catch (e: JSONException) {
aapsLogger.error(LTag.APS, "Unhandled exception", e)
@SuppressLint("SetTextI18n")
@Suppress("SetTextI18n")
binding.iobdata.text = "JSONException see log for details"
}
binding.profile.text = jsonFormatter.format(determineBasalAdapterSMBJS.profileParam)
binding.mealdata.text = jsonFormatter.format(determineBasalAdapterSMBJS.mealDataParam)
binding.scriptdebugdata.text = determineBasalAdapterSMBJS.scriptDebug.replace("\\s+".toRegex(), " ")
openAPSSMBPlugin.lastAPSResult?.inputConstraints?.let {
binding.profile.text = jsonFormatter.format(determineBasalAdapter.profileParam)
binding.mealdata.text = jsonFormatter.format(determineBasalAdapter.mealDataParam)
binding.scriptdebugdata.text = determineBasalAdapter.scriptDebug.replace("\\s+".toRegex(), " ")
openAPSPlugin.lastAPSResult?.inputConstraints?.let {
binding.constraints.text = it.getReasons(aapsLogger)
}
}
if (openAPSSMBPlugin.lastAPSRun != 0L) {
binding.lastrun.text = dateUtil.dateAndTimeString(openAPSSMBPlugin.lastAPSRun)
if (openAPSPlugin.lastAPSRun != 0L) {
binding.lastrun.text = dateUtil.dateAndTimeString(openAPSPlugin.lastAPSRun)
}
openAPSSMBPlugin.lastAutosensResult.let {
openAPSPlugin.lastAutosensResult.let {
binding.autosensdata.text = jsonFormatter.format(it.json())
}
binding.swipeRefresh.isRefreshing = false

View file

@ -1,7 +1,14 @@
package info.nightscout.androidaps.plugins.aps.loop
import android.os.Bundle
import android.view.*
import android.os.Handler
import android.os.HandlerThread
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import dagger.android.support.DaggerFragment
@ -34,8 +41,10 @@ class LoopFragment : DaggerFragment(), MenuProvider {
@Inject lateinit var loop: Loop
@Inject lateinit var dateUtil: DateUtil
@Suppress("PrivatePropertyName")
private val ID_MENU_RUN = 501
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
private var disposable: CompositeDisposable = CompositeDisposable()
private var _binding: LoopFragmentBinding? = null
@ -53,11 +62,11 @@ class LoopFragment : DaggerFragment(), MenuProvider {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
with(binding.swipeRefresh) {
setColorSchemeColors(rh.gac(context, R.attr.colorPrimaryDark), rh.gac(context, R.attr.colorPrimary), rh.gac(context, R.attr.colorSecondary))
setOnRefreshListener {
binding.lastrun.text = rh.gs(R.string.executing)
Thread { loop.invoke("Loop swiperefresh", true) }.start()
binding.swipeRefresh.setColorSchemeColors(rh.gac(context, R.attr.colorPrimaryDark), rh.gac(context, R.attr.colorPrimary), rh.gac(context, R.attr.colorSecondary))
binding.swipeRefresh.setOnRefreshListener {
binding.lastrun.text = rh.gs(R.string.executing)
handler.post {
loop.invoke("Loop swipe refresh", true)
}
}
}
@ -71,7 +80,7 @@ class LoopFragment : DaggerFragment(), MenuProvider {
when (item.itemId) {
ID_MENU_RUN -> {
binding.lastrun.text = rh.gs(R.string.executing)
Thread { loop.invoke("Loop menu", true) }.start()
handler.post { loop.invoke("Loop menu", true) }
true
}
@ -104,6 +113,7 @@ class LoopFragment : DaggerFragment(), MenuProvider {
override fun onPause() {
super.onPause()
disposable.clear()
handler.removeCallbacksAndMessages(null)
}
@Synchronized

View file

@ -7,6 +7,8 @@ import android.app.PendingIntent
import android.app.TaskStackBuilder
import android.content.Context
import android.content.Intent
import android.os.Handler
import android.os.HandlerThread
import android.os.SystemClock
import androidx.core.app.NotificationCompat
import dagger.android.HasAndroidInjector
@ -33,8 +35,21 @@ import info.nightscout.androidaps.extensions.buildDeviceStatus
import info.nightscout.androidaps.extensions.convertedToAbsolute
import info.nightscout.androidaps.extensions.convertedToPercent
import info.nightscout.androidaps.extensions.plannedRemainingMinutes
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.CommandQueue
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.interfaces.Constraint
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.Loop
import info.nightscout.androidaps.interfaces.Loop.LastRun
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.PumpDescription
import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.aps.loop.events.EventLoopSetLastRunGui
import info.nightscout.androidaps.plugins.aps.loop.events.EventLoopUpdateGui
@ -52,7 +67,6 @@ import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.HardLimits
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
@ -107,6 +121,8 @@ class LoopPlugin @Inject constructor(
override var lastRun: LastRun? = null
override var closedLoopEnabled: Constraint<Boolean>? = null
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
override fun onStart() {
createNotificationChannel()
super.onStart()
@ -128,6 +144,7 @@ class LoopPlugin @Inject constructor(
override fun onStop() {
disposable.clear()
handler.removeCallbacksAndMessages(null)
super.onStop()
}
@ -370,12 +387,17 @@ class LoopPlugin @Inject constructor(
if (resultAfterConstraints.bolusRequested()) lastRun.smbSetByPump = waiting
rxBus.send(EventLoopUpdateGui())
fabricPrivacy.logCustom("APSRequest")
// TBR request must be applied first to prevent situation where
// SMB was executed and zero TBR afterwards failed
applyTBRRequest(resultAfterConstraints, profile, object : Callback() {
override fun run() {
if (result.enacted || result.success) {
lastRun.tbrSetByPump = result
lastRun.lastTBRRequest = lastRun.lastAPSRun
lastRun.lastTBREnact = dateUtil.now()
// deliverAt is used to prevent executing too old SMB request (older than 1 min)
// executing TBR may take some time thus give more time to SMB
resultAfterConstraints.deliverAt = lastRun.lastTBREnact
rxBus.send(EventLoopUpdateGui())
applySMBRequest(resultAfterConstraints, object : Callback() {
override fun run() {
@ -385,10 +407,7 @@ class LoopPlugin @Inject constructor(
lastRun.lastSMBRequest = lastRun.lastAPSRun
lastRun.lastSMBEnact = dateUtil.now()
} else {
Thread {
SystemClock.sleep(1000)
invoke("tempBasalFallback", allowNotification, true)
}.start()
handler.postDelayed({ invoke("tempBasalFallback", allowNotification, true) }, 1000)
}
rxBus.send(EventLoopUpdateGui())
}
@ -702,6 +721,6 @@ class LoopPlugin @Inject constructor(
companion object {
private const val CHANNEL_ID = "AndroidAPS-OpenLoop"
private const val CHANNEL_ID = "AAPS-OpenLoop"
}
}

View file

@ -1,161 +0,0 @@
package info.nightscout.androidaps.plugins.aps.openAPSAMA
import android.os.Bundle
import android.text.TextUtils
import android.view.*
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.OpenapsamaFragmentBinding
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateGui
import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateResultGui
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.JSONFormatter
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import org.json.JSONArray
import org.json.JSONException
import javax.inject.Inject
class OpenAPSAMAFragment : DaggerFragment(), MenuProvider {
private var disposable: CompositeDisposable = CompositeDisposable()
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var rxBus: RxBus
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var openAPSAMAPlugin: OpenAPSAMAPlugin
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var jsonFormatter: JSONFormatter
@Suppress("PrivatePropertyName")
private val ID_MENU_RUN = 502
private var _binding: OpenapsamaFragmentBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
OpenapsamaFragmentBinding.inflate(inflater, container, false).also {
_binding = it
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
}.root
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
with(binding.swipeRefresh) {
setColorSchemeColors(rh.gac(context, R.attr.colorPrimaryDark), rh.gac(context, R.attr.colorPrimary), rh.gac(context, R.attr.colorSecondary))
setOnRefreshListener {
binding.lastrun.text = rh.gs(R.string.executing)
Thread { openAPSAMAPlugin.invoke("OpenAPSAMA swipe refresh", false) }.start()
}
}
}
override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
menu.add(Menu.FIRST, ID_MENU_RUN, 0, rh.gs(R.string.openapsma_run)).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER)
menu.setGroupDividerEnabled(true)
}
override fun onMenuItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
ID_MENU_RUN -> {
binding.lastrun.text = rh.gs(R.string.executing)
Thread { openAPSAMAPlugin.invoke("OpenAPSAMA menu", false) }.start()
true
}
else -> false
}
@Synchronized
override fun onResume() {
super.onResume()
disposable += rxBus
.toObservable(EventOpenAPSUpdateGui::class.java)
.observeOn(aapsSchedulers.main)
.subscribe({
updateGUI()
}, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventOpenAPSUpdateResultGui::class.java)
.observeOn(aapsSchedulers.main)
.subscribe({
updateResultGUI(it.text)
}, fabricPrivacy::logException)
updateGUI()
}
@Synchronized
override fun onPause() {
super.onPause()
disposable.clear()
}
@Synchronized
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
@Synchronized
private fun updateGUI() {
if (_binding == null) return
openAPSAMAPlugin.lastAPSResult?.let { lastAPSResult ->
binding.result.text = jsonFormatter.format(lastAPSResult.json)
binding.request.text = lastAPSResult.toSpanned()
}
openAPSAMAPlugin.lastDetermineBasalAdapter?.let { determineBasalAdapterAMAJS ->
binding.glucosestatus.text = jsonFormatter.format(determineBasalAdapterAMAJS.glucoseStatusParam)
binding.currenttemp.text = jsonFormatter.format(determineBasalAdapterAMAJS.currentTempParam)
try {
val iobArray = JSONArray(determineBasalAdapterAMAJS.iobDataParam)
binding.iobdata.text = TextUtils.concat(rh.gs(R.string.array_of_elements, iobArray.length()) + "\n", jsonFormatter.format(iobArray.getString(0)))
} catch (e: JSONException) {
aapsLogger.error(LTag.APS, "Unhandled exception", e)
@Suppress("SetTextI18n")
binding.iobdata.text = "JSONException see log for details"
}
binding.profile.text = jsonFormatter.format(determineBasalAdapterAMAJS.profileParam)
binding.mealdata.text = jsonFormatter.format(determineBasalAdapterAMAJS.mealDataParam)
binding.scriptdebugdata.text = determineBasalAdapterAMAJS.scriptDebug.replace("\\s+".toRegex(), " ")
}
if (openAPSAMAPlugin.lastAPSRun != 0L) {
binding.lastrun.text = dateUtil.dateAndTimeString(openAPSAMAPlugin.lastAPSRun)
}
openAPSAMAPlugin.lastAutosensResult.let {
binding.autosensdata.text = jsonFormatter.format(it.json())
}
binding.swipeRefresh.isRefreshing = false
}
private fun updateResultGUI(text: String) {
binding.result.text = text
binding.glucosestatus.text = ""
binding.currenttemp.text = ""
binding.iobdata.text = ""
binding.profile.text = ""
binding.mealdata.text = ""
binding.autosensdata.text = ""
binding.scriptdebugdata.text = ""
binding.request.text = ""
binding.lastrun.text = ""
binding.swipeRefresh.isRefreshing = false
}
}

View file

@ -4,12 +4,21 @@ import android.content.Context
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.ValueWrapper
import info.nightscout.androidaps.interfaces.*
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.extensions.target
import info.nightscout.androidaps.interfaces.APS
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.Constraint
import info.nightscout.androidaps.interfaces.DetermineBasalAdapterInterface
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.aps.OpenAPSFragment
import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateGui
import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateResultGui
import info.nightscout.androidaps.plugins.aps.loop.ScriptReader
@ -22,8 +31,8 @@ import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.HardLimits
import info.nightscout.androidaps.utils.Profiler
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.extensions.target
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import org.json.JSONException
import javax.inject.Inject
import javax.inject.Singleton
@ -46,14 +55,15 @@ class OpenAPSAMAPlugin @Inject constructor(
private val dateUtil: DateUtil,
private val repository: AppRepository,
private val glucoseStatusProvider: GlucoseStatusProvider
) : PluginBase(PluginDescription()
.mainType(PluginType.APS)
.fragmentClass(OpenAPSAMAFragment::class.java.name)
.pluginIcon(R.drawable.ic_generic_icon)
.pluginName(R.string.openapsama)
.shortName(R.string.oaps_shortname)
.preferencesId(R.xml.pref_openapsama)
.description(R.string.description_ama),
) : PluginBase(
PluginDescription()
.mainType(PluginType.APS)
.fragmentClass(OpenAPSFragment::class.java.name)
.pluginIcon(R.drawable.ic_generic_icon)
.pluginName(R.string.openapsama)
.shortName(R.string.oaps_shortname)
.preferencesId(R.xml.pref_openapsama)
.description(R.string.description_ama),
aapsLogger, rh, injector
), APS {
@ -115,15 +125,34 @@ class OpenAPSAMAPlugin @Inject constructor(
inputConstraints.copyReasons(maxIOBAllowedConstraint)
}.value()
var minBg = hardLimits.verifyHardLimits(Round.roundTo(profile.getTargetLowMgdl(), 0.1), R.string.profile_low_target, HardLimits.VERY_HARD_LIMIT_MIN_BG[0], HardLimits.VERY_HARD_LIMIT_MIN_BG[1])
var maxBg = hardLimits.verifyHardLimits(Round.roundTo(profile.getTargetHighMgdl(), 0.1), R.string.profile_high_target, HardLimits.VERY_HARD_LIMIT_MAX_BG[0], HardLimits.VERY_HARD_LIMIT_MAX_BG[1])
var maxBg =
hardLimits.verifyHardLimits(Round.roundTo(profile.getTargetHighMgdl(), 0.1), R.string.profile_high_target, HardLimits.VERY_HARD_LIMIT_MAX_BG[0], HardLimits.VERY_HARD_LIMIT_MAX_BG[1])
var targetBg = hardLimits.verifyHardLimits(profile.getTargetMgdl(), R.string.temp_target_value, HardLimits.VERY_HARD_LIMIT_TARGET_BG[0], HardLimits.VERY_HARD_LIMIT_TARGET_BG[1])
var isTempTarget = false
val tempTarget = repository.getTemporaryTargetActiveAt(dateUtil.now()).blockingGet()
if (tempTarget is ValueWrapper.Existing) {
isTempTarget = true
minBg = hardLimits.verifyHardLimits(tempTarget.value.lowTarget, R.string.temp_target_low_target, HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[0].toDouble(), HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[1].toDouble())
maxBg = hardLimits.verifyHardLimits(tempTarget.value.highTarget, R.string.temp_target_high_target, HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[0].toDouble(), HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[1].toDouble())
targetBg = hardLimits.verifyHardLimits(tempTarget.value.target(), R.string.temp_target_value, HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0].toDouble(), HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1].toDouble())
minBg =
hardLimits.verifyHardLimits(
tempTarget.value.lowTarget,
R.string.temp_target_low_target,
HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[0].toDouble(),
HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[1].toDouble()
)
maxBg =
hardLimits.verifyHardLimits(
tempTarget.value.highTarget,
R.string.temp_target_high_target,
HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[0].toDouble(),
HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[1].toDouble()
)
targetBg =
hardLimits.verifyHardLimits(
tempTarget.value.target(),
R.string.temp_target_value,
HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0].toDouble(),
HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1].toDouble()
)
}
if (!hardLimits.checkHardLimits(profile.dia, R.string.profile_dia, hardLimits.minDia(), hardLimits.maxDia())) return
if (!hardLimits.checkHardLimits(profile.getIcTimeFromMidnight(Profile.secondsFromMidnight()), R.string.profile_carbs_ratio_value, hardLimits.minIC(), hardLimits.maxIC())) return
@ -145,7 +174,8 @@ class OpenAPSAMAPlugin @Inject constructor(
profiler.log(LTag.APS, "AMA data gathering", start)
start = System.currentTimeMillis()
try {
determineBasalAdapterAMAJS.setData(profile, maxIob, maxBasal, minBg, maxBg, targetBg, activePlugin.activePump.baseBasalRate, iobArray, glucoseStatus, mealData,
determineBasalAdapterAMAJS.setData(
profile, maxIob, maxBasal, minBg, maxBg, targetBg, activePlugin.activePump.baseBasalRate, iobArray, glucoseStatus, mealData,
lastAutosensResult.ratio,
isTempTarget
)
@ -162,7 +192,8 @@ class OpenAPSAMAPlugin @Inject constructor(
lastAPSResult = null
lastAPSRun = 0
} else {
if (determineBasalResultAMA.rate == 0.0 && determineBasalResultAMA.duration == 0 && iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now()) == null) determineBasalResultAMA.tempBasalRequested = false
if (determineBasalResultAMA.rate == 0.0 && determineBasalResultAMA.duration == 0 && iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now()) == null) determineBasalResultAMA.tempBasalRequested =
false
determineBasalResultAMA.iob = iobArray[0]
val now = System.currentTimeMillis()
determineBasalResultAMA.json?.put("timestamp", dateUtil.toISOString(now))

View file

@ -9,7 +9,19 @@ import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.ValueWrapper
import info.nightscout.androidaps.extensions.target
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.interfaces.APS
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.Constraint
import info.nightscout.androidaps.interfaces.Constraints
import info.nightscout.androidaps.interfaces.DetermineBasalAdapterInterface
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.aps.OpenAPSFragment
import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateGui
import info.nightscout.androidaps.plugins.aps.events.EventOpenAPSUpdateResultGui
import info.nightscout.androidaps.plugins.aps.loop.ScriptReader
@ -21,7 +33,6 @@ import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.HardLimits
import info.nightscout.androidaps.utils.Profiler
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
@ -49,7 +60,7 @@ class OpenAPSSMBPlugin @Inject constructor(
) : PluginBase(
PluginDescription()
.mainType(PluginType.APS)
.fragmentClass(OpenAPSSMBFragment::class.java.name)
.fragmentClass(OpenAPSFragment::class.java.name)
.pluginIcon(R.drawable.ic_generic_icon)
.pluginName(R.string.openapssmb)
.shortName(R.string.smb_shortname)

View file

@ -306,7 +306,7 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri
this.profile.put("TDD", tdd)
if (sp.getBoolean(R.string.key_adjust_sensitivity, false) && tdd7D != null)
if (sp.getBoolean(R.string.key_adjust_sensitivity, false) && tdd7D != null && tdd7D != 0.0)
autosensData.put("ratio", tddLast24H / tdd7D)
else
autosensData.put("ratio", 1.0)

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.configBuilder
import androidx.collection.LongSparseArray
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.data.ProfileSealed
@ -11,19 +10,19 @@ import info.nightscout.androidaps.database.transactions.InsertOrUpdateProfileSwi
import info.nightscout.androidaps.events.EventEffectiveProfileSwitchChanged
import info.nightscout.androidaps.extensions.fromConstant
import info.nightscout.androidaps.interfaces.*
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.nsclient.data.DeviceStatusData
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.HardLimits
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
import javax.inject.Singleton
@ -43,7 +42,7 @@ class ProfileFunctionImplementation @Inject constructor(
private val deviceStatusData: DeviceStatusData
) : ProfileFunction {
val cache = LongSparseArray<Profile>()
var cache = ConcurrentHashMap<Long, Profile?>()
private val disposable = CompositeDisposable()
@ -53,16 +52,7 @@ class ProfileFunctionImplementation @Inject constructor(
.observeOn(aapsSchedulers.io)
.subscribe(
{
synchronized(cache) {
for (index in cache.size() - 1 downTo 0) {
if (cache.keyAt(index) > it.startDate) {
aapsLogger.debug(LTag.AUTOSENS, "Removing from profileCache: " + dateUtil.dateAndTimeAndSecondsString(cache.keyAt(index)))
cache.removeAt(index)
} else {
break
}
}
}
synchronized(cache) { cache.keys.removeIf { key -> key > it.startDate } }
}, fabricPrivacy::logException
)
}
@ -98,14 +88,17 @@ class ProfileFunctionImplementation @Inject constructor(
val rounded = time - time % 1000
// Clear cache after longer use
synchronized(cache) {
if (cache.size() > 30000) {
if (cache.keys.size > 30000) {
cache.clear()
aapsLogger.debug("Profile cache cleared")
}
val cached = cache[rounded]
if (cached != null) return cached
if (cache.containsKey(rounded)) {
//aapsLogger.debug(LTag.PROFILE, "Profile cache HIT for $rounded")
return cache[rounded]
}
}
// aapsLogger.debug("getProfile called for $time")
//aapsLogger.debug(LTag.PROFILE, "Profile cache MISS for $rounded")
val ps = repository.getEffectiveProfileSwitchActiveAt(time).blockingGet()
if (ps is ValueWrapper.Existing) {
val sealed = ProfileSealed.EPS(ps.value)
@ -130,6 +123,9 @@ class ProfileFunctionImplementation @Inject constructor(
}
}
synchronized(cache) {
cache.remove(rounded)
}
return null
}
@ -165,7 +161,7 @@ class ProfileFunctionImplementation @Inject constructor(
}
override fun createProfileSwitch(profileStore: ProfileStore, profileName: String, durationInMinutes: Int, percentage: Int, timeShiftInHours: Int, timestamp: Long): Boolean {
val ps = buildProfileSwitch(profileStore, profileName, durationInMinutes, percentage, timeShiftInHours, timestamp) ?: return false
val ps = buildProfileSwitch(profileStore, profileName, durationInMinutes, percentage, timeShiftInHours, timestamp) ?: return false
disposable += repository.runTransactionForResult(InsertOrUpdateProfileSwitch(ps))
.subscribe({ result ->
result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted ProfileSwitch $it") }

View file

@ -245,7 +245,7 @@ class ObjectivesFragment : DaggerFragment() {
rxBus.send(EventSWUpdate(false))
} else {
// move out of UI thread
Thread {
handler.post {
NtpProgressDialog().show((context as AppCompatActivity).supportFragmentManager, "NtpCheck")
rxBus.send(EventNtpStatus(rh.gs(R.string.timedetection), 0))
sntpClient.ntpTime(object : SntpClient.Callback() {
@ -271,7 +271,7 @@ class ObjectivesFragment : DaggerFragment() {
}
}
}, receiverStatusStore.isConnected)
}.start()
}
}
}
holder.binding.start.setOnClickListener {
@ -284,7 +284,7 @@ class ObjectivesFragment : DaggerFragment() {
rxBus.send(EventSWUpdate(false))
} else
// move out of UI thread
Thread {
handler.post {
NtpProgressDialog().show((context as AppCompatActivity).supportFragmentManager, "NtpCheck")
rxBus.send(EventNtpStatus(rh.gs(R.string.timedetection), 0))
sntpClient.ntpTime(object : SntpClient.Callback() {
@ -306,7 +306,7 @@ class ObjectivesFragment : DaggerFragment() {
}
}
}, receiverStatusStore.isConnected)
}.start()
}
}
holder.binding.unstart.setOnClickListener {
activity?.let { activity ->

View file

@ -2,6 +2,8 @@ package info.nightscout.androidaps.plugins.constraints.signatureVerifier
import android.content.Context
import android.content.pm.PackageManager
import android.os.Handler
import android.os.HandlerThread
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.interfaces.Constraint
@ -9,19 +11,25 @@ import info.nightscout.androidaps.interfaces.Constraints
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.sharedPreferences.SP
import org.spongycastle.util.encoders.Hex
import java.io.*
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.net.URL
import java.nio.charset.StandardCharsets
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.util.*
import java.util.Arrays
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Singleton
@ -39,15 +47,18 @@ class SignatureVerifierPlugin @Inject constructor(
private val sp: SP,
private val rxBus: RxBus,
private val context: Context
) : PluginBase(PluginDescription()
.mainType(PluginType.CONSTRAINTS)
.neverVisible(true)
.alwaysEnabled(true)
.showInList(false)
.pluginName(R.string.signature_verifier),
) : PluginBase(
PluginDescription()
.mainType(PluginType.CONSTRAINTS)
.neverVisible(true)
.alwaysEnabled(true)
.showInList(false)
.pluginName(R.string.signature_verifier),
aapsLogger, rh, injector
), Constraints {
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
private val REVOKED_CERTS_URL = "https://raw.githubusercontent.com/nightscout/AndroidAPS/master/app/src/main/assets/revoked_certs.txt"
private val UPDATE_INTERVAL = TimeUnit.DAYS.toMillis(1)
@ -57,7 +68,7 @@ class SignatureVerifierPlugin @Inject constructor(
override fun onStart() {
super.onStart()
revokedCertsFile = File(context.filesDir, "revoked_certs.txt")
Thread(Runnable {
handler.post {
loadLocalRevokedCerts()
if (shouldDownloadCerts()) {
try {
@ -67,7 +78,12 @@ class SignatureVerifierPlugin @Inject constructor(
}
}
if (hasIllegalSignature()) showNotification()
}).start()
}
}
override fun onStop() {
handler.removeCallbacksAndMessages(null)
super.onStop()
}
override fun isLoopInvocationAllowed(value: Constraint<Boolean>): Constraint<Boolean> {
@ -76,13 +92,13 @@ class SignatureVerifierPlugin @Inject constructor(
value.set(aapsLogger, false)
}
if (shouldDownloadCerts()) {
Thread(Runnable {
handler.post {
try {
downloadAndSaveRevokedCerts()
} catch (e: IOException) {
aapsLogger.error("Could not download revoked certs", e)
}
}).start()
}
}
return value
}
@ -143,7 +159,9 @@ class SignatureVerifierPlugin @Inject constructor(
return hashes
}
var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"§$%&/()=?,.-;:_<>|°^`´\\@€*'#+~{}[]¿¡áéíóúàèìòùöäü`ÁÉÍÓÚÀÈÌÒÙÖÄÜßÆÇÊËÎÏԌ۟æçêëîïôœûÿĆČĐŠŽćđšžñΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ\u03A2ΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρςστυφχψωϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗ"
var map =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"§$%&/()=?,.-;:_<>|°^`´\\@€*'#+~{}[]¿¡áéíóúàèìòùöäü`ÁÉÍÓÚÀÈÌÒÙÖÄÜßÆÇÊËÎÏԌ۟æçêëîïôœûÿĆČĐŠŽćđšžñΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ\u03A2ΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρςστυφχψωϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗ"
private fun singleCharMap(array: ByteArray): String {
val sb = StringBuilder()
for (b in array) {

View file

@ -4,6 +4,8 @@ import android.content.Context
import android.graphics.Paint
import android.graphics.Typeface
import android.os.Bundle
import android.os.Handler
import android.os.HandlerThread
import android.text.Editable
import android.text.TextWatcher
import android.view.Gravity
@ -27,7 +29,12 @@ import info.nightscout.androidaps.databinding.AutotuneFragmentBinding
import info.nightscout.androidaps.dialogs.ProfileViewerDialog
import info.nightscout.androidaps.extensions.runOnUiThread
import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.GlucoseUnit
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.ProfileStore
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.automation.elements.InputWeekDay
@ -66,8 +73,8 @@ class AutotuneFragment : DaggerFragment() {
@Inject lateinit var aapsSchedulers: AapsSchedulers
private var disposable: CompositeDisposable = CompositeDisposable()
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
//private val log = LoggerFactory.getLogger(AutotunePlugin::class.java)
private var _binding: AutotuneFragmentBinding? = null
private lateinit var profileStore: ProfileStore
private var profileName = ""
@ -116,9 +123,7 @@ class AutotuneFragment : DaggerFragment() {
binding.autotuneRun.setOnClickListener {
autotunePlugin.lastNbDays = daysBack.toString()
log("Run Autotune $profileName, $daysBack days")
Thread {
autotunePlugin.aapsAutotune(daysBack, false, profileName)
}.start()
handler.post { autotunePlugin.aapsAutotune(daysBack, false, profileName) }
updateGui()
}
@ -307,6 +312,7 @@ class AutotuneFragment : DaggerFragment() {
override fun onPause() {
super.onPause()
disposable.clear()
handler.removeCallbacksAndMessages(null)
}
@Synchronized
@ -486,7 +492,7 @@ class AutotuneFragment : DaggerFragment() {
setTextAppearance(android.R.style.TextAppearance_Material_Medium)
}
)
layout.addView(toTableRowHeader(context,true))
layout.addView(toTableRowHeader(context, true))
var totalPump = 0.0
var totalTuned = 0.0
for (h in 0 until tuned.basal.size) {

View file

@ -15,7 +15,7 @@ import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.JsonHelper
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.sharedPreferences.SP
@ -48,14 +48,14 @@ class FoodPlugin @Inject constructor(
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var repository: AppRepository
@Inject lateinit var sp: SP
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
}
override fun doWork(): Result {
val foods = dataWorker.pickupJSONArray(inputData.getLong(DataWorker.STORE_KEY, -1))
val foods = dataWorkerStorage.pickupJSONArray(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
aapsLogger.debug(LTag.DATABASE, "Received Food Data: $foods")

View file

@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.text.toSpanned
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.SingleFragmentActivity
@ -21,20 +22,24 @@ import info.nightscout.androidaps.interfaces.DataSyncSelector
import info.nightscout.androidaps.interfaces.ImportExportPrefs
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity
import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.database.DashHistoryDatabase
import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.database.ErosHistoryDatabase
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.protection.ProtectionCheck
import info.nightscout.androidaps.utils.protection.ProtectionCheck.Protection.PREFERENCES
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import io.reactivex.rxjava3.core.Completable.fromAction
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.kotlin.subscribeBy
import javax.inject.Inject
@ -58,8 +63,9 @@ class MaintenanceFragment : DaggerFragment() {
@Inject lateinit var pumpSync: PumpSync
@Inject lateinit var iobCobCalculator: IobCobCalculator
@Inject lateinit var overviewData: OverviewData
@Inject lateinit var fabricPrivacy: FabricPrivacy
private val compositeDisposable = CompositeDisposable()
private val disposable = CompositeDisposable()
private var inMenu = false
private var queryingProtection = false
private var _binding: MaintenanceFragmentBinding? = null
@ -79,16 +85,16 @@ class MaintenanceFragment : DaggerFragment() {
updateProtectedUi()
binding.logSend.setOnClickListener { maintenancePlugin.sendLogs() }
binding.logDelete.setOnClickListener {
uel.log(Action.DELETE_LOGS, Sources.Maintenance)
Thread {
maintenancePlugin.deleteLogs(5)
}.start()
disposable +=
Completable.fromAction { maintenancePlugin.deleteLogs(5) }
.subscribeOn(aapsSchedulers.io)
.subscribe({ uel.log(Action.DELETE_LOGS, Sources.Maintenance) }, fabricPrivacy::logException)
}
binding.navResetdb.setOnClickListener {
activity?.let { activity ->
OKDialog.showConfirmation(activity, rh.gs(R.string.maintenance), rh.gs(R.string.reset_db_confirm), Runnable {
compositeDisposable.add(
fromAction {
disposable +=
Completable.fromAction {
repository.clearDatabases()
danaHistoryDatabase.clearAllTables()
insightDatabase.clearAllTables()
@ -104,15 +110,31 @@ class MaintenanceFragment : DaggerFragment() {
.subscribeOn(aapsSchedulers.io)
.subscribeBy(
onError = { aapsLogger.error("Error clearing databases", it) },
onComplete = {
rxBus.send(EventPreferenceChange(rh, R.string.key_units))
}
onComplete = { rxBus.send(EventPreferenceChange(rh, R.string.key_units)) }
)
)
uel.log(Action.RESET_DATABASES, Sources.Maintenance)
})
}
}
binding.cleanupDb.setOnClickListener {
activity?.let { activity ->
var result = ""
OKDialog.showConfirmation(activity, rh.gs(R.string.maintenance), rh.gs(R.string.cleanup_db_confirm), Runnable {
disposable += Completable.fromAction { result = repository.cleanupDatabase(93, deleteTrackedChanges = true) }
.subscribeOn(aapsSchedulers.io)
.observeOn(aapsSchedulers.main)
.subscribeBy(
onError = { aapsLogger.error("Error cleaning up databases", it) },
onComplete = {
if (result.isNotEmpty())
OKDialog.show(activity, rh.gs(R.string.result), HtmlHelper.fromHtml("<b>" + rh.gs(R.string.cleared_entries) + "</b>\n" + result).toSpanned())
aapsLogger.info(LTag.CORE, "Cleaned up databases with result: $result")
}
)
uel.log(Action.CLEANUP_DATABASES, Sources.Maintenance)
})
}
}
binding.navExport.setOnClickListener {
uel.log(Action.EXPORT_SETTINGS, Sources.Maintenance)
// start activity for checking permissions...
@ -148,7 +170,7 @@ class MaintenanceFragment : DaggerFragment() {
@Synchronized
override fun onDestroyView() {
super.onDestroyView()
compositeDisposable.clear()
disposable.clear()
_binding = null
}

View file

@ -50,7 +50,7 @@ class MaintenancePlugin @Inject constructor(
) {
fun sendLogs() {
val recipient = sp.getString(R.string.key_maintenance_logs_email, "logs@androidaps.org")
val recipient = sp.getString(R.string.key_maintenance_logs_email, "logs@aaps.app")
val amount = sp.getInt(R.string.key_maintenance_logs_amount, 2)
val logs = getLogFiles(amount)
val zipDir = fileListProvider.ensureTempDirExists()
@ -69,14 +69,14 @@ class MaintenancePlugin @Inject constructor(
val files = logDir.listFiles { _: File?, name: String ->
(name.startsWith("AndroidAPS") && name.endsWith(".zip"))
}
val autotunefiles = logDir.listFiles { _: File?, name: String ->
val autotuneFiles = logDir.listFiles { _: File?, name: String ->
(name.startsWith("autotune") && name.endsWith(".zip"))
}
val amount = sp.getInt(R.string.key_logshipper_amount, keep)
val keepIndex = amount - 1
if (autotunefiles != null && autotunefiles.isNotEmpty()) {
Arrays.sort(autotunefiles) { f1: File, f2: File -> f2.name.compareTo(f1.name) }
var delAutotuneFiles = listOf(*autotunefiles)
if (autotuneFiles != null && autotuneFiles.isNotEmpty()) {
Arrays.sort(autotuneFiles) { f1: File, f2: File -> f2.name.compareTo(f1.name) }
var delAutotuneFiles = listOf(*autotuneFiles)
if (keepIndex < delAutotuneFiles.size) {
delAutotuneFiles = delAutotuneFiles.subList(keepIndex, delAutotuneFiles.size)
for (file in delAutotuneFiles) {

View file

@ -17,7 +17,7 @@ import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.nsclient.acks.NSAddAck
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientNewLog
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.sharedPreferences.SP
import javax.inject.Inject
@ -27,7 +27,7 @@ class NSClientAddAckWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var repository: AppRepository
@Inject lateinit var rxBus: RxBus
@ -38,7 +38,7 @@ class NSClientAddAckWorker(
override fun doWork(): Result {
var ret = Result.success()
val ack = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as NSAddAck?
val ack = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as NSAddAck?
?: return Result.failure(workDataOf("Error" to "missing input data"))
if (sp.getBoolean(R.string.key_ns_sync_slow, false)) SystemClock.sleep(1000)

View file

@ -23,7 +23,7 @@ import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.JsonHelper
import info.nightscout.androidaps.utils.JsonHelper.safeGetLong
@ -39,7 +39,7 @@ class NSClientAddUpdateWorker(
) : Worker(context, params) {
@Inject lateinit var nsClientPlugin: NSClientPlugin
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var buildHelper: BuildHelper
@Inject lateinit var sp: SP
@ -53,7 +53,7 @@ class NSClientAddUpdateWorker(
@Inject lateinit var xDripBroadcast: XDripBroadcast
override fun doWork(): Result {
val treatments = dataWorker.pickupJSONArray(inputData.getLong(DataWorker.STORE_KEY, -1))
val treatments = dataWorkerStorage.pickupJSONArray(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
var ret = Result.success()

View file

@ -13,7 +13,7 @@ import info.nightscout.androidaps.interfaces.Config
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.plugins.general.nsclient.data.NSMbg
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.shared.sharedPreferences.SP
import javax.inject.Inject
@ -24,7 +24,7 @@ class NSClientMbgWorker(
) : Worker(context, params) {
@Inject lateinit var repository: AppRepository
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var sp: SP
@Inject lateinit var buildHelper: BuildHelper
@ -36,7 +36,7 @@ class NSClientMbgWorker(
val acceptNSData = sp.getBoolean(R.string.key_ns_receive_therapy_events, false) || config.NSCLIENT
if (!acceptNSData) return Result.success(workDataOf("Result" to "Sync not enabled"))
val mbgArray = dataWorker.pickupJSONArray(inputData.getLong(DataWorker.STORE_KEY, -1))
val mbgArray = dataWorkerStorage.pickupJSONArray(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
for (i in 0 until mbgArray.length()) {
val nsMbg = NSMbg(mbgArray.getJSONObject(i))

View file

@ -12,7 +12,7 @@ import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.nsclient.acks.NSUpdateAck
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientNewLog
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import javax.inject.Inject
@ -21,7 +21,7 @@ class NSClientUpdateRemoveAckWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var repository: AppRepository
@Inject lateinit var rxBus: RxBus
@ -31,7 +31,7 @@ class NSClientUpdateRemoveAckWorker(
override fun doWork(): Result {
var ret = Result.success()
val ack = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as NSUpdateAck?
val ack = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as NSUpdateAck?
?: return Result.failure(workDataOf("Error" to "missing input data"))
// new room way

View file

@ -16,6 +16,7 @@ class DeviceStatusData @Inject constructor() {
var voltage = 0.0
var status = "N/A"
var reservoir = 0.0
var reservoirDisplayOverride = ""
var extended: Spanned? = null
var activeProfileName: String? = null
}

View file

@ -168,16 +168,20 @@ class NSDeviceStatus @Inject constructor(
pumpData.clock + nsSettingsStatus.extendedPumpSettings("urgentClock") * 60 * 1000L < dateUtil.now() -> Levels.URGENT
pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("urgentRes") -> Levels.URGENT
pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("urgentBattP") -> Levels.URGENT
!pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("urgentBattV") -> Levels.URGENT
!pumpData.isPercent && pumpData.voltage > 0 && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("urgentBattV") -> Levels.URGENT
pumpData.clock + nsSettingsStatus.extendedPumpSettings("warnClock") * 60 * 1000L < dateUtil.now() -> Levels.WARN
pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("warnRes") -> Levels.WARN
pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("warnBattP") -> Levels.WARN
!pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> Levels.WARN
!pumpData.isPercent && pumpData.voltage > 0 && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> Levels.WARN
else -> Levels.INFO
}
string.append("<span style=\"color:${level.toColor()}\">")
val insulinUnit = rh.gs(R.string.insulin_unit_shortname)
val fields = nsSettingsStatus.pumpExtendedSettingsFields()
if (fields.contains("reservoir")) string.append(pumpData.reservoir.toInt()).append("U ")
if (pumpData.reservoirDisplayOverride != "") {
string.append(pumpData.reservoirDisplayOverride).append("$insulinUnit ")
}
else if (fields.contains("reservoir")) string.append(pumpData.reservoir.toInt()).append("$insulinUnit ")
if (fields.contains("battery") && pumpData.isPercent) string.append(pumpData.percent).append("% ")
if (fields.contains("battery") && !pumpData.isPercent) string.append(Round.roundTo(pumpData.voltage, 0.001)).append(" ")
if (fields.contains("clock")) string.append(dateUtil.minAgo(rh, pumpData.clock)).append(" ")
@ -200,6 +204,7 @@ class NSDeviceStatus @Inject constructor(
deviceStatusPumpData.clock = clock
if (pump.has("status") && pump.getJSONObject("status").has("status")) deviceStatusPumpData.status = pump.getJSONObject("status").getString("status")
if (pump.has("reservoir")) deviceStatusPumpData.reservoir = pump.getDouble("reservoir")
if (pump.has("reservoir_display_override")) deviceStatusPumpData.reservoirDisplayOverride = pump.getString("reservoir_display_override")
if (pump.has("battery") && pump.getJSONObject("battery").has("percent")) {
deviceStatusPumpData.isPercent = true
deviceStatusPumpData.percent = pump.getJSONObject("battery").getInt("percent")

View file

@ -42,7 +42,7 @@ import info.nightscout.androidaps.plugins.general.overview.notifications.Notific
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
import info.nightscout.androidaps.plugins.source.NSClientSourcePlugin.NSClientSourceWorker
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.JsonHelper.safeGetString
@ -79,7 +79,7 @@ class NSClientService : DaggerService() {
@Inject lateinit var buildHelper: BuildHelper
@Inject lateinit var config: Config
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var dataSyncSelector: DataSyncSelector
@Inject lateinit var repository: AppRepository
@ -177,18 +177,18 @@ class NSClientService : DaggerService() {
private fun processAddAck(ack: NSAddAck) {
lastAckTime = dateUtil.now()
dataWorker.enqueue(
dataWorkerStorage.enqueue(
OneTimeWorkRequest.Builder(NSClientAddAckWorker::class.java)
.setInputData(dataWorker.storeInputData(ack))
.setInputData(dataWorkerStorage.storeInputData(ack))
.build()
)
}
private fun processUpdateAck(ack: NSUpdateAck) {
lastAckTime = dateUtil.now()
dataWorker.enqueue(
dataWorkerStorage.enqueue(
OneTimeWorkRequest.Builder(NSClientUpdateRemoveAckWorker::class.java)
.setInputData(dataWorker.storeInputData(ack))
.setInputData(dataWorkerStorage.storeInputData(ack))
.build()
)
}
@ -466,9 +466,9 @@ class NSClientService : DaggerService() {
// take the newest
val profileStoreJson = profiles[profiles.length() - 1] as JSONObject
rxBus.send(EventNSClientNewLog("PROFILE", "profile received"))
dataWorker.enqueue(
dataWorkerStorage.enqueue(
OneTimeWorkRequest.Builder(LocalProfilePlugin.NSProfileWorker::class.java)
.setInputData(dataWorker.storeInputData(profileStoreJson))
.setInputData(dataWorkerStorage.storeInputData(profileStoreJson))
.build()
)
}
@ -484,9 +484,9 @@ class NSClientService : DaggerService() {
else if (action == "update") addedOrUpdatedTreatments.put(jsonTreatment)
}
if (addedOrUpdatedTreatments.length() > 0) {
dataWorker.enqueue(
dataWorkerStorage.enqueue(
OneTimeWorkRequest.Builder(NSClientAddUpdateWorker::class.java)
.setInputData(dataWorker.storeInputData(addedOrUpdatedTreatments))
.setInputData(dataWorkerStorage.storeInputData(addedOrUpdatedTreatments))
.build()
)
}
@ -501,18 +501,18 @@ class NSClientService : DaggerService() {
if (data.has("food")) {
val foods = data.getJSONArray("food")
if (foods.length() > 0) rxBus.send(EventNSClientNewLog("DATA", "received " + foods.length() + " foods"))
dataWorker.enqueue(
dataWorkerStorage.enqueue(
OneTimeWorkRequest.Builder(FoodWorker::class.java)
.setInputData(dataWorker.storeInputData(foods))
.setInputData(dataWorkerStorage.storeInputData(foods))
.build()
)
}
if (data.has("mbgs")) {
val mbgArray = data.getJSONArray("mbgs")
if (mbgArray.length() > 0) rxBus.send(EventNSClientNewLog("DATA", "received " + mbgArray.length() + " mbgs"))
dataWorker.enqueue(
dataWorkerStorage.enqueue(
OneTimeWorkRequest.Builder(NSClientMbgWorker::class.java)
.setInputData(dataWorker.storeInputData(mbgArray))
.setInputData(dataWorkerStorage.storeInputData(mbgArray))
.build()
)
}
@ -527,9 +527,9 @@ class NSClientService : DaggerService() {
rxBus.send(EventNSClientNewLog("DATA", "received " + sgvs.length() + " sgvs"))
// Objective0
sp.putBoolean(R.string.key_ObjectivesbgIsAvailableInNS, true)
dataWorker.enqueue(
dataWorkerStorage.enqueue(
OneTimeWorkRequest.Builder(NSClientSourceWorker::class.java)
.setInputData(dataWorker.storeInputData(sgvs))
.setInputData(dataWorkerStorage.storeInputData(sgvs))
.build()
)
}

View file

@ -35,13 +35,42 @@ import info.nightscout.androidaps.database.entities.UserEntry.Action
import info.nightscout.androidaps.database.entities.UserEntry.Sources
import info.nightscout.androidaps.database.interfaces.end
import info.nightscout.androidaps.databinding.OverviewFragmentBinding
import info.nightscout.androidaps.dialogs.*
import info.nightscout.androidaps.events.*
import info.nightscout.androidaps.dialogs.CalibrationDialog
import info.nightscout.androidaps.dialogs.CarbsDialog
import info.nightscout.androidaps.dialogs.InsulinDialog
import info.nightscout.androidaps.dialogs.LoopDialog
import info.nightscout.androidaps.dialogs.ProfileSwitchDialog
import info.nightscout.androidaps.dialogs.ProfileViewerDialog
import info.nightscout.androidaps.dialogs.TempTargetDialog
import info.nightscout.androidaps.dialogs.TreatmentDialog
import info.nightscout.androidaps.dialogs.WizardDialog
import info.nightscout.androidaps.events.EventAcceptOpenLoopChange
import info.nightscout.androidaps.events.EventEffectiveProfileSwitchChanged
import info.nightscout.androidaps.events.EventExtendedBolusChange
import info.nightscout.androidaps.events.EventMobileToWear
import info.nightscout.androidaps.events.EventNewBG
import info.nightscout.androidaps.events.EventPreferenceChange
import info.nightscout.androidaps.events.EventPumpStatusChanged
import info.nightscout.androidaps.events.EventRefreshOverview
import info.nightscout.androidaps.events.EventScale
import info.nightscout.androidaps.events.EventTempBasalChange
import info.nightscout.androidaps.events.EventTempTargetChange
import info.nightscout.androidaps.extensions.directionToIcon
import info.nightscout.androidaps.extensions.runOnUiThread
import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.androidaps.extensions.valueToUnitsString
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.androidaps.interfaces.CommandQueue
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.interfaces.Constraint
import info.nightscout.androidaps.interfaces.GlucoseUnit
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.Loop
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.aps.loop.events.EventNewOpenLoopNotification
import info.nightscout.androidaps.plugins.aps.openAPSSMB.DetermineBasalResultSMB
@ -81,7 +110,7 @@ import info.nightscout.shared.sharedPreferences.SP
import info.nightscout.shared.weardata.EventData
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import java.util.*
import java.util.Locale
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlin.math.abs
@ -346,19 +375,23 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
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,
@ -417,7 +450,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
uel.log(Action.ACCEPTS_TEMP_BASAL, Sources.Overview)
(context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?)?.cancel(Constants.notificationID)
rxBus.send(EventMobileToWear(EventData.CancelNotification(dateUtil.now())))
Thread { loop.acceptChangeRequest() }.start()
handler.post { loop.acceptChangeRequest() }
binding.buttonsLayout.acceptTempButton.visibility = View.GONE
})
})

View file

@ -43,13 +43,15 @@ class StatusLightHandler @Inject constructor(
if (pump.pumpDescription.isBatteryReplaceable || pump.isBatteryChangeLoggingEnabled()) {
handleAge(careportal_pb_age, TherapyEvent.Type.PUMP_BATTERY_CHANGE, R.string.key_statuslights_bage_warning, 216.0, R.string.key_statuslights_bage_critical, 240.0)
}
val insulinUnit = rh.gs(R.string.insulin_unit_shortname)
if (pump.model() == PumpType.OMNIPOD_EROS || pump.model() == PumpType.OMNIPOD_DASH) {
handleOmnipodReservoirLevel(careportal_reservoir_level, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, insulinUnit)
} else {
handleLevel(careportal_reservoir_level, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, insulinUnit)
}
if (!config.NSCLIENT) {
val insulinUnit = rh.gs(R.string.insulin_unit_shortname)
if (pump.model() == PumpType.OMNIPOD_EROS || pump.model() == PumpType.OMNIPOD_DASH) {
handleOmnipodReservoirLevel(careportal_reservoir_level, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, insulinUnit)
} else {
handleLevel(careportal_reservoir_level, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, insulinUnit)
}
if (bgSource.sensorBatteryLevel != -1)
handleLevel(careportal_sensor_battery_level, R.string.key_statuslights_sbat_critical, 5.0, R.string.key_statuslights_sbat_warning, 20.0, bgSource.sensorBatteryLevel.toDouble(), "%")
else
@ -94,7 +96,7 @@ class StatusLightHandler @Inject constructor(
// Omnipod only reports reservoir level when it's 50 units or less, so we display "50+U" for any value > 50
@Suppress("SameParameterValue")
private fun handleOmnipodReservoirLevel(view: TextView?, criticalSetting: Int, criticalDefaultValue: Double, warnSetting: Int, warnDefaultValue: Double, level: Double, units: String) {
if (level > OmnipodConstants.MAX_RESERVOIR_READING) {
if (level >= OmnipodConstants.MAX_RESERVOIR_READING) {
@Suppress("SetTextI18n")
view?.text = " 50+$units"
view?.setTextColor(rh.gac(view.context, R.attr.defaultTextColor))

View file

@ -4,6 +4,7 @@ import android.content.Context
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.database.entities.EffectiveProfileSwitch
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.T
class EffectiveProfileSwitchDataPoint(
val data: EffectiveProfileSwitch,
@ -14,7 +15,11 @@ class EffectiveProfileSwitchDataPoint(
override fun getX(): Double = data.timestamp.toDouble()
override fun getY(): Double = scale.transform(data.originalPercentage.toDouble())
override fun setY(y: Double) {}
override val label get() = if (data.originalPercentage != 100) data.originalPercentage.toString() + "%" else ""
override val label
get() = "" +
(if (data.originalPercentage != 100) "${data.originalPercentage}%" else "") +
(if (data.originalPercentage != 100 && data.originalTimeshift != 0L) "," else "") +
(if (data.originalTimeshift != 0L) (T.msecs(data.originalTimeshift).hours().toString() + rh.gs(R.string.shorthour)) else "")
override val duration = 0L
override val shape = PointsWithLabelGraphSeries.Shape.PROFILE
override val size = 2f

View file

@ -26,6 +26,16 @@ class Sms {
sent = true
}
internal constructor(other: Sms, number: String? = null) {
phoneNumber = number ?: other.phoneNumber
text = other.text
date = other.date
received = other.received
sent = other.sent
processed = other.processed
ignored = other.ignored
}
override fun toString(): String {
return "SMS from $phoneNumber: $text"
}

View file

@ -41,7 +41,7 @@ import info.nightscout.androidaps.plugins.general.smsCommunicator.events.EventSm
import info.nightscout.androidaps.plugins.general.smsCommunicator.otp.OneTimePassword
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.*
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
@ -178,7 +178,7 @@ class SmsCommunicatorPlugin @Inject constructor(
) : Worker(context, params) {
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
@ -186,7 +186,7 @@ class SmsCommunicatorPlugin @Inject constructor(
@Suppress("SpellCheckingInspection")
override fun doWork(): Result {
val bundle = dataWorker.pickupBundle(inputData.getLong(DataWorker.STORE_KEY, -1))
val bundle = dataWorkerStorage.pickupBundle(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
val format = bundle.getString("format")
?: return Result.failure(workDataOf("Error" to "missing format in input data"))
@ -1095,8 +1095,7 @@ class SmsCommunicatorPlugin @Inject constructor(
private fun sendSMSToAllNumbers(sms: Sms) {
for (number in allowedNumbers) {
sms.phoneNumber = number
sendSMS(sms)
sendSMS(Sms(sms, number))
}
}

View file

@ -24,7 +24,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensData
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.plugins.sensitivity.SensitivityAAPSPlugin
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.FabricPrivacy
@ -62,7 +62,7 @@ class IobCobOref1Worker(
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var repository: AppRepository
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var calculationWorkflow: CalculationWorkflow
init {
@ -80,7 +80,7 @@ class IobCobOref1Worker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as IobCobOref1WorkerData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as IobCobOref1WorkerData?
?: return Result.success(workDataOf("Error" to "missing input data"))
val start = dateUtil.now()

View file

@ -22,7 +22,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensData
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.plugins.sensitivity.SensitivityAAPSPlugin
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.FabricPrivacy
@ -59,7 +59,7 @@ class IobCobOrefWorker @Inject internal constructor(
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var repository: AppRepository
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
@ -75,7 +75,7 @@ class IobCobOrefWorker @Inject internal constructor(
)
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as IobCobOrefWorkerData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as IobCobOrefWorkerData?
?: return Result.success(workDataOf("Error" to "missing input data"))
val start = dateUtil.now()

View file

@ -22,7 +22,7 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotifi
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.*
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.interfaces.ResourceHelper
@ -457,7 +457,7 @@ class LocalProfilePlugin @Inject constructor(
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var rxBus: RxBus
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var sp: SP
@Inject lateinit var config: Config
@Inject lateinit var localProfilePlugin: LocalProfilePlugin
@ -468,7 +468,7 @@ class LocalProfilePlugin @Inject constructor(
}
override fun doWork(): Result {
val profileJson = dataWorker.pickupJSONObject(inputData.getLong(DataWorker.STORE_KEY, -1))
val profileJson = dataWorkerStorage.pickupJSONObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
xDripBroadcast.sendProfile(profileJson)
if (sp.getBoolean(R.string.key_ns_receive_profile_store, true) || config.NSCLIENT) {

View file

@ -5,20 +5,44 @@ import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.ValueWrapper
import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.database.entities.*
import info.nightscout.androidaps.database.transactions.*
import info.nightscout.androidaps.database.entities.Bolus
import info.nightscout.androidaps.database.entities.Carbs
import info.nightscout.androidaps.database.entities.ExtendedBolus
import info.nightscout.androidaps.database.entities.TemporaryBasal
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.database.entities.TotalDailyDose
import info.nightscout.androidaps.database.entities.UserEntry
import info.nightscout.androidaps.database.entities.ValueWithUnit
import info.nightscout.androidaps.database.transactions.InsertBolusWithTempIdTransaction
import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampCarbsTransaction
import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampTherapyEventTransaction
import info.nightscout.androidaps.database.transactions.InsertTemporaryBasalWithTempIdTransaction
import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction
import info.nightscout.androidaps.database.transactions.InvalidateTemporaryBasalTransaction
import info.nightscout.androidaps.database.transactions.InvalidateTemporaryBasalTransactionWithPumpId
import info.nightscout.androidaps.database.transactions.InvalidateTemporaryBasalWithTempIdTransaction
import info.nightscout.androidaps.database.transactions.SyncBolusWithTempIdTransaction
import info.nightscout.androidaps.database.transactions.SyncPumpBolusTransaction
import info.nightscout.androidaps.database.transactions.SyncPumpCancelExtendedBolusIfAnyTransaction
import info.nightscout.androidaps.database.transactions.SyncPumpCancelTemporaryBasalIfAnyTransaction
import info.nightscout.androidaps.database.transactions.SyncPumpExtendedBolusTransaction
import info.nightscout.androidaps.database.transactions.SyncPumpTemporaryBasalTransaction
import info.nightscout.androidaps.database.transactions.SyncPumpTotalDailyDoseTransaction
import info.nightscout.androidaps.database.transactions.SyncTemporaryBasalWithTempIdTransaction
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
@ -32,7 +56,8 @@ class PumpSyncImplementation @Inject constructor(
private val rh: ResourceHelper,
private val profileFunction: ProfileFunction,
private val repository: AppRepository,
private val uel: UserEntryLogger
private val uel: UserEntryLogger,
private val activePlugin: ActivePlugin
) : PumpSync {
private val disposable = CompositeDisposable()
@ -51,6 +76,15 @@ class PumpSyncImplementation @Inject constructor(
sp.remove(R.string.key_active_pump_change_timestamp)
}
override fun verifyPumpIdentification(type: PumpType, serialNumber: String): Boolean {
val storedType = sp.getString(R.string.key_active_pump_type, "")
val storedSerial = sp.getString(R.string.key_active_pump_serial_number, "")
if (activePlugin.activePump is VirtualPumpPlugin) return true
if (type.description == storedType && serialNumber == storedSerial) return true
aapsLogger.debug(LTag.PUMP, "verifyPumpIdentification failed for $type $serialNumber")
return false
}
/**
* Check if data is coming from currently active pump to prevent overlapping pump histories
*
@ -73,14 +107,19 @@ class PumpSyncImplementation @Inject constructor(
return timestamp > dateUtil.now() - T.mins(1).msecs() // allow first record to be 1 min old
}
if (type.description == storedType && serialNumber == storedSerial && timestamp >= storedTimestamp) {
if (activePlugin.activePump is VirtualPumpPlugin || (type.description == storedType && serialNumber == storedSerial && timestamp >= storedTimestamp)) {
// data match
return true
}
if (showNotification && (type.description != storedType || serialNumber != storedSerial) && timestamp >= storedTimestamp)
rxBus.send(EventNewNotification(Notification(Notification.WRONG_PUMP_DATA, rh.gs(R.string.wrong_pump_data), Notification.URGENT)))
aapsLogger.error(LTag.PUMP, "Ignoring pump history record Allowed: ${dateUtil.dateAndTimeAndSecondsString(storedTimestamp)} $storedType $storedSerial Received: $timestamp ${dateUtil.dateAndTimeAndSecondsString(timestamp)} ${type.description} $serialNumber")
aapsLogger.error(
LTag.PUMP,
"Ignoring pump history record Allowed: ${dateUtil.dateAndTimeAndSecondsString(storedTimestamp)} $storedType $storedSerial Received: $timestamp ${
dateUtil.dateAndTimeAndSecondsString(timestamp)
} ${type.description} $serialNumber"
)
return false
}
@ -100,7 +139,7 @@ class PumpSyncImplementation @Inject constructor(
isAbsolute = temporaryBasal.value.isAbsolute,
type = PumpSync.TemporaryBasalType.fromDbType(temporaryBasal.value.type),
pumpId = temporaryBasal.value.interfaceIDs.pumpId,
pumpType = temporaryBasal.value.interfaceIDs.pumpType?.let { PumpType.fromDbPumpType(it)} ?: PumpType.USER,
pumpType = temporaryBasal.value.interfaceIDs.pumpType?.let { PumpType.fromDbPumpType(it) } ?: PumpType.USER,
pumpSerial = temporaryBasal.value.interfaceIDs.pumpSerial ?: "",
)
else null,
@ -111,7 +150,7 @@ class PumpSyncImplementation @Inject constructor(
duration = extendedBolus.value.duration,
amount = extendedBolus.value.amount,
rate = extendedBolus.value.rate,
pumpType = extendedBolus.value.interfaceIDs.pumpType?.let { PumpType.fromDbPumpType(it)} ?: PumpType.USER,
pumpType = extendedBolus.value.interfaceIDs.pumpType?.let { PumpType.fromDbPumpType(it) } ?: PumpType.USER,
pumpSerial = extendedBolus.value.interfaceIDs.pumpSerial ?: ""
)
else null,
@ -203,7 +242,8 @@ class PumpSyncImplementation @Inject constructor(
interfaceIDs_backing = InterfaceIDs(
pumpId = pumpId,
pumpType = pumpType.toDbPumpType(),
pumpSerial = pumpSerial)
pumpSerial = pumpSerial
)
)
repository.runTransactionForResult(InsertIfNewByTimestampCarbsTransaction(carbs))
.doOnError { aapsLogger.error(LTag.DATABASE, "Error while saving Carbs", it) }
@ -228,7 +268,8 @@ class PumpSyncImplementation @Inject constructor(
interfaceIDs_backing = InterfaceIDs(
pumpId = pumpId,
pumpType = pumpType.toDbPumpType(),
pumpSerial = pumpSerial)
pumpSerial = pumpSerial
)
)
uel.log(UserEntry.Action.CAREPORTAL, pumpType.source, note, ValueWithUnit.Timestamp(timestamp), ValueWithUnit.TherapyEventType(type.toDBbEventType()))
repository.runTransactionForResult(InsertIfNewByTimestampTherapyEventTransaction(therapyEvent))
@ -252,7 +293,16 @@ class PumpSyncImplementation @Inject constructor(
* TEMPORARY BASALS
*/
override fun syncTemporaryBasalWithPumpId(timestamp: Long, rate: Double, duration: Long, isAbsolute: Boolean, type: PumpSync.TemporaryBasalType?, pumpId: Long, pumpType: PumpType, pumpSerial: String): Boolean {
override fun syncTemporaryBasalWithPumpId(
timestamp: Long,
rate: Double,
duration: Long,
isAbsolute: Boolean,
type: PumpSync.TemporaryBasalType?,
pumpId: Long,
pumpType: PumpType,
pumpSerial: String
): Boolean {
if (!confirmActivePump(timestamp, pumpType, pumpSerial)) return false
val temporaryBasal = TemporaryBasal(
timestamp = timestamp,
@ -289,7 +339,16 @@ class PumpSyncImplementation @Inject constructor(
}
}
override fun addTemporaryBasalWithTempId(timestamp: Long, rate: Double, duration: Long, isAbsolute: Boolean, tempId: Long, type: PumpSync.TemporaryBasalType, pumpType: PumpType, pumpSerial: String): Boolean {
override fun addTemporaryBasalWithTempId(
timestamp: Long,
rate: Double,
duration: Long,
isAbsolute: Boolean,
tempId: Long,
type: PumpSync.TemporaryBasalType,
pumpType: PumpType,
pumpSerial: String
): Boolean {
if (!confirmActivePump(timestamp, pumpType, pumpSerial)) return false
val temporaryBasal = TemporaryBasal(
timestamp = timestamp,
@ -312,7 +371,17 @@ class PumpSyncImplementation @Inject constructor(
}
}
override fun syncTemporaryBasalWithTempId(timestamp: Long, rate: Double, duration: Long, isAbsolute: Boolean, temporaryId: Long, type: PumpSync.TemporaryBasalType?, pumpId: Long?, pumpType: PumpType, pumpSerial: String): Boolean {
override fun syncTemporaryBasalWithTempId(
timestamp: Long,
rate: Double,
duration: Long,
isAbsolute: Boolean,
temporaryId: Long,
type: PumpSync.TemporaryBasalType?,
pumpId: Long?,
pumpType: PumpType,
pumpSerial: String
): Boolean {
if (!confirmActivePump(timestamp, pumpType, pumpSerial)) return false
val bolus = TemporaryBasal(
timestamp = timestamp,
@ -349,8 +418,12 @@ class PumpSyncImplementation @Inject constructor(
}
override fun invalidateTemporaryBasalWithPumpId(pumpId: Long, pumpType: PumpType, pumpSerial: String): Boolean {
repository.runTransactionForResult(InvalidateTemporaryBasalTransactionWithPumpId(pumpId, pumpType.toDbPumpType(),
pumpSerial))
repository.runTransactionForResult(
InvalidateTemporaryBasalTransactionWithPumpId(
pumpId, pumpType.toDbPumpType(),
pumpSerial
)
)
.doOnError { aapsLogger.error(LTag.DATABASE, "Error while invalidating TemporaryBasal", it) }
.blockingGet()
.also { result ->

View file

@ -7,10 +7,22 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.data.PumpEnactResult
import info.nightscout.androidaps.dialogs.BolusProgressDialog
import info.nightscout.androidaps.events.EventPreferenceChange
import info.nightscout.androidaps.extensions.convertedToAbsolute
import info.nightscout.androidaps.extensions.plannedRemainingMinutes
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.interfaces.CommandQueue
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.Pump
import info.nightscout.androidaps.interfaces.PumpDescription
import info.nightscout.androidaps.interfaces.PumpPluginBase
import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.common.ManufacturerType
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
@ -23,7 +35,6 @@ import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.InstanceId
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.TimeChangeType
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
@ -170,6 +181,7 @@ open class VirtualPumpPlugin @Inject constructor(
.enacted(detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0)
.comment(rh.gs(R.string.virtualpump_resultok))
val bolusingEvent = EventOverviewBolusProgress
bolusingEvent.t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id)
var delivering = 0.0
while (delivering < detailedBolusInfo.insulin) {
SystemClock.sleep(200)
@ -177,6 +189,11 @@ open class VirtualPumpPlugin @Inject constructor(
bolusingEvent.percent = min((delivering / detailedBolusInfo.insulin * 100).toInt(), 100)
rxBus.send(bolusingEvent)
delivering += 0.1
if (BolusProgressDialog.stopPressed)
return PumpEnactResult(injector)
.success(false)
.enacted(false)
.comment(rh.gs(R.string.stoppressed))
}
SystemClock.sleep(200)
bolusingEvent.status = rh.gs(R.string.bolusdelivered, detailedBolusInfo.insulin)
@ -361,7 +378,7 @@ open class VirtualPumpPlugin @Inject constructor(
return pump
}
override fun manufacturer(): ManufacturerType = pumpDescription.pumpType.manufacturer ?: ManufacturerType.AndroidAPS
override fun manufacturer(): ManufacturerType = pumpDescription.pumpType.manufacturer ?: ManufacturerType.AAPS
override fun model(): PumpType = pumpDescription.pumpType

View file

@ -11,7 +11,7 @@ import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.GlucoseValue
import info.nightscout.androidaps.database.transactions.CgmSourceTransaction
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.receivers.Intents
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.shared.logging.AAPSLogger
@ -62,7 +62,7 @@ class AidexPlugin @Inject constructor(
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var aidexPlugin: AidexPlugin
@Inject lateinit var repository: AppRepository
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
@ -72,7 +72,7 @@ class AidexPlugin @Inject constructor(
var ret = Result.success()
if (!aidexPlugin.isEnabled()) return Result.success(workDataOf("Result" to "Plugin not enabled"))
val bundle = dataWorker.pickupBundle(inputData.getLong(DataWorker.STORE_KEY, -1))
val bundle = dataWorkerStorage.pickupBundle(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
aapsLogger.debug(LTag.BGSOURCE, "Received Aidex data: $bundle")

View file

@ -28,7 +28,7 @@ import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.XDripBroadcast
@ -91,7 +91,7 @@ class DexcomPlugin @Inject constructor(
@Inject lateinit var dexcomPlugin: DexcomPlugin
@Inject lateinit var sp: SP
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var xDripBroadcast: XDripBroadcast
@Inject lateinit var repository: AppRepository
@Inject lateinit var uel: UserEntryLogger
@ -104,7 +104,7 @@ class DexcomPlugin @Inject constructor(
var ret = Result.success()
if (!dexcomPlugin.isEnabled()) return Result.success(workDataOf("Result" to "Plugin not enabled"))
val bundle = dataWorker.pickupBundle(inputData.getLong(DataWorker.STORE_KEY, -1))
val bundle = dataWorkerStorage.pickupBundle(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
try {
val sourceSensor = when (bundle.getString("sensorType") ?: "") {

View file

@ -17,7 +17,7 @@ import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.XDripBroadcast
import info.nightscout.androidaps.interfaces.ResourceHelper
@ -58,7 +58,7 @@ class EversensePlugin @Inject constructor(
@Inject lateinit var eversensePlugin: EversensePlugin
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var repository: AppRepository
@Inject lateinit var xDripBroadcast: XDripBroadcast
@ -70,7 +70,7 @@ class EversensePlugin @Inject constructor(
var ret = Result.success()
if (!eversensePlugin.isEnabled()) return Result.success(workDataOf("Result" to "Plugin not enabled"))
val bundle = dataWorker.pickupBundle(inputData.getLong(DataWorker.STORE_KEY, -1))
val bundle = dataWorkerStorage.pickupBundle(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
if (bundle.containsKey("currentCalibrationPhase")) aapsLogger.debug(LTag.BGSOURCE, "currentCalibrationPhase: " + bundle.getString("currentCalibrationPhase"))
if (bundle.containsKey("placementModeInProgress")) aapsLogger.debug(LTag.BGSOURCE, "placementModeInProgress: " + bundle.getBoolean("placementModeInProgress"))

View file

@ -15,7 +15,7 @@ import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.XDripBroadcast
import info.nightscout.androidaps.interfaces.ResourceHelper
@ -50,7 +50,7 @@ class MM640gPlugin @Inject constructor(
@Inject lateinit var injector: HasAndroidInjector
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var repository: AppRepository
@Inject lateinit var xDripBroadcast: XDripBroadcast

View file

@ -21,7 +21,7 @@ import info.nightscout.androidaps.plugins.general.nsclient.NSClientPlugin
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSgv
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.XDripBroadcast
@ -89,7 +89,7 @@ class NSClientSourcePlugin @Inject constructor(
@Inject lateinit var sp: SP
@Inject lateinit var rxBus: RxBus
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var repository: AppRepository
@Inject lateinit var xDripBroadcast: XDripBroadcast
@Inject lateinit var dexcomPlugin: DexcomPlugin
@ -115,7 +115,7 @@ class NSClientSourcePlugin @Inject constructor(
@Suppress("SpellCheckingInspection")
override fun doWork(): Result {
var ret = Result.success()
val sgvs = dataWorker.pickupJSONArray(inputData.getLong(DataWorker.STORE_KEY, -1))
val sgvs = dataWorkerStorage.pickupJSONArray(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
xDripBroadcast.sendSgvs(sgvs)
if (!nsClientSourcePlugin.isEnabled() && !sp.getBoolean(R.string.key_ns_receive_cgm, false))

View file

@ -15,7 +15,7 @@ import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.receivers.Intents
import info.nightscout.androidaps.interfaces.ResourceHelper
import javax.inject.Inject
@ -64,7 +64,7 @@ class XdripPlugin @Inject constructor(
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var xdripPlugin: XdripPlugin
@Inject lateinit var repository: AppRepository
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
@ -74,7 +74,7 @@ class XdripPlugin @Inject constructor(
var ret = Result.success()
if (!xdripPlugin.isEnabled()) return Result.success(workDataOf("Result" to "Plugin not enabled"))
val bundle = dataWorker.pickupBundle(inputData.getLong(DataWorker.STORE_KEY, -1))
val bundle = dataWorkerStorage.pickupBundle(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
aapsLogger.debug(LTag.BGSOURCE, "Received xDrip data: $bundle")

View file

@ -19,7 +19,7 @@ import javax.inject.Inject
open class DataReceiver : DaggerBroadcastReceiver() {
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
@ -29,7 +29,7 @@ open class DataReceiver : DaggerBroadcastReceiver() {
when (intent.action) {
Intents.ACTION_NEW_BG_ESTIMATE ->
OneTimeWorkRequest.Builder(XdripPlugin.XdripWorker::class.java)
.setInputData(dataWorker.storeInputData(bundle, intent.action)).build()
.setInputData(dataWorkerStorage.storeInputData(bundle, intent.action)).build()
Intents.POCTECH_BG ->
OneTimeWorkRequest.Builder(PoctechPlugin.PoctechWorker::class.java)
.setInputData(Data.Builder().also {
@ -57,18 +57,18 @@ open class DataReceiver : DaggerBroadcastReceiver() {
}.build()).build()
Telephony.Sms.Intents.SMS_RECEIVED_ACTION ->
OneTimeWorkRequest.Builder(SmsCommunicatorPlugin.SmsCommunicatorWorker::class.java)
.setInputData(dataWorker.storeInputData(bundle, intent.action)).build()
.setInputData(dataWorkerStorage.storeInputData(bundle, intent.action)).build()
Intents.EVERSENSE_BG ->
OneTimeWorkRequest.Builder(EversensePlugin.EversenseWorker::class.java)
.setInputData(dataWorker.storeInputData(bundle, intent.action)).build()
.setInputData(dataWorkerStorage.storeInputData(bundle, intent.action)).build()
Intents.DEXCOM_BG ->
OneTimeWorkRequest.Builder(DexcomPlugin.DexcomWorker::class.java)
.setInputData(dataWorker.storeInputData(bundle, intent.action)).build()
.setInputData(dataWorkerStorage.storeInputData(bundle, intent.action)).build()
Intents.AIDEX_NEW_BG_ESTIMATE ->
OneTimeWorkRequest.Builder(AidexPlugin.AidexWorker::class.java)
.setInputData(dataWorker.storeInputData(bundle, intent.action)).build()
.setInputData(dataWorkerStorage.storeInputData(bundle, intent.action)).build()
else -> null
}?.let { request -> dataWorker.enqueue(request) }
}?.let { request -> dataWorkerStorage.enqueue(request) }
}
}

View file

@ -1,7 +1,6 @@
package info.nightscout.androidaps.receivers
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.work.Data
import androidx.work.ExistingWorkPolicy
@ -13,7 +12,7 @@ import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class DataWorker @Inject constructor(
class DataWorkerStorage @Inject constructor(
private val context: Context
) {

View file

@ -1,7 +1,15 @@
package info.nightscout.androidaps.receivers
import android.content.Context
import androidx.work.*
import androidx.work.Data
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkInfo
import androidx.work.WorkManager
import androidx.work.WorkQuery
import androidx.work.Worker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
import com.google.common.util.concurrent.ListenableFuture
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.BuildConfig
@ -10,7 +18,14 @@ import info.nightscout.androidaps.data.ProfileSealed
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.events.EventProfileSwitchChanged
import info.nightscout.androidaps.extensions.buildDeviceStatus
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.CommandQueue
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.Loop
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.configBuilder.RunningConfiguration
import info.nightscout.androidaps.plugins.general.maintenance.MaintenancePlugin
@ -19,10 +34,10 @@ import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.LocalAlertUtils
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.widget.updateWidget
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlin.math.abs
@ -48,6 +63,7 @@ class KeepAliveWorker(
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var maintenancePlugin: MaintenancePlugin
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var sp: SP
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
@ -62,31 +78,45 @@ class KeepAliveWorker(
private var lastRun: Long = 0
private var lastIobUpload: Long = 0
const val KA_0 = "KeepAlive"
private const val KA_5 = "KeepAlive_5"
private const val KA_10 = "KeepAlive_10"
}
override fun doWork(): Result {
aapsLogger.debug(LTag.CORE, "KeepAlive received from: " + inputData.getString("schedule"))
// 15 min interval is WorkManager minimum so schedule another instances to have 5 min interval
if (inputData.getString("schedule") == "KeepAlive") {
if (inputData.getString("schedule") == KA_0) {
WorkManager.getInstance(context).enqueueUniqueWork(
"KeepAlive_5",
KA_5,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequest.Builder(KeepAliveWorker::class.java)
.setInputData(Data.Builder().putString("schedule", "KeepAlive_5").build())
.setInputData(Data.Builder().putString("schedule", KA_5).build())
.setInitialDelay(5, TimeUnit.MINUTES)
.build()
)
WorkManager.getInstance(context).enqueueUniqueWork(
"KeepAlive_10",
KA_10,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequest.Builder(KeepAliveWorker::class.java)
.setInputData(Data.Builder().putString("schedule", "KeepAlive_10").build())
.setInputData(Data.Builder().putString("schedule", KA_10).build())
.setInitialDelay(10, TimeUnit.MINUTES)
.build()
)
} else {
// Sometimes schedule +5min, +10min gets broken
// If this happen do nothing
// It's causing false Pump unreachable alerts
if (lastRun + T.mins(4).msecs() > dateUtil.now()) return Result.success(workDataOf("Error" to "Schedule broken. Ignoring"))
}
if (lastRun != 0L && dateUtil.now() - lastRun > T.mins(10).msecs()) {
aapsLogger.error(LTag.CORE, "KeepAlive fail")
fabricPrivacy.logCustom("KeepAliveFail")
}
lastRun = dateUtil.now()
updateWidget(context)
localAlertUtils.shortenSnoozeInterval()
localAlertUtils.checkStaleBGAlert()
@ -94,10 +124,22 @@ class KeepAliveWorker(
checkAPS()
maintenancePlugin.deleteLogs(30)
workerDbStatus()
databaseCleanup()
return Result.success()
}
// Perform history data cleanup every day
// Keep 6 months
private fun databaseCleanup() {
val lastRun = sp.getLong(R.string.key_last_cleanup_run, 0L)
if (lastRun < dateUtil.now() - T.days(1).msecs()) {
val result = repository.cleanupDatabase(6 * 31, deleteTrackedChanges = false)
aapsLogger.debug(LTag.CORE, "Cleanup result: $result")
sp.putLong(R.string.key_last_cleanup_run, dateUtil.now())
}
}
// When Worker DB grows too much, work operations become slow
// Library is cleaning DB every 7 days which may not be sufficient for NSClient full sync
private fun workerDbStatus() {
@ -141,12 +183,12 @@ class KeepAliveWorker(
val requestedProfile = ProfileSealed.PS(ps)
val runningProfile = profileFunction.getProfile()
val lastConnection = pump.lastDataTime()
val isStatusOutdated = lastConnection + STATUS_UPDATE_FREQUENCY < System.currentTimeMillis()
val isStatusOutdated = lastConnection + STATUS_UPDATE_FREQUENCY < dateUtil.now()
val isBasalOutdated = abs(requestedProfile.getBasal() - pump.baseBasalRate) > pump.pumpDescription.basalStep
aapsLogger.debug(LTag.CORE, "Last connection: " + dateUtil.dateAndTimeString(lastConnection))
// sometimes keep alive broadcast stops
// as as workaround test if readStatus was requested before an alarm is generated
if (lastReadStatus != 0L && lastReadStatus > System.currentTimeMillis() - T.mins(5).msecs()) {
if (lastReadStatus != 0L && lastReadStatus > dateUtil.now() - T.mins(5).msecs()) {
localAlertUtils.checkPumpUnreachableAlarm(lastConnection, isStatusOutdated, loop.isDisconnected)
}
if (loop.isDisconnected) {
@ -154,16 +196,11 @@ class KeepAliveWorker(
} else if (runningProfile == null || ((!pump.isThisProfileSet(requestedProfile) || !requestedProfile.isEqual(runningProfile)) && !commandQueue.isRunning(Command.CommandType.BASAL_PROFILE))) {
rxBus.send(EventProfileSwitchChanged())
} else if (isStatusOutdated && !pump.isBusy()) {
lastReadStatus = System.currentTimeMillis()
lastReadStatus = dateUtil.now()
commandQueue.readStatus(rh.gs(R.string.keepalive_status_outdated), null)
} else if (isBasalOutdated && !pump.isBusy()) {
lastReadStatus = System.currentTimeMillis()
lastReadStatus = dateUtil.now()
commandQueue.readStatus(rh.gs(R.string.keepalive_basal_outdated), null)
}
if (lastRun != 0L && System.currentTimeMillis() - lastRun > T.mins(10).msecs()) {
aapsLogger.error(LTag.CORE, "KeepAlive fail")
fabricPrivacy.logCustom("KeepAliveFail")
}
lastRun = System.currentTimeMillis()
}
}

View file

@ -13,11 +13,14 @@ class BuildHelperImpl constructor(
private var devBranch = false
private var engineeringMode = false
private var unfinishedMode = false
init {
val engineeringModeSemaphore = File(fileListProvider.ensureExtraDirExists(), "engineering_mode")
val unfinishedModeSemaphore = File(fileListProvider.ensureExtraDirExists(), "unfinished_mode")
engineeringMode = engineeringModeSemaphore.exists() && engineeringModeSemaphore.isFile
unfinishedMode = unfinishedModeSemaphore.exists() && unfinishedModeSemaphore.isFile
devBranch = BuildConfig.VERSION.contains("-") || BuildConfig.VERSION.matches(Regex(".*[a-zA-Z]+.*"))
}
@ -26,5 +29,7 @@ class BuildHelperImpl constructor(
override fun isEngineeringMode(): Boolean = engineeringMode
override fun isUnfinishedMode(): Boolean = unfinishedMode
override fun isDev(): Boolean = devBranch
}

View file

@ -9,9 +9,9 @@ import javax.inject.Singleton
@Singleton
class ConfigImpl @Inject constructor() : Config {
override val SUPPORTEDNSVERSION = 1002 // 0.10.00
override val SUPPORTEDNSVERSION = 140206 // 14.2.6
override val APS = BuildConfig.FLAVOR == "full"
override val NSCLIENT = BuildConfig.FLAVOR == "nsclient" || BuildConfig.FLAVOR == "nsclient2"
override val NSCLIENT = BuildConfig.FLAVOR == "aapsclient" || BuildConfig.FLAVOR == "aapsclient2"
override val PUMPCONTROL = BuildConfig.FLAVOR == "pumpcontrol"
override val PUMPDRIVERS = BuildConfig.FLAVOR == "full" || BuildConfig.FLAVOR == "pumpcontrol"
override val FLAVOR = BuildConfig.FLAVOR

View file

@ -41,6 +41,7 @@ class TddCalculator @Inject constructor(
fun calculate(days: Long): LongSparseArray<TotalDailyDose> {
var startTime = MidnightTime.calc(dateUtil.now() - T.days(days).msecs())
val endTime = MidnightTime.calc(dateUtil.now())
val stepSize = T.hours(24).msecs()
val result = LongSparseArray<TotalDailyDose>()
// Try to load cached values
@ -48,47 +49,17 @@ class TddCalculator @Inject constructor(
val tdd = repository.getCalculatedTotalDailyDose(startTime).blockingGet()
if (tdd is ValueWrapper.Existing) result.put(startTime, tdd.value)
else break
startTime += T.hours(24).msecs()
startTime += stepSize
}
if (endTime > startTime) {
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
.filter { it.type != Bolus.Type.PRIMING }
.forEach { t ->
val midnight = MidnightTime.calc(t.timestamp)
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
tdd.bolusAmount += t.amount
result.put(midnight, tdd)
}
repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t ->
val midnight = MidnightTime.calc(t.timestamp)
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
tdd.carbs += t.amount
result.put(midnight, tdd)
}
val calculationStep = T.mins(5).msecs()
val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep)
for (t in startTime until endTime step calculationStep) {
val midnight = MidnightTime.calc(t)
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
val tbr = tempBasals[t]
val profile = profileFunction.getProfile(t) ?: continue
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
tdd.basalAmount += absoluteRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble()
if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) {
// they are not included in TBRs
val eb = iobCobCalculator.getExtendedBolus(t)
val absoluteEbRate = eb?.rate ?: 0.0
tdd.bolusAmount += absoluteEbRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble()
}
for (midnight in startTime until endTime step stepSize) {
val tdd = calculate(midnight, midnight + stepSize)
result.put(midnight, tdd)
}
}
for (i in 0 until result.size()) {
val tdd = result.valueAt(i)
tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount
if (tdd.interfaceIDs.pumpType != InterfaceIDs.PumpType.CACHE) {
tdd.interfaceIDs.pumpType = InterfaceIDs.PumpType.CACHE
aapsLogger.debug(LTag.CORE, "Storing TDD $tdd")
@ -99,7 +70,7 @@ class TddCalculator @Inject constructor(
}
fun calculateToday(): TotalDailyDose {
var startTime = MidnightTime.calc(dateUtil.now())
val startTime = MidnightTime.calc(dateUtil.now())
val endTime = dateUtil.now()
return calculate(startTime, endTime)
}
@ -111,7 +82,9 @@ class TddCalculator @Inject constructor(
}
fun calculate(startTime: Long, endTime: Long): TotalDailyDose {
val tdd = TotalDailyDose(timestamp = startTime)
val startTimeAligned = startTime - startTime % (5 * 60 * 1000)
val endTimeAligned = endTime - endTime % (5 * 60 * 1000)
val tdd = TotalDailyDose(timestamp = startTimeAligned)
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
.filter { it.type != Bolus.Type.PRIMING }
.forEach { t ->
@ -121,14 +94,14 @@ class TddCalculator @Inject constructor(
tdd.carbs += t.amount
}
val calculationStep = T.mins(5).msecs()
for (t in startTime until endTime step calculationStep) {
val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t)
for (t in startTimeAligned until endTimeAligned step calculationStep) {
val profile = profileFunction.getProfile(t) ?: continue
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
val tbr = iobCobCalculator.getBasalData(profile, t)
val absoluteRate = tbr.tempBasalAbsolute
tdd.basalAmount += absoluteRate / 60.0 * 5.0
if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) {
// they are not included in TBRs
val eb = iobCobCalculator.getExtendedBolus(t)
val absoluteEbRate = eb?.rate ?: 0.0
tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0

View file

@ -54,7 +54,11 @@ class Widget : AppWidgetProvider() {
@Inject lateinit var sp: SP
@Inject lateinit var constraintChecker: ConstraintChecker
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
companion object {
// This object doesn't behave like singleton,
// many threads were created. Making handler static resolve this issue
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
}
private val intentAction = "OpenApp"
override fun onReceive(context: Context, intent: Intent?) {

View file

@ -19,7 +19,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Worker
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOrefWorker
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventNewHistoryData
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.interfaces.ResourceHelper
@ -42,7 +42,7 @@ class CalculationWorkflow @Inject constructor(
private val fabricPrivacy: FabricPrivacy,
private val dateUtil: DateUtil,
private val sensitivityOref1Plugin: SensitivityOref1Plugin,
private val dataWorker: DataWorker,
private val dataWorkerStorage: DataWorkerStorage,
private val activePlugin: ActivePlugin
) {
@ -151,17 +151,17 @@ class CalculationWorkflow @Inject constructor(
WorkManager.getInstance(context)
.beginUniqueWork(
job, ExistingWorkPolicy.REPLACE,
if (bgDataReload) OneTimeWorkRequest.Builder(LoadBgDataWorker::class.java).setInputData(dataWorker.storeInputData(LoadBgDataWorker.LoadBgData(iobCobCalculator, end))).build()
if (bgDataReload) OneTimeWorkRequest.Builder(LoadBgDataWorker::class.java).setInputData(dataWorkerStorage.storeInputData(LoadBgDataWorker.LoadBgData(iobCobCalculator, end))).build()
else OneTimeWorkRequest.Builder(DummyWorker::class.java).build()
)
.then(
OneTimeWorkRequest.Builder(PrepareBucketedDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareBucketedDataWorker.PrepareBucketedData(iobCobCalculator, overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareBucketedDataWorker.PrepareBucketedData(iobCobCalculator, overviewData)))
.build()
)
.then(
OneTimeWorkRequest.Builder(PrepareBgDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareBgDataWorker.PrepareBgData(iobCobCalculator, overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareBgDataWorker.PrepareBgData(iobCobCalculator, overviewData)))
.build()
)
.then(
@ -171,17 +171,17 @@ class CalculationWorkflow @Inject constructor(
)
.then(
OneTimeWorkRequest.Builder(PrepareTreatmentsDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareTreatmentsDataWorker.PrepareTreatmentsData(overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareTreatmentsDataWorker.PrepareTreatmentsData(overviewData)))
.build()
)
.then(
OneTimeWorkRequest.Builder(PrepareBasalDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareBasalDataWorker.PrepareBasalData(iobCobCalculator, overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareBasalDataWorker.PrepareBasalData(iobCobCalculator, overviewData)))
.build()
)
.then(
OneTimeWorkRequest.Builder(PrepareTemporaryTargetDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareTemporaryTargetDataWorker.PrepareTemporaryTargetData(overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareTemporaryTargetDataWorker.PrepareTemporaryTargetData(overviewData)))
.build()
)
.then(
@ -192,17 +192,17 @@ class CalculationWorkflow @Inject constructor(
.then(
if (sensitivityOref1Plugin.isEnabled())
OneTimeWorkRequest.Builder(IobCobOref1Worker::class.java)
.setInputData(dataWorker.storeInputData(IobCobOref1Worker.IobCobOref1WorkerData(injector, iobCobCalculator, from, end, limitDataToOldestAvailable, cause)))
.setInputData(dataWorkerStorage.storeInputData(IobCobOref1Worker.IobCobOref1WorkerData(injector, iobCobCalculator, from, end, limitDataToOldestAvailable, cause)))
.build()
else
OneTimeWorkRequest.Builder(IobCobOrefWorker::class.java)
.setInputData(dataWorker.storeInputData(IobCobOrefWorker.IobCobOrefWorkerData(injector, iobCobCalculator, from, end, limitDataToOldestAvailable, cause)))
.setInputData(dataWorkerStorage.storeInputData(IobCobOrefWorker.IobCobOrefWorkerData(injector, iobCobCalculator, from, end, limitDataToOldestAvailable, cause)))
.build()
)
.then(OneTimeWorkRequest.Builder(UpdateIobCobSensWorker::class.java).build())
.then(
OneTimeWorkRequest.Builder(PrepareIobAutosensGraphDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareIobAutosensGraphDataWorker.PrepareIobAutosensData(iobCobCalculator, overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareIobAutosensGraphDataWorker.PrepareIobAutosensData(iobCobCalculator, overviewData)))
.build()
)
.then(
@ -213,13 +213,13 @@ class CalculationWorkflow @Inject constructor(
.then(
runLoop,
OneTimeWorkRequest.Builder(InvokeLoopWorker::class.java)
.setInputData(dataWorker.storeInputData(InvokeLoopWorker.InvokeLoopData(cause)))
.setInputData(dataWorkerStorage.storeInputData(InvokeLoopWorker.InvokeLoopData(cause)))
.build()
)
.then(
runLoop,
OneTimeWorkRequest.Builder(PreparePredictionsWorker::class.java)
.setInputData(dataWorker.storeInputData(PreparePredictionsWorker.PreparePredictionsData(overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PreparePredictionsWorker.PreparePredictionsData(overviewData)))
.build()
)
.then(
@ -238,7 +238,7 @@ class CalculationWorkflow @Inject constructor(
.beginUniqueWork(
MAIN_CALCULATION, ExistingWorkPolicy.APPEND,
OneTimeWorkRequest.Builder(PrepareTreatmentsDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareTreatmentsDataWorker.PrepareTreatmentsData(overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareTreatmentsDataWorker.PrepareTreatmentsData(overviewData)))
.build()
)
.then(
@ -254,12 +254,12 @@ class CalculationWorkflow @Inject constructor(
.beginUniqueWork(
MAIN_CALCULATION, ExistingWorkPolicy.APPEND,
OneTimeWorkRequest.Builder(PrepareBucketedDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareBucketedDataWorker.PrepareBucketedData(iobCobCalculator, overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareBucketedDataWorker.PrepareBucketedData(iobCobCalculator, overviewData)))
.build()
)
.then(
OneTimeWorkRequest.Builder(PrepareBgDataWorker::class.java)
.setInputData(dataWorker.storeInputData(PrepareBgDataWorker.PrepareBgData(iobCobCalculator, overviewData)))
.setInputData(dataWorkerStorage.storeInputData(PrepareBgDataWorker.PrepareBgData(iobCobCalculator, overviewData)))
.build()
)
.then(

View file

@ -9,7 +9,7 @@ import info.nightscout.androidaps.events.Event
import info.nightscout.androidaps.events.EventNewBG
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.Loop
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import javax.inject.Inject
class InvokeLoopWorker(
@ -17,7 +17,7 @@ class InvokeLoopWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var iobCobCalculator: IobCobCalculator
@Inject lateinit var loop: Loop
@ -38,7 +38,7 @@ class InvokeLoopWorker(
*/
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as InvokeLoopData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as InvokeLoopData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
if (data.cause !is EventNewBG) return Result.success(workDataOf("Result" to "no calculation needed"))

View file

@ -8,7 +8,7 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.shared.logging.AAPSLogger
import javax.inject.Inject
@ -18,7 +18,7 @@ class LoadBgDataWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var rxBus: RxBus
@ -35,7 +35,7 @@ class LoadBgDataWorker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as LoadBgData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as LoadBgData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
data.iobCobCalculator.ads.loadBgData(data.end, repository, aapsLogger, dateUtil, rxBus)

View file

@ -15,18 +15,17 @@ import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.ScaledDataPoint
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.interfaces.ResourceHelper
import java.util.ArrayList
import javax.inject.Inject
import kotlin.math.max
class PrepareBasalDataWorker(
context: Context,
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var rxBus: RxBus
@ -43,7 +42,7 @@ class PrepareBasalDataWorker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareBasalData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PrepareBasalData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_BASAL_DATA, 0, null))

View file

@ -14,7 +14,7 @@ import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.GlucoseValueDataPoint
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.interfaces.ResourceHelper
@ -26,7 +26,7 @@ class PrepareBgDataWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var defaultValueHelper: DefaultValueHelper
@ -43,7 +43,7 @@ class PrepareBgDataWorker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareBgData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PrepareBgData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
data.overviewData.maxBgValue = Double.MIN_VALUE

View file

@ -11,7 +11,7 @@ import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.InMemoryGlucoseValueDataPoint
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.logging.AAPSLogger
import javax.inject.Inject
@ -21,7 +21,7 @@ class PrepareBucketedDataWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var aapsLogger: AAPSLogger
@ -37,7 +37,7 @@ class PrepareBucketedDataWorker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareBucketedData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PrepareBucketedData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
val bucketedData = data.iobCobCalculator.ads.getBucketedDataTableCopy() ?: return Result.success()

View file

@ -26,7 +26,7 @@ import info.nightscout.androidaps.plugins.general.overview.graphExtensions.Point
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.ScaledDataPoint
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.interfaces.ResourceHelper
@ -43,7 +43,7 @@ class PrepareIobAutosensGraphDataWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@ -63,7 +63,7 @@ class PrepareIobAutosensGraphDataWorker(
)
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareIobAutosensData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PrepareIobAutosensData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_IOB_AUTOSENS_DATA, 0, null))
val iobArray: MutableList<ScaledDataPoint> = ArrayList()

View file

@ -16,7 +16,7 @@ import info.nightscout.androidaps.plugins.general.overview.OverviewMenus
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.GlucoseValueDataPoint
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.interfaces.ResourceHelper
@ -39,7 +39,7 @@ class PreparePredictionsWorker(
@Inject lateinit var nsDeviceStatus: NSDeviceStatus
@Inject lateinit var loop: Loop
@Inject lateinit var overviewMenus: OverviewMenus
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var defaultValueHelper: DefaultValueHelper
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@ -53,7 +53,7 @@ class PreparePredictionsWorker(
)
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PreparePredictionsData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PreparePredictionsData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
val apsResult = if (config.APS) loop.lastRun?.constraintsProcessed else nsDeviceStatus.getAPSResult(injector)

View file

@ -1,7 +1,6 @@
package info.nightscout.androidaps.workflow
import android.content.Context
import androidx.core.content.ContextCompat
import androidx.work.Worker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
@ -18,7 +17,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.interfaces.ResourceHelper
import javax.inject.Inject
import kotlin.math.max
@ -28,7 +27,7 @@ class PrepareTemporaryTargetDataWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var repository: AppRepository
@ -46,11 +45,11 @@ class PrepareTemporaryTargetDataWorker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareTemporaryTargetData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PrepareTemporaryTargetData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_TEMPORARY_TARGET_DATA, 0, null))
val profile = profileFunction.getProfile() ?: return Result.failure(workDataOf("Error" to "missing profile"))
val profile = profileFunction.getProfile() ?: return Result.success(workDataOf("Error" to "missing profile"))
val units = profileFunction.getUnits()
var toTime = data.overviewData.toTime
val targetsSeriesArray: MutableList<DataPoint> = ArrayList()

View file

@ -17,7 +17,7 @@ import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.*
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.DataWorkerStorage
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.utils.T
@ -29,7 +29,7 @@ class PrepareTreatmentsDataWorker(
params: WorkerParameters
) : Worker(context, params) {
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var rxBus: RxBus
@ -48,7 +48,7 @@ class PrepareTreatmentsDataWorker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareTreatmentsData?
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PrepareTreatmentsData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_TREATMENTS_DATA, 0, null))

View file

@ -0,0 +1,7 @@
<vector android:height="48dp" android:viewportHeight="24"
android:viewportWidth="24" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorControlNormal" android:pathData="M4.598,5.728a7.505,2.62 0,1 0,15.01 0a7.505,2.62 0,1 0,-15.01 0z"/>
<path android:fillColor="?attr/colorControlNormal" android:pathData="M19.051,7.533c-0.41,0.264 -0.91,0.493 -1.475,0.687c-1.517,0.521 -3.5,0.787 -5.473,0.787c-1.973,0 -3.957,-0.267 -5.473,-0.787C6.065,8.026 5.565,7.797 5.155,7.533C4.945,7.398 4.757,7.254 4.598,7.1v3.578c0.003,0.003 0.007,0.007 0.011,0.01c1.315,1.25 4.419,1.897 7.495,1.897c3.076,0 6.18,-0.647 7.495,-1.897c0.001,0 0.001,-0.001 0.002,-0.001V7.109C19.441,7.259 19.257,7.4 19.051,7.533z"/>
<path android:fillColor="?attr/colorControlNormal" android:pathData="M19.051,11.937c-0.41,0.264 -0.91,0.493 -1.475,0.687c-1.517,0.521 -3.5,0.787 -5.473,0.787c-1.973,0 -3.957,-0.267 -5.473,-0.787c-0.565,-0.194 -1.065,-0.423 -1.475,-0.687c-0.21,-0.135 -0.397,-0.28 -0.557,-0.433v3.578c0.003,0.003 0.007,0.007 0.011,0.01c1.315,1.25 4.419,1.897 7.495,1.897c3.076,0 6.18,-0.647 7.495,-1.897c0.001,0 0.001,-0.001 0.002,-0.001v-3.578C19.441,11.663 19.257,11.804 19.051,11.937z"/>
<path android:fillColor="?attr/colorControlNormal" android:pathData="M19.051,16.341c-0.41,0.264 -0.91,0.493 -1.475,0.687c-1.517,0.521 -3.5,0.787 -5.473,0.787c-1.973,0 -3.957,-0.267 -5.473,-0.787c-0.565,-0.194 -1.065,-0.423 -1.475,-0.687c-0.21,-0.135 -0.397,-0.28 -0.557,-0.433v3.578c0.003,0.003 0.007,0.007 0.011,0.01c1.315,1.25 4.419,1.897 7.495,1.897c3.076,0 6.18,-0.647 7.495,-1.897c0.001,0 0.001,-0.001 0.002,-0.001v-3.578C19.441,16.067 19.257,16.209 19.051,16.341z"/>
</vector>

View file

@ -30,7 +30,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Name"
android:textSize="@dimen/twenty_four_dp"
android:textSize="24dp"
android:textStyle="bold"
tools:ignore="HardcodedText" />

View file

@ -211,6 +211,21 @@
app:layout_gravity="fill"
app:layout_row="0" />
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/cleanup_db"
style="@style/GrayButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_database_cleanup"
android:paddingStart="0dp"
android:paddingEnd="0dp"
android:text="@string/database_cleanup"
android:textSize="11sp"
app:layout_column="0"
app:layout_columnWeight="1"
app:layout_gravity="fill"
app:layout_row="1" />
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/nav_resetdb"
style="@style/GrayButton"
@ -224,7 +239,7 @@
app:layout_column="1"
app:layout_columnWeight="1"
app:layout_gravity="fill"
app:layout_row="0" />
app:layout_row="1" />
</androidx.gridlayout.widget.GridLayout>

View file

@ -3,7 +3,7 @@
android:id="@+id/swipeRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".plugins.aps.openAPSAMA.OpenAPSAMAFragment">
tools:context=".plugins.aps.OpenAPSFragment">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"

View file

@ -33,9 +33,7 @@
<string name="description_source_mm640g">Onvang BG waardes vanaf die 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Laai BG data af vanaf Nightscout</string>
<string name="description_treatments">Stoor alle behandelings wat gedoen was</string>
<string name="description_wear">Monitor en beheer AndroidAPS met jou WearOS horlosie.</string>
<string name="description_xdrip_status_line">Wys informasie van jou loop op jou xDrip+ horlosie-gesig.</string>
<string name="description_sms_communicator">Afstandbeheer AndroidAPS met SMS kodes.</string>
<string name="treatments_insulin_label_string">Insulien:</string>
<string name="treatments_carbs_label_string">Karbs:</string>
<string name="treatments_iob_label_string">IAB:</string>
@ -70,9 +68,7 @@
<string name="treatments">Behandelings</string>
<string name="virtualpump">Virtuele Pomp</string>
<string name="configbuilder_pump">Pomp</string>
<string name="configbuilder_pump_description">Watter pomp wil jy gebruik met AndroidAPS?</string>
<string name="configbuilder_profile">Profiel</string>
<string name="configbuilder_profile_description">Watter profiel moet AndroidAPS gebruik?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Watter APS algoritme moet terapie aanpassings maak?</string>
<string name="configbuilder_general">Algemene</string>
@ -80,7 +76,6 @@
<string name="configbuilder_constraints_description">Watter beperkings word toegepas?</string>
<string name="constraints">Beperkings</string>
<string name="configbuilder_loop">Lus</string>
<string name="configbuilder_loop_description">Gebruik die om AndroidAPS se lus integrasie te aktiveer.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Na verwerkte beperkings</string>
<string name="loop_tbrsetbypump_label">Tydelike basale gestel deur pomp</string>
@ -96,7 +91,6 @@
<string name="sms_basal">Basale:</string>
<string name="changeyourinput">Verander jou insette!</string>
<string name="configbuilder_bgsource">BG bron</string>
<string name="configbuilder_bgsource_description">Waarvandaan moet AndroidAPS data kry?</string>
<string name="apsmode_title">APS modus</string>
<string name="closedloop">Geslote lus</string>
<string name="openloop">Oop lus</string>
@ -248,7 +242,6 @@
<string name="adult">Volwassene</string>
<string name="resistantadult">Insulien weerstandige volwasse</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s benodig battery optimisering bemagtiging vir beter werksverrigting</string>
<string name="loopsuspended">Lus opgeskort</string>
<string name="loopsuspendedfor">Opgeskort (%1$d m)</string>
<string name="suspendloopfor1h">Skort lus vir 1h</string>
@ -479,7 +472,6 @@
<string name="welcometosetupwizard">Welkom by opstelling-Ghoeroe. Dit sal jou lei deur die opstelling proses\n</string>
<string name="readstatus">Lees status</string>
<string name="exitwizard">Slaan opstelling-Ghoeroe oor</string>
<string name="setupwizard_loop_description">Druk die knoppie hieronder om AndroidAPS te aktiveer om voorstelle/of veranderings te maak aan basale</string>
<string name="setupwizard_sensitivity_description">Sensitiwiteit plugin vir sensitiwiteit opsporing en KAB berekening. Vir meer inligting besoek:</string>
<string name="diawarning">Onthou asseblief: dat nuwe insulien profiele vereis DIA van minstens 5h. DIA 5 6h op nuwe profiel is gelyk aan DIA 3h op ou insulien profiele.</string>
<string name="setupwizard_aps_description">Kies een van beskikbare algoritmes. Hulle is gesorteer vanaf oudste tot jongste. Nuwer algoritmes is gewoonlik kragtiger en meer aggressief. Dus as jy nuut is met jou lus, sal jy waarskynlik begin met AMA en nie met jongste een. Moenie vergeet om die OpenAPS dokumentasie te lees en te konfigureer voor gebruik.</string>
@ -501,7 +493,6 @@
<string name="low_temptarget_lowers_sensitivity_title">Lae tydelike doelwitte verlaag sensitiwiteit</string>
<string name="low_temptarget_lowers_sensitivity_summary"><![CDATA[Laer sensitiwiteit vir tydelike doelwitte < 100]]></string>
<string name="storedsettingsfound">Gestoorde instellings gevind</string>
<string name="allow_hardware_pump_text">Aandag: As jy aktiveer en koppel aan \'n hardeware pomp, AndroidAPS sal die basale instellings uit die profiel aan die pomp kopieer, die bestaande basale koers gestoor op die pomp sal oorskryf word. Maak seker jy het die korrekte basale instelling in AndroidAPS. As jy nie seker is of nie die basale instellings wil oorskryf op jou pomp, druk Kanselleer en herhaal oorskakel na die pomp op \'n later tyd.</string>
<string name="error_adding_treatment_title">Behandeling data onvolledig</string>
<string name="maintenance_settings">Onderhoud instellings</string>
<string name="maintenance_amount">Hoeveel Logs om te stuur</string>
@ -525,7 +516,6 @@
<string name="loop_openmode_min_change_summary" formatted="false">Oop lus sal nuwe verandering versoek as die %. Verstek waarde is 20%</string>
<string name="profile_total">== ∑ %1$s U</string>
<string name="dexcom_lognssensorchange_title">Log sensor verander na NS</string>
<string name="dexcom_lognssensorchange_summary">Skep geleentheid \"sensor verandering\" in NS automaties op sensor begin</string>
<string name="tomato">Tomato (MiaoMiao)</string>
<string name="tomato_short">Tomato</string>
<string name="summary_tidepool_username">JouTidepool login gebruiker, normaallweg \'n email adres</string>

View file

@ -5,12 +5,10 @@
<string name="dia_profile">Трябва да зададете стойността за DIA в профила си.</string>
<string name="dia_minimumis5h">Минималната стойност е 5 часа.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">Ако сте били доволни от зададената стойност за DIA, която е използвал вашата помпа преди да започнете да ползвате AndroidAPS, няма нужда да я сменяте когато затворите цикъла.</string>
<string name="dia_valuemustbedetermined">Вие трябва сами за себе си да установите правилната стойност за DIA.</string>
<string name="hypott_label">Хипо врменна цел</string>
<string name="hypott_whenhypott">Каква е основната причина за задаване на хипо временна цел?</string>
<string name="hypott_wrongbasal">За да коригирате хипо предизвикано от грешни базални настройки.</string>
<string name="hypott_preventoversmb">За да предотвратите AndroidAPS да коригира прекалено повишение на КЗ предизвикано от бързи въглехидрати използвани против хипо.</string>
<string name="hypott_exercise">За да коригирате хипо предизвикано от физическа дейност.</string>
<string name="hypott_0basal">За да предотвратите понижаване на КЗ ако вече е активен 0% временен базал.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html</string>
@ -18,12 +16,9 @@
<string name="offlineprofile_label">Тема: Offline профил</string>
<string name="offlineprofile_nsprofile">NS профил може да бъде използван, но не и да бъде конфигуриран.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Причини да се използва Разкачане на Помпа в Andoird APS</string>
<string name="pumpdisconnect_whattodo">Какво трябва да се направи когато се разкача помпата?</string>
<string name="pumpdisconnect_unnecessary">Това не е нужно, инсулин няма да бъде доставен, тъй като помпата е физически разкачена.</string>
<string name="pumpdisconnect_missinginsulin">AndoirdAPS да игнорира инсулина, който не е доставен докато попата е била физически разкачена</string>
<string name="pumpdisconnect_notstop">Доставянето на инсулин няма да спре докато помпата е свързана.</string>
<string name="pumpdisconnect_openloop">Ще вкара AndoirdAPS в отворен цикъл.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings</string>
<string name="objectives_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/ExportImportSettings.html</string>
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me</string>

View file

@ -25,8 +25,6 @@
<string name="objectives_pumpstatusavailableinns">Статуса на помпата да е достъпен в NS</string>
<string name="objectives_manualenacts">Ръчно приложени</string>
<string name="accomplished">Изпълнено: %1$s</string>
<string name="objectives_usage_objective">Научете се да управлявате AndroidAPS</string>
<string name="objectives_usage_gate">Извършете различни действия в AndroidAPS</string>
<string name="objectives_useprofileswitch">Настройте профила на 90% за 10 минути (задръжте върху името на профила в таб Общ)</string>
<string name="objectives_usedisconnectpump">Симулирайте душ. Изключете помпата за 1 час (задръжте върху Отворен кръг)</string>
<string name="objectives_usereconnectpump">... и отново я свържете по същия начин</string>

View file

@ -38,9 +38,7 @@
<string name="description_source_ns_client">Изтегля стойности на КЗ от Nightscout</string>
<string name="description_source_xdrip">Получаване на данни за КЗ от xDrip+.</string>
<string name="description_treatments">Записва всички процедури, които са били направени</string>
<string name="description_wear">Наблюдавайте и контролирайте AndroidAPS, от вашия WearOS часовник.</string>
<string name="description_xdrip_status_line">Покажи информация за вашия APS на xDrip + циферблат на часовник.</string>
<string name="description_sms_communicator">Дистанционно управление AndroidAPS чрез използване на SMS команди.</string>
<string name="treatments_insulin_label_string">Инсулин:</string>
<string name="treatments_carbs_label_string">Вълехидрати:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -77,9 +75,7 @@
<string name="treatments">Лечения</string>
<string name="virtualpump">Виртуална помпа</string>
<string name="configbuilder_pump">Помпа</string>
<string name="configbuilder_pump_description">Каква помпа използвате с AndroidAPS?</string>
<string name="configbuilder_profile">Профил</string>
<string name="configbuilder_profile_description">Кой тип профил да използва AndroidAPS?</string>
<string name="configbuilder_aps">Алгоритъм за APS</string>
<string name="configbuilder_aps_description">Кои APS алгоритъм да се използва за корекции в лечението?</string>
<string name="configbuilder_general">Общи</string>
@ -87,7 +83,6 @@
<string name="configbuilder_constraints_description">Кои ограничения да се прилагат?</string>
<string name="constraints">Ограничения</string>
<string name="configbuilder_loop">Режим на APS - Loop</string>
<string name="configbuilder_loop_description">Използвайте това, за да активирате loop интеграцията в \'AndroidAPS.</string>
<string name="loop_aps_label">Алгоритъм за APS</string>
<string name="loop_constraintsprocessed_label">След ограничения</string>
<string name="loop_tbrsetbypump_label">Временният базал зададен от помпата</string>
@ -103,7 +98,6 @@
<string name="sms_basal">Базал:</string>
<string name="changeyourinput">Променете данните!</string>
<string name="configbuilder_bgsource">Източник на данни за КЗ</string>
<string name="configbuilder_bgsource_description">От къде трябва да AndroidAPS да си взима данни?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">APS режим</string>
<string name="closedloop">Затворен кръг</string>
@ -325,7 +319,6 @@
<string name="patient_name_summary">Моля, посочете име на пациента или измислено име, за да се различават</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">Потребител</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s се нуждае от изключване от списъка за оптимизиране на батерията за пълна функционалност</string>
<string name="loopsuspended">Loop изключен</string>
<string name="loopsuspendedfor">Изключен (%1$d мин)</string>
<string name="suspendloopfor1h">Изключи APS за 1ч</string>
@ -422,7 +415,6 @@
<string name="sensitivityweightedaverage">чрез Среднопретеглената стойност</string>
<string name="notloadedplugins">Не всички профили са заредени!</string>
<string name="valuesnotstored">Стойностите не са запазени!</string>
<string name="ns_localbroadcasts">Активира предаване на данни към други приложения (като xDrip+). Не активирайте, ако имате повече от един AAPS или имате инсталиран NSClient!</string>
<string name="ns_localbroadcasts_title">Разреши локално предаване на данни</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="enableuam">Разреши UAM</string>
@ -612,7 +604,6 @@
<string name="welcometosetupwizard">Добре дошли в съветника за настройки. Той ще ви преведе през етапите на настройка.</string>
<string name="readstatus">Получавам състоянието на помпата</string>
<string name="exitwizard">Пропусни съветника за настройка</string>
<string name="setupwizard_loop_description">Натиснете бутона по-долу за да позволите AndroidAPS да предлага/прави промени в базалните стойности</string>
<string name="setupwizard_sensitivity_description">Модула за чувствителност се използва за определяне на чувствителността и COB изчисления. За повече информация посетете:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/en/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="nsclientinfotext">NSClient поддържа връзка с Nightscout. Можете да пропуснете тази настройка сега, но вие няма можете да преминете целите, докато не го настроите.</string>
@ -645,7 +636,6 @@
<string name="sensitivity_raises_target_title">Чувствителността увеличава целта</string>
<string name="sensitivity_raises_target_summary">Когато се установи чувствителност, повишаване на целевата глюкоза</string>
<string name="storedsettingsfound">Открити са предишни настройки</string>
<string name="allow_hardware_pump_text">Внимание: Ако активирате и свържете с хардуерна помпа, AndroidAPS ще копира основните настройки от профила в помпата, като презапише съществуващата базова скорост, съхранявана на помпата. Уверете се, че имате правилните основни настройки в AndroidAPS. Ако не сте сигурни или не искате да презапишете основните настройки на помпата, натиснете Cancel и повторете превключването към помпата по-късно.</string>
<string name="error_adding_treatment_title">Данните за лечението не са пълни</string>
<string name="maintenance_settings">Настройки за поддръжка</string>
<string name="maintenance_email">Имейл</string>
@ -671,7 +661,6 @@
<string name="loop_openmode_min_change_summary" formatted="false">AndroidAPS ще покаже запитването за промяна на базала само ако е по-голямо от тази стойност.(Стандартно 20%)</string>
<string name="profile_total">Общо %1$s Е</string>
<string name="dexcom_lognssensorchange_title">Записвай смяната на сензор в NS</string>
<string name="dexcom_lognssensorchange_summary">Създаване на събитие \"Смяна на сеснзор\" в NS автоматично при старт на сензор</string>
<string name="tomato">Tomato(MяоМяо)</string>
<string name="tomato_short">Tomato</string>
<string name="summary_tidepool_username">Потребителското Ви име за Tidepool, обикновено е Вашия имейл</string>
@ -739,7 +728,6 @@
<string name="id">Номер:</string>
<string name="submit">Изпрати</string>
<string name="mostcommonprofile">Най-често използван профил:</string>
<string name="survey_comment">Забележка: Само данни, видими на този екран, ще бъдат анонимно изпратени. Номер се дава за тази инсталация на AndroidAPS. Отново можете да изпратите данните, ако вашият основен профил се промени, но нека да работи поне една седмица, за да се види резултата във Време в границите. Много благодарим за Вашата помощ.</string>
<string name="invalidage">Невалидна възраст</string>
<string name="invalidweight">Невалидно тегло</string>
<string name="invalidpct">Невалидна стойност в %</string>
@ -779,11 +767,9 @@
<string name="smscommunicator_otp_export_prompt">Сигурни ли сте, че искате да копирате OTP паролата в клипборда?\n\nВие може да се нуждаете само от това, ако вашето приложение за автентичност има проблеми със сканирането на QRCode, искате да го въведете ръчно или искате да конфигурирате хардуерен OTP токен чрез специално приложение.</string>
<string name="smscommunicator_otp_export_successful">OTP парола (във Base32 формат) е експортирана и копирана в клипборда. Поставете го в автентикатор или хардуерен OTP!</string>
<string name="smscommunicator_otp_step1_install_header">1. Инсталиране на удостоверител</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Сканиране на кода за настройка на AndroidAPS OTP </string>
<string name="smscommunicator_otp_step3_test_header">3. Тест на еднократна парола</string>
<string name="smscommunicator_otp_reset_header">Нулиране на удостоверители</string>
<string name="smscommunicator_otp_install_info">На всеки следящ телефона инсталирайте приложение Аутентификатор, който поддържа RFC 6238 ТОТР токени. Популярни безплатни приложения:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator</string>
<string name="smscommunicator_otp_reset_warning">При нулиране на на удостоверителя, всички вече използвани удостоверения са невалидни. Ще трябва да ги настроите отново!</string>
<string name="overview_show_predictions">Прогнозни КЗ</string>
<string name="overview_show_deviationslope">Наклон на отклонението</string>
<string name="authorizationfailed">Удостоверяването неуспешно</string>

View file

@ -5,12 +5,10 @@
<string name="dia_profile">Heu de configurar el valor de la DIA al vostre perfil.</string>
<string name="dia_minimumis5h">El mínim permès son 5 hores.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">Si esteu satisfets amb el valor de la DIA que fèieu servir a la bomba abans d\'utilitzar AndroidAPS, no cal canviar-la quan comenceu amb el llaç.</string>
<string name="dia_valuemustbedetermined">Heu de determinar vosaltres mateixos el valor apropiat per la DIA.</string>
<string name="hypott_label">Objectiu temporal hipo</string>
<string name="hypott_whenhypott">Quin seria el motiu principal per fixar un objectiu temporal hipo?</string>
<string name="hypott_wrongbasal">Corregir hipos causades per configuracions incorrectes de la ràtio basal.</string>
<string name="hypott_preventoversmb">Evitar que AndroidAPS corregeixi excessivament quan hi ha un augment de glucèmia provocat pels carbohidrats d\'absorció ràpida consumits per tractar una hipo.</string>
<string name="hypott_exercise">Corregir una hipo provocada per fer esport.</string>
<string name="hypott_0basal">Evitar que la glucèmia baixi més del compte quan ja hi ha una basal temporal activa del 0%.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html</string>
@ -18,15 +16,10 @@
<string name="offlineprofile_label">Tema: Perfil fora de línia</string>
<string name="offlineprofile_nsprofile">El perfil NS es pot fer servir, però no configurar.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Motius per aplicar \"Desconnectar bomba\" a AndroidAPS</string>
<string name="pumpdisconnect_whattodo">Què cal fer al desconnectar la bomba?</string>
<string name="pumpdisconnect_unnecessary">No cal fer res, ja que a l\'estar la bomba físicament desconnectada, no es lliurarà insulina.</string>
<string name="pumpdisconnect_missinginsulin">Evita que AndroidAPS tingui en compte la insulina que no es lliura mentre la bomba està físicament desconnectada.</string>
<string name="pumpdisconnect_notstop">Si la bomba continua connectada, no deixarà de lliurar insulina.</string>
<string name="pumpdisconnect_openloop">Posarà AndroidAPS en mode llaç obert.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings</string>
<string name="objectives_label">Configuració AndroidAPS</string>
<string name="objectives2_label">Configuració AndroidAPS</string>
<string name="objectives_howtosave">Quines son les bones pràctiques respecte a fer còpia de seguretat de la configuració?</string>
<string name="objectives_notesettings">No cal exportar la configuració si la teniu anotada a algun lloc.</string>
<string name="objectives_afterobjective">Exporteu la configuració cada vegada que completeu un objectiu.</string>
@ -40,7 +33,6 @@
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me</string>
<string name="noisycgm_label">Lectures CGM sorolloses</string>
<string name="noisycgm_whattodo">Què cal fer si les dades del CGM son sorolloses?</string>
<string name="noisycgm_nothing">No cal fer res, AndroidAPS se n\'encarregarà.</string>
<string name="noisycgm_pause">Desactivar el llaç tancat per evitar dosi massa altes o baixes.</string>
<string name="noisycgm_replacesensor">Substituir els sensors constantment sorollosos o inexactes.</string>
<string name="noisycgm_checksmoothing">Comprovar que la vostra app de CGM proporciona dades suavitzades.</string>
@ -71,7 +63,6 @@
<string name="basaltest_fixed">Un cop configurats i validats, aquests valors no haurien de canviar amb el temps.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings</string>
<string name="prerequisites_label">Prerequisits</string>
<string name="prerequisites_what">Què seria essencial per configurar i utilitzar AndroidAPS?</string>
<string name="prerequisites_determinedcorrectprofile">Informació del perfil validada (basal, ràtio I:C, ISF, DIA).</string>
<string name="prerequisites_computer">Un ordinador amb Android Studio instal·lat i configurat.</string>
<string name="prerequisites_phone">Un telèfon compatible.</string>
@ -86,24 +77,17 @@
<string name="prerequisites_smartwatch">Un smartwatch (rellotge intel·ligent).</string>
<string name="prerequisites_supportedcgm">Un CGM (Monitor Continu de Glucosa) compatible.</string>
<string name="prerequisites2_label">Requisits previs</string>
<string name="prerequisites2_what">Què seria essencial per configurar i utilitzar AndroidAPS?</string>
<string name="prerequisites2_profile">Informació validada per poder configurar un perfil (ISF, ràtio I:C, basals, DIA, etc.).</string>
<string name="prerequisites2_device">Un dispositiu Android compatible (p.ex. telèfon mòbil, rellotge Android o tauleta).</string>
<string name="prerequisites2_internet">AndroidAPS necessita una connexió a internet per poder funcionar en mode llaç tancat.</string>
<string name="prerequisites2_supportedcgm">Un CGM (monitor continu de glucosa) compatible i l\'app adequada per rebre al telèfon/dispositiu els valors de glucèmia que proporciona.</string>
<string name="prerequisites2_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html</string>
<string name="update_label">Actualitzant AndroidAPS</string>
<string name="whatistrue">Marqueu totes les respostes correctes.</string>
<string name="update_git">Cal tenir Git instal·lat i configurat al vostre ordinador.</string>
<string name="update_asap">Quan es lliuren versions actualitzades d\'AndroidAPS, les versions anteriors poden ser limitades remotament al cap d\'un temps, en una data determinada.</string>
<string name="update_keys">Haurieu de desar i anotar la ubicació del vostre \"keystore\" i utilitzar la mateixa clau de signatura per la instal·lació anterior que per les noves actualitzacions.</string>
<string name="update_neverupdate">No actualitzeu mai si el sistema està funcionant correctament.</string>
<string name="update_askfriend">Si teniu problemes en compilar l\'apk (aplicació), podeu instal·lar una apk que hagi estat compilada per una amiga.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch</string>
<string name="troubleshooting_label">Resolució de problemes</string>
<string name="troubleshooting_wheretoask">A on es pot cercar ajuda relacionada amb AndroidAPS?</string>
<string name="troubleshooting_fb">Demanant consell al grup de Facebook d\'usuaris d\'AndroidAPS.</string>
<string name="troubleshooting_wiki">Llegint (i rellegint) la documentació d\'AndroidAPS.</string>
<string name="troubleshooting_yourendo">Preguntant a la clínica on us porten la diabetis o a la vostra endocrinòloga.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/AndroidAPSUsers/</string>
@ -116,7 +100,6 @@
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin</string>
<string name="sensitivity_label">Plugins de sensibilitat</string>
<string name="sensitivity_which">Marqueu totes les respostes correctes.</string>
<string name="sensitivity_adjust">Els plugins de sensibilitat permeten AndroidAPS ajustar-se davant de canvis temporals o breus de sensibilitat a l\'insulina (per exemple canvis hormonals o problemes d\'absorció al lloc d\'infusió).</string>
<string name="sensitivity_edit">Els plugins de sensibilitat ofereixen l\'usuari suggeriments de canvi de les basals, ràtios I:C (insulina:carbohidrats) i ISF (factor de sensibilitat a l\'insulina) que poden ser utilitzats per editar el perfil.</string>
<string name="sensitivity_cannula">L\'enregistrament d\'un canvi de cànula restableix la ràtio Autosens, deixant-lo de nou a un 100%.</string>
<string name="sensitivity_time">Algunes de les opcions de plugins es poden configurar segons rangs horaris que poden ser definits per l\'usuari.</string>
@ -125,14 +108,11 @@
<string name="wrongcarbs_whattodo">Què cal fer si feu una entrada incorrecta de carbohidrats?</string>
<string name="wrongcarbs_treatmentstab">Elimineu la entrada incorrecta a Tractaments i introduïu el valor correcte de carbohidrats.</string>
<string name="wrongcarbs_addinsulin">Bolus amb insulina utilitzant el menú d\'encebat del set d\'infusió.</string>
<string name="wrongcarbs_donothing">Res - AndroidAPS ja farà els ajustos apropiats.</string>
<string name="wrongcarbs_bolus">Bolus amb insulina utilitzant el botó d\'Insulina (bolus) de la pantalla \"Inici\".</string>
<string name="wronginsulin_label">Errors de lliurament/registre d\'insulina</string>
<string name="wronginsulin_whattodo">Què cal fer si rebeu menys insulina de la que suggereix l\'historial de la bomba, p.ex. degut a una oclusió, a una cànula que no funciona o un oblit de reconnexió de la bomba després d\'una dutxa?</string>
<string name="wronginsulin_careportal">Eliminar dades d\'insulina del portal de cures Nightscout per eliminar-les de l\'historial de la bomba.</string>
<string name="wronginsulin_compare">Compara els valors entre AndroidAps i lhistorial de la bomba (si la bomba ho admet).</string>
<string name="wronginsulin_prime">Lliurar un bolus amb part de la insulina que falta utilitzant una jeringa/ploma o el menú d\'encebat.</string>
<string name="wronginsulin_donothing">No fer res i permetre que AndroidAPS corregeixi els possibles valors alts de glucèmia que es produeixin.</string>
<string name="iob_label">Insulina \"a bord\" (IOB)</string>
<string name="iob_value">El valor d\'IOB es veu afectat per les basals temporals lliurades.</string>
<string name="iob_hightemp">Una basal temporal alta no serà lliurada si la glucèmia està per sota de l\'objectiu.</string>
@ -140,26 +120,18 @@
<string name="breadgrams_label">Entrada de carbohidrats i bolus</string>
<string name="breadgrams_grams">A l\'hora d\'estimar i registrar els carbohidrats consumits, només s\'han de fer servir grams.</string>
<string name="breadgrams_exchange">Els carbohidrats consumits poden registrar-se utilitzant un sistema d\'intercanvi apropiat (p.ex. intercanvis DAFNE \"CHO\" o les \"Unitats de pa\" europees).</string>
<string name="breadgrams_decay">AndroidAPS fa servir un model dinàmic per estimar com \"decauen\" els carbohidrats i calcular els COB.</string>
<string name="breadgrams_calc">Si els valors de glucèmia estan fora dels valors acceptats (massa alts o massa baixos) la calculadora de bolus es pot fer servir per obtenir suggeriments de carbohidrats o correccions amb insulina.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u</string>
<string name="extendedcarbs_label">e-carbs</string>
<string name="extendedcarbs_handling">Per a què poden ser utilitzats els e-carbs (carbohidrats estesos)?</string>
<string name="extendedcarbs_future">Per programar carbs del futur, possiblement distribuïts durant un interval de temps (similar a un bolus estès distribuint insulina durant un interval).</string>
<string name="extendedcarbs_free">Per registrar carbohidrats d\'esport \"lliures\" que volgueu ocultar a AndroidAPS.</string>
<string name="extendedcarbs_fat">els e-carbs (distribuïts en el futur) poden ajudar AndroidAPS a gestionar àpats rics en greix/proteïnes.</string>
<string name="extendedcarbs_rescue">Per registrar els carbohidrats de rescat que s\'utilitzen per tractar hipoglucèmies.</string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Monitorització a distància</string>
<string name="nsclient_howcanyou">Com podeu monitoritzar AndroidAPS (per exemple per la vostra filla) a distància?</string>
<string name="nsclient_nightscout">Les aplicacions NS Client i Nightscout, així com la web Nightscout us permeten fer un seguiment d\'AndroidAPS a distància.</string>
<string name="nsclient_dexcomfollow">Altres aplicacions (p.ex. Dexcom follow, xDrip en mode seguiment) us permeten monitoritzar alguns paràmetres (p.ex. glucèmia/valors sensor) de forma remota, però fan servir algoritmes diferents, per tant poden tenir valors d\'IOB o COB inexactes.</string>
<string name="nsclient_data">Per seguir AndroidAPS a distància, ambdos dispositius han de tenir accés a internet (p.ex. via Wi-Fi o dades de la xarxa mòbil).</string>
<string name="nsclient_fullcontrol">L\'NS Client utilitzat com a seguidor remot, permet tant monitoritzar AndroidAPS com controlar-lo totalment.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html</string>
<string name="isf_label_exam">Factor de Sensibilitat a la Insulina (ISF)</string>
<string name="isf_noeffect">Augmentar o disminuir l\'ISF no afecta la quantitat d\'insulina a lliurar quan els valors de glucèmia estan per sota de l\'objectiu.</string>
<string name="isf_preferences">Cal introduir l\'ISF a la configuració d\'AndroidAPS.</string>
<string name="isf_profile">Modificar el valor d\'ISF al perfil és suficient per aplicar el canvi.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html</string>
@ -186,7 +158,6 @@
<string name="profileswitch2_bgunchanged">L\'objectiu de glucèmia no canviarà.</string>
<string name="profileswitch2_isfhigher">L\'ISF serà un 20% més alt.</string>
<string name="profileswitchtime_label">Canvis de perfil</string>
<string name="profileswitchtime_iwant">Si us lleveu 2 hores abans de l\'habitual, com hauríeu de notificar AndroidAPS del vostre canvi d\'horari?</string>
<string name="profileswitchtime_2">Iniciant un canvi de perfil amb un desplaçament horari de 2.</string>
<string name="profileswitchtime__2">Iniciant un canvi de perfil amb un desplaçament horari de -2.</string>
<string name="profileswitchtime_tt">Establint un objectiu temporal de \"Menjar aviat\".</string>
@ -194,7 +165,6 @@
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift</string>
<string name="profileswitch4_label">Modificacions de perfils</string>
<string name="profileswitch4_rates">Als perfils cal establir les basals, l\'ISF, la ràtio I:C, etc.</string>
<string name="profileswitch4_internet">Activar els canvis al vostre perfil Nightscout requereix que el vostre telèfon amb AndroidAPS tingui connexió a Internet.</string>
<string name="profileswitch4_sufficient">Editar valors d\'un perfil és suficient per activar els canvis realitzats.</string>
<string name="profileswitch4_multi">És possible configurar múltiples perfils i seleccionar-los per adaptar-nos a circumstàncies canviants (p.ex. canvis hormonals, torns de feina rotatius, dies laborables/caps de setmana).</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy</string>
@ -204,6 +174,4 @@
<string name="basalhelp_google">Google</string>
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Altres medicaments. Si us plau llegiu la següent declaració i marqueu la casella per acceptar-la.</string>
<string name="other_medication_text">AndroidAPS redueix les ràtios de basal o suspèn l\'administració d\'insulina per augmentar la glucèmia. Els medicaments del grup dels inhibidors SGLT2 (gliflozines) poden evitar augments de glucèmia i per tant produir una manca perillosa d\'insulina que porti a una cetoacidosi diabètica.
\nAlgunes marques habituals són: Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nI Per la present, prometo que no prendré medicaments d\'aquest tipus mentre faci servir AndroidAPS i que desactivaria el llaç abans de prendre\'n.</string>
</resources>

View file

@ -25,8 +25,6 @@
<string name="objectives_pumpstatusavailableinns">Estat de la bomba disponible a NS</string>
<string name="objectives_manualenacts">Activació manual</string>
<string name="accomplished">Completat: %1$s</string>
<string name="objectives_usage_objective">Apreneu com controlar AndroidAPS</string>
<string name="objectives_usage_gate">Realitzeu diferents accions a AndroidAPS</string>
<string name="objectives_useprofileswitch">Establiu un perfil del 90% durant 10 minuts (pulsació llarga sobre el nom del perfil a \"Inici\")</string>
<string name="objectives_usedisconnectpump">Simuleu una dutxa. Desconnecteu la bomba durant 1h (pulsació llarga sobre la icona \"llaç obert\")</string>
<string name="objectives_usereconnectpump">... i torneu a connectar de la mateixa manera</string>

View file

@ -38,9 +38,7 @@
<string name="description_source_ns_client">Descarrega dades de glucèmia des de Nightscout</string>
<string name="description_source_xdrip">Rebre valors de glucèmia de xDrip+.</string>
<string name="description_treatments">Desa tots els tractaments realitzats</string>
<string name="description_wear">Monitoritzar i controlar AndroidAPS des del vostre rellotge WearOS.</string>
<string name="description_xdrip_status_line">Mostrar informació del llaç a la vostra esfera xDrip+.</string>
<string name="description_sms_communicator">Controlar remotament AndroidAPS amb ordres SMS.</string>
<string name="treatments_insulin_label_string">Insulina:</string>
<string name="treatments_carbs_label_string">Carbs:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -77,9 +75,7 @@
<string name="treatments">Tractaments</string>
<string name="virtualpump">Bomba virtual</string>
<string name="configbuilder_pump">Bomba</string>
<string name="configbuilder_pump_description">Quina bomba voleu utilitzar amb AndroidAPS?</string>
<string name="configbuilder_profile">Perfil</string>
<string name="configbuilder_profile_description">Quin perfil ha d\'utilitzar AndroidAPS?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Quin algoritme APS ha d\'anar fent ajustos de teràpia?</string>
<string name="configbuilder_general">General</string>
@ -87,7 +83,6 @@
<string name="configbuilder_constraints_description">Quines restriccions s\'estan aplicant?</string>
<string name="constraints">Restriccions</string>
<string name="configbuilder_loop">Llaços</string>
<string name="configbuilder_loop_description">Fes-ho servir per activar la integració del llaç d\'AndroidAPS.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_tbrsetbypump_label">Basal temporal definida per la bomba</string>
<string name="noapsselected">CAP APS SELECCIONAT O RESULTAT ENTREGAT</string>
@ -102,7 +97,6 @@
<string name="sms_basal">Basal:</string>
<string name="changeyourinput">Modifiqueu les dades!</string>
<string name="configbuilder_bgsource">Origen glucèmia</string>
<string name="configbuilder_bgsource_description">D\'on ha d\'obtenir AndroidAPS les seves dades?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">Mode APS</string>
<string name="closedloop">Llaç tancat</string>

View file

@ -5,7 +5,7 @@
<string name="dia_profile">Měli byste nastavit hodnotu DIA ve vašem profilu.</string>
<string name="dia_minimumis5h">Minimální hodnota je 5 hodin.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Configuration/Config-Builder.html#inzulin</string>
<string name="dia_meaningisequaltodiapump">Pokud jste spokojeni s tím, že hodnota DIA použitá v pumpě před AndroidAPS dobře fungovala, není třeba ji měnit, když začínáte se smyčkou.</string>
<string name="dia_meaningisequaltodiapump">Pokud jste spokojeni s tím, že hodnota DIA použitá v pumpě před AAPS dobře fungovala, není třeba ji měnit, když začínáte se smyčkou.</string>
<string name="dia_valuemustbedetermined">Měli byste si pro sebe určit příslušnou hodnotu DIA.</string>
<string name="hypott_label">Dočasný cíl při hypoglykémii</string>
<string name="hypott_whenhypott">Co je primárním důvodem k nastavení dočasného cíle Hypoglykémie?</string>
@ -18,15 +18,15 @@
<string name="offlineprofile_label">Téma: Offline profil</string>
<string name="offlineprofile_nsprofile">NS profil může být použit, ale ne nastaven.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Důvody pro použití \"Odpojit pumpu\" v AndroidAPS</string>
<string name="pumpdisconnect_label">Důvody pro použití \"Odpojit pumpu\" v AAPS</string>
<string name="pumpdisconnect_whattodo">Co se má provést při odpojení pumpy?</string>
<string name="pumpdisconnect_unnecessary">To je zbytečné, protože inzulín nebude dodáván v případě, že je pumpa fyzicky odpojena.</string>
<string name="pumpdisconnect_missinginsulin">Zabraňuje AndroidAPS započítat inzulín, který nebyl dodán, když je pumpa fyzicky odpojena</string>
<string name="pumpdisconnect_missinginsulin">Zabraňuje AAPS započítat inzulín, který nebyl dodán, když je pumpa fyzicky odpojena</string>
<string name="pumpdisconnect_notstop">Nezastaví vydávání inzulínu, pokud pumpa zůstane připojena.</string>
<string name="pumpdisconnect_openloop">Pošle AndroidAPS do režimu otevřené smyčky.</string>
<string name="pumpdisconnect_openloop">Pošle AAPS do režimu otevřené smyčky.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Getting-Started/FAQ.html#dalsi-nastaveni</string>
<string name="objectives_label">AndroidAPS nastavení</string>
<string name="objectives2_label">AndroidAPS nastavení</string>
<string name="objectives_label">Nastavení AAPS</string>
<string name="objectives2_label">Nastavení AAPS</string>
<string name="objectives_howtosave">Jaké jsou nejlepší postupy pro zálohování vašich nastavení?</string>
<string name="objectives_notesettings">Nastavení není třeba exportovat za předpokladu, že jste si je poznamenali.</string>
<string name="objectives_afterobjective">Exportujte svá nastavení po dokončení cíle.</string>
@ -71,7 +71,7 @@
<string name="basaltest_fixed">Jakmile jsou tyto hodnoty nastaveny a ověřeny, neměly by se časem měnit.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Getting-Started/FAQ.html#nastaveni-androidaps</string>
<string name="prerequisites_label">Požadavky</string>
<string name="prerequisites_what">Co je nezbytné pro nastavení a používání AndroidAPS?</string>
<string name="prerequisites_what">Co je nezbytné pro nastavení a používání AAPS?</string>
<string name="prerequisites_determinedcorrectprofile">Ověřené informace o profilu (Bazál, IC, ISF, DIA).</string>
<string name="prerequisites_computer">Počítač s nainstalovanou a konfigurovanou aplikací Android Studio.</string>
<string name="prerequisites_phone">Podporovaný telefon.</string>
@ -86,25 +86,25 @@
<string name="prerequisites_smartwatch">Chytré hodinky.</string>
<string name="prerequisites_supportedcgm">Podporované CGM.</string>
<string name="prerequisites2_label">Požadavky</string>
<string name="prerequisites2_what">Co je nezbytné pro nastavení a používání AndroidAPS?</string>
<string name="prerequisites2_what">Co je nezbytné pro nastavení a používání AAPS?</string>
<string name="prerequisites2_profile">Ověřené informace pro nastavení profilu (ISF, poměr I:C, bazální dávky, DIA atd.).</string>
<string name="prerequisites2_device">Kompatibilní Android zařízení (např. mobilní telefon, Android hodinky nebo tablet).</string>
<string name="prerequisites2_internet">AndroidAPS vyžaduje připojení k internetu pro spuštění uzavřené smyčky.</string>
<string name="prerequisites2_internet">AAPS vyžaduje připojení k internetu pro spuštění uzavřené smyčky.</string>
<string name="prerequisites2_supportedcgm">Podporované CGM a vhodná aplikace pro příjem glykémií v telefonu/zařízení.</string>
<string name="prerequisites2_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Module/module.html</string>
<string name="update_label">Aktualizace AndroidAPS</string>
<string name="update_label">Aktualizace AAPS</string>
<string name="whatistrue">Zatrhněte všechny správné odpovědi.</string>
<string name="update_git">Musíte mít nainstalovaný a nakonfigurovaný Git na vašem počítači.</string>
<string name="update_asap">Pokud jsou uvolněny aktualizované verze AndroidAPS, starší verze mohou být po určité době vzdálené omezeny.</string>
<string name="update_asap">Pokud jsou uvolněny aktualizované verze AAPS, starší verze mohou být po určité době vzdálené omezeny.</string>
<string name="update_keys">Měli byste uložit a zaznamenat umístění úložiště klíčů a použít stejný podpisový klíč pro aktualizace jako pro vaši předchozí instalaci.</string>
<string name="update_neverupdate">Nikdy neaktualizujte, pokud systém funguje dobře.</string>
<string name="update_askfriend">Máte-li potíže se sestavením apk, můžete nainstalovat apk, který byl vybudován přítelem.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Installing-AndroidAPS/Update-to-new-version.html</string>
<string name="troubleshooting_label">Řešení problémů</string>
<string name="troubleshooting_wheretoask">Kde můžete hledat pomoc s AndroidAPS?</string>
<string name="troubleshooting_fb">Můžete požádat o radu v Facebookové skupině uživatelů AndroidAPS.</string>
<string name="troubleshooting_wiki">Měli byste si přečíst (a znovu přečíst) dokumentaci AndroidAPS.</string>
<string name="troubleshooting_gitter">Můžete požádat o radu a nahlásit technické problémy nebo potíže na Discordu Aaps.</string>
<string name="troubleshooting_wheretoask">Kde můžete hledat pomoc s AAPS?</string>
<string name="troubleshooting_fb">Můžete požádat o radu v Facebookové skupině uživatelů AAPS.</string>
<string name="troubleshooting_wiki">Měli byste si přečíst (a znovu přečíst) dokumentaci AAPS.</string>
<string name="troubleshooting_gitter">Můžete požádat o radu a nahlásit technické problémy nebo potíže na Discordu AAPS.</string>
<string name="troubleshooting_yourendo">Měli byste se zeptat svého lékaře/endokrinologa.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/index.html#poradce-pri-potizich</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/AndroidAPSUsers/</string>
@ -118,7 +118,7 @@
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Configuration/Config-Builder.html#inzulin</string>
<string name="sensitivity_label">Pluginy Citlivost</string>
<string name="sensitivity_which">Zatrhněte všechny správné odpovědi.</string>
<string name="sensitivity_adjust">Pluginy citlivosti umožňují AndroidAPS přizpůsobit se dočasným nebo krátkodobým změnám v citlivosti inzulinu (například hormonální změny nebo problémy s absorpcí na infúzním místě).</string>
<string name="sensitivity_adjust">Pluginy citlivosti umožňují AAPS přizpůsobit se dočasným nebo krátkodobým změnám v citlivosti inzulinu (například hormonální změny nebo problémy s absorpcí na infúzním místě).</string>
<string name="sensitivity_edit">Pluginy citlivosti poskytují uživateli návrh změn bazálních hodnot, I:C poměrů a ISF, které mohou být použity k úpravě profilu.</string>
<string name="sensitivity_cannula">Výměna kanyly nebo změna profilu automaticky nastaví Autosense zpět na 100%.</string>
<string name="sensitivity_time">Některé pluginy mají konfigurovatelné časové rozmezí, které může nastavit uživatel.</string>
@ -128,14 +128,14 @@
<string name="wrongcarbs_whattodo">Co byste měli udělat, pokud jste zadali chybně sacharidy?</string>
<string name="wrongcarbs_treatmentstab">Odstraňte nesprávný záznam v Ošetření a zadejte správnou novou hodnotu sacharidů.</string>
<string name="wrongcarbs_addinsulin">Pošlete inzulín pomocí plnění/doplňování.</string>
<string name="wrongcarbs_donothing">Nic nedělejte AndroidAPS provede příslušné úpravy.</string>
<string name="wrongcarbs_donothing">Nic nedělejte AAPS provede příslušné úpravy.</string>
<string name="wrongcarbs_bolus">Pošlete inzulín pomocí ikony Inzulín v přehledu.</string>
<string name="wronginsulin_label">Chyby v podání inzulínu</string>
<string name="wronginsulin_whattodo">Co byste měli udělat, pokud jste dostali méně inzulínu, než ukazuje historie pumpy, např. v důsledku okluze, vadné kanyly nebo zapomenutí na opětovné připojení pumpy po sprše? </string>
<string name="wronginsulin_careportal">Odstraňte data z Nightscoutu pro odstranění z historie pumpy.</string>
<string name="wronginsulin_compare">Porovnat hodnoty v AndroidAPS s hodnotami v historii pumpy (pokud to pumpa podporuje).</string>
<string name="wronginsulin_compare">Porovnat hodnoty v AAPS s hodnotami v historii pumpy (pokud to pumpa podporuje).</string>
<string name="wronginsulin_prime">Pošlete bolus na vypočtený „chybějící“ inzulín buď injekční stříkačkou nebo perem nebo pomocí plnění na pumpě.</string>
<string name="wronginsulin_donothing">Neudělejte nic a dovolte AndroidAPS opravit jakoukoliv výslednou vysokou hladinu glukózy v krvi.</string>
<string name="wronginsulin_donothing">Neudělejte nic a dovolte AAPS opravit jakoukoliv výslednou vysokou hladinu glukózy v krvi.</string>
<string name="cob_label">Zbývající sacharidy (COB)</string>
<string name="cob_question">Jak změna hodnoty citlivosti ovlivňuje výpočet COB?</string>
<string name="cob_longer">Zvýšení hodnoty citlivosti prodlouží dobu absorpce sacharidů</string>
@ -157,28 +157,28 @@
<string name="breadgrams_label">Zadávání sacharidů a bolusy</string>
<string name="breadgrams_grams">Pouze gramy by měly být použity pro odhad a záznam spotřebovaných sacharidů.</string>
<string name="breadgrams_exchange">Spotřebované sacharidy lze nahrávat pomocí vhodného systému (např. \"výměnné jednotky\").</string>
<string name="breadgrams_decay">AndroidAPS používá dynamický model k odhadu vstřebávání sacharidů a k výpočtu COB.</string>
<string name="breadgrams_decay">AAPS používá dynamický model k odhadu vstřebávání sacharidů a k výpočtu COB.</string>
<string name="breadgrams_calc">Pokud jsou hladiny glykémie v krvi mimo přijatelné hodnoty (příliš nízké nebo příliš vysoké), může být použit bolusová kalkulačka k podávání návrhů na sacharidy nebo na korekční bolus.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Getting-Started/FAQ.html#inzulinovosacharidovy-pomer-ic-g-u</string>
<string name="extendedcarbs_label">e-sacharidy</string>
<string name="extendedcarbs_handling">Na co byste mohli použít e-sacharidy (prodloužené sacharidy)?</string>
<string name="extendedcarbs_future">Pro plánování budoucích sacharidů, případně distribuovaných v intervalu (podobné prodlouženému bolusu).</string>
<string name="extendedcarbs_free">Pro zaznamenání \'falešných\' sacharidů při cvičení, které chcete skrýt v AndroidAPS.</string>
<string name="extendedcarbs_fat">e-sacharidy (distribuované v budoucnu) mohou AndroidAPS pomoci při nakládání s jídly s vysokým obsahem tuku/bílkovin.</string>
<string name="extendedcarbs_free">Pro zaznamenání \'falešných\' sacharidů při cvičení, které chcete skrýt v AAPS.</string>
<string name="extendedcarbs_fat">e-sacharidy (distribuované v budoucnu) mohou AAPS pomoci při nakládání s jídly s vysokým obsahem tuku/bílkovin.</string>
<string name="extendedcarbs_rescue">Pro zaznamenání rychlých sacharidů použitých k léčbě nízké hladiny glykémie v krvi</string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Vzdálené sledování</string>
<string name="nsclient_howcanyou">Jak můžete vzdáleně monitorovat AndroidAPS (například své dítě)?</string>
<string name="nsclient_nightscout">NS Client, aplikace Nightscout a webová stránka Nightscout umožnují sledovat AndroidAPS vzdáleně.</string>
<string name="nsclient_howcanyou">Jak můžete vzdáleně monitorovat AAPS (například své dítě)?</string>
<string name="nsclient_nightscout">AAPSClient, aplikace Nightscout a webová stránka Nightscout umožnují sledovat AAPS vzdáleně.</string>
<string name="nsclient_dexcomfollow">Další aplikace (např. Dexcom follow, xDrip běžící v režimu sledování) vám umožňují sledovat některé parametry (např. hodnoty glykémie) na dálku, ale použití různých algoritmů může mít vliv na nepřesné hodnoty IOB nebo COB.</string>
<string name="nsclient_data">Chcete-li sledovat AndroidAPS dálkově, musí mít obě zařízení přístup k internetu (např. přes Wi-Fi nebo mobilní síť/mobilní síť).</string>
<string name="nsclient_fullcontrol">NSClient umožní oboje: monitorovat a poskytovat plnou kontrolu nad AndroidAPS.</string>
<string name="nsclient_data">Chcete-li sledovat AAPS dálkově, musí mít obě zařízení přístup k internetu (např. přes Wi-Fi nebo mobilní síť/mobilní síť).</string>
<string name="nsclient_fullcontrol">AAPSClient umožní oboje: monitorovat a poskytovat plnou kontrolu nad AAPS.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Children/Children.html</string>
<string name="isf_label_exam">Citlivost inzulínu (ISF)</string>
<string name="isf_increasingvalue">Zvýšení hodnot citlivosti povede k větší dodávce inzulínu k pokrytí určitého množství sacharidů.</string>
<string name="isf_decreasingvalue">Snížení hodnot citlivosti vede k většímu množství inzulinu pro korekci vyšší glykémie.</string>
<string name="isf_noeffect">Zvýšení nebo snížení citlivosti nemá žádný vliv na výdej inzulinu, pokud jsou hladiny glykémie v krvi pod cílovou hodnotou.</string>
<string name="isf_preferences">ISF by měl být zadán do předvoleb AndroidAPS.</string>
<string name="isf_preferences">ISF by měl být zadán do předvoleb AAPS.</string>
<string name="isf_profile">Změna hodnoty citlivosti ve vašem profilu postačuje k tomu, aby se tato změna použila.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Getting-Started/FAQ.html#korekcni-faktor-citlivost-na-inzulin-isf-mmol-l-u-nebo-mg-dl-u</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Usage/Profiles.html</string>
@ -205,7 +205,7 @@
<string name="profileswitch2_bgunchanged">Cílová glykémie se nezmění.</string>
<string name="profileswitch2_isfhigher">Hodnota citlivosti bude o 20 % vyšší.</string>
<string name="profileswitchtime_label">Přepnutí profilu</string>
<string name="profileswitchtime_iwant">Pokud se probudíte o 2h dříve než obvykle, jak byste měli oznámit AndroidAPS tuto změnu?</string>
<string name="profileswitchtime_iwant">Pokud se probudíte o 2h dříve než obvykle, jak byste měli oznámit AAPS tuto změnu?</string>
<string name="profileswitchtime_2">Proveďte přepnutí profilu s posunem času 2</string>
<string name="profileswitchtime__2">Proveďte přepnutí profilu s posunem času -2</string>
<string name="profileswitchtime_tt">Nastavte dočasný cíl Před jídlem.</string>
@ -213,7 +213,7 @@
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Usage/Profiles.html#posun-casu</string>
<string name="profileswitch4_label">Změna profilu</string>
<string name="profileswitch4_rates">V profilech by měly být nastaveny bazální dávky, ISF, I:C poměry, atd.</string>
<string name="profileswitch4_internet">Aktivace změn vašeho profilu Nightscout vyžaduje, aby váš telefon AndroidAPS měl k dispozici připojení k Internetu.</string>
<string name="profileswitch4_internet">Aktivace změn vašeho profilu Nightscout vyžaduje, aby váš telefon AAPS měl k dispozici připojení k Internetu.</string>
<string name="profileswitch4_sufficient">Úprava profilů za účelem změny hodnot je dostatečná k provedení všech provedených změn.</string>
<string name="profileswitch4_multi">Je možné nastavit a vybrat z více profilů za účelem přizpůsobení se měnícím se okolnostem (např. hormonální změny, pracovní dny směny, pracovní dny/víkend životního stylu).</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Module/module.html#spravny-individualni-algoritmus-davkovani-pro-lecbu-vaseho-diabetu</string>
@ -224,5 +224,5 @@
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Ostatní léky. Přečtěte si prosím níže uvedené prohlášení a poté zaškrtněte políčko pro přijetí prohlášení.</string>
<string name="other_medication_text">AAPS snižuje bazály na zvýšení hladiny cukru v krvi. Léky ze skupiny inhibitorů SGLT2 (glifloziny) mohou zabránit očekávanému zvýšení hodnoty glykémie, a tak mohou produkovat nebezpečný nedostatek inzulínu (ketoacidózu).
\nBěžné značky jsou: Invokana ®, Forxiga ®, Jardiance ®, Steglatro ®, Suglat ®, Apleway ®, Deberza ®, Synjardy ®, Vokanamet ®, Xigduo ®.\n\nTímto slibuji, že tyto léky neberu při používání AndroidAPS nebo deaktivuji smyčku před užíváním těchto léků.</string>
\nBěžné značky jsou: Invokana ®, Forxiga ®, Jardiance ®, Steglatro ®, Suglat ®, Apleway ®, Deberza ®, Synjardy ®, Vokanamet ®, Xigduo ®.\n\nTímto slibuji, že tyto léky neberu při používání AAPS nebo deaktivuji smyčku před užíváním těchto léků.</string>
</resources>

View file

@ -25,8 +25,8 @@
<string name="objectives_pumpstatusavailableinns">Stav pumpy dostupný v NS</string>
<string name="objectives_manualenacts">Ručně spuštěno</string>
<string name="accomplished">Splněno: %1$s</string>
<string name="objectives_usage_objective">Naučte se, jak ovládat AndroidAPS</string>
<string name="objectives_usage_gate">Provádějte v AndroidAPS různé akce</string>
<string name="objectives_usage_objective">Naučte se, jak ovládat AAPS</string>
<string name="objectives_usage_gate">Provádějte v AAPS různé akce</string>
<string name="objectives_useprofileswitch">Nastavte profil na 90 % na 10 min (Dlouhé stisknutí názvu profilu na obrazovce Přehled)</string>
<string name="objectives_usedisconnectpump">Předstírejte, že se jdete sprchovat. Odpojte pumpu na 1 h (Dlouze přidržte tlačítko Otevřená smyčka)</string>
<string name="objectives_usereconnectpump">...a stejným způsobem ji znovu připojte</string>

View file

@ -40,9 +40,9 @@
<string name="description_source_ns_client">Příjem glykémií z Nightscoutu</string>
<string name="description_source_xdrip">Příjem glykémií z xDripu+.</string>
<string name="description_treatments">Ukládá všechny ošetření do databáze</string>
<string name="description_wear">Zobrazování stavu a řízení AndroidAPS z hodinek s WearOS</string>
<string name="description_wear">Zobrazování stavu a řízení AAPS z hodinek s WearOS.</string>
<string name="description_xdrip_status_line">Zobrazování informací o smyčce na xDrip+ watchface.</string>
<string name="description_sms_communicator">Vzdálené řízení pomocí SMS příkazů</string>
<string name="description_sms_communicator">Vzdálené ovládání AAPS pomocí SMS příkazů.</string>
<string name="treatments_insulin_label_string">Inzulín:</string>
<string name="treatments_carbs_label_string">Sacharidy:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -79,9 +79,9 @@
<string name="treatments">Ošetření</string>
<string name="virtualpump">Virtuální pumpa</string>
<string name="configbuilder_pump">Pumpa</string>
<string name="configbuilder_pump_description">Jakou pumpu chcete používat s AndroidAPS?</string>
<string name="configbuilder_pump_description">Jakou pumpu chcete s AAPS používat?</string>
<string name="configbuilder_profile">Profil</string>
<string name="configbuilder_profile_description">Jaký profil má AndroidAPS používat?</string>
<string name="configbuilder_profile_description">Jaký profil má AAPS použít?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Jaký algoritmus má AndroidAPS používat?</string>
<string name="configbuilder_general">Obecné</string>
@ -89,7 +89,7 @@
<string name="configbuilder_constraints_description">Jaká omezení byla použita?</string>
<string name="constraints">Omezení</string>
<string name="configbuilder_loop">Smyčka</string>
<string name="configbuilder_loop_description">Integrace smyčky do AndroidAPS.</string>
<string name="configbuilder_loop_description">Použitím aktivujte integraci AAPS.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Po zpracování omezení</string>
<string name="loop_tbrsetbypump_label">Bazál nastavený pumpou</string>
@ -106,7 +106,7 @@
<string name="sms_basal">Bazál:</string>
<string name="changeyourinput">Změňte zadání!</string>
<string name="configbuilder_bgsource">Zdroj glykémie</string>
<string name="configbuilder_bgsource_description">Odkud má získávat AndroidAPS glykémie?</string>
<string name="configbuilder_bgsource_description">Odkud má AAPS získávat glykémie?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">Typ smyčky</string>
<string name="closedloop">Uzavřená smyčka</string>
@ -429,7 +429,7 @@
<string name="sensitivityweightedaverage">Sensitivita vážený průměr</string>
<string name="notloadedplugins">Všechny profily nenačteny!</string>
<string name="valuesnotstored">Hodnoty nejsou uloženy!</string>
<string name="ns_localbroadcasts">Povolit vysílání do jiných aplikací (například xDrip+). Nepovolujte, pokud máte instalovánu více než jednu instanci AAPS nebo NSClient!</string>
<string name="ns_localbroadcasts">Povolit vysílání do jiných aplikací (například xDrip+). Nepovolujte, pokud máte instalovánu více než jednu instanci AAPS nebo AAPSClient!</string>
<string name="ns_localbroadcasts_title">Povolení odesílaní</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamická ISF</string>
@ -631,7 +631,7 @@
<string name="welcometosetupwizard">Vítejte v průvodci nastavením. Provede Vás procesem nastavení programu\n</string>
<string name="readstatus">Načíst status</string>
<string name="exitwizard">Přeskočit průvodce</string>
<string name="setupwizard_loop_description">Stiskněte tlačítko níže, chcete-li AndroidAPS povolit navrhovat nebo provádět změny bazálu</string>
<string name="setupwizard_loop_description">Stiskněte tlačítko níže, chcete-li AAPS povolit navrhovat nebo provádět změny bazálu</string>
<string name="setupwizard_sensitivity_description">Plugin senzitivita slouží k detekci změn v senzitivitě a k počítání COB. Více informací zde:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/cs/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="nsclientinfotext">NSClient slouží ke spojení s Nightscoutem. Nastavení můžete nyní přeskočit, ale nebudete schopni dokončit cíle, dokud nastavení neprovedete.</string>
@ -673,7 +673,7 @@
<string name="remove_items">Odstranit položky</string>
<string name="sort_items">Seřadit položky</string>
<string name="storedsettingsfound">Nalezeno uložené nastavení</string>
<string name="allow_hardware_pump_text">POZOR: Pokud aktivuje a připojíte skutečnou pumpu, AndroidAPS nakopíruje (a bude udržovat) nastavení bazálu z aktivního profilu do pumpy. Nastavení bazálu v pumpě bude přepsáno. Pokud si nejste jistí nebo nechcete přepsat bazály v pumpě, stiskněte Zrušit a opakujte přepnutí na jinou pumpu později.</string>
<string name="allow_hardware_pump_text">POZOR: Pokud aktivuje a připojíte skutečnou pumpu, AAPS nakopíruje (a bude udržovat) nastavení bazálu z aktivního profilu do pumpy. Nastavení bazálu v pumpě bude přepsáno. Pokud si nejste jistí nebo nechcete přepsat bazály v pumpě, stiskněte Zrušit a opakujte přepnutí na jinou pumpu později.</string>
<string name="error_adding_treatment_title">Data ošetření neúplná</string>
<string name="maintenance_settings">Nastavení údržby</string>
<string name="maintenance_email">Příjemce e-mailu</string>
@ -774,7 +774,7 @@
<string name="id">ID:</string>
<string name="submit">Odeslat</string>
<string name="mostcommonprofile">Nejběžnější profil:</string>
<string name="survey_comment">Poznámka: Pouze data viditelná na této obrazovce budou odesílána anonymně. ID je přiřazeno k této instalaci produktu AndroidAPS. Data můžete znovu odeslat, pokud se váš hlavní profil změní, ale nechte ho běžet alespoň týden, aby byl výsledek viditelný v čase v rozsahu. Vážíme si Vaši pomoci.</string>
<string name="survey_comment">Poznámka: Pouze data viditelná na této obrazovce budou odesílána anonymně. ID je přiřazeno k této instalaci produktu AAPS. Data můžete znovu odeslat, pokud se váš hlavní profil změní, ale nechte ho běžet alespoň týden, aby byl výsledek viditelný v čase v rozsahu. Vážíme si Vaši pomoci.</string>
<string name="invalidage">Neplatná položka věku</string>
<string name="invalidweight">Neplatná položka váhy</string>
<string name="invalidpct">Neplatný vstup %</string>
@ -819,7 +819,7 @@
<string name="smscommunicator_otp_export_prompt">Jste si jisti, že chcete zkopírovat tajný OTP klíč do schránky?\n\nPravděpodobně to budete potřebovat pouze v případě, když bude mít vaše ověřovací aplikace problém se skenováním QR kodu, chcete ho zadat ručně, nebo chcete nakonfigurovat hardwarový OTP token pomocí specializované aplikace.</string>
<string name="smscommunicator_otp_export_successful">Tajné OTP heslo (ve formátu Base32) bylo vyexportováno a zkopírováno do schránky. Vložte ho do autentikátoru nebo programátoru OTP hardwaru!</string>
<string name="smscommunicator_otp_step1_install_header">1. Nainstalujte Autentikátor</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Naskenujte kód pro nastavení kódů OTP AndroidAPS</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Naskenujte kód pro nastavení kódů OTP AAPS</string>
<string name="smscommunicator_otp_step3_test_header">3. Otestujte jednorázové heslo</string>
<string name="smscommunicator_otp_reset_header">Resetovat autentikátory</string>
<string name="smscommunicator_otp_install_info">Na každém sledovacím telefonu nainstalujte Authentikátor, který podporuje tokeny TOTP RFC 6238. Nejoblíbenější bezplatné aplikace jsou:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator</string>
@ -1020,7 +1020,7 @@
<string name="above" comment="above &quot;in range&quot;">Nad</string>
<string name="show_loop_records">Zobrazit záznamy smyčky</string>
<string name="show_hide_records">Skrýt záznamy smyčky</string>
<string name="widget_description">AndroidAPS widget</string>
<string name="widget_description">Widget AAPS</string>
<string name="configure">Konfigurovat průhlednost</string>
<string name="loop_status">Stav smyčky</string>
<string name="graph_scale">Měřítko grafu</string>
@ -1048,4 +1048,7 @@
<string name="no_watch_connected">(Žádné hodinky nejsou připojeny)</string>
<string name="error_asking_for_permissions">Chyba žádosti o oprávnění</string>
<string name="dynisf_adjust_sensitivity">Upravit citlivost a glykémii</string>
<string name="database_cleanup">Vyčištění databáze</string>
<string name="cleanup_db_confirm">Chcete vyčistit databázi?\nOdstraní sledované změny a historická data starší než 3 měsíce.</string>
<string name="cleared_entries">Vymazané záznamy</string>
</resources>

View file

@ -5,12 +5,10 @@
<string name="dia_profile">Du skal angive værdien for DIA i din profil.</string>
<string name="dia_minimumis5h">Den mindst tilladte værdi er 5 timer.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">Hvis du er tilfreds med den værdi af DIA som du brugte i din pumpe før AndroidAPS, er der ingen grund til at ændre dette når du begynder at loope.</string>
<string name="dia_valuemustbedetermined">Du bør selv bestemme, hvad den passende værdi af DIA er for dig.</string>
<string name="hypott_label">Hypo midlertidig basal</string>
<string name="hypott_whenhypott">Hvad er den primære årsag til at sætte et hypo midlertidig mål?</string>
<string name="hypott_wrongbasal">For at rette op for hypo, forårsaget af forkerte basal rate indstillinger.</string>
<string name="hypott_preventoversmb">For at forhindre AndroidAPS i at overkorrigere for en blodsukker stigning forårsaget af de hurtigtvirkende kulhydrater, der anvendes til at behandle en hypo.</string>
<string name="hypott_exercise">At korrigere for hypoglykæmi (Lavt blodsukker) induceret som følge af motion.</string>
<string name="hypott_0basal">For at undgå lav blodglukose, hvis der allerede er en midlertidig basal på 0%.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html</string>
@ -18,15 +16,10 @@
<string name="offlineprofile_label">Emne: Offlineprofil</string>
<string name="offlineprofile_nsprofile">NS-profil kan bruges, men ikke konfigureres.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Grunde til \"Afbryd Pumpe\" i AndroidAPS</string>
<string name="pumpdisconnect_whattodo">Hvad skal man gøre, når man frakobler pumpen?</string>
<string name="pumpdisconnect_unnecessary">Dette er unødvendigt, da insulin ikke vil blive leveret, hvis pumpen er fysisk afbrudt.</string>
<string name="pumpdisconnect_missinginsulin">Det forhindrer AndroidAPS i at tage højde for insulin, der ikke blev leveret, mens pumpen er fysisk afkoblet. </string>
<string name="pumpdisconnect_notstop">Det vil ikke stoppe insulinleveringen, hvis pumpen forbliver forbundet.</string>
<string name="pumpdisconnect_openloop">Det vil ændre AndroidAPS til \"Open Loop\" Tilstanden.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings</string>
<string name="objectives_label">AndroidAPS indstillinger</string>
<string name="objectives2_label">AndroidAPS indstillinger</string>
<string name="objectives_howtosave">Hvad er den bedste fremgangsmåde for at lave en backup af dine indstillinger?</string>
<string name="objectives_notesettings">Du behøver ikke at exportere dine indstillinger, hvis du laver en note af dem.</string>
<string name="objectives_afterobjective">Eksportér dine indstillinger, når du er færdig med at udføre et objektiv.</string>
@ -40,7 +33,6 @@
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me</string>
<string name="noisycgm_label">CGM målinger med \"støj\"</string>
<string name="noisycgm_whattodo">Hvad skal der gøres, hvis der er støj i CGM data?</string>
<string name="noisycgm_nothing">Gør ingenting - AndroidAPS tager sig af det.</string>
<string name="noisycgm_pause">Deaktivér lukket loop for at undgå mulig over- eller underdosering.</string>
<string name="noisycgm_replacesensor">Erstat konsekvent støjende eller unøjagtige sensorer.</string>
<string name="noisycgm_checksmoothing">Kontrollér, at din CGM-app viser udjævnet data.</string>
@ -71,7 +63,6 @@
<string name="basaltest_fixed">Når de er angivet og valideret, skal disse værdier ikke ændres over tid.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings</string>
<string name="prerequisites_label">Forudsætninger</string>
<string name="prerequisites_what">Hvad er afgørende for at opsætte og bruge AndroidAPS?</string>
<string name="prerequisites_determinedcorrectprofile">Valideret profilinformationer (Basaler, I:C, ISF, DIA).</string>
<string name="prerequisites_computer">En computer med Android Studio installeret og konfigureret.</string>
<string name="prerequisites_phone">En understøttet telefon.</string>
@ -86,25 +77,17 @@
<string name="prerequisites_smartwatch">Et Smartwatch.</string>
<string name="prerequisites_supportedcgm">En Understøttet CGM.</string>
<string name="prerequisites2_label">Forudsætninger</string>
<string name="prerequisites2_what">Hvad er afgørende for at opsætte og bruge AndroidAPS?</string>
<string name="prerequisites2_profile">Valideret information til at konfigurere en profil (ISF, I:C ratio, basal rate, DIA osv.).</string>
<string name="prerequisites2_device">En kompatibel Android-enhed (f.eks. mobil / mobiltelefon, Android-ur eller tablet).</string>
<string name="prerequisites2_internet">AndroidAPS kræver en internetforbindelse for, at kunne køre i lukket loop.</string>
<string name="prerequisites2_supportedcgm">En understøttet CGM og relevant app til at modtage blodsukkerværdier på telefonen/enheden.</string>
<string name="prerequisites2_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html</string>
<string name="update_label">Opdatering af AndroidAPS</string>
<string name="whatistrue">Tjek alle de korrekte svar.</string>
<string name="update_git">Du skal have installeret Git og konfigureret på din computer.</string>
<string name="update_asap">Når opdaterede versioner af AndroidAPS er frigivet, kan de tidligere versioner være fjernbegrænset efter et angivet tidsrum.</string>
<string name="update_keys">Du skal gemme og notere placeringen af din keystore og bruge det samme kodeord til opdateringer som ved den forrige installation.</string>
<string name="update_neverupdate">Opdater aldrig, hvis systemet fungerer godt.</string>
<string name="update_askfriend">Hvis du har svært ved at bygge apk\'en, kan du installere en apk, der er blevet bygget af en ven.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch</string>
<string name="troubleshooting_label">Fejlfinding</string>
<string name="troubleshooting_wheretoask">Hvor kan du søge efter hjælp til AndroidAPS?</string>
<string name="troubleshooting_fb">Du kan bede om råd i \"AndroidAPS-users\" Facebook-gruppen.</string>
<string name="troubleshooting_wiki">Du bør læse (og genlæse) AndroidAPS dokumentation.</string>
<string name="troubleshooting_gitter">Du kan bede om råd og logge tekniske problemer eller andre problemer i AndroidAPS Discord.</string>
<string name="troubleshooting_yourendo">Du bør spørge din diabetessygeplejerske/endokrinolog.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/AndroidAPSUsers/</string>
@ -118,7 +101,6 @@
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin</string>
<string name="sensitivity_label">Sensitivitets plugins</string>
<string name="sensitivity_which">Tjek alle de korrekte svar.</string>
<string name="sensitivity_adjust">Sensitivitetsplugins giver AndroidAPS mulighed for at justere midlertidigt eller kortvarige ændringer i insulin-følsomheden (f.eks. hormonelle ændringer eller problemer med absorption på infusionsstedet).</string>
<string name="sensitivity_edit">Sensitivitetsplugins giver brugeren foreslåede ændringer i basalrater, I:C-forhold og ISF, der kan bruges til at redigere profilen.</string>
<string name="sensitivity_cannula">Notering af kanyleskift vil nulstille Autosens ratio tilbage til 100%.</string>
<string name="sensitivity_time">Nogle af plugin mulighederne har konfigurerbare tidsintervaller, der kan indstilles af brugeren.</string>
@ -128,14 +110,11 @@
<string name="wrongcarbs_whattodo">Hvad gør du, hvis du har lavet en forkert kulhydrat indtastning?</string>
<string name="wrongcarbs_treatmentstab">Slet den forkerte indtastning i Behandlinger og indtast korrekte nye kulhydrat værdier.</string>
<string name="wrongcarbs_addinsulin">Bolus med insulin ved hjælp af infusionssætmenuen.</string>
<string name="wrongcarbs_donothing">Gør ingenting - AndroidAPS vil fortage de passende justeringer.</string>
<string name="wrongcarbs_bolus">Bolus med insulin ved hjælp af knappen (bolus) i oversigt.</string>
<string name="wronginsulin_label">Fejl i insulinlevering/indtastning</string>
<string name="wronginsulin_whattodo">Hvad skal du gøre hvis du har fået mindre insulin end pumpehistorikken foreslog, f.eks. på grund af en okklusion, mislykket kanyle eller du glemmer at sætte pumpen på igen efter et brusebad?</string>
<string name="wronginsulin_careportal">Slet insulinleveringsdata fra Nightscouts Careportal for at slette det fra pumpehistorikken.</string>
<string name="wronginsulin_compare">Sammenlign værdier i AndroidAPS og pumpehistorik (hvis pumpen understøtter dette).</string>
<string name="wronginsulin_prime">Bolus en del af din beregnede \"glemte\" insulin med enten sprøjter / pen eller brug af en kanylefyldning.</string>
<string name="wronginsulin_donothing">Gør ingenting og tillad AndroidAPS at rette op på højt blodsukker.</string>
<string name="cob_label">Kulhydrater om bord (COB)</string>
<string name="cob_question">Hvordan ændring af ISF værdi påvirker COB beregning?</string>
<string name="cob_longer">Ved øget ISF, vil kulhydrater være længere tid om at absorberes</string>
@ -157,28 +136,20 @@
<string name="breadgrams_label">Kulhydrat indtastninger og bolusser</string>
<string name="breadgrams_grams">Kun gram skal bruges til at estimere og registrere kulhydrater, der er indtaget.</string>
<string name="breadgrams_exchange">Kulhydrater der er indtaget, kan blive registreret ved hjælp af et passende udvekslingssystem (F.eks. DAFNE \"CHO\"-udvekslinger eller europæiske \"brød-enheder\").</string>
<string name="breadgrams_decay">AndroidAPS bruger en dynamisk model til at estimere kulhydrat “henfald” og beregne COB.</string>
<string name="breadgrams_calc">Hvis blodsukkeret er uden for acceptable værdier (for lavt eller for høj), kan bolusberegneren bruges til at levere forslag til kulhydrat eller insulin korrektioner.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u</string>
<string name="extendedcarbs_label">e-kulhydrater</string>
<string name="extendedcarbs_handling">Hvad kan du bruge e-kulhydrater (Forlængede kulhydrater) til?</string>
<string name="extendedcarbs_future">Til at planlægge kulhydrat i fremtiden, evt. uddelt over et interval (svarende til en forlænget bolus, der distribuerer insulin over et interval).</string>
<string name="extendedcarbs_free">Til at logge \'gratis\' motions kulhydrater du ønsker at skjule fra AndroidAPS.</string>
<string name="extendedcarbs_fat">e-kulhydrat (distribueret i fremtiden) kan hjælpe AndroidAPS med at håndtere store fedt/proteinmåltider.</string>
<string name="extendedcarbs_rescue">Til at registrere redningskulhydrater du bruger til at behandle et lavt bloduskker. </string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Ekstern overvågning</string>
<string name="nsclient_howcanyou">Hvordan kan du overvåge AndroidAPS (f.eks. for dit barn) eksternt?</string>
<string name="nsclient_nightscout">NS klient appen, Nightscout app og Nightscout hjemmesiden giver dig mulighed for at følge AndroidAPS eksternt.</string>
<string name="nsclient_dexcomfollow">Andre apps (f.eks Dexcom følger appen eller X-drip der kører i følger tilstand) tillader dig at følge nogle parametre (f.eks blodsukker eller sensor værdier), men bruger forskellige algoritmer, så de kan have ukorrekte IOB eller COB værdier.</string>
<string name="nsclient_data">Hvis du vil følge AndroidAPS eksternt, skal begge enheder have internetadgang (f.eks. via Wi-Fi eller mobilt netværksdata).</string>
<string name="nsclient_fullcontrol">NS-klient, der bruges som ekstern følger, vil både overvåge og give fuld kontrol over AndroidAPS.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html</string>
<string name="isf_label_exam">Insulinfølsomhedsfaktor (ISF)</string>
<string name="isf_increasingvalue">En forhøjelse af ISF-værdierne vil føre til mere insulintilførsel for at dække en bestemt mængde kulhydrater.</string>
<string name="isf_decreasingvalue">Reduktion af ISF-værdier fører til mere insulintilførsel for at korrigere for et højt blodsukker.</string>
<string name="isf_noeffect">Forhøjelse eller sænkning af ISF har ingen effekt på insulinlevering, når blodsukker er under målet.</string>
<string name="isf_preferences">ISF skal angives i dine AndroidAPS præferencer.</string>
<string name="isf_profile">Ændring af ISF-værdien i din profil er nok til at anvende ændringen.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html</string>
@ -205,7 +176,6 @@
<string name="profileswitch2_bgunchanged">Blodsukkermålet vil være uændret.</string>
<string name="profileswitch2_isfhigher">ISF vil være 20% højere.</string>
<string name="profileswitchtime_label">Profilskift</string>
<string name="profileswitchtime_iwant">Hvis du står op 2 timer tidligere end normalt, hvordan skal du så fortælle AndroidAPS om ændringen i din tidsplan?</string>
<string name="profileswitchtime_2">Start et profilskift med et tidsskift på 2</string>
<string name="profileswitchtime__2">Start et profilskift med et tidsskift på -2</string>
<string name="profileswitchtime_tt">Sæt et \"Spiser snart\" midlertidlig blodsukkermål.</string>
@ -213,7 +183,6 @@
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift</string>
<string name="profileswitch4_label">Ændringer til profiler</string>
<string name="profileswitch4_rates">Basal rater, ISF, I:C ratioer, mv. skal indstilles i profiler.</string>
<string name="profileswitch4_internet">Aktivering af ændringer til din Nightscout-profil kræver, at din AndroidAPS-telefon har en internetforbindelse.</string>
<string name="profileswitch4_sufficient">Redigering af profiler til ændring af værdier er tilstrækkelig til at foretage ændringer.</string>
<string name="profileswitch4_multi">Der kan oprettes flere profiler og vælges for at tilpasse skiftende omstændigheder (f.eks. hormonelle ændringer, skiftende arbejde, hverdage / weekend livsstil).</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy</string>
@ -223,6 +192,4 @@
<string name="basalhelp_google">Google</string>
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Anden medicin. Læs sætningen nedenfor, og afkryds derefter afkrydsningsfeltet for at godkende erklæringen.</string>
<string name="other_medication_text">AndroidAPS reducerer basal rater eller suspenderer insulin-levering for at hæve blodsukkeret. Medicin i klassen SGLT-2-inhibitorer (glifloziner) kan forhindre, at blodsukkeret øges, og derfor kan medføre en farlig insulinmangel, der fører til Ketoacidose.
\nAlmindelige navne er: Invokana ®, Forxiga, Jardiance ®, Steglatro ®, Steglatro ®, Vokanamet ®, Vokanamet ®\n\nI Jeg lover, at jeg ikke vil tage sådanne stoffer, når jeg bruger AndroidAPS eller deaktiverer loop, før jeg bruger sådanne stoffer.</string>
</resources>

View file

@ -25,8 +25,6 @@
<string name="objectives_pumpstatusavailableinns">Pumpestatus tilgængelig i NS</string>
<string name="objectives_manualenacts">Manuelle handlinger</string>
<string name="accomplished">Udført: %1$s</string>
<string name="objectives_usage_objective">Lær at styre AndroidAPS</string>
<string name="objectives_usage_gate">Udfør forskellige handlinger i AndroidAPS</string>
<string name="objectives_useprofileswitch">Indstil profil til 90% i 10 min (Tryk og hold på profilnavn i Oversigt)</string>
<string name="objectives_usedisconnectpump">Simulér brusebad. Afbryd pumpen i 1t (Tryk og hold på Open Loop)</string>
<string name="objectives_usereconnectpump">... og genforbind på samme måde</string>

View file

@ -40,9 +40,7 @@
<string name="description_source_ns_client">Downloader BG data fra Nightscout</string>
<string name="description_source_xdrip">Modtag BG-værdier fra xDrip+.</string>
<string name="description_treatments">Gemmer alle behandlinger, der er foretaget</string>
<string name="description_wear">Overvåg og kontrollér AndroidAPS ved hjælp af dit WearOS-ur.</string>
<string name="description_xdrip_status_line">Vis oplysninger om dit Loop på din xDrip+ urskive.</string>
<string name="description_sms_communicator">Fjernstyr AndroidAPS ved hjælp af SMS-kommandoer.</string>
<string name="treatments_insulin_label_string">Insulin:</string>
<string name="treatments_carbs_label_string">Kulhydrater:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -79,9 +77,7 @@
<string name="treatments">Behandlinger</string>
<string name="virtualpump">Virtuel pumpe</string>
<string name="configbuilder_pump">Pumpe</string>
<string name="configbuilder_pump_description">Hvilken pumpe vil du bruge med AndroidAPS?</string>
<string name="configbuilder_profile">Profil</string>
<string name="configbuilder_profile_description">Hvilken profil skal AndroidAPS bruge?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Hvilken APS algoritme skal foretage terapi justeringer?</string>
<string name="configbuilder_general">Generelt</string>
@ -89,7 +85,6 @@
<string name="configbuilder_constraints_description">Hvilke begrænsninger er anvendt?</string>
<string name="constraints">Begrænsninger</string>
<string name="configbuilder_loop">Loop</string>
<string name="configbuilder_loop_description">Brug dette til at aktivere AndroidAPS\' loop integration.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Efter bearbejdede begrænsninger</string>
<string name="loop_tbrsetbypump_label">Midlertidig basal sat af pumpe</string>
@ -106,7 +101,6 @@
<string name="sms_basal">Basal:</string>
<string name="changeyourinput">Skift dit input!</string>
<string name="configbuilder_bgsource">BG kilde</string>
<string name="configbuilder_bgsource_description">Hvor skal AndroidAPS få sit data fra?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">APS Tilstand</string>
<string name="closedloop">Lukket Loop</string>
@ -331,7 +325,6 @@
<string name="patient_name_summary">Angiv venligst patientnavn eller kaldenavn for at skelne mellem flere opsætninger</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">Bruger</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s har brug for batterioptimering whitelisting for at opnå den rette ydeevne</string>
<string name="loopsuspended">Loop suspenderet</string>
<string name="loopsuspendedfor">Suspenderet (%1$d m)</string>
<string name="suspendloopfor1h">Suspendér loop i 1t</string>
@ -429,7 +422,6 @@
<string name="sensitivityweightedaverage">Følsomhed Vægtet Gennemsnit</string>
<string name="notloadedplugins">Ikke alle profiler er indlæst!</string>
<string name="valuesnotstored">Værdier ikke gemt!</string>
<string name="ns_localbroadcasts">Aktiver udsendelse til andre apps (såsom xDrip+). Aktiver ikke hvis du har mere end én version af AAPS eller NSClient installeret!</string>
<string name="ns_localbroadcasts_title">Aktiver lokale udsendelser.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamisk ISF</string>
@ -631,7 +623,6 @@
<string name="welcometosetupwizard">Velkommen til opsætningsguiden. Den vil guide dig gennem opsætningsprocessen\n</string>
<string name="readstatus">Læs status</string>
<string name="exitwizard">Spring opsætningsguiden over</string>
<string name="setupwizard_loop_description">Tryk på knappen nedenfor for at aktivere AndroidAPS til at foreslå/foretage basale ændringer</string>
<string name="setupwizard_sensitivity_description">Følsomhedsplugin bruges til detektering af følsomhed og COB beregning. For mere info besøg:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/en/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="nsclientinfotext">NSClient håndterer forbindelse til Nightscout. Du kan springe denne del over nu, men du vil ikke være i stand til at passere mål, før du har sat den op.</string>
@ -670,7 +661,6 @@
<string name="remove_items">Fjern elementer</string>
<string name="sort_items">Sortér elementer</string>
<string name="storedsettingsfound">Gemte indstillinger fundet</string>
<string name="allow_hardware_pump_text">Bemærk: Hvis du aktiverer og opretter forbindelse til en hardwarepumpe, vil AndroidAPS kopiere de basale indstillinger fra profilen til pumpen, overskrive den eksisterende basal rate lagret på pumpen. Sørg for, at du har den korrekte basal indstilling i AndroidAPS. Hvis du ikke er sikker på eller ikke ønsker at overskrive de basale indstillinger på din pumpe, tryk på annuller og gentag skift til pumpen på et senere tidspunkt.</string>
<string name="error_adding_treatment_title">Behandlingsdata ukomplette</string>
<string name="maintenance_settings">Vedligeholdelses Indstillinger</string>
<string name="maintenance_email">E-mail modtager</string>
@ -698,7 +688,6 @@
<string name="loop_openmode_min_change_summary" formatted="false">Åben Loop vil kun foreslå ny ændringsanmodning, hvis ændringen er større end denne værdi i %. Standardværdien er 20%</string>
<string name="profile_total">== ∑ %1$s IE</string>
<string name="dexcom_lognssensorchange_title">Log sensor ændring til NS</string>
<string name="dexcom_lognssensorchange_summary">Opret begivenhed \"Sensor skift\" i NS automatisk ved start af sensor</string>
<string name="tomato">Tomato (MiaoMiao)</string>
<string name="tomato_short">Tomato</string>
<string name="summary_tidepool_username">Dit brugernavn til Tidepool, normalt din e-mailadresse</string>
@ -771,7 +760,6 @@
<string name="id">ID:</string>
<string name="submit">Send</string>
<string name="mostcommonprofile">Mest almindelige profil:</string>
<string name="survey_comment">Bemærk: Kun data, der er synlige på denne skærm, vil blive uploadet anonymt. ID er tildelt til denne installation af AndroidAPS. Du kan indsende data igen, hvis din hovedprofil bliver ændret, men lad det køre mindst en uge for at gøre resultatet synligt i tid i målområdet. Din hjælp er værdsat.</string>
<string name="invalidage">Ugyldig angivelse af alder</string>
<string name="invalidweight">Ugyldig angivelse af vægt</string>
<string name="invalidpct">Ugyldig angivelse af %</string>
@ -816,11 +804,9 @@
<string name="smscommunicator_otp_export_prompt">Er du sikker på, at du vil kopiere OTP hemmelighed til udklipsholderen?\n\nDu behøver den kun, hvis din autentificeringsapp har problemer med at scanne QR kode, du vil indtaste den manuelt, eller du vil konfigurere hardware OTP token ved hjælp af en dedikeret app.</string>
<string name="smscommunicator_otp_export_successful">OTP hemmelige (i Base32 format) eksporteret og kopieret til udklipsholder. Indsæt det i autentifikatoren eller hardware OTP brænder!</string>
<string name="smscommunicator_otp_step1_install_header">1. Installer Authenticator</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Scan kode til opsætning af AndroidAPS OTP-koder</string>
<string name="smscommunicator_otp_step3_test_header">3. Test Engangsadgangskode</string>
<string name="smscommunicator_otp_reset_header">Nulstil Autentificering</string>
<string name="smscommunicator_otp_install_info">På hver follower telefon installeres Authenticator app, der understøtter RFC 6238 TOTP tokens. Populære gratis apps er:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator</string>
<string name="smscommunicator_otp_reset_warning">Ved at nulstille autentificering gør du alle allerede proviserede autentificatorer ugyldige. Du bliver nødt til at opsætte dem igen!</string>
<string name="overview_show_predictions">Forudsigelser</string>
<string name="overview_show_treatments">Behandlinger</string>
<string name="overview_show_deviationslope">Afvigelses hældning</string>
@ -1017,7 +1003,6 @@
<string name="above" comment="above &quot;in range&quot;">Over</string>
<string name="show_loop_records">Vis loop poster</string>
<string name="show_hide_records">Skjul loop poster</string>
<string name="widget_description">AndroidAPS widget</string>
<string name="configure">Indstil gennemsigtighed</string>
<string name="loop_status">Loop status</string>
<string name="graph_scale">Graf skala</string>

View file

@ -5,12 +5,10 @@
<string name="dia_profile">Definiere den DIA-Wert in Deinem Profil.</string>
<string name="dia_minimumis5h">Der minimal zulässige Wert ist 5 Stunden.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Configuration/Config-Builder.html#insulin</string>
<string name="dia_meaningisequaltodiapump">Wenn du mit dem DIA zufrieden warst, bevor du AndroidAPS verwendet hast, dann musst du ihn nicht ändern, wenn du anfängst zu loopen.</string>
<string name="dia_valuemustbedetermined">Du solltest den für dich geeigneten DIA selbst festlegen.</string>
<string name="hypott_label">Temporäres Ziel für Hypos</string>
<string name="hypott_whenhypott">Was ist der Hauptgrund, ein Temporäres Ziel für Hypos zu setzen?</string>
<string name="hypott_wrongbasal">Zur Korrektur von Hypos, die durch falsche Basalrateneinstellungen verursacht wurden.</string>
<string name="hypott_preventoversmb">Um zu verhindern, dass AndroidAPS einen Blutzuckeranstieg überkorrigiert, der durch die schnell wirkenden Kohlenhydrate verursacht wird, die zur Behandlung einer Hypo verwendet werden.</string>
<string name="hypott_exercise">Um eine Hypo zu korrigieren, die durch Bewegung / Sport entstanden ist.</string>
<string name="hypott_0basal">Um ein Absinken des Blutzuckers zu verhindern, wenn bereits eine temporäre Basalrate von 0 % läuft.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Usage/temptarget.html</string>
@ -18,15 +16,10 @@
<string name="offlineprofile_label">Thema: Offline-Profil</string>
<string name="offlineprofile_nsprofile">NS-Profil kann verwendet, aber nicht konfiguriert werden.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Configuration/Config-Builder.html#profil</string>
<string name="pumpdisconnect_label">Gründe, für den Einsatz des Kommandos \"Trenne Pumpe\" </string>
<string name="pumpdisconnect_whattodo">Was sollte getan werden, wenn die Pumpe getrennt wird?</string>
<string name="pumpdisconnect_unnecessary">Nichts, da kein Insulin abgegeben wird, wenn die Pumpe physisch getrennt ist.</string>
<string name="pumpdisconnect_missinginsulin">Verhindert, dass AndroidAPS Insulin berücksichtigt, das nicht abgegeben wurde, während die Pumpe physisch getrennt war.</string>
<string name="pumpdisconnect_notstop">Unterbricht die Insulinzufuhr nicht, wenn die Pumpe physikalisch verbunden bleibt.</string>
<string name="pumpdisconnect_openloop">Versetzt AndroidAPS in den Open Loop Modus.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Getting-Started/FAQ.html#andere-einstellungen</string>
<string name="objectives_label">AndroidAPS Einstellungen</string>
<string name="objectives2_label">AndroidAPS Einstellungen</string>
<string name="objectives_howtosave">Welches ist die empfohlene Vorgehensweise, um ein Backup Deiner Einstellungen zu erstellen?</string>
<string name="objectives_notesettings">Du brauchst Deine Einstellungen nicht zu exportieren, sofern Du Dir diese notierst.</string>
<string name="objectives_afterobjective">Exportiere die Einstellungen nach Abschluss eines Objectives (Ziels).</string>
@ -40,7 +33,6 @@
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Getting-Started/FAQ.html#was-sollte-ich-fur-den-notfall-immer-dabei-haben</string>
<string name="noisycgm_label">Verrauschte CGM Werte</string>
<string name="noisycgm_whattodo">Was sollte getan werden, wenn CGM-Daten unzuverlässig werden?</string>
<string name="noisycgm_nothing">Tue nichts - AndroidAPS kümmert sich darum.</string>
<string name="noisycgm_pause">Deaktiviere den Loop, um mögliche Über- oder Unterdosierungen zu verhindern.</string>
<string name="noisycgm_replacesensor">Ersetze dauerhaft verrauschte oder ungenaue Sensoren.</string>
<string name="noisycgm_checksmoothing">Vergewissere Dich, dass Deine CGM App geglättete Daten liefert.</string>
@ -71,7 +63,6 @@
<string name="basaltest_fixed">Einmal gesetzt und überprüft, sollten sich diese Werte im Laufe der Zeit nicht ändern.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Getting-Started/FAQ.html#androidaps-einstellungen</string>
<string name="prerequisites_label">Voraussetzungen</string>
<string name="prerequisites_what">Was ist wichtig für die Einrichtung und Nutzung von AndroidAPS?</string>
<string name="prerequisites_determinedcorrectprofile">Überprüfe die Profil-Einstellungen (Basal, IC, ISF, DIA).</string>
<string name="prerequisites_computer">Ein Computer mit installiertem und konfiguriertem Android Studio.</string>
<string name="prerequisites_phone">Ein unterstütztes Smartphone.</string>
@ -86,25 +77,17 @@
<string name="prerequisites_smartwatch">Eine Smartwatch.</string>
<string name="prerequisites_supportedcgm">Ein unterstütztes CGM.</string>
<string name="prerequisites2_label">Voraussetzungen</string>
<string name="prerequisites2_what">Was ist wichtig für die Einrichtung und Nutzung von AndroidAPS?</string>
<string name="prerequisites2_profile">Überprüfte und belastbare Profileinstellungen (ISF, I:C Verhältnis, Basalraten, DIA etc.).</string>
<string name="prerequisites2_device">Ein kompatibles Android-Gerät (z.B. Handy, Android-Uhr oder Tablet).</string>
<string name="prerequisites2_internet">AndroidAPS benötigt eine Internetverbindung, um im Closed Loop laufen zu können.</string>
<string name="prerequisites2_supportedcgm">Ein unterstütztes CGM und eine passende App, um Blutzuckerwerte auf dem Gerät zu erhalten.</string>
<string name="prerequisites2_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Module/module.html</string>
<string name="update_label">AndroidAPS aktualisieren</string>
<string name="whatistrue">Kreuze alle richtigen Antworten an.</string>
<string name="update_git">Du musst Git auf Deinem Computer installiert und konfiguriert haben.</string>
<string name="update_asap">Wenn aktualisierte Versionen von AndroidAPS veröffentlicht werden, können die früheren Versionen nach einer bestimmten Zeit aus der Ferne begrenzt werden.</string>
<string name="update_keys">Du solltest den Speicherort des Keystores speichern und immer den gleichen Signaturschlüssel für Updates verwenden wie für die vorherige Installation.</string>
<string name="update_neverupdate">Nie updaten, wenn das System stabil läuft.</string>
<string name="update_askfriend">Wenn Du Schwierigkeiten beim Erstellen der apk hast, kannst Du eine apk installieren, die von einem Freund erstellt wurde.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Installing-AndroidAPS/Update-to-new-version.html</string>
<string name="troubleshooting_label">Problembehandlung</string>
<string name="troubleshooting_wheretoask">Wo kannst Du nach Hilfe für AndroidAPS suchen?</string>
<string name="troubleshooting_fb">Du kannst in der AndroidAPS-Facebook-Gruppe um Rat bitten.</string>
<string name="troubleshooting_wiki">Du solltest die AndroidAPS-Dokumentation lesen (und wiederholt lesen).</string>
<string name="troubleshooting_gitter">Im Discord Channel AndroidAPS kannst Du bei technischen Problemen oder Fragestellungen um Hilfe bitten.</string>
<string name="troubleshooting_yourendo">Du solltest Deine Diabetesklinik / Deinen Diabetologen fragen.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Installing-AndroidAPS/Update-to-new-version.html#problembehandlung</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/loopedDE/</string>
@ -118,7 +101,6 @@
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Configuration/Config-Builder.html#insulin</string>
<string name="sensitivity_label">Empfindlichkeits-Plugins</string>
<string name="sensitivity_which">Kreuze alle richtigen Antworten an.</string>
<string name="sensitivity_adjust">Empfindlichkeits-Plugins erlauben AndroidAPS vorübergehende oder kurzzeitige Veränderungen der Insulinempfindlichkeit (z. B. hormonelle Veränderungen oder Probleme mit der Absorption an der Infusionsstelle).</string>
<string name="sensitivity_edit">Sensitivitäts-Plugins liefern dem Benutzer Vorschläge für Änderungen an Basalraten, I:C-Verhältnissen und ISF, die zur Bearbeitung des Profils verwendet werden können.</string>
<string name="sensitivity_cannula">Das Protokollieren eines Kanülenwechsels setzt das Autosens Verhältnis wieder auf 100% zurück.</string>
<string name="sensitivity_time">Einige der Plugin-Optionen haben konfigurierbare Zeiträume, die vom Benutzer eingestellt werden können.</string>
@ -128,14 +110,11 @@
<string name="wrongcarbs_whattodo">Was sollst Du tun, wenn Du einen falschen KH-Eintrag gemacht hast?</string>
<string name="wrongcarbs_treatmentstab">Lösche die falsche Eingabe in der Behandlung und gib den richtigen neuen Kohlehydratwert ein.</string>
<string name="wrongcarbs_addinsulin">Nutze den Befehl zum Befüllen des Infusionssets für einen Bolus.</string>
<string name="wrongcarbs_donothing">Nichts tun AndroidAPS wird die entsprechenden Anpassungen vornehmen.</string>
<string name="wrongcarbs_bolus">Bolus mit Insulin mit dem Insulin-Button in der Übersicht.</string>
<string name="wronginsulin_label">Fehler bei Insulinabgabe/Eintrag</string>
<string name="wronginsulin_whattodo">Wie solltest Du vorgehen, wenn Du weniger Insulin im Körper hast als in der Pumpenhistorie vermerkt - z.B. durch eine Verstopfung, Kanülenfehler oder eine nach dem Duschen nicht wieder angekoppelte Pumpe?</string>
<string name="wronginsulin_careportal">Lösche Insulindaten im Nightscout careportal, um sie aus der Pumpenhistorie zu entfernen.</string>
<string name="wronginsulin_compare">Vergleiche die Werte der Historie in AAPS und Deiner Pumpe (wenn die Pumpe diese Funktion bietet).</string>
<string name="wronginsulin_prime">Gib einen Teil-Bolus des \'nicht erhaltenen\' Insulins mit Spritze / Pen oder durch Befüllen der Kanüle.</string>
<string name="wronginsulin_donothing">Unternimm nichts und lass AndroidAPS die entstehenden hohen Glukosewerte korrigieren.</string>
<string name="cob_label">KH an Board (COB)</string>
<string name="cob_question">Wie beeinflusst das Ändern des ISF-Wertes die COB-Berechnung?</string>
<string name="cob_longer">Steigende ISF absorbiert Kohlenhydrate länger</string>
@ -157,28 +136,20 @@
<string name="breadgrams_label">Kohlenhydrat-Eingaben und Boli</string>
<string name="breadgrams_grams">Zur Abschätzung und Eingabe von Kohlenhydraten sollten nur Gramm als Einheit verwendet werden.</string>
<string name="breadgrams_exchange">Aufgenommene Kohlenhydrate können in einem geeigneten Austauschformat (z.B. Broteinheiten oder DAFNE \"CHO\" exchanges) eingegeben werden.</string>
<string name="breadgrams_decay">AndroidAPS verwendet ein dynamisches Modell zur Abschätzung des Kohlenhydratabbaus und zur Berechnung der COB.</string>
<string name="breadgrams_calc">Wenn die Blutzuckerwerte außerhalb der akzeptablen Werte liegen (zu niedrig oder zu hoch), kann der Bolusrechner verwendet werden, um Vorschläge für Kohlenhydrat- oder Insulinkorrekturen zu machen.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Getting-Started/FAQ.html#insulin-kohlenhydrat-verhaltnis-insulin-to-carb-ratio-ic-g-u</string>
<string name="extendedcarbs_label">E-carbs</string>
<string name="extendedcarbs_handling">Wofür können E-Carbs (\"verlängerte Kohlenhydrate\") verwendet werden?</string>
<string name="extendedcarbs_future">Zum Einplanen von Kohlenhydraten in der Zukunft, meist über ein Intervall verteilt (ähnlich wie bei einem verlängerten Bolus, der Insulin über ein Intervall verteilt).</string>
<string name="extendedcarbs_free">Zum Protokollieren von \'freien\' Sport-BE, die Du vor AndroidAPS verstecken willst.</string>
<string name="extendedcarbs_fat">E-carbs (über einen Zeitraum in der Zukunft verteilt) können AndroidAPS beim Umgang mit Mahlzeiten mit hohem Fett-/Proteinanteil unterstützen.</string>
<string name="extendedcarbs_rescue">Für die Protokollierung von Hypo-BEs bei der Behandlung niedriger Werte.</string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Kontrolle aus der Ferne</string>
<string name="nsclient_howcanyou">Wie kann man AndroidAPS (zum Beispiel für ein Kind) aus der Ferne kontrollieren?</string>
<string name="nsclient_nightscout">NS Client App, Nightscout App und die Nightscout Webseite ermöglichen es, AndroidAPS aus der Ferne zu verfolgen.</string>
<string name="nsclient_dexcomfollow">Andere Apps (z. B. Dexcom Follow, xDrip+ im Follow-Modus) ermöglichen es, einige Parameter (z. B. Blutzucker-/Sensorwerte) aus der Ferne zu verfolgen, verwenden jedoch andere Algorithmen und können daher ungenaue IOB- oder COB-Werte aufweisen.</string>
<string name="nsclient_data">Um AndroidAPS aus der Ferne zu folgen, müssen beide Geräte über einen Internetzugang verfügen (z. B. über WLAN oder Mobilfunkdaten).</string>
<string name="nsclient_fullcontrol">Der NS-Client, der als Remote Follower verwendet wird, kann AndroidAPS sowohl überwachen als auch die volle Kontrolle darüber übernehmen.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Children/Children.html</string>
<string name="isf_label_exam">Insulinsensibilitätsfaktor (ISF)</string>
<string name="isf_increasingvalue">Eine Erhöhung der ISF-Werte führt zu einer höheren Insulinabgabe, um eine bestimmte Menge an Kohlenhydraten abzudecken.</string>
<string name="isf_decreasingvalue">Reduzierte ISF-Werte führen zu einer höheren Insulinabgabe zur Korrektur eines über dem Zielwert liegenden Blutzuckers.</string>
<string name="isf_noeffect">Das Erhöhen oder Senken des ISF hat keinen Einfluss auf die Insulinabgabe, wenn der Blutzuckerspiegel unter dem Zielwert liegt.</string>
<string name="isf_preferences">ISF werden in den AndroidAPS-Einstellungen eingegeben.</string>
<string name="isf_profile">Wenn Du einen ISF-Wert im Profil änderst, wird dies sofort vom Loop berücksichtigt.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Getting-Started/FAQ.html#korrekturfaktor-isf-mg-dl-ie-oder-mmol-l-ie</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Usage/Profiles.html</string>
@ -205,7 +176,6 @@
<string name="profileswitch2_bgunchanged">Das Blutzuckerziel wird unverändert sein.</string>
<string name="profileswitch2_isfhigher">ISF wird um 20% höher sein.</string>
<string name="profileswitchtime_label">Profilwechsel</string>
<string name="profileswitchtime_iwant">Wenn du 2h früher als üblich aufstehst, wie solltest Du AAPS über die Änderung in Deinem Zeitplan informieren?</string>
<string name="profileswitchtime_2">Profilwechsel mit einer Zeitverschiebung von +2</string>
<string name="profileswitchtime__2">Profilwechsel mit einer Zeitverschiebung von -2</string>
<string name="profileswitchtime_tt">Setze ein temporäres Ziel \"bald essen\".</string>
@ -213,7 +183,6 @@
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Usage/Profiles.html#zeitverschiebung</string>
<string name="profileswitch4_label">Änderungen an Profilen</string>
<string name="profileswitch4_rates">Basalraten, ISF, I:C-Verhältnisse, etc., sollten in Profilen gesetzt werden.</string>
<string name="profileswitch4_internet">Um Änderungen an Deinem Nightscout Profil zu aktivieren, muss Dein AndroidAPS-Smartphone eine Internetverbindung haben.</string>
<string name="profileswitch4_sufficient">Das Bearbeiten von Profilen zur Änderung von Werten reicht aus, um alle vorgenommenen Änderungen durchzuführen.</string>
<string name="profileswitch4_multi">Es können mehrere Profile erstellt und ausgewählt werden, um sich verändernden Umständen anzupassen (z.B. hormonelle Veränderungen, Schichtarbeit, Wochentage/Wochenend-Lebensstil).</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Module/module.html#gute-individuelle-profileinstellungen-fur-deine-diabetes-therapie</string>
@ -223,6 +192,4 @@
<string name="basalhelp_google">Google</string>
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Andere Medikation. Bitte lies die Erklärung unten und markiere dann das Kästchen, um die Erklärung zu akzeptieren.</string>
<string name="other_medication_text">AAPS reduziert die Basalrate oder stoppt die Insulinzufuhr zur Erhöhung des Blutzuckers. Medikamente aus der Gruppe der SGLT2-Hemmer (Gliflozine) können zu erwartende Blutzuckersteigungen verhindern und damit einen gefährlichen Insulinmangel (DKA) produzieren.
\nÜbliche Handelsnamen sind: Invokana ®, Forxiga ®, Jardiance ®, Steglatro ®, Suglat ®, Apleway ®, Deberza ®, Synjardy ®, Vokanamet ®, Xigduo ®.\n\nIch versichere, dass ich solche Medikamente bei der Anwendung von AAPS nicht einnehmen oder den Loop vor der Verwendung dieser Medikamente deaktivieren werde.</string>
</resources>

View file

@ -26,8 +26,6 @@ die Formel maxIOB = durchschnittlicher Essensbolus + 3 x höchste Basalrate</str
<string name="objectives_pumpstatusavailableinns">Pumpen-Status in Nightscout verfügbar</string>
<string name="objectives_manualenacts">Manuelle Aktionen</string>
<string name="accomplished">Erfüllt: %1$s</string>
<string name="objectives_usage_objective">Lerne, wie AndroidAPS bedient wird</string>
<string name="objectives_usage_gate">Führe verschiedene Aktionen in AndroidAPS aus.</string>
<string name="objectives_useprofileswitch">Setzte das Profil für 10 Min. auf 90% (drücke dazu lange auf deinen Profilnamen im Homescreen)</string>
<string name="objectives_usedisconnectpump">Simuliere das Duschen . Trenne die Pumpe für 1 Std. (drücke dazu lang auf Open Loop im Homescreen)</string>
<string name="objectives_usereconnectpump">...und verbinde die Pumpe auf dieselbe Weise wieder</string>

View file

@ -40,9 +40,7 @@
<string name="description_source_ns_client">Lade Blutzuckerdaten von Nightscout</string>
<string name="description_source_xdrip">Empfange Blutzuckerwerte von xDrip+.</string>
<string name="description_treatments">Speichert alle eingegebenen Behandlungen</string>
<string name="description_wear">Überwache und steuere AndroidAPS mit Deiner WearOS-Smartwatch.</string>
<string name="description_xdrip_status_line">Zeige Loop-Informationen auf Deinem xDrip+-Watchface.</string>
<string name="description_sms_communicator">AndroidAPS mit SMS-Befehlen fernsteuern.</string>
<string name="treatments_insulin_label_string">Insulin:</string>
<string name="treatments_carbs_label_string">Kohlenhydrate:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -79,9 +77,7 @@
<string name="treatments">Behandlungen</string>
<string name="virtualpump">Virtuelle Pumpe</string>
<string name="configbuilder_pump">Pumpe</string>
<string name="configbuilder_pump_description">Welche Pumpe möchtest Du mit AndroidAPS nutzen?</string>
<string name="configbuilder_profile">Profil</string>
<string name="configbuilder_profile_description">Welches Profil soll AndroidAPS nutzen?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Welcher APS-Algorithmus soll Therapieanpassungen vornehmen?</string>
<string name="configbuilder_general">Allgemein</string>
@ -89,7 +85,6 @@
<string name="configbuilder_constraints_description">Welche Beschränkungen werden angewendet?</string>
<string name="constraints">Beschränkungen</string>
<string name="configbuilder_loop">Loop</string>
<string name="configbuilder_loop_description">Nutze dies, um die Loop-Integration von AndroidAPS zu aktivieren.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Beschränkungen angewendet</string>
<string name="loop_tbrsetbypump_label">TBR der Pumpe</string>
@ -106,7 +101,6 @@
<string name="sms_basal">Basal:</string>
<string name="changeyourinput">Ändere deine Eingabe!</string>
<string name="configbuilder_bgsource">BZ-Quelle</string>
<string name="configbuilder_bgsource_description">Woher soll AndroidAPS seine Blutzuckerwerte beziehen?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">APS-Modus</string>
<string name="closedloop">Closed Loop</string>
@ -331,7 +325,6 @@
<string name="patient_name_summary">Bitte gib den Namen des Patienten oder einen Spitznamen an, um mehrere Setups unterscheiden zu können.</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">Nutzer</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s benötigt eine deaktivierte Akku-Leistungsoptimierung, um korrekt arbeiten zu können.</string>
<string name="loopsuspended">Loop pausiert</string>
<string name="loopsuspendedfor">Pausiert (%1$d min)</string>
<string name="suspendloopfor1h">Pausiere Loop für 1 h</string>
@ -429,7 +422,6 @@
<string name="sensitivityweightedaverage">Durchschnittliche Sensitivität</string>
<string name="notloadedplugins">Es sind nicht alle Profile geladen!</string>
<string name="valuesnotstored">Werte nicht gespeichert!</string>
<string name="ns_localbroadcasts">Aktiviere die Datenübertragung zu anderen Apps (z.B. xDrip+). Nicht aktivieren, falls Du mehr als eine Instanz von AAPS oder NSClient installiert hast!</string>
<string name="ns_localbroadcasts_title">Aktiviere lokale Broadcasts</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamischer ISF</string>
@ -631,7 +623,6 @@
<string name="welcometosetupwizard">Willkommen im Setup-Assistenten. Er führt Dich durch den Setup-Prozess\n</string>
<string name="readstatus">Status lesen</string>
<string name="exitwizard">Einrichtungsassistenten überspringen</string>
<string name="setupwizard_loop_description">Drücke die Schaltfläche unten, um AndroidAPS zu erlauben, Basal-Änderungen vorzuschlagen/vorzunehmen</string>
<string name="setupwizard_sensitivity_description">Das Sensitivitäts-Plugin wird für die Sensitivitäts- und COB-Berechnung verwendet. Für weitere Informationen siehe:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/de/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="nsclientinfotext">Nightscout-Client ist für die Verbindung zu Nightscout zuständig. Du kannst diesen Teil jetzt überspringen, aber Du wirst nicht in der Lage sein, Zielsetzungen zu erfüllen, bis Du diesen eingerichtet hast.</string>
@ -670,7 +661,6 @@
<string name="remove_items">Objekte entfernen</string>
<string name="sort_items">Einträge sortieren</string>
<string name="storedsettingsfound">Gespeicherte Einstellungen gefunden</string>
<string name="allow_hardware_pump_text">WARNUNG: Wenn Du eine echte Pumpe aktivierst und anschließt, kopiert AndroidAPS die Basaleinstellungen vom aktiven Profil zur Pumpe (und behält sie bei). Die Einstellungen in der Pumpe werden hierbei überschrieben. Wenn Du Dir nicht sicher bist oder die Basaleinstellungen in der Pumpe nicht überschreiben möchten, drücke \"Abbrechen\" und vollziehe den Wechsel zur Pumpe später.</string>
<string name="error_adding_treatment_title">Behandlungsdaten unvollständig</string>
<string name="maintenance_settings">Wartungseinstellungen</string>
<string name="maintenance_email">E-Mail</string>
@ -699,7 +689,6 @@ Unerwartetes Verhalten.</string>
<string name="loop_openmode_min_change_summary" formatted="false">Open Loop schlägt neue Änderungen nur dann vor, wenn die Änderung größer als dieser Wert ist. Der Standard-Wert ist 20%.</string>
<string name="profile_total">== ∑ %1$s IE</string>
<string name="dexcom_lognssensorchange_title">Speichere Sensor Wechsel in Nightscout</string>
<string name="dexcom_lognssensorchange_summary">Ereignis \"Sensorwechsel\" bei Sensorstart automatisch in NS erstellen</string>
<string name="tomato">Tomato (MiaoMiao)</string>
<string name="tomato_short">Tomato</string>
<string name="summary_tidepool_username">Dein Tidepool-Login-Benutzername, normalerweise deine E-Mail-Adresse</string>
@ -772,7 +761,6 @@ Unerwartetes Verhalten.</string>
<string name="id">ID:</string>
<string name="submit">Senden</string>
<string name="mostcommonprofile">Meistgenutztes Profil:</string>
<string name="survey_comment">Hinweis: Nur Daten, die auf diesem Bildschirm sichtbar sind, werden anonym hochgeladen. Die ID wird dieser Installation von AndroidAPS zugeordnet. Du kannst erneut Daten senden, wenn sich Dein Hauptprofil geändert hat. Lasse es aber es mindestens eine Woche lang laufen, damit dessen Ergebnis in der Time in Range sichtbar wird. Danke für Deine Unterstützung.</string>
<string name="invalidage">Ungültige Altersangabe</string>
<string name="invalidweight">Ungültige Gewichtsangabe</string>
<string name="invalidpct">Ungültige % Eingabe</string>
@ -817,11 +805,9 @@ Unerwartetes Verhalten.</string>
<string name="smscommunicator_otp_export_prompt">Willst Du wirklich das OTP Secret in die Zwischenablage kopieren?\n\nDas ist nur erforderlich, wenn Deine Authentifizierungs-App Probleme mit dem Scannen des QR-Codes hat. Du kannst es auch manuell eingeben oder einen Hardware-OTP-Token mit einer bestimmten App verwenden.</string>
<string name="smscommunicator_otp_export_successful">OTP Secret (im Base32 Format) exportiert und in die Zwischenablage kopiert. Setze es von dort in Deine Authentifizierungs-App ein.</string>
<string name="smscommunicator_otp_step1_install_header">1. Authentifikator installieren</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Scanne den Code zum Einrichten von AndroidAPS OTP-Codes</string>
<string name="smscommunicator_otp_step3_test_header">3. Teste das Einmal-Passwort</string>
<string name="smscommunicator_otp_reset_header">Authentifikators zurücksetzen</string>
<string name="smscommunicator_otp_install_info">Installiere auf jedem Follower-Phone eine Authenticator-App, die RFC 6238 TOTP-Token unterstützt. Beliebte kostenlose Apps sind:\n Authy\n Google Authenticator\n LastPass Authenticator\n FreeOTP Authenticator</string>
<string name="smscommunicator_otp_reset_warning">Wenn Du den Authentifikator zurücksetzt werden alle bestehenden Authentifikatoren ungültig. Du musst sie dann neu einrichten!</string>
<string name="overview_show_predictions">Predictions (Vorhersagen)</string>
<string name="overview_show_treatments">Behandlungen</string>
<string name="overview_show_deviationslope">Steigung der Abweichung</string>
@ -1018,7 +1004,6 @@ Unerwartetes Verhalten.</string>
<string name="above" comment="above &quot;in range&quot;">Über</string>
<string name="show_loop_records">Zeige Loop Datensätze</string>
<string name="show_hide_records">Verberge Loop Datensätze</string>
<string name="widget_description">AndroidAPS Widget</string>
<string name="configure">Deckkraft konfigurieren</string>
<string name="loop_status">Loop Status</string>
<string name="graph_scale">Diagrammskala</string>

View file

@ -23,8 +23,6 @@
<string name="objectives_pumpstatusavailableinns">Η κατάσταση της αντλίας διαθέσιμη στο NS</string>
<string name="objectives_manualenacts">Ξεκινήστε χειροκίνητα</string>
<string name="accomplished">Επιτεύχθηκε: %1$s</string>
<string name="objectives_usage_objective">Μάθετε πώς να ελέγχετε το AndroidAPS</string>
<string name="objectives_usage_gate">Κάντε διαφορετικές ενέργειες στο AndroidAPS</string>
<string name="objectives_useprofileswitch">Θέστε το προφίλ στο 90% για 10 λεπτά (Παρατεταμένο πάτημα του προφίλ στην Επισκόπηση)</string>
<string name="objectives_usedisconnectpump">Προσομοίωση ένδειξης. Αποσυνδέστε την αντλία για 1 ώρα (Παρατεταμένο στο Ανοιχτό Κύκλωμα)</string>
<string name="objectives_usereconnectpump">... και επανασυνδέστε με τον ίδιο τρόπο</string>

View file

@ -34,9 +34,7 @@
<string name="description_source_mm640g">Λάβετε τις τιμές BG από το 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Λήψη δεδομένων BG από Nightscout</string>
<string name="description_treatments">Σώζει όλες τις θεραπείες που έγιναν</string>
<string name="description_wear">Παρακολουθεί και ελέγχει το AndroidAPS χρησιμοποιώντας το ρολόι σας WearOS.</string>
<string name="description_xdrip_status_line">Δείτε πληροφορίες σχετικά με το κύκλωμά σας στην πρόσοψη xDrip +.</string>
<string name="description_sms_communicator">Ελεγξτε απομακρυσμένα το AndroidAPS χρησιμοποιώντας τις εντολές SMS.</string>
<string name="treatments_insulin_label_string">Ινσουλίνη:</string>
<string name="treatments_carbs_label_string">Υδατάνθρακες:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -72,9 +70,7 @@
<string name="treatments">Θεραπείες</string>
<string name="virtualpump">Εικονική Αντλία</string>
<string name="configbuilder_pump">Αντλία</string>
<string name="configbuilder_pump_description">Ποια αντλία θα θέλατε να χρησιμοποιήσετε με το AndroidAPS;</string>
<string name="configbuilder_profile">Προφίλ</string>
<string name="configbuilder_profile_description">Ποιο προφίλ πρέπει να χρησιμοποιήσει το AndroidAPS;</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Ποιος APS αλγόριθμος πρέπει να κάνει θεραπείες;</string>
<string name="configbuilder_general">Γενικά</string>
@ -82,7 +78,6 @@
<string name="configbuilder_constraints_description">Ποιοι περιορισμοί έχουν εφαρμοστεί;</string>
<string name="constraints">Περιορισμοί</string>
<string name="configbuilder_loop">Κύκλωμα</string>
<string name="configbuilder_loop_description">Χρησιμοποιήστε αυτό για να ενεργοποιήσετε την ενσωμάτωση του κυκλώματος AndroidAPS.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Μετά από επεξεργασία περιορισμών</string>
<string name="loop_tbrsetbypump_label">Προσωρινός Ρυθμός ορίστηκε από την αντλία</string>
@ -98,7 +93,6 @@
<string name="sms_basal">Βασικός Ρυθμός:</string>
<string name="changeyourinput">Αλλάξτε αυτό που εισάγατε!</string>
<string name="configbuilder_bgsource">Πηγή BG</string>
<string name="configbuilder_bgsource_description">Από πού πρέπει το AndroidAPS να πάρει τα δεδομένα του;</string>
<string name="apsmode_title">Λειτουργία APS</string>
<string name="closedloop">Κλειστό Κύκλωμα</string>
<string name="openloop">Ανοιχτό Κύκλωμα</string>
@ -249,7 +243,6 @@
<string name="adult">Ενήλικας</string>
<string name="resistantadult">Αντίσταση ινσουλίνης ενηλίκων</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s χρειάζεται λίστα βελτιστοποίησης μπαταρίας για σωστή απόδοση</string>
<string name="loopsuspended">Κύκλωμα σε αναστολή</string>
<string name="loopsuspendedfor">Αναστολή (%1$d m)</string>
<string name="suspendloopfor1h">Κύκλωμα σε αναστολή για 1h</string>
@ -480,7 +473,6 @@
<string name="welcometosetupwizard">Καλώς ήρθατε στον οδηγό εγκατάστασης. Θα σας καθοδηγήσει μέσα από το πρόγραμμα εγκατάστασης\n</string>
<string name="readstatus">Κατάσταση ανάγνωσης</string>
<string name="exitwizard">Παράλειψη του \"Οδηγού εγκατάστασης\"</string>
<string name="setupwizard_loop_description">Πατήστε το παρακάτω πλήκτρο για να ενεργοποιήσετε το AndroidAPS για να προτείνει/κάνει αλλαγές στον βασικό ρυθμό</string>
<string name="setupwizard_sensitivity_description">Η προσθήκη Ευαισθησία χρησιμοποιείται για την ανίχνευση αλλαγών στην ευαισθησία και τον υπολογισμό του COB. Για περισσότερες πληροφορίες εδώ:</string>
<string name="nsclientinfotext">Το NSClient χειρίζεται τη σύνδεση με το Nightscout. Μπορείτε να παραλείψετε αυτό τώρα αλλά δεν θα μπορείτε να ολοκληρώσετε τους Στόχους μέχρι να κάνετε τις ρυθμίσεις του.</string>
<string name="diawarning">Προσοχή: Τα νέα προφίλ ινσουλίνης απαιτούν DIA τουλάχιστον 5 ωρών. Η DIA 5-6 ώρες στα νέα προφίλ είναι ισοδύναμα με DIA των 3 ωρών στα παλιά προφίλ ινσουλινών.</string>
@ -503,7 +495,6 @@
<string name="low_temptarget_lowers_sensitivity_title">Ο χαμηλός προσωρινός στόχος μειώνει την ευαισθησία</string>
<string name="low_temptarget_lowers_sensitivity_summary"><![CDATA[Χαμηλότερη ευαισθησία για προσωρινό στόχο < 100]]></string>
<string name="storedsettingsfound">Βρέθηκαν αποθηκευμένες ρυθμίσεις</string>
<string name="allow_hardware_pump_text">Προσοχή: Εάν ενεργοποιήσετε και συνδεθείτε με μια αντλία, το AndroidAPS θα αντιγράψει τις ρυθμίσεις βασικού από το προφίλ στην αντλία, αντικαθιστώντας τον υπάρχων βασικό ρυθμό της αντλίας. Βεβαιωθείτε ότι έχετε τον σωστό βασικό ρυθμό στο AndroidAPS. Εάν δεν είστε βέβαιοι ή δεν θέλετε να αντικαταστήσετε τον βασικό ρυθμό στην αντλία σας, πατήστε Άκυρο και επαναλάβετε εναλλαγή προς την αντλία σε μεταγενέστερο χρόνο.</string>
<string name="error_adding_treatment_title">Ελλιπή δεδομένα θεραπείας</string>
<string name="maintenance_settings">Ρυθμίσεις συντήρησης</string>
<string name="maintenance_amount">Αριθμός αρχείων καταγραφής για αποστολή</string>
@ -527,7 +518,6 @@
<string name="loop_openmode_min_change_summary" formatted="false">Το Ανοιχτό κύκλωμα θα εμφανίσει νέο μήνυμα αλλαγής μόνο αν η αλλαγή είναι μεγαλύτερη από αυτήν τη τιμή %. Προεπιλεγμένη τιμή 20%</string>
<string name="profile_total">== ∑ %1$s U</string>
<string name="dexcom_lognssensorchange_title">Αλλαγή αρχείου αισθητήρα σε NS</string>
<string name="dexcom_lognssensorchange_summary">Δημιουργία συμβάντος «Αλλαγή αισθητήρα» στο NS αυτόματα με έναρξη αισθητήρα</string>
<string name="tomato">Tomato (MiaoMiao)</string>
<string name="tomato_short">Tomato</string>
<string name="summary_tidepool_username">Το όνομα χρήστη του Tidepool, συνήθως το mail σας</string>

View file

@ -5,12 +5,12 @@
<string name="dia_profile">Debes establecer el valor de DIA en tu perfil.</string>
<string name="dia_minimumis5h">El valor mínimo permitido es 5 horas.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">Si está satisfecho con el valor para DIA que utilizó en su bomba antes de usar AndroidAPS y le funcionó bien, no hay necesidad de cambiar esto cuando empieces a cerrar el bucle.</string>
<string name="dia_meaningisequaltodiapump">Si estás satisfecho con el valor de DIA que utilizaste en tu bomba antes de utilizar AAPS y te funcionó bien, no hay necesidad de cambarlo cuando empieces a cerrar el lazo.</string>
<string name="dia_valuemustbedetermined">Deberías determinar por ti mismo el valor apropiado para DIA.</string>
<string name="hypott_label">Objetivo temporal ante Hipoglucemia</string>
<string name="hypott_whenhypott">¿Cuál es la razón principal para establecer un objetivo temporal por hipoglucemia?</string>
<string name="hypott_wrongbasal">Para corregir hipos causados por ajustes incorrectos de la tasa basal.</string>
<string name="hypott_preventoversmb">Para evitar que AndroidAPS corriga excesivamente un aumento de la glucosa en la sangre causado por los glúcidos de acción rápida que se utilizaron para tratar una hípo.</string>
<string name="hypott_preventoversmb">Para evitar que AAPS corrija de forma excesiva ante un aumento rápido de la glucosa por tomar hidratos rápidos para remontar una hipoglucemia.</string>
<string name="hypott_exercise">Para corregir una hipo resultando de ejercicio.</string>
<string name="hypott_0basal">Para evitar que la glucosa sanguínea se quede baja si ya hay una tasa basal temporal 0% en funcionamiento.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html</string>
@ -18,15 +18,15 @@
<string name="offlineprofile_label">Tema: Perfil fuera de línea</string>
<string name="offlineprofile_nsprofile">El perfil NS puede ser usado pero no configurado.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Razones para aplicar \"Desconectar bomba\" en AndroidAPS</string>
<string name="pumpdisconnect_label">Razones para aplicar \"Desconectar bomba\" en AAPS</string>
<string name="pumpdisconnect_whattodo">¿Qué se debe hacer al desconectar la bomba?</string>
<string name="pumpdisconnect_unnecessary">Esto es innecesario, ya que no se entregará insulina si la bomba está físicamente desconectada.</string>
<string name="pumpdisconnect_missinginsulin">Evita que AndroidAPS tenga en cuenta la insulina que no se entregó mientras la bomba se desconecta físicamente. </string>
<string name="pumpdisconnect_missinginsulin">Evita que AAPS tenga en cuenta la insulina que no se entregó cuando la bomba estaba físicamente desconectada.</string>
<string name="pumpdisconnect_notstop">Si la bomba permanece conectada, no se detendrá la entrega de insulina.</string>
<string name="pumpdisconnect_openloop">Enviará AndroidAPS a modo bucle abierto.</string>
<string name="pumpdisconnect_openloop">Pasará AAPS a modo de lazo abierto</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings</string>
<string name="objectives_label">Ajustes AndroidAPS</string>
<string name="objectives2_label">Ajustes AndroidAPS</string>
<string name="objectives_label">Ajustes de AAPS</string>
<string name="objectives2_label">Ajustes de AAPS</string>
<string name="objectives_howtosave">¿Cuáles son las mejores prácticas para hacer copias de seguridad de su configuración?</string>
<string name="objectives_notesettings">No necesita exportar sus ajustes siempre que haga una nota de ellos.</string>
<string name="objectives_afterobjective">Exporta tu configuración después de completar un objetivo.</string>
@ -40,8 +40,8 @@
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me</string>
<string name="noisycgm_label">Lecturas CGM ruidosas</string>
<string name="noisycgm_whattodo">¿Qué se debe hacer si los datos de CGM tienen ruido?</string>
<string name="noisycgm_nothing">No hacer nada - AndroidAPS se encargará de ello.</string>
<string name="noisycgm_pause">Deshabilita el bucle cerrado para evitar posibles sobredosis o subdosis.</string>
<string name="noisycgm_nothing">No hacer nada: AAPS se ocupará de ello.</string>
<string name="noisycgm_pause">Deshabilita el lazo cerrado para evitar posibles sobredosis o subdosis.</string>
<string name="noisycgm_replacesensor">Sustituya los sensores constantemente ruidosos o inexactos.</string>
<string name="noisycgm_checksmoothing">Comprueba que tu aplicación CGM proporciona datos suavizados.</string>
<string name="noisycgm_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data</string>
@ -50,7 +50,7 @@
<string name="exerciseprofile_switchprofilebelow100">Haga un cambio de perfil a menos de 100%.</string>
<string name="exerciseprofile_switchprofileabove100">Haga un cambio de perfil a más de 100%.</string>
<string name="exerciseprofile_leaveat100">Dejar el perfil configurado al 100%.</string>
<string name="exerciseprofile_suspendloop">Suspender el bucle.</string>
<string name="exerciseprofile_suspendloop">Suspender el lazo</string>
<string name="exerciseprofile_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target</string>
<string name="exercise_label">Ejercicios y objetivos temporales</string>
<string name="exercise_whattodo">¿Cómo se puede usar objetivos temporales para ayudar mejor al sistema a hacer frente al ejercicio aeróbico?</string>
@ -59,19 +59,19 @@
<string name="exercise_setunchanged">Deja tu objetivo de glucosa sanguíneo sin cambios.</string>
<string name="exercise_15g">Espere hasta que la glucosa en sangre caiga por debajo de su objetivo de hipo temp y luego coma 15 g de hidratos de carbono de actividad rápida.</string>
<string name="exercise_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target</string>
<string name="suspendloop_label">Desactiva /suspende el bucle</string>
<string name="suspendloop_label">Desactiva/suspende el lazo</string>
<string name="suspendloop_doigetinsulin">¿Recibo insulina cuando el lazo está desactivado/suspendido?</string>
<string name="suspendloop_yes">Sí, la insulina basal sigue siendo entregada.</string>
<string name="suspendloop_no">No, la administración de la insulina está detenida.</string>
<string name="basaltest_label">Pruebas basales, ISF, e I:C</string>
<string name="basaltest_when">¿Cuándo se deben validar estos valores?</string>
<string name="basaltest_beforeloop">Antes de empezar el bucle.</string>
<string name="basaltest_beforeloop">Antes de empezar el lazo</string>
<string name="basaltest_havingregularhighlow">Cuando se tienen valores de glucosa altos o bajos frecuentemente.</string>
<string name="basaltest_weekly">Al menos una vez a la semana.</string>
<string name="basaltest_fixed">Una vez fijados y validados, estos valores no debrían cambiar a lo largo del tiempo.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings</string>
<string name="prerequisites_label">Requisitos previos</string>
<string name="prerequisites_what">¿Qué es imprescindible instalar para usar AndroidAPS?</string>
<string name="prerequisites_what">¿Qué es esencial para configurar y utilizar AAPS?</string>
<string name="prerequisites_determinedcorrectprofile">Información de perfil validada (Basal, IC, ISF, DIA).</string>
<string name="prerequisites_computer">Un ordenador con Android Studio instalado y configurado.</string>
<string name="prerequisites_phone">Un teléfono compatible.</string>
@ -86,25 +86,25 @@
<string name="prerequisites_smartwatch">Un Smartwatch.</string>
<string name="prerequisites_supportedcgm">Un MCG soportado.</string>
<string name="prerequisites2_label">Requisitos previos</string>
<string name="prerequisites2_what">¿Qué es necesario para poder instalar y usar AndroidAPS?</string>
<string name="prerequisites2_what">¿Qué es esencial para configurar y utilizar AAPS?</string>
<string name="prerequisites2_profile">Parámetros validados para poder configurar un perfil (ISF, I:C ratio, perfil basal, DIA etc.).</string>
<string name="prerequisites2_device">Un dispositivo Android compatible (e.j. un móvil, un smartwatch Android compatible o una tablet).</string>
<string name="prerequisites2_internet">AndroidAPS necesita una conexión a internet para funcionar en modo \"lazo cerrado\".</string>
<string name="prerequisites2_internet">AAPS requiere una conexión a Internet para funcionar en modo lazo cerrado.</string>
<string name="prerequisites2_supportedcgm">Un medidor continuo de glucosa (MCG) y una aplicación capaz de recibir los valores proporcionados por el medidor en el móvil o tablet.</string>
<string name="prerequisites2_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html</string>
<string name="update_label">Actualizando AndroidAPS</string>
<string name="update_label">Actualizando AAPS</string>
<string name="whatistrue">Compruebe todas las respuestas correctas.</string>
<string name="update_git">Es necesario tener Git instalado y configurado en el ordenador.</string>
<string name="update_asap">Cuando esté disponible una versión más actualizada de AndroidAPS, las funciones de las versiones anteriores podrán ser limitadas de manera remota después de una fecha determinada.</string>
<string name="update_asap">Cuando esté disponible una versión más reciente de AAPS, las funciones de las versiones anteriores pueden ser limitadas de forma remota después de una fecha determinada.</string>
<string name="update_keys">Se debe guardar en un lugar seguro la \"keystore\" que se ha empleado y usar la misma\"key\" para futuras actulizaciones.</string>
<string name="update_neverupdate">Nunca actualice si el sistema está funcionando bien.</string>
<string name="update_askfriend">Si tienes problemas construyendo la aplicación (. apk), puedes instalar el mismo archivo. apk compilado por un amigo.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch</string>
<string name="troubleshooting_label">Solución de problemas</string>
<string name="troubleshooting_wheretoask">¿Dónde se puede pedir ayuda relacionada con AndroidAPS?</string>
<string name="troubleshooting_fb">Puedes pedir ayuda en el grupo de Facebook AndroidAPS Users.</string>
<string name="troubleshooting_wiki">Debes leer (y después releer) la documentación oficial de AndroidAPS.</string>
<string name="troubleshooting_gitter">Puede solicitar consejos y registrar problemas técnicos o demás problemas en los canales de AndroidAPS en Discord.</string>
<string name="troubleshooting_wheretoask">¿Dónde puedes buscar ayuda con AAPS?</string>
<string name="troubleshooting_fb">Puede solicitar asesoramiento en el grupo de usuarios de AAPS en Facebook.</string>
<string name="troubleshooting_wiki">Deberías leer (y volver a leer) la documentación de AAPS.</string>
<string name="troubleshooting_gitter">Puedes solicitar asesoramiento y registrar problemas técnicos o indidencias en el grupo de Discord de AAPS.</string>
<string name="troubleshooting_yourendo">Debes preguntar a tu endocrino o educador diabetológico.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/AndroidAPSUsers/</string>
@ -118,7 +118,7 @@
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin</string>
<string name="sensitivity_label">Plugins de sensibilidad</string>
<string name="sensitivity_which">Compruebe todas las respuestas correctas.</string>
<string name="sensitivity_adjust">Los plugins de sensibilidad permiten a AndroidAPS ajustarse para cambios temporales o de corta duración en la sensibilidad a la insulina (por ejemplo, cambios hormonales o problemas con la absorción en el sitio de infusión).</string>
<string name="sensitivity_adjust">Los plugins de sensibilidad permiten a AAPS ajustarse para cambios temporales o de corta duración en la sensibilidad a la insulina (por ejemplo, cambios hormonales o problemas con la absorción en el sitio de infusión).</string>
<string name="sensitivity_edit">Los plugins de sensibilidad sugieren al usuario cambios en la cantidad de insulina basal a suministrar, en el factor de sensibiliad a la insulina (ISF) y en el ratio I:C y pueden ser incorporados al perfil definido.</string>
<string name="sensitivity_cannula">Registrar el cámbio de cánula reseteará Autosens, dejándolo de nuevo al 100%.</string>
<string name="sensitivity_time">Algunas de las opciones del plugin tienen rangos de tiempo configurables que pueden ser definidos por el usuario.</string>
@ -128,14 +128,14 @@
<string name="wrongcarbs_whattodo">¿Qué deberías hacer si has hecho una entrada incorrecta de carbohidratos?</string>
<string name="wrongcarbs_treatmentstab">Elimina la entrada incorrecta en los tratamientos e introduce el valor correcto de carbohidratos.</string>
<string name="wrongcarbs_addinsulin">Bolo con insulina usando el menú de llenado de la infusión.</string>
<string name="wrongcarbs_donothing">No haga nada AndroidAPS hará los ajustes apropiados.</string>
<string name="wrongcarbs_donothing">No hacer nada - AAPS realizará los ajustes apropiados.</string>
<string name="wrongcarbs_bolus">Bolo con insulina usando el botón de Insulina (bolus) en página general.</string>
<string name="wronginsulin_label">Errores de entrega/entrada de insulina</string>
<string name="wronginsulin_whattodo">¿Qué debes hacer si recibiste menos insulina de la que sugiere la historia de la bomba p.ej. debido a una oclusión, una cánula fallida o olvidarse de reponer la bomba después de una ducha?</string>
<string name="wronginsulin_careportal">Elimina los datos de insulina del portal de Nightscout Careportal para eliminarlos del historial de la bomba.</string>
<string name="wronginsulin_compare">Comparar valores en AndroidAPS con el historial de la bomba (si la bomba lo soporta).</string>
<string name="wronginsulin_compare">Comparar valores en AAPS con el historial de la bomba (si la bomba lo soporta).</string>
<string name="wronginsulin_prime">Bolo una proporción de la insulina calculada “perdida” por jeringa/pluma o usando menú de llenado.</string>
<string name="wronginsulin_donothing">No haga nada y permite que AndroidAPS corrija cualquier nivel alto de glucosa en la sangre resultante.</string>
<string name="wronginsulin_donothing">No hacer nada y permite que AAPS corrija cualquier resultado de nivel alto de glucosa en sangre.</string>
<string name="cob_label">Carbohidratos activos (COB)</string>
<string name="cob_question">¿Cómo afecta el cambio del valor ISF al cálculo de COB?</string>
<string name="cob_longer">Incrementar el ISF hará que los carbohidratos se absorban más lentamente</string>
@ -157,28 +157,28 @@
<string name="breadgrams_label">Entrada y bolos de carbohidratos</string>
<string name="breadgrams_grams">Sólo se deben utilizar gramos para estimar y registrar los carbohidratos consumidos.</string>
<string name="breadgrams_exchange">Los carbohidratos consumidos se pueden registrar utilizando un sistema de intercambio apropiado (por ejemplo, los intercambios DAFNE \"CHO\" o \"Unidades de Pan\" europeas).</string>
<string name="breadgrams_decay">AndroidAPS utiliza un modelo dinámico para estimar la \"reducción\" y calcular el COB.</string>
<string name="breadgrams_decay">AAPS utiliza un modelo dinámico para estimar la \"reducción\" y calcular el COB.</string>
<string name="breadgrams_calc">Si los niveles de glucosa en sangre están fuera de los valores aceptables (demasiado bajos o demasiado altos), la calculadora del bolo se puede utilizar para proporcionar sugerencias para las correcciones de carbohidratos o de insulina.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u</string>
<string name="extendedcarbs_label">e-carbs</string>
<string name="extendedcarbs_handling">¿Para qué podría utilizar los e-carbs (carbohidratos extendidos)?</string>
<string name="extendedcarbs_future">Para programar los carbohidratos en el futuro, posiblemente distribuidos a través de un período (similar a un bolo extendido que distribuye insulina sobre un período).</string>
<string name="extendedcarbs_free">Para el registro de los carbohidratos \'libres\' para ejercicios que desea ocultar de AndroidAPS.</string>
<string name="extendedcarbs_fat">los e-carbohidratos (distribuidos en el futuro) pueden ayudar a AndroidAPS en el tratamiento de comidas de alta grasa/proteína.</string>
<string name="extendedcarbs_free">Para regristrar carbohidratos \'libres\' de ejercicios que quieres ocultar a AAPS.</string>
<string name="extendedcarbs_fat">Los eCarbs (distribuidos en el futuro) pueden ayudar a AAPS con el tratamiento de comidas con alto contenido de grasa/proteína (UGP).</string>
<string name="extendedcarbs_rescue">Para registrar carbohidratos de rescate que se utilizan para tratar glucosa baja.</string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Monitoreo remoto</string>
<string name="nsclient_howcanyou">¿Cómo puede monitorear a AndroidAPS (por ejemplo para su hijo) de forma remota?</string>
<string name="nsclient_nightscout">La aplicación NS Client, la aplicación Nightscout y la página web Nightscout le permiten seguir a AndroidAPS de forma remota.</string>
<string name="nsclient_howcanyou">¿Cómo puedes monitorizar AAPS de forma remota (por ejemplo, para ver a tu hijo)?</string>
<string name="nsclient_nightscout">La aplicación AAPSClient, la aplicación Nightscout y la página web de Nightscout permiten seguir de forma remota a AAPS.</string>
<string name="nsclient_dexcomfollow">Otras aplicaciones (por ejemplo, Dexcom follow, xDrip running en el modo de seguimiento) le permiten seguir algunos parámetros (por ejemplo, los valores de glucosa/sensor) de forma remota, pero utilizan diferentes algoritmos por lo que puede tener valores de IOB o COB inexactos.</string>
<string name="nsclient_data">Para seguir a AndroidAPS de forma remota, ambos dispositivos deben tener acceso a Internet (por ejemplo, a través de Wi-Fi o datos de red móvil/celular).</string>
<string name="nsclient_fullcontrol">El Cliente NS utilizado como seguidor remoto supervisará y proporcionará el control total de AndroidAPS.</string>
<string name="nsclient_data">Para seguir a AAPS de forma remota, ambos dispositivos deben disponer de acceso a Internet (por ejemplo, vía WiFi o red de datos móviles)</string>
<string name="nsclient_fullcontrol">AAPSClient se usa como seguidor remoto y permite supervisar y proporcionar control total de AAPS.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html</string>
<string name="isf_label_exam">Factor Sensibilidad a la Insulina (ISF)</string>
<string name="isf_increasingvalue">El aumento de los valores de ISF conducirá a un mayor suministro de insulina para cubrir una cantidad específica de carbonos.</string>
<string name="isf_decreasingvalue">Reducir los valores de ISF conduce a una mayor cantidad de insulina para corregir una glucosa sanguínea a un objetivo superior.</string>
<string name="isf_noeffect">Aumentar o reducir el ISF no tiene ningún efecto en la administración de insulina cuando los niveles de glucosa en la sangre están por debajo del objetivo.</string>
<string name="isf_preferences">ISF debe introducirse en sus preferencias de AndroidAPS.</string>
<string name="isf_preferences">El ISF debe añadirse en las preferencias de AAPS.</string>
<string name="isf_profile">El cambio del valor de ISF en el perfil es suficiente para aplicar el cambio.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html</string>
@ -205,7 +205,7 @@
<string name="profileswitch2_bgunchanged">El objetivo de la glucosa sanguínea no cambiará.</string>
<string name="profileswitch2_isfhigher">El ISF será un 20% más alto.</string>
<string name="profileswitchtime_label">Cambio de perfil</string>
<string name="profileswitchtime_iwant">Si te levantas 2 horas antes de lo habitual, ¿cómo debes notificar a AndroidAPS del cambio en tu horario?</string>
<string name="profileswitchtime_iwant">Si te levantas 2 horas antes de lo habitual, ¿cómo debes notificar a AAPS sobre el cambio de horario?</string>
<string name="profileswitchtime_2">Iniciar un cambio de perfil con un intervalo de tiempo de 2</string>
<string name="profileswitchtime__2">Iniciar un cambio de perfil con un intervalo de tiempo de -2</string>
<string name="profileswitchtime_tt">Establece un objetivo temporal comida pronta.</string>
@ -213,7 +213,7 @@
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift</string>
<string name="profileswitch4_label">Cambios en perfiles</string>
<string name="profileswitch4_rates">Las tasas basales, ISF, I:C, etc., deben establecerse en los perfiles.</string>
<string name="profileswitch4_internet">Activar cambios en su perfil de Nightscout requiere que su móvil con AndroidAPS tenga conexión a Internet.</string>
<string name="profileswitch4_internet">Activar cambios en el perfil de Nightscout requiere que el teléfono con AAPS disponga de conexión a Internet.</string>
<string name="profileswitch4_sufficient">Editar perfiles para cambiar valores es suficiente para implementar cualquier cambio realizado.</string>
<string name="profileswitch4_multi">Se pueden configurar múltiples perfiles y seleccionarlos para adaptarse a las circunstancias cambiantes (por ejemplo, cambios hormonales, turnos de trabajo, días de semana/fin de semana).</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy</string>
@ -223,6 +223,6 @@
<string name="basalhelp_google">Google</string>
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Otros Medicamentos. Por favor, lea la siguiente declaración y luego marque la casilla para aceptar la declaración.</string>
<string name="other_medication_text">AAPS reduce tasas basales o para la administración de insulina para aumentar la glucosa en la sangre. Los inhibidores del grupo de las SGLT2 (gliflozinas) pueden prevenir el aumento esperado de glucosa en sangre y, por lo tanto, pueden producir una deficiencia de insulina peligrosa (DKA).
\nLos nombres comunes de marca son: Invokana ®, Forxiga ®, Steglatro ®, Suglat ®, Apleway ®, Synjardy ®, Vokanamet ®, Xigduo ®.\n\nI prometo que no tomaré este tipo de medicamentos usando AAPS o desactivaré el bucle cerrado antes de usar esas drogas.</string>
<string name="other_medication_text">AAPS reduce las tasas basales o suspende la administración de insulina para aumentar la glucosa en sangre. Los inhibidores de la familia de las SGLT2 (gliflozinas) pueden prevenir el aumento esperado de la glucosa en sangre, por lo que pueden producir una deficiencia de insulina preligrosa (DKA)
\nAlgunos nombres genéricos de marcas son: Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nI Prometo que no tomaré este tipo de medicamentos cuando utilice AAPS o desactivaré el lazo cerrado antes de usarlos.</string>
</resources>

View file

@ -25,8 +25,8 @@
<string name="objectives_pumpstatusavailableinns">Estado de la bomba disponible en NS</string>
<string name="objectives_manualenacts">Aprobación Manual</string>
<string name="accomplished">Completado: %1$s</string>
<string name="objectives_usage_objective">Aprende a controlar AndroidAPS</string>
<string name="objectives_usage_gate">Realice diferentes acciones en AndroidAPS</string>
<string name="objectives_usage_objective">Aprenda cómo controlar AAPS</string>
<string name="objectives_usage_gate">Ejecutar diferentes acciones en AAPS</string>
<string name="objectives_useprofileswitch">Establecer perfil 90% durante 10 min (Pulsación larga en nombre del perfil en Resumen)</string>
<string name="objectives_usedisconnectpump">Simular ducha. Desconectar bomba durante 1h (Pulsación larga en el lazo abierto)</string>
<string name="objectives_usereconnectpump">... y volver a conectar de la misma manera</string>

View file

@ -40,9 +40,9 @@
<string name="description_source_ns_client">Recibir los datos de glucosa de Nightscout</string>
<string name="description_source_xdrip">Recibir los valores de glucosa de xDrip+</string>
<string name="description_treatments">Guarda todos los tratamientos que se realizaron</string>
<string name="description_wear">Usar tu reloj WearOS para observar y controlar AndroidAPS</string>
<string name="description_wear">Supervisar y controlar AAPS usando un reloj WearOS</string>
<string name="description_xdrip_status_line">Mostrar información sobre tu lazo en tu esfera xDrip+</string>
<string name="description_sms_communicator">Control remoto de AndroidAPS mediante comandos SMS</string>
<string name="description_sms_communicator">Control remoto de AAPS usando comandos SMS.</string>
<string name="treatments_insulin_label_string">Insulina:</string>
<string name="treatments_carbs_label_string">Carbohidratos:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -79,9 +79,9 @@
<string name="treatments">Tratamientos</string>
<string name="virtualpump">Bomba virtual</string>
<string name="configbuilder_pump">Bomba</string>
<string name="configbuilder_pump_description">¿Qué bomba quieres utilizar con AndroidAPS?</string>
<string name="configbuilder_pump_description">¿Qué bomba quieres utilizar con AAPS?</string>
<string name="configbuilder_profile">Perfil</string>
<string name="configbuilder_profile_description">¿Qué perfil debe usar AndroidAPS?</string>
<string name="configbuilder_profile_description">¿Qué perfil debería usar AAPS?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">¿Qué algoritmo APS quieres usar para ajustar tu tratamiento?</string>
<string name="configbuilder_general">Ajustes generales</string>
@ -89,7 +89,7 @@
<string name="configbuilder_constraints_description">¿Qué restricciones se aplican?</string>
<string name="constraints">Restricciones</string>
<string name="configbuilder_loop">Lazo</string>
<string name="configbuilder_loop_description">Utiliza esta opción para activar la integración del lazo en AndroidAPS</string>
<string name="configbuilder_loop_description">Usa esto para habilitar la integración de lazo de AAPS</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Tras procesar las restricciones</string>
<string name="loop_tbrsetbypump_label">Basal temporal establecida por la bomba</string>
@ -106,7 +106,7 @@
<string name="sms_basal">Dosis Basal:</string>
<string name="changeyourinput">¡Cambiar datos!</string>
<string name="configbuilder_bgsource">Origen de Glucosa</string>
<string name="configbuilder_bgsource_description">¿De dónde debe AndroidAPS obtener sus datos?</string>
<string name="configbuilder_bgsource_description">¿Desde dónde debería obtener AAPS los datos?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">Modo APS</string>
<string name="closedloop">Lazo cerrado</string>
@ -331,7 +331,7 @@
<string name="patient_name_summary">Proporcione el nombre de paciente o el apodo para diferenciar entre varias configuraciones</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">Usuario</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s necesita una optimización de la batería para funcionar óptimamente</string>
<string name="needwhitelisting">%1$s necesita añadir la optimización de la batería a la lista blanca, para obtener un rendimiento adecuado</string>
<string name="loopsuspended">Lazo suspendido</string>
<string name="loopsuspendedfor">Desactivado (%1$d m)</string>
<string name="suspendloopfor1h">Suspender lazo durante 1 hora</string>
@ -429,7 +429,7 @@
<string name="sensitivityweightedaverage">Sensibilidad promedio ponderada</string>
<string name="notloadedplugins">Faltan perfiles por cargar!</string>
<string name="valuesnotstored">Valores no guardados!</string>
<string name="ns_localbroadcasts">Habilita las transmisiones a otras aplicaciones (como xDrip+). ¡No lo habilites si tienes más de una instancia de AAPS o NSClient instaladas!</string>
<string name="ns_localbroadcasts">Activar transmisiones a otras aplicaciones (como xDrip+). ¡No activar si tiene más de una instancia de AAPS o AAPSClient instalado!</string>
<string name="ns_localbroadcasts_title">Habilitar la emisión de mensajes localmente.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">ISF Dinámico</string>
@ -631,7 +631,7 @@
<string name="welcometosetupwizard">Bienvenido al asistente de instalación, que te guiará en el proceso de configuración\n</string>
<string name="readstatus">Leer estado</string>
<string name="exitwizard">Saltar asistente de configuración</string>
<string name="setupwizard_loop_description">Presiona el botón de abajo para permitir que AndroidAPS pueda sugerir/realizar cambios en las basales</string>
<string name="setupwizard_loop_description">Presionar el botón de abajo para permitir que AAPS pueda sugerir/realizar cambios en la insulina basal</string>
<string name="setupwizard_sensitivity_description">El complemento de sensibilidad es usado para detectar la sensibilidad y cálculo de COB. Para más info ver:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/es/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="nsclientinfotext">NSCliente controla la conexión con Nightscout. Puedes saltar este paso ahora pero no podrás completar los objetivos hasta que lo configures.</string>
@ -673,7 +673,7 @@
<string name="remove_items">Eliminar elementos</string>
<string name="sort_items">Ordenar elementos</string>
<string name="storedsettingsfound">Encontrados ajustes de configuración</string>
<string name="allow_hardware_pump_text">Atención: si activas y conectas la bomba con AndroidAPS, AndroidAPS sobrescribirá los ajustes de basales del perfil de la bomba, con los establecidos en el perfil de AndroidAPS. Comprueba que tengas el perfil basal correcto en AndroidAPS. Si no estás seguro, o no quieres sobrescribir los ajustes basales en la bomba, presiona cancelar y repite la vinculación más adelante.</string>
<string name="allow_hardware_pump_text">Atención: Si activas y conectas una bomba con AAPS, AAPS copiará la configuración basal del perfil a la bomba, sobreescribiendo el perfil basal previo que tuviera almacenado la bomba. Asegúrate de que la configuración del perfil basal en AAPS es correcto. Si no estás seguro o no quieres sobreescribir la configuración del perfil basal de tu bomba, presiona cancelar y vincula la bomba más adelante.</string>
<string name="error_adding_treatment_title">Datos de tratamiento incompletos</string>
<string name="maintenance_settings">Ajustes de mantenimiento</string>
<string name="maintenance_email">Correo electrónico</string>
@ -774,7 +774,7 @@
<string name="id">ID:</string>
<string name="submit">Enviar</string>
<string name="mostcommonprofile">Perfil más común:</string>
<string name="survey_comment">Nota: Sólo los datos visibles en esta pantalla se cargarán de forma anónima. El ID se asigna a esta instalación de AndroidAPS. Puede volver a enviar datos si cambia su perfil principal, pero deja que se ejecute al menos una semana para que el resultado sea visible en el tiempo en rango. Agradecemos su ayuda.</string>
<string name="survey_comment">Nota: Sólo los datos visibles en esta pantalla se subirán de forma anónima. El ID es asignado a la instalación de AAPS. Puedes volver a enviar datos si cambias tu perfil principal, pero deja que se ejecute al menos durante una semana, para que el resultado del tiempo en rango sea visible. Agradecemos tu ayuda.</string>
<string name="invalidage">Entrada de edad no válida</string>
<string name="invalidweight">Peso no válido</string>
<string name="invalidpct">Entrada % inválida</string>
@ -819,11 +819,11 @@
<string name="smscommunicator_otp_export_prompt">¿Estás seguro que deseas copiar el secreto OTP al portapapeles?\n\nSólo lo necesitas si tu aplicación de autentificación tiene problemas para escanear el código QR, quieres introducirlo manualmente o quieres configurar el token de hardware OTP usando una aplicación dedicada.</string>
<string name="smscommunicator_otp_export_successful">OTP secreto (en formato Base32) exportado y copiado en portapapeles. Pegalo en el autenticador o grabador hardware OTP!</string>
<string name="smscommunicator_otp_step1_install_header">1. Instalar autenticador</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Escanea el código para instalar códigos AndroidAPS OTP</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Escanea el código para configurar los códigos AAPS OTP</string>
<string name="smscommunicator_otp_step3_test_header">3. Probar la contraseña de Uso único</string>
<string name="smscommunicator_otp_reset_header">Restablecer autentificadores</string>
<string name="smscommunicator_otp_install_info">En cada teléfono seguidor, instale la aplicación Authenticator que admita tokens RFC 6238 TOTP. Las aplicaciones gratuitas populares son:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator</string>
<string name="smscommunicator_otp_reset_warning">Al resetear el autenticador haces que todos los autenticadores ya provistos no sean válidos. ¡Necesitarás configurarlos de nuevo!</string>
<string name="smscommunicator_otp_reset_warning">Al reiniciar el autenticador, haces que todos los autenticadores previos no sean válidos. ¡Necesitarás configurarlos de nuevo!</string>
<string name="overview_show_predictions">Predicciones</string>
<string name="overview_show_treatments">Tratamientos</string>
<string name="overview_show_deviationslope">Pendiente de desviación</string>
@ -1020,7 +1020,7 @@
<string name="above" comment="above &quot;in range&quot;">Alto</string>
<string name="show_loop_records">Mostrar registros del lazo</string>
<string name="show_hide_records">Ocultar registros del lazo</string>
<string name="widget_description">Widget de AndroidAPS</string>
<string name="widget_description">Widget de AAPS</string>
<string name="configure">Configurar opacidad</string>
<string name="loop_status">Estado del lazo</string>
<string name="graph_scale">Escala gráfica</string>
@ -1048,4 +1048,7 @@
<string name="no_watch_connected">(Ningún reloj conectado)</string>
<string name="error_asking_for_permissions">Error al solicitar permisos</string>
<string name="dynisf_adjust_sensitivity">Ajustar sensibilidad y glucosa</string>
<string name="database_cleanup">Limpiar base de dados</string>
<string name="cleanup_db_confirm">¿Desea limpiar la base de datos?\nSe eliminarán los cambios registrados y los datos históricos más de 3 meses de antiguedad.</string>
<string name="cleared_entries">Entradas eliminadas</string>
</resources>

View file

@ -5,12 +5,12 @@
<string name="dia_profile">Vous devez définir la valeur de DAI dans votre profil.</string>
<string name="dia_minimumis5h">La valeur minimale autorisée est de 5 heures.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">Si vous êtes convaincu que la valeur de DAI que vous avez utilisée dans votre pompe avant AndroidAPS marche bien, il n\'y a pas besoin de la changer lorsque vous commencez à boucler.</string>
<string name="dia_meaningisequaltodiapump">Si vous êtes convaincu que la valeur de DAI utilisée dans votre pompe avant AAPS marche bien, il n\'y a pas besoin de la changer lorsque vous commencez à utiliser la boucle.</string>
<string name="dia_valuemustbedetermined">Vous devez déterminer par vous-même la valeur appropriée pour la DAI.</string>
<string name="hypott_label">Cible temporaire Hypo</string>
<string name="hypott_whenhypott">Quelle est la raison principale pour définir une cible temporaire hypo?</string>
<string name="hypott_wrongbasal">Pour corriger les hypos causés par des paramètres de débit basal incorrects.</string>
<string name="hypott_preventoversmb">Pour empêcher AndroidAPS de surcorriger une hausse de glycémie causée par les glucides à action rapide utilisés pour traiter une hypo.</string>
<string name="hypott_preventoversmb">Pour empêcher AAPS de surcorriger une hausse de glycémie causée par les glucides à action rapide utilisés pour traiter une hypo.</string>
<string name="hypott_exercise">Pour corriger une hypo due à un exercice.</string>
<string name="hypott_0basal">Pour éviter que la glycémie ne baisse s\'il y a déjà un débit de basal temporaire de 0%.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Usage/temptarget.html</string>
@ -18,15 +18,15 @@
<string name="offlineprofile_label">Rubrique : Profil Hors Ligne</string>
<string name="offlineprofile_nsprofile">Le profil NS peut être utilisé, mais il n\'est pas configuré.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Motifs d\'application de la \"Déconnexion de pompe\" dans AndroidAPS</string>
<string name="pumpdisconnect_label">Motifs pour l\'utilisation de la \"Déconnexion de pompe\" dans AAPS</string>
<string name="pumpdisconnect_whattodo">Que faire lors de la déconnexion de la pompe?</string>
<string name="pumpdisconnect_unnecessary">C\'est inutile car l\'insuline ne sera pas délivrée si la pompe est physiquement déconnectée.</string>
<string name="pumpdisconnect_missinginsulin">Cela empêche AndroidAPS de comptabiliser l\'insuline qui n\'a pas été délivrée quand la pompe est physiquement déconnectée.</string>
<string name="pumpdisconnect_missinginsulin">Cela empêche AAPS de comptabiliser l\'insuline qui n\'a pas été délivrée quand la pompe est physiquement déconnectée.</string>
<string name="pumpdisconnect_notstop">Cela n\'arrêtera pas la distribution d\'insuline si la pompe reste connectée.</string>
<string name="pumpdisconnect_openloop">Cela passera AndroidAPS en mode boucle ouverte.</string>
<string name="pumpdisconnect_openloop">Cela passera AAPS en mode boucle ouverte.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Getting-Started/FAQ.html#other-settings</string>
<string name="objectives_label">Paramètres AndroidAPS</string>
<string name="objectives2_label">Paramètres AndroidAPS</string>
<string name="objectives_label">Paramètres AAPS</string>
<string name="objectives2_label">Paramètres AAPS</string>
<string name="objectives_howtosave">Quelles sont les meilleures pratiques pour sauvegarder vos paramètres ?</string>
<string name="objectives_notesettings">Vous n\'avez pas besoin d\'exporter vos paramètres si vous les avez notés.</string>
<string name="objectives_afterobjective">Exportez vos paramètres une fois que vous avez terminé un objectif.</string>
@ -40,7 +40,7 @@
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me</string>
<string name="noisycgm_label">Valeurs MGC bruitées</string>
<string name="noisycgm_whattodo">Que faut-il faire si les données de MGC sont bruitées ?</string>
<string name="noisycgm_nothing">Ne faites rien - AndroidAPS s\'en occupera.</string>
<string name="noisycgm_nothing">Ne faites rien - AAPS s\'en occupera.</string>
<string name="noisycgm_pause">Désactivez la boucle fermée pour éviter tout sur-dosage ou sous-dosage possible.</string>
<string name="noisycgm_replacesensor">Remplacez systématiquement les capteurs bruyants ou imprécis.</string>
<string name="noisycgm_checksmoothing">Vérifiez que votre application MGC fournit des données lissées.</string>
@ -71,7 +71,7 @@
<string name="basaltest_fixed">Une fois définies et validées, ces valeurs ne doivent pas changer avec le temps.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Getting-Started/FAQ.html#androidaps-settings</string>
<string name="prerequisites_label">Conditions préalables</string>
<string name="prerequisites_what">Quelles conditions sont essentiels pour configurer et utiliser AndroidAPS ?</string>
<string name="prerequisites_what">Qu\'est-ce qui est essentiel pour mettre en place et utiliser AAPS ?</string>
<string name="prerequisites_determinedcorrectprofile">Informations de profil validées (Basal, G/I, SI, DAI).</string>
<string name="prerequisites_computer">Un ordinateur avec Android Studio installé et configuré.</string>
<string name="prerequisites_phone">Un téléphone compatible.</string>
@ -86,25 +86,25 @@
<string name="prerequisites_smartwatch">Une montre connectée.</string>
<string name="prerequisites_supportedcgm">Un MGC pris en charge et compatible.</string>
<string name="prerequisites2_label">Conditions préalables</string>
<string name="prerequisites2_what">Quelles conditions sont essentiels pour configurer et utiliser AndroidAPS ?</string>
<string name="prerequisites2_what">Qu\'est-ce qui est essentiel pour mettre en place et utiliser AAPS ?</string>
<string name="prerequisites2_profile">Informations validées pour configurer un profil (SI, ratio G/I, débits de basal, DAI, etc.).</string>
<string name="prerequisites2_device">Un appareil Android compatible (par ex. téléphone mobile, montre Android version complète ou tablette).</string>
<string name="prerequisites2_internet">AndroidAPS nécessite une connexion internet pour fonctionner en boucle fermée.</string>
<string name="prerequisites2_internet">AAPS nécessite une connexion internet pour fonctionner en boucle fermée.</string>
<string name="prerequisites2_supportedcgm">Une MGC prise en charge et une application appropriée pour recevoir des valeurs de glycémie sur le téléphone/appareil.</string>
<string name="prerequisites2_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Module/module.html</string>
<string name="update_label">Mise à jour de AndroidAPS</string>
<string name="update_label">Mise à jour d\'AAPS</string>
<string name="whatistrue">Sélectionnez toutes les bonnes réponses.</string>
<string name="update_git">Git doit être installé et configuré sur votre ordinateur.</string>
<string name="update_asap">Lorsque des versions mises à jour d\'AndroidAPS sont publiées, les versions précédentes peuvent être limitées à distance après une période déterminée.</string>
<string name="update_asap">Lorsque des versions mises à jour d\'AAPS sont disponibles, les versions précédentes peuvent avoir des fonctionnalités limitées à distance après une période donnée.</string>
<string name="update_keys">Vous devez enregistrer et noter l\'emplacement de votre magasin de clés et utiliser la même clé de signature que votre installation précédente pour les mises à jour.</string>
<string name="update_neverupdate">Ne jamais mettre à jour si le système fonctionne correctement.</string>
<string name="update_askfriend">Si vous avez des difficultés à construire l\'apk, vous pouvez installer un apk qui a été construit par un ami.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch</string>
<string name="troubleshooting_label">Résolution de problèmes</string>
<string name="troubleshooting_wheretoask">Où pouvez-vous chercher de l\'aide avec AndroidAPS ?</string>
<string name="troubleshooting_fb">Vous pouvez demander des conseils dans le groupe Facebook des utilisateurs AndroidAPS.</string>
<string name="troubleshooting_wiki">Vous devez lire (et relire) la documentation AndroidAPS.</string>
<string name="troubleshooting_gitter">Vous pouvez demander des conseils et signaler des problèmes techniques ou des défauts dans le Discord d\'AndroidAPS.</string>
<string name="troubleshooting_wheretoask">Où pouvez-vous chercher de l\'aide pour AAPS ?</string>
<string name="troubleshooting_fb">Vous pouvez demander des conseils dans le groupe Facebook des utilisateurs AAPS.</string>
<string name="troubleshooting_wiki">Vous devriez lire (et relire) la documentation AAPS.</string>
<string name="troubleshooting_gitter">Vous pouvez demander des conseils et signaler des problèmes techniques ou des défauts dans le Discord d\'AAPS.</string>
<string name="troubleshooting_yourendo">Vous devez demander à votre diabétologue/professionnels de santés.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/AndroidAPSUsers/</string>
@ -118,7 +118,7 @@
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Configuration/Config-Builder.html#insulin</string>
<string name="sensitivity_label">Plugins de Sensibilité</string>
<string name="sensitivity_which">Sélectionnez toutes les bonnes réponses.</string>
<string name="sensitivity_adjust">Les plugins de sensibilité permettent à AndroidAPS de s\'adapter aux changements temporaires ou de courte durée de la sensibilité à l\'insuline (par ex. changements hormonaux ou problèmes d\'absorption sur le site d\'infusion).</string>
<string name="sensitivity_adjust">Les plugins de sensibilité permettent à AAPS de s\'adapter aux changements temporaires ou de courte durée de la sensibilité à l\'insuline (par ex. changements hormonaux ou problèmes d\'absorption sur le site d\'infusion).</string>
<string name="sensitivity_edit">Les plugins de sensibilité fournissent à l\'utilisateur des modifications suggérées pour les débits de basal, les ratios G/I et SI qui peuvent être utilisés pour éditer le profil.</string>
<string name="sensitivity_cannula">Le changement de canule réinitialisera le ratio Autosens à 100%.</string>
<string name="sensitivity_time">Certaines des options du plugin ont des plages de temps configurables qui peuvent être définies par l\'utilisateur.</string>
@ -128,14 +128,14 @@
<string name="wrongcarbs_whattodo">Que devez-vous faire si vous avez renseigné une valeur erronée de glucides ?</string>
<string name="wrongcarbs_treatmentstab">Supprimez l\'entrée incorrecte dans les Traitements et entrez la nouvelle valeur correcte de glucides.</string>
<string name="wrongcarbs_addinsulin">Bolus avec insuline en utilisant le menu d\'amoçage de la perfusion.</string>
<string name="wrongcarbs_donothing">Ne faites rien AndroidAPS effectuera les ajustements appropriés.</string>
<string name="wrongcarbs_donothing">Ne faites rien AAPS effectuera les ajustements appropriés.</string>
<string name="wrongcarbs_bolus">Bolus avec insuline en utilisant le bouton Insuline (bolus) dans Aperçu (Accueil).</string>
<string name="wronginsulin_label">Erreurs de saisie/injection d\'insuline</string>
<string name="wronginsulin_whattodo">Que devriez-vous faire si vous avez reçu moins d\'insuline que l\'historique de la pompe suggère par ex. à cause d\'une occlusion, d\'une mauvaise canule ou d\'un oubli de rebranchement de la pompe après une douche ?</string>
<string name="wronginsulin_careportal">Supprimez les données d\'insuline de Nightscout Careportal pour le retirer de l\'historique de la pompe.</string>
<string name="wronginsulin_compare">Comparer les valeurs dans l\'historique d\'AndroidAPS et de la pompe (si la pompe le permet).</string>
<string name="wronginsulin_compare">Comparer les valeurs dans l\'historique d\'AAPS et de la pompe (si la pompe le permet).</string>
<string name="wronginsulin_prime">Faites un bolus du montant de votre insuline calculée « manquante » soit par seringue / stylo ou en utilisant un amorçage.</string>
<string name="wronginsulin_donothing">Ne faites rien et laissez AndroidAPS corriger tout taux élevé de glycémie qui en résulte.</string>
<string name="wronginsulin_donothing">Ne faites rien et laissez AAPS corriger le taux élevé de glycémie qui en résulte.</string>
<string name="cob_label">Glucides Actifs (GA)</string>
<string name="cob_question">Comment le changement de la SI impacte le calcul des GA ?</string>
<string name="cob_longer">Augmenter la SI rendra l\'absorption des glucides plus longue</string>
@ -157,28 +157,28 @@
<string name="breadgrams_label">Entrée de glucides et bolus</string>
<string name="breadgrams_grams">Seuls les grammes doivent être utilisés pour estimer et enregistrer les glucides consommés.</string>
<string name="breadgrams_exchange">Les glucides consommés peuvent être enregistrés à l\'aide d\'un système d\'échange approprié (par exemple, les échanges DAFNE \"CHO\" ou les \"Unités de Pain\" européennes).</string>
<string name="breadgrams_decay">AndroidAPS utilise un modèle dynamique pour estimer la « décomposition » des glucides et calculer les GA.</string>
<string name="breadgrams_decay">AAPS utilise un modèle dynamique pour estimer la « décomposition » des glucides et calculer les GA (COB).</string>
<string name="breadgrams_calc">Si les glycémies sont en dehors des valeurs acceptables (trop faibles ou trop élevées), la calculatrice de bolus peut être utilisée pour fournir des suggestions de corrections de glucides ou d\'insuline.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Getting-Started/FAQ.html#rapport-glucides-insuline-g-i-g-u</string>
<string name="extendedcarbs_label">e-Glucides</string>
<string name="extendedcarbs_handling">Pour quoi pourriez-vous utiliser des e-Glucides (glucides étendus) ?</string>
<string name="extendedcarbs_future">Pour planifier les glucides dans le futur, éventuellement répartis sur un intervalle de temps (similaire à un bolus étendu distribuant l\'insuline sur une durée).</string>
<string name="extendedcarbs_free">Pour enregistrer des glucides d\'exercice « gratuits » que vous voulez cacher à AndroidAPS.</string>
<string name="extendedcarbs_fat">Les e-glucides (distribués à lavenir) peuvent aider AndroidAPS à traiter les repas à haute teneur en graisses/protéines.</string>
<string name="extendedcarbs_free">Pour enregistrer des glucides d\'exercice \"libres\" que vous souhaitez masquer à AAPS.</string>
<string name="extendedcarbs_fat">Les e-glucides (distribués plus tard) peuvent aider AAPS à traiter les repas à haute teneur en graisses/protéines.</string>
<string name="extendedcarbs_rescue">Pour enregistrer les glucides de secours que vous utilisez pour traiter la glycémie faible.</string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Surveillance à distance</string>
<string name="nsclient_howcanyou">Comment pouvez-vous surveiller AndroidAPS (par exemple pour votre enfant) à distance ?</string>
<string name="nsclient_nightscout">L\'application NSClient, l\'application Nightscout et la page Web Nightscout vous permettent de suivre AndroidAPS à distance.</string>
<string name="nsclient_howcanyou">Comment pouvez-vous surveiller AAPS à distance (par exemple pour votre enfant) ?</string>
<string name="nsclient_nightscout">L\'application AAPSClient, l\'application Nightscout et la page Web Nightscout vous permettent de suivre AAPS à distance.</string>
<string name="nsclient_dexcomfollow">D\'autres applications (par ex. Dexcom Follow, xDrip en mode suivi) vous permettent de suivre certains paramètres (par ex. valeurs de glycémie/capteur) à distance, mais elles utilisent des algorithmes différents qui peuvent donner des valeurs IA ou GA inexactes.</string>
<string name="nsclient_data">Pour suivre AndroidAPS à distance, les deux appareils doivent avoir un accès à internet (par exemple via Wi-Fi ou données de réseau mobile/cellulaire).</string>
<string name="nsclient_fullcontrol">NS Client utilisé comme suivi à distance surveillera et fournira le contrôle complet d\'AndroidAPS.</string>
<string name="nsclient_data">Pour suivre AAPS à distance, les deux appareils doivent avoir un accès à internet (par exemple, via Wi-Fi ou données de réseau mobile/cellulaire).</string>
<string name="nsclient_fullcontrol">AAPSClient utilisé comme suivi à distance surveillera et fournira le contrôle complet d\'AAPS.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Children/Children.html</string>
<string name="isf_label_exam">Sensibilité à l\'Insuline (SI)</string>
<string name="isf_increasingvalue">Augmenter la SI entraînera une augmentation de la quantité d\'insuline pour couvrir une quantité spécifique de glucides.</string>
<string name="isf_decreasingvalue">Réduire la SI entraînera une augmentation de la quantité d\'insuline pour corriger une glycémie supérieure à la cible.</string>
<string name="isf_noeffect">Augmenter ou diminuer la SI n\'a aucun effet sur la quantité d\'insuline injectée lorsque la glycémie est inférieur à la cible.</string>
<string name="isf_preferences">La SI doit être saisie dans vos préférences AndroidAPS.</string>
<string name="isf_preferences">La SI doit être saisie dans vos préférences AAPS.</string>
<string name="isf_profile">La modification de la SI dans le profil est suffisant pour appliquer le changement.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Usage/Profiles.html</string>
@ -205,7 +205,7 @@
<string name="profileswitch2_bgunchanged">La glycémie cible sera inchangée.</string>
<string name="profileswitch2_isfhigher">La valeur de SI sera 20 % plus élevée.</string>
<string name="profileswitchtime_label">Changement de profil</string>
<string name="profileswitchtime_iwant">Si vous vous réveillez 2 heures plus tôt que d\'habitude, comment informez-vous AndroidAPS du changement de votre planning ?</string>
<string name="profileswitchtime_iwant">Si vous vous réveillez 2 heures plus tôt que d\'habitude, comment informez-vous AAPS du changement de votre planning ?</string>
<string name="profileswitchtime_2">Faites un changement de profil avec un décalage horaire de 2</string>
<string name="profileswitchtime__2">Faites un changement de profil avec un décalage horaire de -2</string>
<string name="profileswitchtime_tt">Fixez une cible temporaire repas imminent.</string>
@ -213,7 +213,7 @@
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profilewitch#timeshift</string>
<string name="profileswitch4_label">Changements de profils</string>
<string name="profileswitch4_rates">Les débits de basal, SI, ratios G/I, etc. doivent être définis dans les profils.</string>
<string name="profileswitch4_internet">L\'activation des modifications de votre profil Nightscout nécessite que votre téléphone AndroidAPS soit connecté à Internet.</string>
<string name="profileswitch4_internet">L\'activation des modifications apportées à votre profil Nightscout nécessite que votre téléphone AAPS soit connecté à Internet.</string>
<string name="profileswitch4_sufficient">Modifier les profils pour changer des valeurs est suffisant pour mettre en œuvre toutes les modifications effectuées.</string>
<string name="profileswitch4_multi">Plusieurs profils peuvent être définis et sélectionnés pour s\'adapter à des circonstances changeantes (par ex. changements hormonaux, changement de poste de travail, jours de semaine/week-end).</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy</string>
@ -223,6 +223,6 @@
<string name="basalhelp_google">Google</string>
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Autres médicaments. Veuillez lire l\'énoncé ci-dessous et cocher la case pour accepter la déclaration.</string>
<string name="other_medication_text">AndroidAPS réduit le débit de basal ou suspent l\'injection d\'insuline pour augmenter le taux de sucre dans le sang. Les médicaments du groupe d\'inhibiteurs SGLT2 (gliflozins) peuvent empêcher l\'augmentation de la glycémie et ainsi produire une carence dangereuse en insuline conduisant à une acidocétose DKA.
\nLes noms de marque communes sont : Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nJe m\'engage à ne pas prendre ces médicaments lors de l\'utilisation d\'AndroidAPS ou à désactiver la boucle avant de les utiliser.</string>
<string name="other_medication_text">AAPS réduit le débit de basal ou suspend l\'injection d\'insuline pour augmenter le taux de sucre dans le sang. Les médicaments du groupe d\'inhibiteurs SGLT2 (gliflozins) peuvent empêcher l\'augmentation de la glycémie et ainsi produire une carence dangereuse en insuline conduisant à une acidocétose DKA.
\nLes noms de marque communes sont : Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nJe m\'engage à ne pas prendre ces médicaments lors de l\'utilisation d\'AAPS ou à désactiver la boucle avant de les utiliser.</string>
</resources>

View file

@ -25,8 +25,8 @@
<string name="objectives_pumpstatusavailableinns">Statut de la pompe disponible sur NS</string>
<string name="objectives_manualenacts">Activation manuelle</string>
<string name="accomplished">Accompli : %1$s</string>
<string name="objectives_usage_objective">Apprendre comment contrôler AndroidAPS</string>
<string name="objectives_usage_gate">Exécutez différentes actions dans AndroidAPS</string>
<string name="objectives_usage_objective">Apprendre comment contrôler AAPS</string>
<string name="objectives_usage_gate">Effectuer différentes actions dans AAPS</string>
<string name="objectives_useprofileswitch">Sélection du profil à 90% pendant 10 min (appui long sur le nom du profil à l\'Accueil)</string>
<string name="objectives_usedisconnectpump">Simulation d\'une douche. Déconnectez la pompe pendant 1h (Appui long sur Boucle Ouverte)</string>
<string name="objectives_usereconnectpump">... et reconnectez la pompe de la même façon</string>

View file

@ -40,9 +40,9 @@
<string name="description_source_ns_client">Télécharge les glycémies depuis Nightscout</string>
<string name="description_source_xdrip">Recevoir les glycémies depuis xDrip+.</string>
<string name="description_treatments">Enregistre tous les traitements qui ont été effectués</string>
<string name="description_wear">Surveillez et contrôlez AndroidAPS en utilisant votre montre WearOS.</string>
<string name="description_wear">Surveillez et contrôlez AAPS en utilisant votre montre WearOS.</string>
<string name="description_xdrip_status_line">Afficher les informations de votre Boucle sur votre écran de montre xDrip+.</string>
<string name="description_sms_communicator">Commander à distance AndroidAPS en utilisant les commandes SMS.</string>
<string name="description_sms_communicator">Commander à distance AAPS en utilisant les commandes SMS.</string>
<string name="treatments_insulin_label_string">Insuline:</string>
<string name="treatments_carbs_label_string">Glucides :</string>
<string name="treatments_iob_label_string">IA: </string>
@ -79,9 +79,9 @@
<string name="treatments">Traitements</string>
<string name="virtualpump">Pompe virtuelle</string>
<string name="configbuilder_pump">Pompe</string>
<string name="configbuilder_pump_description">Quelle pompe souhaitez-vous utiliser avec AndroidAPS ?</string>
<string name="configbuilder_pump_description">Quelle pompe souhaitez-vous utiliser avec AAPS ?</string>
<string name="configbuilder_profile">Profil</string>
<string name="configbuilder_profile_description">Quel profil doit utiliser AndroidAPS ?</string>
<string name="configbuilder_profile_description">Quel profil AAPS devrait-il utiliser ?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Quel algorithme APS doit faire les ajustements de thérapie?</string>
<string name="configbuilder_general">Général</string>
@ -89,7 +89,7 @@
<string name="configbuilder_constraints_description">Quelles restrictions sont appliquées ?</string>
<string name="constraints">Restrictions</string>
<string name="configbuilder_loop">Boucle</string>
<string name="configbuilder_loop_description">Veuillez utiliser cela pour activer la Boucle d\'AndroidAPS.</string>
<string name="configbuilder_loop_description">Utilisez ceci pour activer lintégration de la boucle AAPS.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Après traitement des restrictions</string>
<string name="loop_tbrsetbypump_label">Basal temporaire défini par la pompe</string>
@ -106,7 +106,7 @@
<string name="sms_basal">Basal:</string>
<string name="changeyourinput">Changez vos entrées !</string>
<string name="configbuilder_bgsource">Source des glycémies</string>
<string name="configbuilder_bgsource_description">Quelle source de données doit être utilisée par AndroidAPS ?</string>
<string name="configbuilder_bgsource_description">Quelle source de données doit être utilisée par AAPS ?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">Mode APS</string>
<string name="closedloop">Boucle Fermée</string>
@ -332,7 +332,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="patient_name_summary">Veuillez indiquer un nom ou pseudo du patient pour différencier plusieurs configurations</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">Patient</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s a besoin d\'optimisation de la batterie (whitelisting) pour une performance correcte</string>
<string name="needwhitelisting">%1$s a besoin d\'être sur la liste blanche de l\'optimisation de la batterie pour des performances correctes</string>
<string name="loopsuspended">La Boucle est suspendue</string>
<string name="loopsuspendedfor">Suspendu (%1$d m)</string>
<string name="suspendloopfor1h">Suspendre la Boucle pour 1h</string>
@ -430,7 +430,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="sensitivityweightedaverage">Sensibilité avec moyenne pondérée</string>
<string name="notloadedplugins">Les profils ne sont pas tous téléchargés !</string>
<string name="valuesnotstored">Valeurs non enregistrées !</string>
<string name="ns_localbroadcasts">Active les diffusions vers d\'autres applications (comme xDrip+). Ne pas activer si plusieurs instances d\'AAPS ou de NSClient sont installées !</string>
<string name="ns_localbroadcasts">Active les diffusions vers d\'autres applications (comme xDrip+). Ne pas activer si plusieurs instances d\'AAPS ou de AAPSClient sont installées !</string>
<string name="ns_localbroadcasts_title">Activer les transmissions locales</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">SI dynamique</string>
@ -632,7 +632,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="welcometosetupwizard">Bienvenue à l\'assistant de configuration. Je vais vous guider à travers le processus de configuration\n</string>
<string name="readstatus">Statut de lecture</string>
<string name="exitwizard">Ignorer l\'assistant de configuration</string>
<string name="setupwizard_loop_description">Appuyez sur le bouton ci-dessous pour autoriser AndroidAPS à suggérer/faire des changements de basal</string>
<string name="setupwizard_loop_description">Appuyez sur le bouton ci-dessous pour autoriser AAPS à suggérer/faire des changements de basal</string>
<string name="setupwizard_sensitivity_description">Le plugin de Sensibilité est utilisé pour la détection de la Sensibilité et de calcul de glucides actifs. Pour plus dinformations visitez :</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/fr/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="nsclientinfotext">Le NSClient gère la connexion avec Nightscout. Vous pouvez sauter cette étape maintenant mais vous ne pourrez pas terminer les objectifs sans cette configuration.</string>
@ -674,7 +674,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="remove_items">Supprimer des entrées</string>
<string name="sort_items">Trier les objets</string>
<string name="storedsettingsfound">Paramètres sauvegardés trouvés</string>
<string name="allow_hardware_pump_text">ATTENTION : Si vous activez et connectez à une vraie pompe, AndroidAPS copiera les paramètres Basals du profil vers la pompe, écrasant le taux basal existant stocké sur la pompe. Assurez-vous d\'avoir correctement saisi et réglé les paramètres Basal dans AndroidAPS. Si vous ne savez pas ou si ne voulez pas écraser les paramètres Basal sur votre pompe, appuyez sur Annuler et reporter le passage à la pompe à une date ultérieure.</string>
<string name="allow_hardware_pump_text">ATTENTION : Si vous activez et connectez à une vraie pompe, AAPS copiera les paramètres basals du profil vers la pompe, écrasant le taux basal existant stocké sur la pompe. Assurez-vous d\'avoir correctement saisi et réglé les paramètres basal dans AAPS. Si vous ne savez pas ou si ne voulez pas écraser les paramètres basal sur votre pompe, appuyez sur Annuler et reporter la selection de la pompe à une date ultérieure.</string>
<string name="error_adding_treatment_title">Données de traitement incomplètes</string>
<string name="maintenance_settings">Paramètres de maintenance</string>
<string name="maintenance_email">E-mail</string>
@ -702,7 +702,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="loop_openmode_min_change_summary" formatted="false">Le fonctionnement de la Boucle demandera une confirmation uniquement si le changement est supérieur à cette valeur en %. Par défaut, la valeur est 20%</string>
<string name="profile_total">== ∑ %1$s U</string>
<string name="dexcom_lognssensorchange_title">Enreg. du changement de capteur sur NS</string>
<string name="dexcom_lognssensorchange_summary">Créer automatiquement sur NS un événement \"Changement de capteur\" au démarrage du capteur</string>
<string name="dexcom_lognssensorchange_summary">Créer automatiquement un événement \"Changement de capteur\" dans NS au démarrage du capteur</string>
<string name="tomato">Tomato (MiaoMiao)</string>
<string name="tomato_short">Tomato</string>
<string name="summary_tidepool_username">Votre nom d\'utilisateur Tidepool, normalement votre adresse e-mail</string>
@ -775,7 +775,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="id">ID :</string>
<string name="submit">Envoyer</string>
<string name="mostcommonprofile">Profil le plus courant :</string>
<string name="survey_comment">Remarque : seules les données visibles sur cet écran seront téléchargées de manière anonyme. L\'ID est attribué à cette installation d\'AndroidAPS. Vous pouvez soumettre à nouveau des données si votre profil principal est modifié, mais laissez-le fonctionner au moins pendant une semaine pour rendre le résultat visible dans le temps. Votre aide est appréciée.</string>
<string name="survey_comment">Remarque : seules les données visibles sur cet écran seront téléchargées de manière anonyme. L\'ID est attribué à cette installation d\'AAPS. Vous pouvez soumettre à nouveau des données si votre profil principal est modifié, mais laissez-le fonctionner au moins pendant une semaine pour obtenir le résultat \"temps dans la cible\". Votre aide est appréciée.</string>
<string name="invalidage">Âge invalide</string>
<string name="invalidweight">Poids invalide</string>
<string name="invalidpct">% saisi invalide</string>
@ -820,7 +820,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="smscommunicator_otp_export_prompt">Êtes-vous sûr de vouloir copier l\'OTP secret dans le presse-papiers ?\n\nVous pouvez en avoir besoin uniquement si votre application d\'authentification a des problèmes pour scanner le QRCode, si vous voulez le saisir manuellement ou si vous voulez configurer un jeton OTP matériel en utilisant une application dédiée.</string>
<string name="smscommunicator_otp_export_successful">OTP secret (au format Base32) exporté et copié dans le presse-papiers. Collez-le dans l\'authentificateur ou le graveur OTP matériel !</string>
<string name="smscommunicator_otp_step1_install_header">1. Installation l\'Authentificateur</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Scan du code pour configurer les codes OTP AndroidAPS</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Scannez le code pour configurer les codes OTP AAPS</string>
<string name="smscommunicator_otp_step3_test_header">3. Test Mot-de-Passe-Unique (OTP)</string>
<string name="smscommunicator_otp_reset_header">Réinitialiser les authentificateurs</string>
<string name="smscommunicator_otp_install_info">Sur chaque téléphone suiveur, installez une appli. Authentificateur qui prend en charge les jetons RFC 6238 TOTP. Les applications libres populaires sont:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator</string>
@ -1020,7 +1020,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="above" comment="above &quot;in range&quot;">Au-dessus</string>
<string name="show_loop_records">Afficher les entrées de la boucle</string>
<string name="show_hide_records">Masquer les entrées de la boucle</string>
<string name="widget_description">Widget AndroidAPS</string>
<string name="widget_description">Widget AAPS</string>
<string name="configure">Configurer lopacité</string>
<string name="loop_status">État de la boucle</string>
<string name="graph_scale">Échelle du graph.</string>
@ -1048,4 +1048,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="no_watch_connected">(Pas de montre connectée)</string>
<string name="error_asking_for_permissions">Erreur lors de la demande des autorisations</string>
<string name="dynisf_adjust_sensitivity">Ajuster la sensibilité et la glycémie</string>
<string name="database_cleanup">Nettoyer la base de données</string>
<string name="cleanup_db_confirm">Voulez-vous nettoyer la base de données ?\nCela supprimera les modifications suivies et les données historiques de plus de 3 mois.</string>
<string name="cleared_entries">Entrées effacées</string>
</resources>

View file

@ -5,12 +5,10 @@
<string name="dia_profile">Dovresti impostare il valore DIA nel tuo profilo.</string>
<string name="dia_minimumis5h">Il valore minimo consentito è 5 ore.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">Se sei soddisfatto del valore DIA che hai usato nel tuo micro prima di AndroidAPS, non c\'è bisogno di cambiarlo quando inizi l\'attività di loop.</string>
<string name="dia_valuemustbedetermined">Dovresti determinare da te il valore appropriato per DIA.</string>
<string name="hypott_label">Temp-Target Ipoglicemia</string>
<string name="hypott_whenhypott">Qual è la ragione principale per impostare un target temporaneo \"ipoglicemia\"?</string>
<string name="hypott_wrongbasal">Per correggere ipoglicemie causate da impostazioni non corrette della velocità basale.</string>
<string name="hypott_preventoversmb">Per evitare che AndroidAPS corregga eccessivamente un aumento della glicemia causato dai carboidrati a veloce assorbimento usati per trattare una ipoglicemia.</string>
<string name="hypott_exercise">Per correggere una ipoglicemia indotta da esercizio fisico.</string>
<string name="hypott_0basal">Per evitare che la glicemia si abbassi se è già in esecuzione una velocità basale temporanea dello 0%.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html</string>
@ -18,15 +16,10 @@
<string name="offlineprofile_label">Argomento: profilo offline</string>
<string name="offlineprofile_nsprofile">Il profilo NS può essere usato, ma non configurato.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Motivi per azionare la funzione \"Disconnetti micro\" in AndroidAPS</string>
<string name="pumpdisconnect_whattodo">Cosa dovrebbe essere fatto quando si disconnette il micro?</string>
<string name="pumpdisconnect_unnecessary">Questo non è necessario poiché l\'insulina non verrà erogata se il micro è fisicamente disconnesso.</string>
<string name="pumpdisconnect_missinginsulin">Evita che AndroidAPS tenga conto di insulina che non è stata erogata mentre il micro è fisicamente disconnesso.</string>
<string name="pumpdisconnect_notstop">Non interromperà l\'erogazione di insulina se il micro rimane connesso.</string>
<string name="pumpdisconnect_openloop">Manderà AndroidAPS in modalità loop aperto.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings</string>
<string name="objectives_label">Impostazioni AndroidAPS</string>
<string name="objectives2_label">Impostazioni AndroidAPS</string>
<string name="objectives_howtosave">Quali sono le migliori pratiche per il backup delle tue impostazioni?</string>
<string name="objectives_notesettings">Non hai bisogno di esportare le tue impostazioni a condizione di prenderne nota.</string>
<string name="objectives_afterobjective">Esportare le tue impostazioni dopo aver completato un obiettivo.</string>
@ -40,7 +33,6 @@
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me</string>
<string name="noisycgm_label">Letture CGM \"rumorose\" (noisy)</string>
<string name="noisycgm_whattodo">Cosa dovrebbe essere fatto se i dati CGM sono \"rumorosi\"?</string>
<string name="noisycgm_nothing">Nulla - AndroidAPS se ne occuperà.</string>
<string name="noisycgm_pause">Disabilitare il loop chiuso per evitare un possibile sovra-dosaggio o sotto-dosaggio.</string>
<string name="noisycgm_replacesensor">Sostituire i sensori costantemente \"rumorosi\" o inaccurati.</string>
<string name="noisycgm_checksmoothing">Verificare che la tua app CGM faccia lo smoothing dei dati della glicemia.</string>
@ -71,7 +63,6 @@
<string name="basaltest_fixed">Una volta impostati e validati, questi valori non dovrebbero cambiare nel tempo.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings</string>
<string name="prerequisites_label">Prerequisiti</string>
<string name="prerequisites_what">Cosa è essenziale per configurare e usare AndroidAPS?</string>
<string name="prerequisites_determinedcorrectprofile">Informazioni profilo validate (basale, IC, ISF, DIA).</string>
<string name="prerequisites_computer">Un computer con Android Studio installato e configurato.</string>
<string name="prerequisites_phone">Un telefono supportato.</string>
@ -86,25 +77,17 @@
<string name="prerequisites_smartwatch">Uno smartwatch.</string>
<string name="prerequisites_supportedcgm">Un CGM Supportato.</string>
<string name="prerequisites2_label">Prerequisiti</string>
<string name="prerequisites2_what">Cosa è essenziale per configurare e usare AndroidAPS?</string>
<string name="prerequisites2_profile">Informazioni validate per configurare un profilo (ISF, rapporto I:C, velocità basali, DIA, ecc).</string>
<string name="prerequisites2_device">Un dispositivo Android compatibile (smartphone, smartwatch con versione integrale di Android o tablet).</string>
<string name="prerequisites2_internet">AndroidAPS richiede una connessione internet per poter funzionare in loop chiuso.</string>
<string name="prerequisites2_supportedcgm">Un CGM supportato e un\'app appropriata per ricevere valori della glicemia sul telefono/dispositivo.</string>
<string name="prerequisites2_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html</string>
<string name="update_label">Aggiornamento di AndroidAPS</string>
<string name="whatistrue">Seleziona tutte le risposte corrette.</string>
<string name="update_git">Devi avere Git installato e configurato sul tuo computer.</string>
<string name="update_asap">Quando vengono rilasciate versioni aggiornate di AndroidAPS, le precedenti potrebbero essere limitate da remoto dopo un determinato periodo di tempo.</string>
<string name="update_keys">Dovresti salvare e annotare la posizione del tuo archivio chiavi e usare per gli aggiornamenti la stessa chiave di firma della tua installazione precedente.</string>
<string name="update_neverupdate">Non aggiornare mai se il sistema funziona bene.</string>
<string name="update_askfriend">Se hai difficoltà a costruire l\'apk, puoi installare un apk che è stato costruito da un amico.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch</string>
<string name="troubleshooting_label">Risoluzione problemi</string>
<string name="troubleshooting_wheretoask">Dove puoi cercare aiuto con AndroidAPS?</string>
<string name="troubleshooting_fb">Puoi chiedere consiglio nel gruppo Facebook degli utenti AndroidAPS.</string>
<string name="troubleshooting_wiki">Dovresti leggere (e rileggere) la documentazione di AndroidAPS.</string>
<string name="troubleshooting_gitter">Puoi chiedere consigli e segnalare problemi tecnici nel Discord di AndroidAPS.</string>
<string name="troubleshooting_yourendo">Dovresti chiedere al tuo endocrinologo/centro diabetologico.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/aapsitalia/</string>
@ -118,7 +101,6 @@
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin</string>
<string name="sensitivity_label">Plugin sensibilità</string>
<string name="sensitivity_which">Seleziona tutte le risposte corrette.</string>
<string name="sensitivity_adjust">I plugin di sensibilità consentono ad AndroidAPS di adattarsi a cambiamenti temporanei o di breve durata nella sensibilità all\'insulina (ad esempio cambiamenti ormonali o problemi di assorbimento legati al sito di infusione).</string>
<string name="sensitivity_edit">I plugin di sensibilità forniscono all\'utente suggerimenti su cambi a velocità basali, rapporti I:C e ISF che possono essere utilizzati per modificare il profilo.</string>
<string name="sensitivity_cannula">La registrazione di un cambio cannula ripristinerà il rapporto Autosens al 100%.</string>
<string name="sensitivity_time">Alcune opzioni del plugin hanno intervalli di tempo configurabili che possono essere impostati dall\'utente.</string>
@ -128,14 +110,11 @@
<string name="wrongcarbs_whattodo">Cosa dovresti fare se hai fatto un inserimento non corretto di carboidrati?</string>
<string name="wrongcarbs_treatmentstab">Eliminare nei Trattamenti l\'inserimento non corretto e immettere il nuovo valore CHO.</string>
<string name="wrongcarbs_addinsulin">Erogare un bolo di insulina usando il menu caricamento set di infusione.</string>
<string name="wrongcarbs_donothing">Non fare nulla - AndroidAPS effettuerà gli opportuni aggiustamenti.</string>
<string name="wrongcarbs_bolus">Erogare un bolo di insulina usando il tasto Insulina nella sezione Panoramica.</string>
<string name="wronginsulin_label">Errori erogazione/inserimento insulina</string>
<string name="wronginsulin_whattodo">Cosa dovresti fare se hai ricevuto meno insulina di quanto lo storico del micro suggerisce? Ad esempio a causa di un\'occlusione, una cannula difettosa o l\'aver dimenticato di riattaccare il micro dopo una doccia? </string>
<string name="wronginsulin_careportal">Eliminare dal portale Nightscout i dati relativi all\'insulina per rimuoverli dallo storico del micro.</string>
<string name="wronginsulin_compare">Compara i valori in AndroidAPS con lo storico micro (se supportato).</string>
<string name="wronginsulin_prime">Erogare un bolo con parte della tua insulina calcolata \"mancante\" usando una siringa/penna o la funzione caricamento.</string>
<string name="wronginsulin_donothing">Non fare nulla e permettere ad AndroidAPS di correggere eventuali glicemie alte.</string>
<string name="cob_label">CHO attivi (COB)</string>
<string name="cob_question">In che modo la modifica del valore ISF influisce sul calcolo dei COB?</string>
<string name="cob_longer">L\'aumento di ISF richiederà un tempo maggiore per l\'assorbimento dei CHO</string>
@ -157,28 +136,20 @@
<string name="breadgrams_label">Inserimento CHO e boli</string>
<string name="breadgrams_grams">Solo i grammi dovrebbero essere utilizzati per stimare e registrare i carboidrati consumati.</string>
<string name="breadgrams_exchange">I carboidrati consumati possono essere registrati utilizzando un sistema di scambio appropriato (ad esempio: gli scambi CHO \"DAFNE\" o le unità di pane europee \"Bread Units\").</string>
<string name="breadgrams_decay">AndroidAPS usa un modello dinamico per stimare il \"decadimento\" dei carboidrati e calcolare COB.</string>
<string name="breadgrams_calc">Se la glicemia è di fuori dei valori accettabili (troppo bassa o troppo alta) il calcolatore di boli può essere utilizzato per fornire suggerimenti per le correzioni con carboidrati o insulina.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u</string>
<string name="extendedcarbs_label">e-carbs</string>
<string name="extendedcarbs_handling">Per cosa potresti usare gli e-carbs (carboidrati estesi)?</string>
<string name="extendedcarbs_future">Per indicare i carboidrati nel futuro e/o distribuiti su un intervallo di tempo (similmente a un bolo esteso che distribuisce insulina sullo stesso intervallo).</string>
<string name="extendedcarbs_free">Per registrare i carboidrati \"liberi\" relativi all\'esercizio fisico e che vuoi nascondere da AndroidAPS.</string>
<string name="extendedcarbs_fat">Gli e-carbs (distribuiti nel futuro) possono aiutare AndroidAPS a gestire pasti ricchi di grassi/proteine.</string>
<string name="extendedcarbs_rescue">Per registrare i carboidrati che usi per trattare la glicemia bassa.</string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Monitoraggio remoto</string>
<string name="nsclient_howcanyou">Come puoi monitorare AndroidAPS (ad esempio per il tuo bambino) da remoto?</string>
<string name="nsclient_nightscout">L\'app NS Client, l\'app Nightscout e la versione web di Nightscout ti consentono di seguire AndroidAPS da remoto.</string>
<string name="nsclient_dexcomfollow">Altre app (ad esempio: Dexcom follow o xDrip in modalità follower) consentono di seguire da remoto alcuni parametri come i valori di glicemia/sensore, ma usano algoritmi diversi e potrebbero mostrare valori inaccurati di IOB o COB.</string>
<string name="nsclient_data">Per seguire AndroidAPS da remoto, entrambi i dispositivi devono avere accesso a internet (ad esempio via Wi-Fi o dati da rete mobile/cellulare).</string>
<string name="nsclient_fullcontrol">NS Client utilizzato come follower remoto monitorerà AndroidAPS e ne fornirà il pieno controllo.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html</string>
<string name="isf_label_exam">Fattore di sensibilità insulinica (ISF)</string>
<string name="isf_increasingvalue">Aumentare i valori di ISF porterà a una maggiore erogazione di insulina per coprire una specifica quantità di carboidrati.</string>
<string name="isf_decreasingvalue">Ridurre i valori ISF porta a una maggiore erogazione di insulina per correggere una glicemia al di sopra del target.</string>
<string name="isf_noeffect">Aumentare o ridurre ISF non ha alcun effetto sull\'erogazione di insulina quando le glicemie sono al di sotto del target.</string>
<string name="isf_preferences">ISF dovrebbe essere inserito nelle tue preferenze di AndroidAPS.</string>
<string name="isf_profile">Cambiare il valore ISF nel tuo profilo è sufficiente per applicare la modifica.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html</string>
@ -205,7 +176,6 @@
<string name="profileswitch2_bgunchanged">La glicemia target rimarrà invariata.</string>
<string name="profileswitch2_isfhigher">ISF sarà il 20% più alto.</string>
<string name="profileswitchtime_label">Cambio profilo</string>
<string name="profileswitchtime_iwant">Se ti svegli 2 ore prima del solito, come dovresti informare AndroidAPS del cambiamento nei tuoi programmi?</string>
<string name="profileswitchtime_2">Avviare un cambio profilo con un timeshift di 2</string>
<string name="profileswitchtime__2">Avviare un cambio profilo con un timeshift di -2</string>
<string name="profileswitchtime_tt">Impostare un target temporaneo \"pasto a breve\".</string>
@ -213,7 +183,6 @@
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift</string>
<string name="profileswitch4_label">Modifiche ai profili</string>
<string name="profileswitch4_rates">Velocità basali, ISF, rapporti I:C, ecc., dovrebbero essere impostati nei profili.</string>
<string name="profileswitch4_internet">L\'attivazione delle modifiche al tuo profilo Nightscout richiede che il tuo telefono con AndroidAPS abbia una connessione internet.</string>
<string name="profileswitch4_sufficient">Modificare i profili per cambiare i valori è sufficiente per attivare ogni cambiamento fatto.</string>
<string name="profileswitch4_multi">Più profili possono essere impostati e selezionati per adattarsi a diverse circostanze (ad esempio: cambiamenti ormonali, turni di lavoro, stile di vita nei giorni lavorativi/weekend).</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy</string>
@ -223,6 +192,4 @@
<string name="basalhelp_google">Google</string>
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Altri Farmaci. Leggere la seguente dichiarazione e, per proseguire, accettarla selezionando la casella.</string>
<string name="other_medication_text">AndroidAPS riduce la velocità basale o sospende l\'erogazione di insulina per aumentare la glicemia. Farmaci appartenenti al gruppo degli inibitori SGLT2 (gliflozine) possono ostacolare l\'aumento previsto della glicemia e, quindi, provocare una pericolosa carenza di insulina (DKA).
\nI marchi più comuni sono: Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nCon ciò prometto che non prenderò tali farmaci durante l\'uso di AndroidAPS o disattiverò il loop prima di usare questi farmaci.</string>
</resources>

View file

@ -26,8 +26,6 @@
<string name="objectives_pumpstatusavailableinns">Stato micro disponibile in NS</string>
<string name="objectives_manualenacts">Attivazioni manuali</string>
<string name="accomplished">Completato: %1$s</string>
<string name="objectives_usage_objective">Impara a controllare AndroidAPS</string>
<string name="objectives_usage_gate">Esegui varie azioni in AndroidAPS</string>
<string name="objectives_useprofileswitch">Imposta il profilo \"90%\" per 10 min (premi a lungo sul nome profilo nella sezione Panoramica)</string>
<string name="objectives_usedisconnectpump">Simula la doccia. Disconnetti il micro per 1h (premi a lungo su Loop aperto)</string>
<string name="objectives_usereconnectpump">... e riconnetti allo stesso modo</string>

Some files were not shown because too many files have changed in this diff Show more