diff --git a/app/build.gradle b/app/build.gradle
index 07139638fc..c5fee5f48c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -128,7 +128,7 @@ android {
targetSdkVersion 28
multiDexEnabled true
versionCode 1500
- version "2.7.0-dev"
+ version "2.7.1-dev"
buildConfigField "String", "VERSION", '"' + version + '"'
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt
index 705c377afa..235447a2fd 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt
@@ -61,6 +61,7 @@ import javax.inject.Inject
class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListener, HasAndroidInjector {
private var pluginId = -1
+ private var filter = ""
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var resourceHelper: ResourceHelper
@@ -115,11 +116,13 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
override fun setArguments(args: Bundle?) {
super.setArguments(args)
pluginId = args?.getInt("id") ?: -1
+ filter = args?.getString("filter") ?: ""
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("id", pluginId)
+ outState.putString("filter", filter)
}
override fun onDestroy() {
@@ -148,7 +151,10 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
(savedInstanceState ?: arguments)?.let { bundle ->
if (bundle.containsKey("id")) {
- pluginId = bundle.getInt("id")
+ pluginId = bundle.getInt("id") ?: -1
+ }
+ if (bundle.containsKey("filter")) {
+ filter = bundle.getString("filter") ?: ""
}
}
if (pluginId != -1) {
@@ -191,6 +197,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
}
initSummary(preferenceScreen, pluginId != -1)
preprocessPreferences()
+ if (filter != "") updateFilterVisibility(filter, preferenceScreen)
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
@@ -288,6 +295,33 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
}
}
+ private fun updateFilterVisibility(filter: String, p: Preference): Boolean {
+
+ var visible = false
+
+ if (p is PreferenceGroup) {
+ for (i in 0 until p.preferenceCount) {
+ visible = updateFilterVisibility(filter, p.getPreference(i)) || visible
+ }
+ if (visible && p is PreferenceCategory) {
+ p.initialExpandedChildrenCount = Int.MAX_VALUE
+ }
+ } else {
+ if (p.key != null) {
+ visible = visible || p.key.contains(filter, true)
+ }
+ if (p.title != null) {
+ visible = visible || p.title.contains(filter, true)
+ }
+ if (p.summary != null) {
+ visible = visible || p.summary.contains(filter, true)
+ }
+ }
+
+ p.isVisible = visible
+ return visible
+ }
+
private fun updatePrefSummary(pref: Preference?) {
if (pref is ListPreference) {
pref.setSummary(pref.entry)
@@ -391,4 +425,9 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
}
return super.onPreferenceTreeClick(preference)
}
+
+ public fun setFilter(filter: String) {
+ this.filter = filter
+ updateFilterVisibility(filter, preferenceScreen)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt
index ea90f4b250..42deb79742 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt
@@ -2,11 +2,15 @@ package info.nightscout.androidaps.activities
import android.content.Context
import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen
import info.nightscout.androidaps.R
import info.nightscout.androidaps.utils.locale.LocaleHelper
import info.nightscout.androidaps.utils.resources.ResourceHelper
+import kotlinx.android.synthetic.main.activity_preferences.*
+import kotlinx.android.synthetic.main.local_insight_status_item.view.*
import javax.inject.Inject
class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
@@ -14,18 +18,35 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
@Inject lateinit var resourceHelper: ResourceHelper
var preferenceId = 0
+ var myPreferenceFragment: MyPreferenceFragment? = null
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_single_fragment)
+ setContentView(R.layout.activity_preferences)
+
+ pref_filter.addTextChangedListener(object : TextWatcher {
+ override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
+ override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
+ filterPreferences()
+ }
+
+ override fun afterTextChanged(s: Editable) {}
+ })
+
+ pref_filter_clear.setOnClickListener() {
+ pref_filter.setText("");
+ }
+
title = resourceHelper.gs(R.string.nav_preferences)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
- val myPreferenceFragment = MyPreferenceFragment()
+ myPreferenceFragment = MyPreferenceFragment()
preferenceId = intent.getIntExtra("id", -1)
val args = Bundle()
args.putInt("id", preferenceId)
- myPreferenceFragment.arguments = args
- supportFragmentManager.beginTransaction().replace(R.id.frame_layout, myPreferenceFragment).commit()
+ args.putString("filter", pref_filter.text.toString())
+ myPreferenceFragment?.arguments = args
+ supportFragmentManager.beginTransaction().replace(R.id.frame_layout, myPreferenceFragment!!).commit()
}
override fun onPreferenceStartScreen(caller: PreferenceFragmentCompat, pref: PreferenceScreen): Boolean {
@@ -44,4 +65,8 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(LocaleHelper.wrap(newBase))
}
+
+ private fun filterPreferences() {
+ myPreferenceFragment?.setFilter(pref_filter.text.toString())
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/PluginsModule.kt b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/PluginsModule.kt
index 892c9c36a8..b28073a055 100644
--- a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/PluginsModule.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/PluginsModule.kt
@@ -42,6 +42,7 @@ import info.nightscout.androidaps.plugins.pump.combo.ComboPlugin
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin
import info.nightscout.androidaps.plugins.pump.mdi.MDIPlugin
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin
+import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin
import info.nightscout.androidaps.plugins.sensitivity.SensitivityAAPSPlugin
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
@@ -155,6 +156,12 @@ abstract class PluginsModule {
@IntKey(150)
abstract fun bindMedtronicPumpPlugin(plugin: MedtronicPumpPlugin): PluginBase
+ @Binds
+ @PumpDriver
+ @IntoMap
+ @IntKey(155)
+ abstract fun bindOmnipodPumpPlugin(plugin: OmnipodPumpPlugin): PluginBase
+
@Binds
@NotNSClient
@IntoMap
diff --git a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/SkinsModule.kt b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/SkinsModule.kt
index cd71cc8fd2..feb0b2f812 100644
--- a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/SkinsModule.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/SkinsModule.kt
@@ -9,6 +9,7 @@ import info.nightscout.androidaps.skins.SkinButtonsOn
import info.nightscout.androidaps.skins.SkinClassic
import info.nightscout.androidaps.skins.SkinInterface
import info.nightscout.androidaps.skins.SkinLargeDisplay
+import info.nightscout.androidaps.skins.SkinLowRes
import javax.inject.Qualifier
@Module
@@ -32,6 +33,12 @@ open class SkinsModule {
@IntKey(20)
fun bindsSkinLargeDisplay(skinLargeDisplay: SkinLargeDisplay): SkinInterface = skinLargeDisplay
+ @Provides
+ @Skin
+ @IntoMap
+ @IntKey(30)
+ fun bindsSkinLowRes(skinLowRes: SkinLowRes): SkinInterface = skinLowRes
+
@Qualifier
annotation class Skin
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/historyBrowser/TreatmentsPluginHistory.kt b/app/src/main/java/info/nightscout/androidaps/historyBrowser/TreatmentsPluginHistory.kt
index caa0fb1b1a..f9d0a4019b 100644
--- a/app/src/main/java/info/nightscout/androidaps/historyBrowser/TreatmentsPluginHistory.kt
+++ b/app/src/main/java/info/nightscout/androidaps/historyBrowser/TreatmentsPluginHistory.kt
@@ -7,6 +7,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload
+import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue
import info.nightscout.androidaps.plugins.treatments.TreatmentService
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.utils.DateUtil
@@ -27,8 +28,10 @@ class TreatmentsPluginHistory @Inject constructor(
profileFunction: ProfileFunction,
activePlugin: ActivePluginProvider,
nsUpload: NSUpload,
- fabricPrivacy: FabricPrivacy, dateUtil: DateUtil
-) : TreatmentsPlugin(injector, aapsLogger, rxBus, resourceHelper, context, sp, profileFunction, activePlugin, nsUpload, fabricPrivacy, dateUtil) {
+ fabricPrivacy: FabricPrivacy,
+ dateUtil: DateUtil,
+ uploadQueue: UploadQueue
+) : TreatmentsPlugin(injector, aapsLogger, rxBus, resourceHelper, context, sp, profileFunction, activePlugin, nsUpload, fabricPrivacy, dateUtil, uploadQueue) {
init {
onStart()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java
index 0040dbc6fc..a4b96354fd 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java
@@ -551,6 +551,9 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
rxBus.send(new EventLoopUpdateGui());
}
});
+ } else {
+ lastRun.setTbrSetByPump(result);
+ lastRun.setLastTBRRequest(lastRun.getLastAPSRun());
}
rxBus.send(new EventLoopUpdateGui());
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.java
index 0cb082f368..25d3981c47 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.java
@@ -189,9 +189,9 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface {
}
- if (!hardLimits.checkOnlyHardLimits(profile.getDia(), "dia", hardLimits.getMINDIA(), hardLimits.getMAXDIA()))
+ if (!hardLimits.checkOnlyHardLimits(profile.getDia(), "dia", hardLimits.minDia(), hardLimits.maxDia()))
return;
- if (!hardLimits.checkOnlyHardLimits(profile.getIcTimeFromMidnight(Profile.secondsFromMidnight()), "carbratio", hardLimits.getMINIC(), hardLimits.getMAXIC()))
+ if (!hardLimits.checkOnlyHardLimits(profile.getIcTimeFromMidnight(Profile.secondsFromMidnight()), "carbratio", hardLimits.minIC(), hardLimits.maxIC()))
return;
if (!hardLimits.checkOnlyHardLimits(profile.getIsfMgdl(), "sens", hardLimits.getMINISF(), hardLimits.getMAXISF()))
return;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.java
index b952a6a909..e631a84955 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.java
@@ -220,9 +220,9 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
}
- if (!hardLimits.checkOnlyHardLimits(profile.getDia(), "dia", hardLimits.getMINDIA(), hardLimits.getMAXDIA()))
+ if (!hardLimits.checkOnlyHardLimits(profile.getDia(), "dia", hardLimits.minDia(), hardLimits.maxDia()))
return;
- if (!hardLimits.checkOnlyHardLimits(profile.getIcTimeFromMidnight(Profile.secondsFromMidnight()), "carbratio", hardLimits.getMINIC(), hardLimits.getMAXIC()))
+ if (!hardLimits.checkOnlyHardLimits(profile.getIcTimeFromMidnight(Profile.secondsFromMidnight()), "carbratio", hardLimits.minIC(), hardLimits.maxIC()))
return;
if (!hardLimits.checkOnlyHardLimits(profile.getIsfMgdl(), "sens", hardLimits.getMINISF(), hardLimits.getMAXISF()))
return;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt
index 900b15bde6..86e4212def 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt
@@ -2,6 +2,7 @@ package info.nightscout.androidaps.plugins.general.actions
import android.content.Intent
import android.os.Bundle
+import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -9,6 +10,7 @@ import android.widget.LinearLayout
import androidx.core.content.ContextCompat
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.Config
+import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.ErrorHelperActivity
@@ -24,6 +26,7 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction
import info.nightscout.androidaps.plugins.general.overview.StatusLightHandler
import info.nightscout.androidaps.queue.Callback
+import info.nightscout.androidaps.skins.SkinProvider
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
@@ -54,16 +57,30 @@ class ActionsFragment : DaggerFragment() {
@Inject lateinit var commandQueue: CommandQueueProvider
@Inject lateinit var buildHelper: BuildHelper
@Inject lateinit var protectionCheck: ProtectionCheck
+ @Inject lateinit var skinProvider: SkinProvider
@Inject lateinit var config: Config
private var disposable: CompositeDisposable = CompositeDisposable()
private val pumpCustomActions = HashMap()
private val pumpCustomButtons = ArrayList()
+ private var smallWidth = false
+ private var smallHeight = false
+ private lateinit var dm: DisplayMetrics
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.actions_fragment, container, false)
+ //check screen width
+ dm = DisplayMetrics()
+ activity?.windowManager?.defaultDisplay?.getMetrics(dm)
+
+ val screenWidth = dm.widthPixels
+ val screenHeight = dm.heightPixels
+ smallWidth = screenWidth <= Constants.SMALL_WIDTH
+ smallHeight = screenHeight <= Constants.SMALL_HEIGHT
+ val landscape = screenHeight < screenWidth
+
+ return inflater.inflate(skinProvider.activeSkin().actionsLayout(landscape, smallWidth), container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -233,15 +250,24 @@ class ActionsFragment : DaggerFragment() {
actions_canceltempbasal?.visibility = View.GONE
}
}
-
+ val activeBgSource = activePlugin.activeBgSource
actions_historybrowser.visibility = (profile != null).toVisibility()
actions_fill?.visibility = (pump.pumpDescription.isRefillingCapable && pump.isInitialized && !pump.isSuspended).toVisibility()
actions_pumpbatterychange?.visibility = pump.pumpDescription.isBatteryReplaceable.toVisibility()
actions_temptarget?.visibility = (profile != null && config.APS).toVisibility()
actions_tddstats?.visibility = pump.pumpDescription.supportsTDDs.toVisibility()
- statusLightHandler.updateStatusLights(careportal_canulaage, careportal_insulinage, null, careportal_sensorage, careportal_pbage, null)
+ if (!config.NSCLIENT) {
+ statusLightHandler.updateStatusLights(careportal_canulaage, careportal_insulinage, careportal_reservoirlevel, careportal_sensorage, careportal_sensorlevel, careportal_pbage, careportal_batterylevel)
+ careportal_senslevellabel?.text = if (activeBgSource.sensorBatteryLevel == -1) "" else resourceHelper.gs(R.string.careportal_level_label)
+ } else {
+ statusLightHandler.updateStatusLights(careportal_canulaage, careportal_insulinage, null, careportal_sensorage, null, careportal_pbage, null)
+ careportal_senslevellabel?.text = ""
+ careportal_inslevellabel?.text = ""
+ careportal_pblevellabel?.text = ""
+ }
checkPumpCustomActions()
+
}
private fun checkPumpCustomActions() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.kt
index 5c5d9c843f..661dc3a2bb 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.kt
@@ -72,13 +72,15 @@ class ImportExportPrefs @Inject constructor(
f.activity?.let { exportSharedPreferences(it) }
}
- fun verifyStoragePermissions(fragment: Fragment) {
+ fun verifyStoragePermissions(fragment: Fragment, onGranted: Runnable) {
fragment.context?.let {
val permission = ContextCompat.checkSelfPermission(it,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
fragment.requestPermissions(PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE)
+ } else {
+ onGranted.run()
}
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenanceFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenanceFragment.kt
index c233b6d721..a0ca451fee 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenanceFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenanceFragment.kt
@@ -46,13 +46,15 @@ class MaintenanceFragment : DaggerFragment() {
}
nav_export.setOnClickListener {
// start activity for checking permissions...
- importExportPrefs.verifyStoragePermissions(this)
- importExportPrefs.exportSharedPreferences(this)
+ importExportPrefs.verifyStoragePermissions(this) {
+ importExportPrefs.exportSharedPreferences(this)
+ }
}
nav_import.setOnClickListener {
// start activity for checking permissions...
- importExportPrefs.verifyStoragePermissions(this)
- importExportPrefs.importSharedPreferences(this)
+ importExportPrefs.verifyStoragePermissions(this) {
+ importExportPrefs.importSharedPreferences(this)
+ }
}
nav_logsettings.setOnClickListener { startActivity(Intent(activity, LogSettingActivity::class.java)) }
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
index 1760ea45d0..2797b43967 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
@@ -56,6 +56,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventAutosensCalculationFinished
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
+import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
import info.nightscout.androidaps.plugins.source.DexcomPlugin
import info.nightscout.androidaps.plugins.source.XdripPlugin
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
@@ -80,7 +81,7 @@ import kotlinx.android.synthetic.main.overview_buttons_layout.overview_quickwiza
import kotlinx.android.synthetic.main.overview_buttons_layout.overview_treatmentbutton
import kotlinx.android.synthetic.main.overview_buttons_layout.overview_wizardbutton
import kotlinx.android.synthetic.main.overview_fragment.overview_notifications
-import kotlinx.android.synthetic.main.overview_fragment_nsclient_tablet.*
+import kotlinx.android.synthetic.main.overview_fragment_nsclient.*
import kotlinx.android.synthetic.main.overview_graphs_layout.overview_bggraph
import kotlinx.android.synthetic.main.overview_graphs_layout.overview_chartMenuButton
import kotlinx.android.synthetic.main.overview_graphs_layout.overview_iobcalculationprogess
@@ -93,6 +94,8 @@ import kotlinx.android.synthetic.main.overview_info_layout.overview_cob
import kotlinx.android.synthetic.main.overview_info_layout.overview_extendedbolus
import kotlinx.android.synthetic.main.overview_info_layout.overview_iob
import kotlinx.android.synthetic.main.overview_info_layout.overview_sensitivity
+import kotlinx.android.synthetic.main.overview_info_layout.overview_time
+import kotlinx.android.synthetic.main.overview_info_layout.overview_timeagoshort
import kotlinx.android.synthetic.main.overview_loop_pumpstatus_layout.*
import kotlinx.android.synthetic.main.overview_statuslights_layout.*
import kotlinx.coroutines.Dispatchers
@@ -181,6 +184,9 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ // pre-process landscape mode
+ skinProvider.activeSkin().preProcessLandscapeOverviewLayout(dm, view, resourceHelper.gb(R.bool.isTablet))
+
overview_pumpstatus?.setBackgroundColor(resourceHelper.gc(R.color.colorInitializingBorder))
overview_notifications?.setHasFixedSize(false)
@@ -318,11 +324,11 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
if (childFragmentManager.isStateSaved) return
activity?.let { activity ->
when (v.id) {
- R.id.overview_treatmentbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable(Runnable { TreatmentDialog().show(childFragmentManager, "Overview") }))
- R.id.overview_wizardbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable(Runnable { WizardDialog().show(childFragmentManager, "Overview") }))
- R.id.overview_insulinbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable(Runnable { InsulinDialog().show(childFragmentManager, "Overview") }))
- R.id.overview_quickwizardbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable(Runnable { onClickQuickWizard() }))
- R.id.overview_carbsbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable(Runnable { CarbsDialog().show(childFragmentManager, "Overview") }))
+ R.id.overview_treatmentbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { TreatmentDialog().show(childFragmentManager, "Overview") })
+ R.id.overview_wizardbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { WizardDialog().show(childFragmentManager, "Overview") })
+ R.id.overview_insulinbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { InsulinDialog().show(childFragmentManager, "Overview") })
+ R.id.overview_quickwizardbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { onClickQuickWizard() })
+ R.id.overview_carbsbutton -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { CarbsDialog().show(childFragmentManager, "Overview") })
R.id.overview_cgmbutton -> {
if (xdripPlugin.isEnabled(PluginType.BGSOURCE))
@@ -357,7 +363,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
loopPlugin.invoke("Accept temp button", false)
if (lastRun?.lastAPSRun != null && lastRun.constraintsProcessed?.isChangeRequested == true) {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.tempbasal_label), lastRun.constraintsProcessed?.toSpanned()
- ?: "".toSpanned(), Runnable {
+ ?: "".toSpanned(), {
aapsLogger.debug("USER ENTRY: ACCEPT TEMP BASAL")
overview_accepttempbutton?.visibility = View.GONE
(context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).cancel(Constants.notificationID)
@@ -574,11 +580,9 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
val glucoseStatus = GlucoseStatus(injector).glucoseStatusData
if (glucoseStatus != null) {
overview_delta?.text = Profile.toSignedUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units)
- overview_deltashort?.text = Profile.toSignedUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units)
overview_avgdelta?.text = "${Profile.toSignedUnitsString(glucoseStatus.short_avgdelta, glucoseStatus.short_avgdelta * Constants.MGDL_TO_MMOLL, units)}\n${Profile.toSignedUnitsString(glucoseStatus.long_avgdelta, glucoseStatus.long_avgdelta * Constants.MGDL_TO_MMOLL, units)}"
} else {
overview_delta?.text = "Δ " + resourceHelper.gs(R.string.notavailable)
- overview_deltashort?.text = "---"
overview_avgdelta?.text = ""
}
@@ -596,9 +600,10 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
val closedLoopEnabled = constraintChecker.isClosedLoopAllowed()
- // open loop mode
+ // aps mode
if (config.APS && pump.pumpDescription.isTempBasalCapable) {
overview_apsmode?.visibility = View.VISIBLE
+ overview_time_llayout?.visibility = View.GONE
when {
loopPlugin.isEnabled() && loopPlugin.isSuperBolus -> {
overview_apsmode?.setImageResource(R.drawable.ic_loop_superbolus)
@@ -616,7 +621,13 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
pump.isSuspended -> {
- overview_apsmode?.setImageResource(R.drawable.ic_loop_paused)
+ overview_apsmode?.setImageResource(if (pump.pumpDescription.pumpType == PumpType.Insulet_Omnipod) {
+ // For Omnipod, indicate the pump as disconnected when it's suspended.
+ // The only way to 'reconnect' it, is through the Omnipod tab
+ R.drawable.ic_loop_disconnected
+ } else {
+ R.drawable.ic_loop_paused
+ })
overview_apsmode_text?.text = ""
}
@@ -641,8 +652,10 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
}
} else {
+ //nsclient
overview_apsmode?.visibility = View.GONE
overview_apsmode_text?.visibility = View.GONE
+ overview_time_llayout?.visibility = View.VISIBLE
}
val lastRun = loopPlugin.lastRun
val predictionsAvailable = if (config.APS) lastRun?.request?.hasPredictions == true else config.NSCLIENT
@@ -671,7 +684,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
// Basal, TBR
val activeTemp = treatmentsPlugin.getTempBasalFromHistory(System.currentTimeMillis())
- overview_basebasal?.text = activeTemp?.let { if (resourceHelper.shortTextMode()) "T:" + activeTemp.toStringVeryShort() else activeTemp.toStringFull() }
+ overview_basebasal?.text = activeTemp?.let { "T:" + activeTemp.toStringVeryShort() }
?: resourceHelper.gs(R.string.pump_basebasalrate, profile.basal)
overview_basal_llayout?.setOnClickListener {
var fullText = "${resourceHelper.gs(R.string.basebasalrate_label)}: ${resourceHelper.gs(R.string.pump_basebasalrate, profile.basal)}"
@@ -692,10 +705,10 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
// Extended bolus
val extendedBolus = treatmentsPlugin.getExtendedBolusFromHistory(System.currentTimeMillis())
- overview_extendedbolus?.text = if (extendedBolus != null && !pump.isFakingTempsByExtendedBoluses) {
- if (resourceHelper.shortTextMode()) resourceHelper.gs(R.string.pump_basebasalrate, extendedBolus.absoluteRate())
- else extendedBolus.toStringMedium()
- } else ""
+ overview_extendedbolus?.text =
+ if (extendedBolus != null && !pump.isFakingTempsByExtendedBoluses)
+ resourceHelper.gs(R.string.pump_basebasalrate, extendedBolus.absoluteRate())
+ else ""
overview_extendedbolus?.setOnClickListener {
if (extendedBolus != null) activity?.let {
OKDialog.show(it, resourceHelper.gs(R.string.extended_bolus), extendedBolus.toString())
@@ -720,15 +733,8 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
treatmentsPlugin.updateTotalIOBTempBasals()
val bolusIob = treatmentsPlugin.lastCalculationTreatments.round()
val basalIob = treatmentsPlugin.lastCalculationTempBasals.round()
- overview_iob?.text = when {
- resourceHelper.shortTextMode() ->
- resourceHelper.gs(R.string.formatinsulinunits, bolusIob.iob + basalIob.basaliob)
+ overview_iob?.text = resourceHelper.gs(R.string.formatinsulinunits, bolusIob.iob + basalIob.basaliob)
- else ->
- resourceHelper.gs(R.string.formatinsulinunits, bolusIob.iob + basalIob.basaliob) + " (" +
- resourceHelper.gs(R.string.formatinsulinunits, bolusIob.iob) + "/" +
- resourceHelper.gs(R.string.formatinsulinunits, basalIob.basaliob) + ")"
- }
overview_iob_llayout?.setOnClickListener {
activity?.let {
OKDialog.show(it, resourceHelper.gs(R.string.iob),
@@ -741,7 +747,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
// Status lights
overview_statuslights?.visibility = (sp.getBoolean(R.string.key_show_statuslights, true) || config.NSCLIENT).toVisibility()
- statusLightHandler.updateStatusLights(careportal_canulaage, careportal_insulinage, careportal_reservoirlevel, careportal_sensorage, careportal_pbage, careportal_batterylevel)
+ statusLightHandler.updateStatusLights(careportal_canulaage, careportal_insulinage, careportal_reservoirlevel, careportal_sensorage, null, careportal_pbage, careportal_batterylevel)
// cob
var cobText: String = resourceHelper.gs(R.string.value_unavailable_short)
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt
index f5e3c656dc..4e996717c8 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt
@@ -28,12 +28,12 @@ import info.nightscout.androidaps.events.EventRefreshOverview
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.PluginType
+import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.PumpDescription
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
-import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DefaultValueHelper
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt
index 8a95e34e1e..af361236fa 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt
@@ -27,14 +27,20 @@ class StatusLightHandler @Inject constructor(
/**
* applies the extended statusLight subview on the overview fragment
*/
- fun updateStatusLights(careportal_canulaage: TextView?, careportal_insulinage: TextView?, careportal_reservoirlevel: TextView?, careportal_sensorage: TextView?, careportal_pbage: TextView?, careportal_batterylevel: TextView?) {
+ fun updateStatusLights(careportal_canulaage: TextView?, careportal_insulinage: TextView?, careportal_reservoirlevel: TextView?, careportal_sensorage: TextView?, careportal_sensorbatterylevel: TextView?, careportal_pbage: TextView?, careportal_batterylevel: TextView?) {
val pump = activePlugin.activePump
+ val bgSource = activePlugin.activeBgSource
handleAge(careportal_canulaage, CareportalEvent.SITECHANGE, R.string.key_statuslights_cage_warning, 48.0, R.string.key_statuslights_cage_critical, 72.0)
handleAge(careportal_insulinage, CareportalEvent.INSULINCHANGE, R.string.key_statuslights_iage_warning, 72.0, R.string.key_statuslights_iage_critical, 144.0)
handleAge(careportal_sensorage, CareportalEvent.SENSORCHANGE, R.string.key_statuslights_sage_warning, 216.0, R.string.key_statuslights_sage_critical, 240.0)
handleAge(careportal_pbage, CareportalEvent.PUMPBATTERYCHANGE, R.string.key_statuslights_bage_warning, 216.0, R.string.key_statuslights_bage_critical, 240.0)
- if (!config.NSCLIENT)
+ if (!config.NSCLIENT) {
handleLevel(careportal_reservoirlevel, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, "U")
+ if (bgSource.sensorBatteryLevel != -1)
+ handleLevel(careportal_sensorbatterylevel, R.string.key_statuslights_sbat_critical, 5.0, R.string.key_statuslights_sbat_warning, 20.0, bgSource.sensorBatteryLevel.toDouble(), "%")
+ else
+ careportal_sensorbatterylevel?.text = ""
+ }
if (!config.NSCLIENT && pump.model() != PumpType.AccuChekCombo)
handleLevel(careportal_batterylevel, R.string.key_statuslights_bat_critical, 26.0, R.string.key_statuslights_bat_warning, 51.0, pump.batteryLevel.toDouble(), "%")
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt
index 9beccc7ccd..a5794fbc25 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt
@@ -23,7 +23,6 @@ import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
-import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientRestart
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
@@ -314,6 +313,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS LOOP DISABLE")
loopPlugin.setPluginEnabled(PluginType.LOOP, false)
commandQueue.cancelTempBasal(true, object : Callback() {
override fun run() {
@@ -337,6 +337,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS LOOP ENABLE")
loopPlugin.setPluginEnabled(PluginType.LOOP, true)
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_loophasbeenenabled)))
rxBus.send(EventRefreshOverview("SMS_LOOP_START"))
@@ -363,7 +364,18 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS LOOP RESUME")
+ loopPlugin.suspendTo(0L)
rxBus.send(EventRefreshOverview("SMS_LOOP_RESUME"))
+ commandQueue.cancelTempBasal(true, object : Callback() {
+ override fun run() {
+ if (!result.success) {
+ var replyText = resourceHelper.gs(R.string.smscommunicator_tempbasalfailed)
+ replyText += "\n" + activePlugin.activePump.shortStatus(true)
+ sendSMS(Sms(receivedSms.phoneNumber, replyText))
+ }
+ }
+ })
loopPlugin.createOfflineEvent(0)
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_loopresumed)))
}
@@ -385,6 +397,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(duration) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS LOOP SUSPEND")
commandQueue.cancelTempBasal(true, object : Callback() {
override fun run() {
if (result.success) {
@@ -463,6 +476,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS PUMP CONNECT")
commandQueue.cancelTempBasal(true, object : Callback() {
override fun run() {
if (!result.success) {
@@ -491,6 +505,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS PUMP DISCONNECT")
val profile = profileFunction.getProfile()
loopPlugin.disconnectPump(duration, profile)
rxBus.send(EventRefreshOverview("SMS_PUMP_DISCONNECT"))
@@ -544,6 +559,7 @@ class SmsCommunicatorPlugin @Inject constructor(
val finalPercentage = percentage
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(list[pindex - 1] as String, finalPercentage) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS PROFILE $reply")
activePlugin.activeTreatments.doProfileSwitch(store, list[pindex - 1] as String, 0, finalPercentage, 0, DateUtil.now())
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.profileswitchcreated)))
}
@@ -561,6 +577,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS BASAL $reply")
commandQueue.cancelTempBasal(true, object : Callback() {
override fun run() {
if (result.success) {
@@ -578,7 +595,7 @@ class SmsCommunicatorPlugin @Inject constructor(
})
} else if (splitted[1].endsWith("%")) {
var tempBasalPct = SafeParse.stringToInt(StringUtils.removeEnd(splitted[1], "%"))
- var durationStep = activePlugin.activePump.model().tbrSettings.durationStep
+ val durationStep = activePlugin.activePump.model().tbrSettings.durationStep
var duration = 30
if (splitted.size > 2) duration = SafeParse.stringToInt(splitted[2])
val profile = profileFunction.getProfile()
@@ -592,6 +609,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasalPct, duration) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS BASAL $reply")
commandQueue.tempBasalPercent(anInteger(), secondInteger(), true, profile, object : Callback() {
override fun run() {
if (result.success) {
@@ -611,7 +629,7 @@ class SmsCommunicatorPlugin @Inject constructor(
}
} else {
var tempBasal = SafeParse.stringToDouble(splitted[1])
- var durationStep = activePlugin.activePump.model().tbrSettings.durationStep
+ val durationStep = activePlugin.activePump.model().tbrSettings.durationStep
var duration = 30
if (splitted.size > 2) duration = SafeParse.stringToInt(splitted[2])
val profile = profileFunction.getProfile()
@@ -625,6 +643,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasal, duration) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS BASAL $reply")
commandQueue.tempBasalAbsolute(aDouble(), secondInteger(), true, profile, object : Callback() {
override fun run() {
if (result.success) {
@@ -652,6 +671,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS EXTENDED $reply")
commandQueue.cancelExtended(object : Callback() {
override fun run() {
if (result.success) {
@@ -680,6 +700,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(extended, duration) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS EXTENDED $reply")
commandQueue.extendedBolus(aDouble(), secondInteger(), object : Callback() {
override fun run() {
if (result.success) {
@@ -715,6 +736,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(bolus) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS BOLUS $reply")
val detailedBolusInfo = DetailedBolusInfo()
detailedBolusInfo.insulin = aDouble()
detailedBolusInfo.source = Source.USER
@@ -789,6 +811,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(grams, time) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS CARBS $reply")
val detailedBolusInfo = DetailedBolusInfo()
detailedBolusInfo.carbs = anInteger().toDouble()
detailedBolusInfo.source = Source.USER
@@ -829,6 +852,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS TARGET $reply")
val units = profileFunction.getUnits()
var keyDuration = 0
var defaultTargetDuration = 0
@@ -884,6 +908,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS TARGET $reply")
val tempTarget = TempTarget()
.source(Source.USER)
.date(DateUtil.now())
@@ -908,6 +933,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS SMS $reply")
sp.putBoolean(R.string.key_smscommunicator_remotecommandsallowed, false)
val replyText = String.format(resourceHelper.gs(R.string.smscommunicator_stoppedsms))
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
@@ -924,6 +950,7 @@ class SmsCommunicatorPlugin @Inject constructor(
receivedSms.processed = true
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(cal) {
override fun run() {
+ aapsLogger.debug("USER ENTRY: SMS CAL $reply")
val result = xdripCalibrations.sendIntent(aDouble!!)
if (result) sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_calibrationsent))) else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_calibrationfailed)))
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt
index b0a1203170..b8bcd244ea 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt
@@ -106,9 +106,9 @@ class LocalProfileFragment : DaggerFragment() {
localprofile_name.removeTextChangedListener(textWatch)
localprofile_name.setText(currentProfile.name)
localprofile_name.addTextChangedListener(textWatch)
- localprofile_dia.setParams(currentProfile.dia, hardLimits.MINDIA, hardLimits.MAXDIA, 0.1, DecimalFormat("0.0"), false, localprofile_save, textWatch)
+ localprofile_dia.setParams(currentProfile.dia, hardLimits.minDia(), hardLimits.maxDia(), 0.1, DecimalFormat("0.0"), false, localprofile_save, textWatch)
localprofile_dia.tag = "LP_DIA"
- TimeListEdit(context, aapsLogger, dateUtil, view, R.id.localprofile_ic, "IC", resourceHelper.gs(R.string.ic_label), currentProfile.ic, null, hardLimits.MINIC, hardLimits.MAXIC, 0.1, DecimalFormat("0.0"), save)
+ TimeListEdit(context, aapsLogger, dateUtil, view, R.id.localprofile_ic, "IC", resourceHelper.gs(R.string.ic_label), currentProfile.ic, null, hardLimits.minIC(), hardLimits.maxIC(), 0.1, DecimalFormat("0.0"), save)
basalView = TimeListEdit(context, aapsLogger, dateUtil, view, R.id.localprofile_basal, "BASAL", resourceHelper.gs(R.string.basal_label) + ": " + sumLabel(), currentProfile.basal, null, pumpDescription.basalMinimumRate, 10.0, 0.01, DecimalFormat("0.00"), save)
if (units == Constants.MGDL) {
TimeListEdit(context, aapsLogger, dateUtil, view, R.id.localprofile_isf, "ISF", resourceHelper.gs(R.string.isf_label), currentProfile.isf, null, hardLimits.MINISF, hardLimits.MAXISF, 1.0, DecimalFormat("0"), save)
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt
index 9141d57214..ff28aa3f2a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt
@@ -41,6 +41,8 @@ class EversensePlugin @Inject constructor(
aapsLogger, resourceHelper, injector
), BgSourceInterface {
+ private var sensorBatteryLevel = -1
+
override fun advancedFilteringSupported(): Boolean {
return false
}
@@ -53,7 +55,10 @@ class EversensePlugin @Inject constructor(
if (bundle.containsKey("glucoseLevel")) aapsLogger.debug(LTag.BGSOURCE, "glucoseLevel: " + bundle.getInt("glucoseLevel"))
if (bundle.containsKey("glucoseTrendDirection")) aapsLogger.debug(LTag.BGSOURCE, "glucoseTrendDirection: " + bundle.getString("glucoseTrendDirection"))
if (bundle.containsKey("glucoseTimestamp")) aapsLogger.debug(LTag.BGSOURCE, "glucoseTimestamp: " + dateUtil.dateAndTimeString(bundle.getLong("glucoseTimestamp")))
- if (bundle.containsKey("batteryLevel")) aapsLogger.debug(LTag.BGSOURCE, "batteryLevel: " + bundle.getString("batteryLevel"))
+ if (bundle.containsKey("batteryLevel")) {
+ aapsLogger.debug(LTag.BGSOURCE, "batteryLevel: " + bundle.getString("batteryLevel"))
+ //sensorBatteryLevel = bundle.getString("batteryLevel").toInt() // TODO: Philoul: Line to check I don't have eversens so I don't know what kind of information is sent...
+ }
if (bundle.containsKey("signalStrength")) aapsLogger.debug(LTag.BGSOURCE, "signalStrength: " + bundle.getString("signalStrength"))
if (bundle.containsKey("transmitterVersionNumber")) aapsLogger.debug(LTag.BGSOURCE, "transmitterVersionNumber: " + bundle.getString("transmitterVersionNumber"))
if (bundle.containsKey("isXLVersion")) aapsLogger.debug(LTag.BGSOURCE, "isXLVersion: " + bundle.getBoolean("isXLVersion"))
@@ -113,4 +118,8 @@ class EversensePlugin @Inject constructor(
}
}
}
+
+ override fun getSensorBatteryLevel(): Int {
+ return sensorBatteryLevel
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/XdripPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/XdripPlugin.kt
index aaf38b93b6..bc27489da6 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/source/XdripPlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/XdripPlugin.kt
@@ -31,6 +31,7 @@ class XdripPlugin @Inject constructor(
), BgSourceInterface {
private var advancedFiltering = false
+ private var sensorBatteryLevel = -1
override fun advancedFilteringSupported(): Boolean {
return advancedFiltering
@@ -45,6 +46,7 @@ class XdripPlugin @Inject constructor(
bgReading.direction = bundle.getString(Intents.EXTRA_BG_SLOPE_NAME)
bgReading.date = bundle.getLong(Intents.EXTRA_TIMESTAMP)
bgReading.raw = bundle.getDouble(Intents.EXTRA_RAW)
+ //if (bundle.containsKey(Intents.EXTRA_SENSOR_BATTERY)) sensorBatteryLevel = bundle.getInt(Intents.EXTRA_SENSOR_BATTERY)
val source = bundle.getString(Intents.XDRIP_DATA_SOURCE_DESCRIPTION, "no Source specified")
setSource(source)
MainApp.getDbHelper().createIfNotExists(bgReading, "XDRIP")
@@ -53,4 +55,8 @@ class XdripPlugin @Inject constructor(
private fun setSource(source: String) {
advancedFiltering = source.contains("G5 Native") || source.contains("G6 Native")
}
+
+ override fun getSensorBatteryLevel(): Int {
+ return sensorBatteryLevel
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java
index 01ae2f9dcd..a957fbe57a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java
@@ -30,13 +30,12 @@ import info.nightscout.androidaps.data.NonOverlappingIntervals;
import info.nightscout.androidaps.data.OverlappingIntervals;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileIntervals;
-import info.nightscout.androidaps.db.Treatment;
-import info.nightscout.androidaps.interfaces.ProfileStore;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal;
+import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventReloadProfileSwitchData;
import info.nightscout.androidaps.events.EventReloadTempBasalData;
import info.nightscout.androidaps.events.EventReloadTreatmentData;
@@ -45,13 +44,15 @@ import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
+import info.nightscout.androidaps.interfaces.ProfileFunction;
+import info.nightscout.androidaps.interfaces.ProfileStore;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
-import info.nightscout.androidaps.interfaces.ProfileFunction;
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
+import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue;
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult;
@@ -75,6 +76,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
private final ProfileFunction profileFunction;
private final ActivePluginProvider activePlugin;
private final NSUpload nsUpload;
+ private final UploadQueue uploadQueue;
private final FabricPrivacy fabricPrivacy;
private final DateUtil dateUtil;
@@ -103,7 +105,8 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
ActivePluginProvider activePlugin,
NSUpload nsUpload,
FabricPrivacy fabricPrivacy,
- DateUtil dateUtil
+ DateUtil dateUtil,
+ UploadQueue uploadQueue
) {
super(new PluginDescription()
.mainType(PluginType.TREATMENT)
@@ -124,6 +127,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
this.fabricPrivacy = fabricPrivacy;
this.dateUtil = dateUtil;
this.nsUpload = nsUpload;
+ this.uploadQueue = uploadQueue;
}
@Override
@@ -338,8 +342,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
if (last == null) {
getAapsLogger().debug(LTag.DATATREATMENTS, "Last bolus time: NOTHING FOUND");
return 0;
- }
- else {
+ } else {
getAapsLogger().debug(LTag.DATATREATMENTS, "Last bolus time: " + dateUtil.dateAndTimeString(last.date));
return last.date;
}
@@ -350,8 +353,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
if (last == null) {
getAapsLogger().debug(LTag.DATATREATMENTS, "Last manual bolus time: NOTHING FOUND");
return 0;
- }
- else {
+ } else {
getAapsLogger().debug(LTag.DATATREATMENTS, "Last manual bolus time: " + dateUtil.dateAndTimeString(last.date));
return last.date;
}
@@ -362,8 +364,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
if (last == null) {
getAapsLogger().debug(LTag.DATATREATMENTS, "Last Carb time: NOTHING FOUND");
return 0;
- }
- else {
+ } else {
getAapsLogger().debug(LTag.DATATREATMENTS, "Last Carb time: " + dateUtil.dateAndTimeString(last.date));
return last.date;
}
@@ -387,6 +388,16 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
return getTempBasalFromHistory(System.currentTimeMillis()) != null;
}
+ @Override public void removeTempBasal(TemporaryBasal tempBasal) {
+ String tempBasalId = tempBasal._id;
+ if (NSUpload.isIdValid(tempBasalId)) {
+ nsUpload.removeCareportalEntryFromNS(tempBasalId);
+ } else {
+ uploadQueue.removeID("dbAdd", tempBasalId);
+ }
+ MainApp.getDbHelper().delete(tempBasal);
+ }
+
@Override
public boolean isInHistoryExtendedBoluslInProgress() {
return getExtendedBolusFromHistory(System.currentTimeMillis()) != null; //TODO: crosscheck here
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsTemporaryBasalsFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsTemporaryBasalsFragment.kt
index fed0ba1137..dd98dbf381 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsTemporaryBasalsFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsTemporaryBasalsFragment.kt
@@ -11,7 +11,6 @@ import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import dagger.android.support.DaggerFragment
-import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.Intervals
import info.nightscout.androidaps.data.IobTotal
@@ -19,33 +18,29 @@ import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.db.TemporaryBasal
import info.nightscout.androidaps.events.EventTempBasalChange
import info.nightscout.androidaps.interfaces.ActivePluginProvider
-import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.interfaces.ProfileFunction
+import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload
-import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventAutosensCalculationFinished
import info.nightscout.androidaps.plugins.treatments.fragments.TreatmentsTemporaryBasalsFragment.RecyclerViewAdapter.TempBasalsViewHolder
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.alertDialogs.OKDialog.showConfirmation
import info.nightscout.androidaps.utils.resources.ResourceHelper
-import info.nightscout.androidaps.utils.sharedPreferences.SP
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.treatments_tempbasals_fragment.*
import javax.inject.Inject
class TreatmentsTemporaryBasalsFragment : DaggerFragment() {
+
private val disposable = CompositeDisposable()
@Inject lateinit var rxBus: RxBusWrapper
- @Inject lateinit var sp: SP
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var activePlugin: ActivePluginProvider
@Inject lateinit var profileFunction: ProfileFunction
- @Inject lateinit var nsUpload: NSUpload
- @Inject lateinit var uploadQueue: UploadQueue
@Inject lateinit var dateUtil: DateUtil
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
@@ -81,6 +76,7 @@ class TreatmentsTemporaryBasalsFragment : DaggerFragment() {
}
inner class RecyclerViewAdapter internal constructor(private var tempBasalList: Intervals) : RecyclerView.Adapter() {
+
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): TempBasalsViewHolder {
val v = LayoutInflater.from(viewGroup.context).inflate(R.layout.treatments_tempbasals_item, viewGroup, false)
return TempBasalsViewHolder(v)
@@ -142,6 +138,7 @@ class TreatmentsTemporaryBasalsFragment : DaggerFragment() {
}
inner class TempBasalsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+
var cv: CardView = itemView.findViewById(R.id.tempbasals_cardview)
var date: TextView = itemView.findViewById(R.id.tempbasals_date)
var duration: TextView = itemView.findViewById(R.id.tempbasals_duration)
@@ -166,10 +163,7 @@ class TreatmentsTemporaryBasalsFragment : DaggerFragment() {
${resourceHelper.gs(R.string.date)}: ${dateUtil.dateAndTimeString(tempBasal.date)}
""".trimIndent(),
DialogInterface.OnClickListener { _: DialogInterface?, _: Int ->
- val id = tempBasal._id
- if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
- else uploadQueue.removeID("dbAdd", id)
- MainApp.getDbHelper().delete(tempBasal)
+ activePlugin.activeTreatments.removeTempBasal(tempBasal)
}, null)
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinButtonsOn.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinButtonsOn.kt
index 9584ce2f4b..1f1b742374 100644
--- a/app/src/main/java/info/nightscout/androidaps/skins/SkinButtonsOn.kt
+++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinButtonsOn.kt
@@ -14,7 +14,6 @@ class SkinButtonsOn @Inject constructor(private val config: Config) : SkinInterf
override fun overviewLayout(isLandscape: Boolean, isTablet: Boolean, isSmallHeight: Boolean): Int =
when {
- config.NSCLIENT && isTablet -> R.layout.overview_fragment_nsclient_tablet
config.NSCLIENT -> R.layout.overview_fragment_nsclient
else -> R.layout.overview_fragment
}
diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinClassic.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinClassic.kt
index 9388843db8..a95e50cb18 100644
--- a/app/src/main/java/info/nightscout/androidaps/skins/SkinClassic.kt
+++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinClassic.kt
@@ -14,7 +14,6 @@ class SkinClassic @Inject constructor(private val config: Config): SkinInterface
override fun overviewLayout(isLandscape: Boolean, isTablet: Boolean, isSmallHeight: Boolean): Int =
when {
- config.NSCLIENT && isTablet -> R.layout.overview_fragment_nsclient_tablet
config.NSCLIENT -> R.layout.overview_fragment_nsclient
isSmallHeight || isLandscape -> R.layout.overview_fragment_landscape
else -> R.layout.overview_fragment
diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt
index 73c047d100..e40fe7031d 100644
--- a/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt
+++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt
@@ -1,12 +1,73 @@
package info.nightscout.androidaps.skins
+import android.util.DisplayMetrics
+import android.util.TypedValue.COMPLEX_UNIT_PX
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.TextView
import androidx.annotation.LayoutRes
import androidx.annotation.StringRes
+import androidx.constraintlayout.widget.ConstraintLayout
+import info.nightscout.androidaps.R
+import kotlinx.android.synthetic.main.overview_fragment_nsclient.view.*
+import kotlinx.android.synthetic.main.overview_info_layout.view.*
+import kotlinx.android.synthetic.main.overview_statuslights_layout.view.*
interface SkinInterface {
- @get:StringRes val description : Int
- val mainGraphHeight : Int // in dp
- val secondaryGraphHeight : Int // in dp
- @LayoutRes fun overviewLayout(isLandscape : Boolean, isTablet : Boolean, isSmallHeight : Boolean): Int
+ @get:StringRes val description: Int
+
+ val mainGraphHeight: Int // in dp
+ val secondaryGraphHeight: Int // in dp
+
+ @LayoutRes
+ fun overviewLayout(isLandscape: Boolean, isTablet: Boolean, isSmallHeight: Boolean): Int
+
+ @LayoutRes
+ fun actionsLayout(isLandscape: Boolean, isSmallWidth: Boolean): Int = R.layout.actions_fragment
+
+ fun preProcessLandscapeOverviewLayout(dm: DisplayMetrics, view: View, isTablet: Boolean) {
+ // pre-process landscape mode
+ val screenWidth = dm.widthPixels
+ val screenHeight = dm.heightPixels
+ val landscape = screenHeight < screenWidth
+
+ if (landscape) {
+ val iobLayoutParams = view.overview_iob_llayout.layoutParams as ConstraintLayout.LayoutParams
+ iobLayoutParams.startToStart = ConstraintLayout.LayoutParams.UNSET
+ iobLayoutParams.startToEnd = view.overview_time_llayout.id
+ iobLayoutParams.topToBottom = ConstraintLayout.LayoutParams.UNSET
+ iobLayoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID
+ val timeLayoutParams = view.overview_time_llayout.layoutParams as ConstraintLayout.LayoutParams
+ timeLayoutParams.endToEnd = ConstraintLayout.LayoutParams.UNSET
+ timeLayoutParams.endToStart = view.overview_iob_llayout.id
+
+ if (isTablet) {
+ for (v in listOf(
+ view.overview_bg,
+ view.overview_time,
+ view.overview_timeagoshort,
+ view.overview_iob,
+ view.overview_cob,
+ view.overview_basebasal,
+ view.overview_extendedbolus,
+ view.overview_sensitivity
+ )) v.setTextSize(COMPLEX_UNIT_PX, v.textSize * 1.5f)
+ for (v in listOf(
+ view.overview_pump,
+ view.overview_openaps,
+ view.overview_uploader,
+ view.careportal_canulaage,
+ view.careportal_insulinage,
+ view.careportal_reservoirlevel,
+ view.careportal_reservoirlevel,
+ view.careportal_sensorage,
+ view.careportal_pbage,
+ view.careportal_batterylevel
+ )) v.setTextSize(COMPLEX_UNIT_PX, v.textSize * 1.3f)
+ view.overview_time_llayout.orientation = LinearLayout.HORIZONTAL
+ view.overview_timeagoshort.setTextSize(COMPLEX_UNIT_PX, view.overview_time.textSize)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinLargeDisplay.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinLargeDisplay.kt
index b28a0e3e0a..6e0e54294f 100644
--- a/app/src/main/java/info/nightscout/androidaps/skins/SkinLargeDisplay.kt
+++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinLargeDisplay.kt
@@ -14,7 +14,6 @@ class SkinLargeDisplay @Inject constructor(private val config: Config): SkinInte
override fun overviewLayout(isLandscape: Boolean, isTablet: Boolean, isSmallHeight: Boolean): Int =
when {
- config.NSCLIENT && isTablet -> R.layout.overview_fragment_nsclient_tablet
config.NSCLIENT -> R.layout.overview_fragment_nsclient
isSmallHeight || isLandscape -> R.layout.overview_fragment_landscape
else -> R.layout.overview_fragment
diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt
new file mode 100644
index 0000000000..609c324cee
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt
@@ -0,0 +1,31 @@
+package info.nightscout.androidaps.skins
+
+import android.util.DisplayMetrics
+import android.view.View
+import info.nightscout.androidaps.Config
+import info.nightscout.androidaps.R
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class SkinLowRes @Inject constructor(private val config: Config) : SkinInterface {
+
+ override val description: Int get() = R.string.lowres_description
+ override val mainGraphHeight: Int get() = 200
+ override val secondaryGraphHeight: Int get() = 100
+
+ override fun overviewLayout(isLandscape: Boolean, isTablet: Boolean, isSmallHeight: Boolean): Int =
+ when {
+ config.NSCLIENT -> R.layout.overview_fragment_nsclient
+ isSmallHeight || isLandscape -> R.layout.overview_fragment_landscape
+ else -> R.layout.overview_fragment
+ }
+
+ override fun actionsLayout(isLandscape: Boolean, isSmallWidth: Boolean): Int =
+ when {
+ isLandscape || !isSmallWidth -> R.layout.actions_fragment
+ else -> R.layout.actions_fragment_lowres
+ }
+
+ override fun preProcessLandscapeOverviewLayout(dm: DisplayMetrics, view: View, isTablet: Boolean) {}
+}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt b/app/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt
index 37b0c0beb6..61839a8bf4 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt
+++ b/app/src/main/java/info/nightscout/androidaps/utils/HardLimits.kt
@@ -24,7 +24,8 @@ class HardLimits @Inject constructor(
val TEENAGE = 1
val ADULT = 2
val RESISTANTADULT = 3
- val MAXBOLUS = doubleArrayOf(5.0, 10.0, 17.0, 25.0)
+ val PREGNANT = 4
+ val MAXBOLUS = doubleArrayOf(5.0, 10.0, 17.0, 25.0, 60.0)
// Very Hard Limits Ranges
// First value is the Lowest and second value is the Highest a Limit can define
@@ -36,15 +37,15 @@ class HardLimits @Inject constructor(
val VERY_HARD_LIMIT_TEMP_MIN_BG = intArrayOf(72, 180)
val VERY_HARD_LIMIT_TEMP_MAX_BG = intArrayOf(72, 270)
val VERY_HARD_LIMIT_TEMP_TARGET_BG = intArrayOf(72, 200)
- val MINDIA = 5.0
- val MAXDIA = 7.0
- val MINIC = 2.0
- val MAXIC = 100.0
+ val MINDIA = doubleArrayOf(5.0, 5.0, 5.0, 5.0, 5.0)
+ val MAXDIA = doubleArrayOf(7.0, 7.0, 7.0, 7.0, 10.0)
+ val MINIC = doubleArrayOf(2.0, 2.0, 2.0, 2.0, 0.3)
+ val MAXIC = doubleArrayOf(100.0, 100.0, 100.0, 100.0, 100.0)
val MINISF = 2.0 // mgdl
val MAXISF = 720.0 // mgdl
- val MAXIOB_AMA = doubleArrayOf(3.0, 5.0, 7.0, 12.0)
- val MAXIOB_SMB = doubleArrayOf(3.0, 7.0, 12.0, 25.0)
- val MAXBASAL = doubleArrayOf(2.0, 5.0, 10.0, 12.0)
+ val MAXIOB_AMA = doubleArrayOf(3.0, 5.0, 7.0, 12.0, 25.0)
+ val MAXIOB_SMB = doubleArrayOf(3.0, 7.0, 12.0, 25.0, 40.0)
+ val MAXBASAL = doubleArrayOf(2.0, 5.0, 10.0, 12.0, 25.0)
//LGS Hard limits
//No IOB at all
@@ -57,6 +58,7 @@ class HardLimits @Inject constructor(
else if (sp_age == resourceHelper.gs(R.string.key_teenage)) TEENAGE
else if (sp_age == resourceHelper.gs(R.string.key_adult)) ADULT
else if (sp_age == resourceHelper.gs(R.string.key_resistantadult)) RESISTANTADULT
+ else if (sp_age == resourceHelper.gs(R.string.key_pregnant)) PREGNANT
else ADULT
return age
}
@@ -77,6 +79,22 @@ class HardLimits @Inject constructor(
return MAXBASAL[loadAge()]
}
+ fun minDia(): Double {
+ return MINDIA[loadAge()]
+ }
+
+ fun maxDia(): Double {
+ return MAXDIA[loadAge()]
+ }
+
+ fun minIC(): Double {
+ return MINIC[loadAge()]
+ }
+
+ fun maxIC(): Double {
+ return MAXIC[loadAge()]
+ }
+
// safety checks
fun checkOnlyHardLimits(value: Double, valueName: String?, lowLimit: Double, highLimit: Double): Boolean {
return value == verifyHardLimits(value, valueName, lowLimit, highLimit)
@@ -96,4 +114,4 @@ class HardLimits @Inject constructor(
}
return newvalue
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt
index 6cecfa4f73..78cbaf4a9d 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt
+++ b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt
@@ -7,11 +7,12 @@ import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.db.TDD
import info.nightscout.androidaps.interfaces.ActivePluginProvider
+import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
-import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload
+import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue
import info.nightscout.androidaps.plugins.treatments.TreatmentService
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.utils.DateUtil
@@ -34,8 +35,9 @@ class TddCalculator @Inject constructor(
val profileFunction: ProfileFunction,
fabricPrivacy: FabricPrivacy,
nsUpload: NSUpload,
- private val dateUtil: DateUtil
-) : TreatmentsPlugin(injector, aapsLogger, rxBus, resourceHelper, mainApp, sp, profileFunction, activePlugin, nsUpload, fabricPrivacy, dateUtil) {
+ private val dateUtil: DateUtil,
+ uploadQueue: UploadQueue
+) : TreatmentsPlugin(injector, aapsLogger, rxBus, resourceHelper, mainApp, sp, profileFunction, activePlugin, nsUpload, fabricPrivacy, dateUtil, uploadQueue) {
init {
service = TreatmentService(injector) // plugin is not started
@@ -62,7 +64,7 @@ class TddCalculator @Inject constructor(
val midnight = MidnightTime.calc(t)
val tdd = result[midnight] ?: TDD(midnight, 0.0, 0.0, 0.0)
val tbr = getTempBasalFromHistory(t)
- val profile = profileFunction.getProfile(t) ?: continue
+ val profile = profileFunction.getProfile(t, this) ?: continue
val absoluteRate = tbr?.tempBasalConvertedToAbsolute(t, profile) ?: profile.getBasal(t)
tdd.basal += absoluteRate / 60.0 * 5.0
diff --git a/app/src/main/res/layout/actions_fragment_lowres.xml b/app/src/main/res/layout/actions_fragment_lowres.xml
new file mode 100644
index 0000000000..dc7a4fc204
--- /dev/null
+++ b/app/src/main/res/layout/actions_fragment_lowres.xml
@@ -0,0 +1,304 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_preferences.xml b/app/src/main/res/layout/activity_preferences.xml
new file mode 100644
index 0000000000..042c7515b2
--- /dev/null
+++ b/app/src/main/res/layout/activity_preferences.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/careportal_fragment.xml b/app/src/main/res/layout/careportal_fragment.xml
index ec0bd04bc7..f926492f62 100644
--- a/app/src/main/res/layout/careportal_fragment.xml
+++ b/app/src/main/res/layout/careportal_fragment.xml
@@ -4,7 +4,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
- tools:context=".plugins.general.careportal.CareportalFragment">
+ tools:context=".plugins.general.actions.ActionsFragment">
+ tools:context=".plugins.general.actions.ActionsFragment">
-
-
+ android:stretchColumns="0,2,4">
-
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+ android:layout_height="wrap_content">
-
+
+
+
+
+
diff --git a/app/src/main/res/layout/careportal_stats_fragment_lowres.xml b/app/src/main/res/layout/careportal_stats_fragment_lowres.xml
new file mode 100644
index 0000000000..eb6a1dc8ed
--- /dev/null
+++ b/app/src/main/res/layout/careportal_stats_fragment_lowres.xml
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/overview_fragment_nsclient.xml b/app/src/main/res/layout/overview_fragment_nsclient.xml
index c4ce063e29..7f0235d8b9 100644
--- a/app/src/main/res/layout/overview_fragment_nsclient.xml
+++ b/app/src/main/res/layout/overview_fragment_nsclient.xml
@@ -8,11 +8,11 @@
+ android:layout_height="0dp"
+ android:layout_weight="1">
-
@@ -28,37 +28,49 @@
-
+ android:background="?attr/colorControlHighlight"
+ app:alignContent="stretch"
+ app:alignItems="stretch"
+ app:flexDirection="row"
+ app:flexWrap="wrap"
+ app:justifyContent="center">
-
+
-
+
+
+
+
+
diff --git a/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml b/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml
deleted file mode 100644
index 22b87fb6f7..0000000000
--- a/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml
+++ /dev/null
@@ -1,553 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/overview_info_layout.xml b/app/src/main/res/layout/overview_info_layout.xml
index d71a249d0f..147b468ff9 100644
--- a/app/src/main/res/layout/overview_info_layout.xml
+++ b/app/src/main/res/layout/overview_info_layout.xml
@@ -35,6 +35,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
+ app:layout_constraintBottom_toBottomOf="@+id/overview_bg"
app:layout_constraintEnd_toStartOf="@+id/overview_apsmode_llayout"
app:layout_constraintStart_toEndOf="@+id/overview_arrow"
app:layout_constraintTop_toTopOf="parent">
@@ -111,7 +112,8 @@
android:layout_marginTop="5dp"
android:gravity="center_horizontal"
android:orientation="vertical"
- app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="@+id/overview_bg"
+ app:layout_constraintEnd_toStartOf="@id/overview_time_llayout"
app:layout_constraintStart_toEndOf="@id/overview_deltas_llayout"
app:layout_constraintTop_toTopOf="parent">
@@ -135,6 +137,43 @@
android:textStyle="bold" />
+
+
+
+
+
+
+
+
@@ -170,15 +210,16 @@
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
+ app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/overview_basal_llayout"
app:layout_constraintStart_toEndOf="@+id/overview_iob_llayout"
- app:layout_constraintTop_toBottomOf="@+id/overview_bg">
+ app:layout_constraintTop_toTopOf="@+id/overview_iob_llayout">
+ app:layout_constraintTop_toTopOf="@+id/overview_iob_llayout">
+ app:layout_constraintTop_toTopOf="@+id/overview_iob_llayout">
+ app:layout_constraintTop_toTopOf="@+id/overview_iob_llayout">
Wys gedetailleerde IABBreek af IAB in bolus en basale IAB op die watchfacenie suksesvol - Kontroleer asseblief foon
- Pasiënt ouderdomKindTienerVolwasseneInsulien weerstandige volwasse
- Kies asseblief pasiënt ouderdom om veiligheids limiete te stelGlimp%1$s benodig battery optimisering bemagtiging vir beter werksverrigtingLus opgeskort
diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml
index 053a1a1f44..8723c5e3d4 100644
--- a/app/src/main/res/values-bg-rBG/strings.xml
+++ b/app/src/main/res/values-bg-rBG/strings.xml
@@ -261,7 +261,7 @@
Стойността %1$s е извън ограничениятаЗа свързване с помпа отговорете с код %1$sВръзката с помпата е неуспешна
- За да спрете помпата за %1d минути отговорете с код %2$s
+ За да спрете помпата за %1$d минути отговорете с код %2$sПомпата е разкаченаВръзката с помпа е възстановенаОтдалеченото управление е забранено
@@ -405,12 +405,11 @@
Раздели IOB от болус и от базал на часовниканеуспешно - моля проверете телефона---
- Възраст на потребителяДетеТийнейджърВъзрастенВъзрастни с голяма инсулинова резистентност
- Изберете възраст за определяне лимитите на безопасност
+ БременностИме на пациентаМоля, посочете име на пациента или измислено име, за да се различаватПотребител
@@ -454,6 +453,8 @@
Праг за критична инсулинова възраст [часа]Праг за възраст на сензор [часа]Праг за критична възраст на сензор [часа]
+ Аларма при заряд на батерия под [%]
+ Критично ниво на сензорната батерия под [%]Аларма при възраст на батерия над [часа]Праг за критична възраст на батерията над [часа]Ниво за аларма за останал инсулин в резервоара [Е]
@@ -484,6 +485,12 @@
Възраст на инсулинаСмени профилВъзраст на батерията на помпата
+ Сензор
+ Канюла
+ Инсулин
+ Батерия на помпата
+ възраст:
+ ниво:Опции за алармиИзвестяване при NS алармиСъздаване на известия от NS съобщения
@@ -990,6 +997,7 @@
Ограничение поради липса на паметОсвободете поне %1$d Мб в паметта на телефона! Loop изключен!Грешен формат
+ Продължителността на временния база; трябва да бъде кратна на %1$d минути и по-голяма от 0.Грешен код. Командата не е изпълнена.Не е конфигуриранСъздаден запис - Промяна на профил
@@ -1155,6 +1163,9 @@
Нулиране на ключваСигурни ли сте, че ще анулирате ключа на Authenticator? Той ще направи всички конфигурирани в момента аудиентикатори невалидни, и вие ще трябва да ги настроите отново.Генериран е нов ключ! Моля, използвайте актуализирания QRCode.
+ Експортиране на OTP парола
+ Сигурни ли сте, че искате да копирате OTP паролата в клипборда?\n\nВие може да се нуждаете само от това, ако вашето приложение за автентичност има проблеми със сканирането на QRCode, искате да го въведете ръчно или искате да конфигурирате хардуерен OTP токен чрез специално приложение.
+ OTP парола (във Base32 формат) е експортирана и копирана в клипборда. Поставете го в автентикатор или хардуерен OTP!1. Инсталиране на удостоверител2. Сканиране на кода за настройка на AndroidAPS OTP 3. Тест на еднократна парола
@@ -1174,6 +1185,7 @@
Копиране на настройки от NSКопиране на профил от NS (ако има)?Оригинален изглед
+ Скин за ниска резолюцияБутоните винаги се показват на дъното на екрана.Голям екранТема
@@ -1218,4 +1230,5 @@
Статус: %sКачени данниСледните данни ще бъдат качвани във вашия Open Humans акаунт: Глюкозни стойности, болуси, въглехидрати, удължени болуси, профилни смени, общи дневни дози, временни базали, временни цели, предпочитания, версия на AAPS, модел на телефона и размери на екрана. Тайна или лична информация, като например вашия адрес на Nightscout или API, няма да бъдат качени.
+ RileyLink статус:
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index ad90411bb0..85a132a6df 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -261,7 +261,7 @@
Hodnota %1$s je mimo přednastavený rozsahChcete-li připojit pumpu, odpovězte pomocí SMS s kódem %1$sPřipojení k pumpě selhalo
- Chcete-li odpojit pumpu na %1d minut, odpovězte pomocí SMS s kódem %2$s
+ Chcete-li odpojit pumpu na %1$d minut, odpovězte pomocí SMS s kódem %2$sPumpa odpojenaPumpa byla znovu připojenaVzdálený příkaz není povolen
@@ -405,12 +405,13 @@
Rozepsat IOB do bolusového a bazálního na hodinkáchneúspěšně - zkontrolujte mobiln/a
- Stáří pacienta
+ Typ pacientaDítěDospívajícíDospělýDospělý s nízkou citlivostí
- Vyberte věk pacienta pro nastavení bezpečnostních limitů
+ Těhotenství
+ Prosím vyberte typ pacienta pro nastavení bezpečnostních limitůJméno pacientaZadejte jméno pacienta nebo přezdívku pro rozlišení mezi více nastavenímiUživatel
@@ -454,6 +455,8 @@
Úroveň kritického stáří inzulínu [h]Úroveň varování stáří senzoru [h]Úroveň kritického stáří senzoru [h]
+ Úroveň varování stavu baterie senzoru [%]
+ Úroveň kritického varování stavu baterie senzoru [%]Úroveň varování stáří baterie [h]Úroveň kritického varování stáří baterie [h]Úroveň varování stavu zásobníku [U]
@@ -484,6 +487,12 @@
Stáří inzulínuProveďte přepnutí profiluStáří baterie v pumpě
+ Senzor
+ Kanyla
+ Inzulín
+ Baterie pumpy
+ věk:
+ úroveň:Nastavení alarmůVytvořit oznámení z alarmů NSVytvořit oznámení z NS upozornění
@@ -1156,6 +1165,9 @@
Resetovat klíč pro autentikátoryOpravdu chcete obnovit ověřovací klíč? Vyresetujete všechny aktuálně nakonfigurované autentikátory a budete je muset znovu nastavit.Byl vygenerován nový klíč autentikátoru! Prosím, použijte aktualizovaný QR kód pro nastavení autentikátorů.
+ Export OTP tajného klíče
+ 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.
+ 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!1. Nainstalujte Autentikátor2. Naskenujte kód pro nastavení kódů OTP AndroidAPS3. Otestujte jednorázové heslo
@@ -1175,6 +1187,7 @@
Zkopírovat nastavení z NSZkopírovat nastavení NS (existuje-li)?Původní vzhled
+ Vzhled pro nízké rozlišeníTlačítka jsou vždy zobrazena v dolní části obrazovkyVelký displejVzhled
diff --git a/app/src/main/res/values-de-rDE/exam.xml b/app/src/main/res/values-de-rDE/exam.xml
index 4a963701f2..958981e67a 100644
--- a/app/src/main/res/values-de-rDE/exam.xml
+++ b/app/src/main/res/values-de-rDE/exam.xml
@@ -134,8 +134,8 @@
Ein höheres IC-Verhältnis bedeutet, dass weniger Insulin für die selbe Menge an KH abgegeben wird.Ein niedrigeres IC-Verhältnis bedeutet, dass weniger Insulin für die selbe Menge an KH abgegeben wird.Das Ändern des IC-Verhältnisses bedeutet, dass bei 0 COB eine andere Menge an Insulin zur Korrektur eines vorgegebenen BZ-Wertes abgegeben wird.
- Der IC-Wert muss sich unterscheiden, je nachdem, ob Du eine BE mit 10g oder mit 12g berechnest.
- IC bedeutet: Wie viele BE werden durch eine Einheit Insulin abgedeckt?
+ Der IC-Wert wird sich unterscheiden, je nachdem, ob Du eine Broteinheit (BE) mit 10g oder mit 12g berechnest.
+ IC bedeutet: Anzahl BE, die durch eine Einheit Insulin abgedeckt werdenhttps://androidaps.readthedocs.io/en/latest/CROWDIN/de/Getting-Started/FAQ.html#kh-faktor-carbohydrate-to-insulin-ratio-cr-g-ieThema: Profilwechsel Durch einen Profilwechsel auf 90%…
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index 681776e204..7071cfa7eb 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -261,7 +261,7 @@
Wert %1$s ist außerhalb des festen Limits.Um die Pumpe zu verbinden, antworte mit dem Code %1$sVerbindung zur Pumpe fehlgeschlagen
- Um die Verbindung zur Pumpe für %1d Minuten zu trennen, antworte mit dem Code %2$s
+ Um die Verbindung zur Pumpe für %1$d Minuten zu trennen, antworte mit dem Code %2$sVerbindung zur Pumpe getrenntVerbindung zur Pumpe wiederhergestelltFerngesteuerte Befehle sind nicht erlaubt.
@@ -405,12 +405,13 @@
Differenziere IOB in Bolus- und Basal-IOB auf dem WatchfaceNicht erfolgreich - bitte Telefon prüfenn/a
- Patientenalter
+ PatiententypKindTeenagerErwachsenerInsulinresistenter Erwachsener
- Bitte wähle das Patientenalter, um die Sicherheits-Limits festzulegen
+ Schwangerschaft
+ Bitte wähle den Patiententyp, um die Sicherheits-Limits festzulegenName des PatientenBitte gib den Namen des Patienten oder einen Spitznamen an, um mehrere Setups unterscheiden zu können.Nutzer
@@ -454,6 +455,8 @@
Warnschwelle kritisches Insulinalter [h]Warnschwelle Sensoralter [h]Warnschwelle kritisches Sensoralter [h]
+ Warnschwelle Sensor-Batteriestand [%]
+ Warnschwelle kritischer Sensor-Batteriestand [%]Warnschwelle Batteriealter [h]Warnschwelle kritisches Batteriealter [h]Warnschwelle Reservoirstand [IE]
@@ -484,6 +487,12 @@
InsulinalterProfilwechsel durchführenBatteriealter
+ Sensor
+ Kanüle
+ Insulin
+ Pumpenbatterie
+ Alter:
+ Level:Alarm-OptionenBenachrichtigungen über NS-AlarmeBenachrichtigungen über NS-Ankündigungen
@@ -1179,6 +1188,7 @@ Unerwartetes Verhalten.
Einstellung aus NS kopierenNS-Einstellungen kopieren (falls vorhanden)?Ursprüngliches Erscheinungsbild
+ Darstellung niedrige AuflösungSchaltflächen werden immer am unteren Rand des Bildschirms angezeigtGroßer BildschirmErscheinungsbild
diff --git a/app/src/main/res/values-el-rGR/exam.xml b/app/src/main/res/values-el-rGR/exam.xml
index b65ee7b54a..1faa33ed47 100644
--- a/app/src/main/res/values-el-rGR/exam.xml
+++ b/app/src/main/res/values-el-rGR/exam.xml
@@ -131,8 +131,6 @@
Υψηλή αναλογία IC οδηγεί σε λιγότερη χορήγηση ινσουλίνης για μια δεδομένη ποσότητα υδατανθράκων.Μικρή αναλογία IC οδηγεί σε λιγότερη χορήγηση ινσουλίνης για μια δεδομένη ποσότητα υδατανθράκων.Αν έχετε 0 COB Ενεργούς Υδατ., αλλάζοντας την αναλογία IC θα οδηγήσει σε μια διαφορετική ποσότητα ινσουλίνης για να διορθωθεί μια συγκεκριμένη τιμή BG.
- Το IC θα είναι διαφορετικό αν υπολογίζετε το ψωμί ως 10g ή 12g.
- Η έννοια του IC είναι: Πόσες φέτες ψωμί καλύπτονται από 1 μονάδα ινσουλίνης.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uΘέμα: Αλλαγή Προφίλ Όταν καθορίζεται 90% στην αλλαγή προφίλ…
diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml
index cd6f51b85b..af6acbc6a9 100644
--- a/app/src/main/res/values-el-rGR/strings.xml
+++ b/app/src/main/res/values-el-rGR/strings.xml
@@ -311,12 +311,10 @@
Δείξε αναλυτικά IOBΧώρισε την IOB σε bolus και βασικό στο ρολόιαποτυχία - ελέγξτε τηλέφωνο
- Ηλικία χρήστηΠαιδίΈφηβοςΕνήλικαςΑντίσταση ινσουλίνης ενηλίκων
- Παρακαλώ επιλέξτε ηλικία χρήστη για να ορισθούν όρια ασφαλείαςGlimp%1$s χρειάζεται λίστα βελτιστοποίησης μπαταρίας για σωστή απόδοσηΚύκλωμα σε αναστολή
diff --git a/app/src/main/res/values-es-rES/exam.xml b/app/src/main/res/values-es-rES/exam.xml
index d10c0449d3..ceff4518c5 100644
--- a/app/src/main/res/values-es-rES/exam.xml
+++ b/app/src/main/res/values-es-rES/exam.xml
@@ -134,8 +134,6 @@
Los ratios IC más altos conducen a menos insulina entregada por una cantidad determinada de carbohidratos.Los ratios IC más bajos conducen a menos insulina entregada por una cantidad determinada de carbohidratos.Si tiene 0 COB, cambiar la ratio IC conducirá a una cantidad distinta de insulina para corregir un valor de glucemia determinado.
- El IC será diferente si cuenta con una unidad de pan como 10g o 12g.
- IC significa: Cuántas unidades de pan están cubiertas por 1U de insulina.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uTema: Cambio de perfil Especificando el 90% en el cambio de perfil…
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index 8b89da173b..279cf0d00a 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -257,7 +257,6 @@
El valor %1$s está fuera de límitesPara conectar la infusora responder con el código %1$sError al conectar a la bomba
- Para desconectar la bomba durante %1dminutos responde con el código %2$sBomba desconectadaBomba reconectadaComando remoto no permitido
@@ -401,12 +400,10 @@
Separar IOB en bolo y base en el relojsin efecto - por favor verificar en móviln/a
- Edad pacienteMenor de edadAdolescenteAdultoAdulto resistente a la insulina
- Por favor elige la edad del paciente para ajustar los límites de seguridadNombre del pacienteProporcione el nombre de paciente o el apodo para diferenciar entre varias configuracionesUsuario
diff --git a/app/src/main/res/values-fr-rFR/exam.xml b/app/src/main/res/values-fr-rFR/exam.xml
index 3111898534..8b4891a733 100644
--- a/app/src/main/res/values-fr-rFR/exam.xml
+++ b/app/src/main/res/values-fr-rFR/exam.xml
@@ -134,8 +134,8 @@
Les ratios G/I plus élevés conduisent à moins d\'insuline injectée pour une quantité donnée de glucides.Les ratios G/I plus faibles conduisent à moins d\'insuline injectée pour une quantité donnée de glucides.Si vous avez 0 GA, changer le ratio G/I conduira à différentes quantités d\'insuline pour corriger une valeur de glycémie donnée.
- Le G/I sera différent si vous comptez l\'unité de pain à 10g ou à 12g.
- Le G/I (Ratio Glucides/Insuline) est : combien d\'unités de pain sont couverte par 1U d\'insuline.
+ Le G/I sera différent si vous comptez l\'unité (d\'échange) de pain à 10g ou à 12g.
+ Le G/I (Ratio Glucides/Insuline) est : combien d\'unités (d\'échange) de pain sont couverte par 1U d\'insuline.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uRubrique : Changement de profil Quand on renseigne 90% dans le changement de profil…
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index a7c32d6c78..fc30f34133 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -262,7 +262,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
La valeur %1$s est en dehors des limitesPour connecter la pompe, renvoyez le code %1$sEchec de la connexion pompe
- Pour déconnecter la pompe pendant %1d min, renvoyez le code %2$s
+ Pour déconnecter la pompe pendant %1$d min, renvoyez le code %2$sPompe déconnectéePompe reconnectéeLa commande à distance n\'est pas autorisée
@@ -406,12 +406,13 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Sur la montre, décomposer l’IA en IA bolus et IA basalSans succès - vérifiez votre téléphones/o
- Age du patient
+ Type de patient EnfantAdolescentAdulteAdulte résistant à l\'insuline
- Veuillez svp sélectionner l’âge du patient pour définir les limites de sécurité
+ Grossesse
+ Veuillez sélectionner le type de patient pour définir les limites de sécuritéNom du patientVeuillez indiquer un nom ou pseudo du patient pour différencier plusieurs configurationsPatient
@@ -455,6 +456,8 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Seuil critique âge insuline [h]Seuil d\'alerte âge capteur [h]Seuil critique âge capteur [h]
+ Seuil d’alerte niveau pile capteur [%]
+ Seuil critique niveau pile capteur [%]Seuil d\'alerte âge pile [h]Seuil critique âge pile [h]Seuil d\'alerte niveau réservoir [U]
@@ -485,6 +488,12 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Age InsulineChanger de profilAge Pile Pompe
+ Capteur
+ Canule
+ Insuline
+ Pile pompe
+ Âge:
+ Niveau:Options d\'alarmeCréer des notifications à partir des alarmes NSCréer des notifications à partir des notifications NS
@@ -1157,6 +1166,9 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Réinitialiser la clé de l\'AuthentificateurVoulez-vous réinitialiser la clé de l\'Authenticateur ? Cela rendra tous authentificateurs configurés invalides, et vous devrez les configurer à nouveau.Nouvelle clé de l\'Authenticateur générée ! Veuillez utiliser le QRCode mis à jour pour les authentificateurs.
+ Exportation de l\'OTP secret
+ Ê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.
+ OTP secret (au format Base32) exporté et copié dans le presse-papiers. Collez-le dans l\'authentificateur ou le graveur OTP matériel !1. Installation l\'Authentificateur2. Scan du code pour configurer les codes OTP AndroidAPS3. Test Mot-de-Passe-Unique (OTP)
@@ -1176,6 +1188,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Copier les paramètres depuis NSCopier les paramètres NS (s\'ils existent)?Thème d\'origine
+ Basse résolutionBoutons toujours en basGrand écranThème
diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml
index 52741e95f6..18d0c81039 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -261,7 +261,7 @@
Il valore %1$s è fuori limite massimoPer connettere il micro rispondi col codice %1$sConnessione al micro fallita
- Per disconnettere il micro per %1d minuti rispondi col codice %2$s
+ Per disconnettere il micro per %1$d minuti rispondi col codice %2$sMicro disconnessoMicro riconnessoIl comando da remoto non è permesso
@@ -405,12 +405,13 @@
Dividi IOB in bolo e basale sulla watchfacenon riuscito - controlla il telefonon/a
- Età del paziente
+ Tipo pazienteBambinoAdolescenteAdultoAdulto insulino-resistente
- Seleziona l\'età del paziente per impostare i limiti di sicurezza
+ Gravidanza
+ Seleziona il tipo di paziente per configurare i limiti di sicurezzaNome pazienteFornisci il nome del paziente o il nickname per distinguere questa configurazione tra altreUtente
@@ -454,6 +455,8 @@
Soglia età insulina critica [h]Soglia di avviso età sensore [h]Soglia età sensore critica [h]
+ Soglia di avviso livello batteria sensore [%]
+ Soglia livello batteria sensore critico [%]Soglia di avviso età batteria [h]Soglia età batteria critica [h]Soglia di avviso livello serbatoio [U]
@@ -484,6 +487,12 @@
Età insulinaCambia profiloEtà batteria micro
+ Sensore
+ Cannula
+ Insulina
+ Batteria micro
+ età:
+ livello:Opzioni allarmeCrea notifiche da allarmi NSCrea notifiche da avvisi NS
@@ -1156,6 +1165,9 @@
Resetta chiave autenticatoreSei sicuro di resettare la chiave autenticatore? Renderà non validi tutti gli autenticatori attualmente configurati e sarà necessario configurarli nuovamente.La nuova chiave autenticatore è stata generata! Utilizza il QRCode aggiornato per fornire gli autenticatori.
+ Esportazione OTP secret
+ Sei sicuro di voler copiare l\'OTP secret negli appunti?\n\nPotresti averne bisogno solo se la tua app autenticatore ha problemi con la scansione del QRCode, vuoi inserirlo manualmente o vuoi configurare un token OTP hardware usando un\'app dedicata.
+ OTP secret (in formato Base32) esportato e copiato negli appunti. Incollalo nell\'autenticatore o nel configuratore hardware di OTP!1. Installa l\'autenticatore2. Scansione il codice per configurare i codici OTP di AndroidAPS3. Testa OTP
@@ -1175,6 +1187,7 @@
Copia impostazioni da NSCopiare impostazioni NS (se esiste)?Tema originale
+ Tema a bassa risoluzioneI tasti vengono sempre visualizzati nella parte inferiore dello schermoVisualizzazione ampiaTema
diff --git a/app/src/main/res/values-iw-rIL/exam.xml b/app/src/main/res/values-iw-rIL/exam.xml
index 3ea04e700d..aa6f830f3d 100644
--- a/app/src/main/res/values-iw-rIL/exam.xml
+++ b/app/src/main/res/values-iw-rIL/exam.xml
@@ -1,2 +1,168 @@
-
+
+ מה נכון לגבי משך פעילות אינסולין (DIA)?
+ נושא: משך פעילות אינסולין
+ הערך המינימלי הוא 3 שעות.
+ הערך המינימלי הוא 5 שעות.
+ https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin
+ המשמעות שווה לערך ה-DIA שמשמש את המשאבה.
+ עליכם לקבוע את הערך האישי לכם (עליו להיות לכל הפחות 5 שעות).
+ נושא: ערך מטרה זמני בהיפוגליקמיה
+ מהי הסיבה העיקרית להגדרת ערך \"ערך מטרה זמני בהיפו\" ?
+ כדי למנוע מרמת הסוכר מלרדת נמוך אם יש כבר מינון בזאלי זמני אפס.
+ כדי למנוע מ-AAPS להזריק יותר מדי אינסולין לאחר עלייה ברמת הגלוקוז כתוצאה מפחמימות פשוטות שנאכלו כטיפול בהיפו.
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html
+ באיזה פרופיל אפשר להשתמש ולהגדיר במצב לא מקוון?
+ נושא: פרופיל לא מקוון
+ ניתן להשתמש ב-Nightscout אך לא ניתן להגדירו.
+ https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile
+ נושא: התנתקות מהמשאבה
+ מה לעשות כשמתנתקים מהמשאבה?
+ לחצו \"ניתוק משאבה\" כדי ש-AAPS יידע שלא יינתן איסולין.
+ לחצו \"השהיית לולאה\" כדי ש-AAPS יעצור את הלולאה בזמן שהמשאבה מנותקת.
+ לא לשנות דבר ב-AAPS, רק לנתק את המשאבה.
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings
+ נושא: הגדרות AndroidAPS
+ מהן שיטות העבודה המומלצות לגיבוי ההגדרות שלכם?
+ ייצוא ההגדרות בתפריט התחזוקה אל מכשירכם.
+ גיבוי הקובץ המיוצא למקום נוסף כמו דוא\"ל, דרופבוקס, גוגל דרייב…
+ ייצוא ההגדרות מיד לאחר התקנת AAPS.
+ ייצוא לאחר שינוי בהגדרות.
+ ייצוא ההגדרות לאחר סיום משימה.
+ ייצוא לאחר סיום ההגדרה הראשונית.
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/ExportImportSettings.html
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me
+ נושא: קריאות סנסור לא יציבות
+ מה לעשות אם נתוני הסנסור לא יציבים?
+ שום דבר. AAPS יטפל בזה בעצמו.
+ להשבית את הלולאה כדי למנוע מינון יתר.
+ להחליף את הסנסור.
+ כבה את הטלפון.
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data
+ לוודא שאפליקציית הסנסור מתקנת את נתוני הקריאה.
+ נושא: התעמלות
+ איך עוזרים למערכת להתמודד עם התעמלות?
+ שימוש בפונקציית ערך מטרה זמני.
+ בחירת פרופיל עם אחוז נמוך מ-100%.
+ בחירת פרופיל עם אחוז גבוה מ-100%.
+ הפסק את הלולאה.
+ הגדרת ערך מטרה של התעמלות לפני תחילת האימון.
+ הגדרת ערך מטרה של התעמלות אחרי תחילת האימון מובילה לתוצאות טובות פחות מאשר הגדרה לפני תחילת אימון.
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target
+ נושא: לולאה מושבתת\מושהית
+ האם אני מקבל\ת אינסולין כאשר הלולאה מושבתת/מושהית?
+ כן, אינסולין בזאלי ממשיך להינתן.
+ לא, אספקת האינסולין נפסקת.
+ נושא: מדידת בזאלי, יחס תיקון ויחס פחמימות
+ מתי עלי לאמת את ערכי הבזאלי ואת יחסי התיקון והפחמימות?
+ לפני שאני מתחיל\ה לולאה.
+ כאשר יש היפוגליקמיה לעיתים קרובות.
+ כאשר יש היפרגליקמיה לעיתים קרובות.
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings
+ נושא: דרישות מוקדמות
+ מה אני צריך\ה?
+ הגדרת פרופיל אישי (מינון בזאלי-Basal, יחס אינסולין\פחמימה- IC, פקטור תיקון-ISF, משך פעילות אינסולין-DIA).
+ מחשב ליצירת קובץ ה-APK.
+ טלפון נתמך.
+ מכונית.
+ Nightscout לצורך הגדרת ערכים.
+ חשבון Tidepool.
+ חשבון Google.
+ חשבון Github.
+ ניסיון בפיתוח אנדרואיד.
+ משאבת מנימד 670G.
+ https://androidaps.readthedocs.io/en/latest/EN/Module/module.html
+ שעון חכם.
+ סנסור נתמך.
+ נושא: עדכון AndroidAPS
+ מה נכון?
+ על Git להיות מותקן.
+ עדכנו כשיש גרסה חדשה ועשו זאת כשיש לכם זמן.
+ השתמשו באותם מפתחות חתימה.
+ לעולם לא לעדכן את האפליקציה אם היא פועלת כראוי.
+ בקשו עזרה מחבר להשגת קובץ ה-APK החדש.
+ https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch
+ נושא: פתרון בעיות
+ איפה לחפש עזרה?
+ הצטרפו לקבוצת AndroidAPS בפייסבוק.
+ קראו את הוראות AndroidAPS.
+ בקרו בחדר ה-Gitter של AndroidAPS.
+ בקשו תמיכה ל-AndroidAPS ב-Google
+ דברו עם האנדוקרינולוג שלכם.
+ https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting
+ https://www.facebook.com/groups/AndroidAPSUsers/
+ https://gitter.im/MilosKozak/AndroidAPS
+ נושא: תוספי אינסולין
+ באיזה סוג של אינסולין מתאים לתוסף \"Ultra-Rapid-Oref\"?
+ Fiasp®
+ NovoRapid®
+ Humalog®
+ Actrapid®
+ https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin
+ נושא: תוספי רגישות
+ לאיזה אלגוריתם רגישות יש טווח זמן הניתן להגדרה?
+ https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html
+ באיזה תוסף רגישות חייבים להתשמש כדי לאפשר את פונקציית \"ארוחות לא מוכרזות\" (UAM)?
+ נושא: שגיאות רישום פחמימות
+ מה לעשות אם טעית ברישום הפחמימות?
+ ב\"טיפולים\", מחקו את רשומת הפחימות השגויה. רשמו פחמימות מחדש.
+ הזרקת אינסולין מדומה באמצעות הפונקציה \"מילוי חדש\"
+ נושא: מזון עם שומן וחלבון
+ מה לעשות אם האוכל שלך מכיל כמות גדולה של שומן ו\או חלבונים?
+ לחשב מחדש שומן וחלבונים כפחמימות והשתמש בפונקציית \"פחמימות ממושכות\".
+ חשב מחדש את השומן והחלבונים כפחמימות והוסף לבולוס.
+ השתמש בבולוס ממושך לכיסוי שומן וחלבונים.
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html
+ נושא: ניטור מרוחק
+ איך אפשר לפקח על AAPS של הילד שלך מרחוק?
+ באמצעות אתר Nightscout.
+ Dexcom Follow במקרה ומשתמשים באפליקציית Dexcom המקורית (לערכי סוכר בלבד).
+ שימוש ב-Dexcom Follow אם משתמשים באפליקציית xDrip.
+ xDrip פועל במצב עוקב.
+ אפליקציית Loop על iPhone.
+ אפליקציית Spike על iPhone.
+ https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html
+ נושא: פקטור רגישות של אינסולין (יחס תיקון-ISF)
+ פקטור תיקון גבוה גורם להזרקה של פחות אינסולין בעת תיקון ערכי סוכר גבוהים
+ פקטור תיקון נמוך גורם להזרקה של פחות אינסולין בעת תיקון ערכי סוכר גבוהים.
+ שינוי פקטור תיקון אינו משפיע על כמות האינסולין שמוזרקת כאשר AAPS מתקן את ערכי הסוכר הגבוהים.
+ עליכם לציין את פקטור התיקון (ISF) בהעדפות.
+ שינוי ערך ISF בפרופיל שלכם מספיק כדי להחיל את השינוי.
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html
+ נושא: יחס אינסולין פחמימה (IC)
+ יחס אינסולין פחמימה גבוה גורם להזרקת פחות אינסולין עבור כל פחמימה.
+ יחס אינסולין פחמימה נמוך גורם להזרקת פחות אינסולין עבור כל פחמימה.
+ כאשר יש 0 פחמ\', שינוי יחס הפחמימות (IC) יוביל למינון שונה של אינסולין כדי לתקן ערך סוכר נתון.
+ יחס הפחמימות (IC) יהיה שונה אם ערך יחידת לחם ייספר כ-10 או 12 גר\'.
+ יחס הפחמימות (IC) הוא: כמה יחידות לחם מכוסות ע\"י יחידת אינסולין אחת.
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u
+ נושא: החלפת פרופילים
+ כאשר בוחרים 90% בעת החלפת הפרופיל…
+ הבזאלי יהיה גבוה ב-10%.
+ הבזאלי יהיה נמוך ב-10%.
+ ערך יחס אינסולין פחמימה (IC) יהיה גבוה ב-10%.
+ ערך יחס אינסולין פחמימה (IC) יהיה נמוך ב-10%.
+ ערך פקטור התיקון (ISF) יהיה גבוה ב-10%.
+ ערך פקטור התיקון (ISF) יהיה נמוך ב-10%.
+ תקבלו בערך 10% פחות אינסולין.
+ ערך המטרה יהיה גבוה ב-10%.
+ ערך המטרה יהיה נמוך ב-10%.
+ רק ערך המטרה התחתון יהיה נמוך ב-10%.
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#profile-switch
+ איך תעדכן את AAPS אם קמת שעה מוקדם?
+ אפעיל מצב פרופיל זמני עם היסט זמן של 1+
+ אפעיל מצב פרופיל זמני עם היסט זמן של 1-
+ https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift
+ אפעיל מצב פרופיל זמני עם היסט זמן של 60+
+ אפעיל מצב פרופיל זמני עם היסט זמן של 60-
+ https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy
+ נושא: עזרה עם בזאלים
+ היכן ניתן לקבל עזרה בנושא מינון בזאלי וכו\'.
+ צוות הסוכרת שלכם
+ Google
+ Facebook
+ תרופה אחרת
+ AAPS מוריד את הבזאלי כדי להעלות את רמת הגלוקוז בדם. תרופות מקבוצת מעכבי SGLT2 (גליפלוזינים) יכולים למנוע עלייה צפויה בסוכר וייתכן שייצרו חסר אינסולין מסוכן (DKA).
+\nשמותיהם המסחריים מוכרים הם: Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nאני מתחייב\ת שלא לקחת את התרופות הללו תוך שימוש ב-AAPS או שלא אאפשר את הלולאה לפני לקיחת התרופות הנ\"ל.
+
diff --git a/app/src/main/res/values-iw-rIL/insight_alert_codes.xml b/app/src/main/res/values-iw-rIL/insight_alert_codes.xml
index 3ea04e700d..a7c1fcf21a 100644
--- a/app/src/main/res/values-iw-rIL/insight_alert_codes.xml
+++ b/app/src/main/res/values-iw-rIL/insight_alert_codes.xml
@@ -1,2 +1,29 @@
-
+
+ תזכורת R1
+ תזכורת R2
+ תזכורת R3
+ תזכורת R4
+ תזכורת R7
+ אזהרה W31
+ אזהרה W32
+ אזהרה W33
+ אזהרה W34
+ אזהרה W36
+ אזהרה W38
+ אזהרה W39
+ תחזוקה M20
+ תחזוקה M21
+ תחזוקה M22
+ תחזוקה M23
+ תחזוקה M24
+ תחזוקה M25
+ תחזוקה M26
+ תחזוקה M27
+ תחזוקה M28
+ תחזוקה M29
+ תחזוקה M30
+ שגיאה E6
+ שגיאה E10
+ שגיאה E13
+
diff --git a/app/src/main/res/values-iw-rIL/insight_alert_descriptions.xml b/app/src/main/res/values-iw-rIL/insight_alert_descriptions.xml
index 3ea04e700d..0c30992caf 100644
--- a/app/src/main/res/values-iw-rIL/insight_alert_descriptions.xml
+++ b/app/src/main/res/values-iw-rIL/insight_alert_descriptions.xml
@@ -1,2 +1,24 @@
-
+
+ %1$d%%\nמשך: %2$s h]]>
+ %1$s U]]>
+ החלף סוללה.
+ קבע זמן/תאריך.
+ צור קשר עם תמיכת Accu-Chek.
+ %1$d%%\nמשך: %2$s h]]>
+ %1$s U כמות שניתנה: %2$s U]]>
+ הכנס מיכל.
+ החלף מיכל.
+ החלף סוללה.
+ בדוק סטטוס משאבה.
+ החלף פרפרית.
+ צור קשר עם תמיכת Accu-Chek.
+ החלף מיכל.
+ הפעילו מחדש את הורדת הנתונים.
+ בדוק סטטוס משאבה.
+ קבע סוג סוללה.
+ קבע סוג מיכל.
+ החלף סוללה ומיכל.
+ החלף מיכל.
+ שנה שפה.
+
diff --git a/app/src/main/res/values-iw-rIL/insight_alert_titles.xml b/app/src/main/res/values-iw-rIL/insight_alert_titles.xml
index 3ea04e700d..cfbe5d5f5b 100644
--- a/app/src/main/res/values-iw-rIL/insight_alert_titles.xml
+++ b/app/src/main/res/values-iw-rIL/insight_alert_titles.xml
@@ -1,2 +1,29 @@
-
+
+ הזרק בולוס
+ בולוס הוחמץ
+ תזכורת
+ החלף פרפרית
+ בזאלי זמני הסתיים
+ מכל מתרוקן
+ סוללה חלשה
+ תאריך/זמן לא תקין
+ תמה תקופת האחריות
+ בזאלי זמני בוטל
+ בולוס בוטל
+ אזהרת זמן השאלה
+ מכל לא הוכנס
+ מיכל ריק
+ סוללה ריקה
+ כיבוי אוטומטי - משאבה נעצרה
+ חסימה
+ נגמרה תקופת ההשאלה - סיום פעולה
+ החלפת מיכל לא הושלמה
+ הורדת הנתונים נכשלה
+ מצב השהייה הסתיים
+ סוג הסוללה לא נקבע
+ סוג המיכל לא נקבע
+ תקלה מכנית
+ תקלה בהחזרת הבוכנה לאחור
+ תקלת שפה
+
diff --git a/app/src/main/res/values-iw-rIL/insight_exceptions.xml b/app/src/main/res/values-iw-rIL/insight_exceptions.xml
index 3ea04e700d..bd248cdc35 100644
--- a/app/src/main/res/values-iw-rIL/insight_exceptions.xml
+++ b/app/src/main/res/values-iw-rIL/insight_exceptions.xml
@@ -1,2 +1,14 @@
-
+
+ החיבור נכשל
+ החיבור נותק
+ התחברות נדחתה
+ יצירת סוקט נכשלה
+ פג הזמן
+ מספר מרבי של סוגי בולוס מופעל
+ לא קיים בזאלי זמני לביטול
+ לא קיים בזאלי זמני לשינוי
+ לא קיים בולוס לביטול
+ משאבה כבר במצב זה
+ מצב הפעלה לא מורשה
+
diff --git a/app/src/main/res/values-iw-rIL/objectives.xml b/app/src/main/res/values-iw-rIL/objectives.xml
index 3ea04e700d..f357b2fe0f 100644
--- a/app/src/main/res/values-iw-rIL/objectives.xml
+++ b/app/src/main/res/values-iw-rIL/objectives.xml
@@ -1,2 +1,75 @@
-
+
+ חזרה
+ התחל
+ אמת
+ %1$d. משימה
+ מטרה %1$d לא החלה
+ משימה %1$d לא בוצעה במלואה
+ מגדיר ויזואליזציה, ניטור, נתוח של מינון בזאלי ויחסים
+ ודא כי רמת סוכר זמינה ב- Nightscout, ושנתוני האינסולין מהמשאבה נשלחים
+ התחלה עם לולאה פתוחה
+ השתמשו במצב לולאה פתוחה במשך מס\' ימים, וקבעו באופן ידני מס\' רב של פרופילי בזאלי זמניים. הגדירו והשתמשו במטרות זמניות ובמטרות ברירת מחדל (לדוגמא פעילות גופנית, או מתן פחמימות בהיפו)
+ הבנה של הלולאה הפתוחה שלך, לרבות הבזאלים הזמניים וההמלצות
+ בהתבסס על ניסיון זה, קבעו את הערך הבזאלי המקסימלי והגדירו אותו במשאבה
+ מתחילים לסגור את הלולאה עם השהיה עקב רמת גלוקוז נמוכה
+ הרץ בלולאה סגורה עם ערך IOB מקסימלי = 0 למשך מספר ימים, עם מעט ארועי השהיה עקב גלוקוז נמוך (LGS)
+ כוונון הלולאה הסגורה, תוך העלאה של ערך ה- IOB מעל 0 ובסופו של דבר הורדת ערכי המטרה של רמת הסוכר
+ לפני הורדת ערך רמת הסוכר, הפעל במשך מס\' ימים, עם לפחות לילה אחד ללא התרעת רמת סוכר נמוכה
+ במידת הצורך, בצעו התאמת בזאלי ויחסים, ולאחר מכן הפעילו את Autosens
+ שבוע של הפעלה מוצלחת של הלולאה במשך היום, עם הוספת ערכי פחמימות רגילים
+ הפעלת פונקציות נוספות לשימוש במשך היום, לדוגמה AMA (סיוע ארוחות מתקדם)
+ הפעלת פונקציות נוספות לשימוש במשך היום, כגון סופר מיקרו בולוסים (SMB)
+ הפעלת אוטומציה
+ חובה לקרוא את הויקי ולהעלות את ערך ה-maxIOB כדי להפעיל את ה- SMB כראוי. התחלה טובה תהיה maxIOB=בולוס ממוצע + 3 פעמים ערך הבזאלי היומי המקסימלי
+ קראו את המסמכים על כיצד האוטומציה פועלת. הגדירו את הכללים הפשוטים הראשונים שלכם. במקום פעולה, תנו ל-AAPS להציג הודעה בלבד. כאשר אתם בטוחים שהאוטומציה מופעלת כראוי, החליפו את ההודעה בפעולה אמיתית. (https://androidaps.readthedocs.io/en/latest/EN/Usage/Automation.html)
+ ערך הסוכר זמין ב-Nightscout
+ סטטוס המשאבה זמין ב-Nightscout
+ קביעות ידניות
+ הושלמו: %1$s
+ למדו כיצד לשלוט ב-AndoridAPS
+ בצעו פעולות שונות ב-AndroidAPS
+ הגדירו פרופיל 90% למשך 10 דקות (לחיצה ארוכה על שם הפרופיל במסך הסקירה הכללית)
+ דמו מקלחת. הגדירו ניתוק משאבה במשך שעה אחת (לחיצה ארוכה על לולאה פתוחה)
+ ... והתחברו מחדש באותה הדרך
+ צרו ערך מטרה זמני מותאם אישית במשך 10 דקות (לחיצה ארוכה על ערך המטרה הנוכחי)
+ ב-בונה התצורה יש להפעיל את תוסף הפעולות, להפוך אותו לגלוי ולהציג את תוכנו בתפריט העליון
+ הצג תוכן של תוסף לולאה
+ השתמשו בפונקציית קנה המידה ע\"י לחיצה ארוכה על תרשים הסוכר
+ הכנס
+ אם השתמשתם בלולאה סגורה במשך שלושה חודשים לפחות עם מערכות אחרות, תוכלו לבקש קוד לדילוג על המטרות. ראו: https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives לפרטים נוספים.
+ קוד אושר
+ קוד בלתי חוקי
+ הוכח את הידע שלך
+ למדו וענו נכונה על שאלות
+ השבת תשובה מושבתת עד: %1$s
+ תשובה שגויה!
+ הבא שלא נעשה
+ בקשת קוד: %1$s
+ (בדקו את כל התשובות הנכונות)
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-to-do-when-taking-a-shower-or-bath
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#the-homescreen
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#config-builder
+ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#the-homescreen
+ אין חיבור לאינטרנט
+ אחזור השעה נכשל
+ דרישות המשימה לא נענו
+
+ %1$d יום
+ %1$d ימים
+ %1$d ימים
+ %1$d ימים
+
+
+ %1$d שעה
+ %1$d שעות
+ %1$d שעות
+ %1$d שעות
+
+
+ %1$d דקה
+ %1$d דקות
+ %1$d דקות
+ %1$d דקות
+
+
diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml
index 76002e60dc..9517173acd 100644
--- a/app/src/main/res/values-iw-rIL/strings.xml
+++ b/app/src/main/res/values-iw-rIL/strings.xml
@@ -4,12 +4,1233 @@
+ בטיחות טיפולים
+ בולוס מקסימלי מותר [U]
+ מקסימום פחמימות מותר [g]
+ העדפותרענן טיפול מ-Nightscout
- בבקשה אתחל את הסמרטפון שלך או תרענן את אפלקצית AndroidAPS בהגדרות המערכת
-אחרת AndroidAPS לא יוכל לבצע רישום (חשוב לעקוב אחר ולוודא כי האלגוריתמים פועלים כראוי)!
+ איפוס מסדי נתונים
+ אתם בטוחים שאתם רוצים לאפס את מסדי הנתונים?
+ יציאה
+ השתמש תמיד בערכים בזאלים מוחלטים
+ בבקשה אתחל את הסמרטפון שלך או תרענן את אפלקצית AndroidAPS בהגדרות המערכת \nאחרת AndroidAPS לא יוכל לבצע רישום (חשוב לעקוב אחר ולוודא כי האלגוריתמים פועלים כראוי)!
+ נראה שמכשיר זה אינו תומך ברשימת היתרים למיטוב הסוללה - ייתכן שתיתקל בבעיות ביצועים.
+ לחצנים לגישה מהירה לפונקציות שימושיות
+ משמש לקביעת תצורה של תוספים פעילים
+ תוכנית הלימודמציג את ההגדרות הקבועות מראש עבור מזון המוגדר ב-Nightscout
- להפעיל או לכבות את הלולאה.
- מסנכרן את הנתונים שלך עם Nightscout
+ הגדרת אינסולין ל-Humalog ו- NovoRapid / Novolog
+ הגדרת אינסולין ל-Fiasp
+ הגדרת אינסולין ל-Lyumjev
+ מאפשר לכם להגדיר את שיא פעילות האינסולין, לשימוש על ידי משתמשים מתקדמים בלבד
+ הפעלת או השבתת הלולאה.
+ מסנכרן את נתוניכם עם Nightscout
+ מצב האלגוריתם ב-2016
+ מצב האלגוריתם ב-2017
+ האלגוריתם העדכני ביותר, עבור משתמשים מתקדמים בלבד
+ מציג את המצב הנוכחי של הלולאה, ולחצני פעולות שימושיות
+ מציג הודעה קבועה עם סקירה קצרה של מה שהלולאה שלך עושה
+ הגדירו פרופיל שזמין באופן לא מקוון.יבא פרופיל מ- Nightscout
+ הגדרת פרופיל עם חטיבת זמן אחת בלבד.
+ חיבור משאבת Accu-Chek Combo מחייב התקנת ruffy
+ טיפול בזריקות יום-יומיות
+ שילוב משאבה עבור משאבות אשר עדיין אין להם מנהל התקן כלשהו (לולאה פתוחה)
+ חישוב הרגישות נעשה בהתאם ל־Oref0, אך ניתן לשנות את מסגרת הזמן. ספיגת הפחמימות המינימלית מחושבת לפי משך ספיגת הפחמימות המרבי מההעדפות.
+ הרגישות מחושבת מנתונים מ-8 או 24 השעות האחרונות (הרגישות הנמוכה מביניהם). הפחמימות (אם לא נספגו) מפסיקות להיחשב לאחר משך זמן שהוגדר בהגדרות. פלאגין זה מחשב גם ארוחות לא מוכרזות (UAM).
+ הרגישות מחושבת כממוצע משוקלל מערכי הסטיות. ערכי סטיות חדשים יותר יזכו לשקלול גבוה יותר. ספיגת הפחמימות המינימלית מחושבת על בסיס נתון משך ספיגת פחמימות מקסימלי מההגדרות. אלגוריתם זה הוא המהיר ביותר במעקב אחר שינויי רגישות.
+ קבלת ערכי רמת סוכר מאפליקצית Eversense עם פאץ\'.
+ קבלת ערכי סוכר בדם מ-Glimp.
+ קבלת ערכי סוכר בדם מ-600SeriesAndroidUploader.
+ הורדת ערכי סוכר בדם מ-Nightscout
+ קבלת ערכי סוכר בדם מ-xDrip.
+ שמירת כל הטיפולים שנעשו
+ ניטור ושליטה ב-AndroidAPS באמצעות שעון WearOS.
+ הצג מידע אודות הלולאה במסך Xdrip בשעון החכם.
+ שליטה מרחוק על AndroidAPS באמצעות SMS.
+ אינסולין:
+ פחמימות:
+ IOB:
+ IOB:
+ IOB כולל:
+ פעילות IOB כוללת:
+ משך:
+ יחס:
+ אינסולין:
+ IOB:
+ IBO כולל:
+ ערכי סוכר בדם
+ TT
+ פחמימות
+ תיקון
+ בולוס פעיל
+ בצע כעת
+ משאבה וירטואלית
+ אישור
+ ההפעלה האחרונה
+ טעינת פרמטרים
+ מצב סוכר
+ בזאלי זמני נוכחי
+ נתוני אינסולין פעיל
+ פרופיל
+ נתוני ארוחה
+ תוצאה
+ תוצאה: %1$s %2$s
+ אין ערכי סוכר זמינים
+ בקשה
+ גלוקוז
+ דלתא
+ דלתא:
+ בונה התצורה
+ סקירה כללית
+ פרופיל Nightscout
+ פרופיל רגיל
+ טיפולים
+ משאבה וירטואלית
+ פורטל טיפולים
+ משאבה
+ עם משאבה אתם מעוניינים להשתמש ב-AndroidAPS?
+ טיפולים
+ איזה תוסף ישמש לתפעול הטיפולים?
+ פרופיל
+ עם איזה פרופיל להשתמש ב- AndroidAPS?
+ APS
+ איזה אלגוריתם של APS יבצע התאמות טיפול?
+ כללי
+ מס\' תוספים כלליים שעשויים להיות יעילים.
+ אילו הגבלות פעילות?
+ מגבלות
+ לולאה
+ לולאה
+ השתמשו באפשרות זו כדי להפעיל את שילוב לולאת AndroidAPS.
+ APS
+ הגבלות לאחר עיבוד
+ קצב בזאלי זמני הוגדר במשאבה
+ נקבעו לאחרונה
+ לא נבחרה או סופקה תוצאה ע\"י APS
+ בטיחות
+ התוסף אינו זמין
+ הפרת הגבלות
+ שגיאה במתן בולוס
+ ערכים בזאליים [%]
+ אשר בזאלי זמני חדש:
+ טיפול
+ מחשבון
+ ההגבלה הוחלה!
+ בולוס:
+ אינסולין בזאלי
+ אינסולין בזאלי:
+ שנה קלט!
+ מקור ערכי הסוכר
+ מהו מקור הנתונים של AndroidAPS?
+ xDrip
+ מצב APS
+ לולאה סגורה
+ לולאה פתוחה
+ השהיה בגלל ערך סוכר נמוך
+ לולאה כבויה
+ כיבוי לולאה
+ הפעלת לולאה
+ הצעה חדשה זמינה
+ המלצת פחמימות
+ גרסה לא נתמכת של Nightscout
+ לולאה הופסקה בעקבות מגבלות בתוקף
+ בזאלי פעיל
+ בולוס מעבר למגבלה
+ פחמימות מעבר למגבלה
+ אחר
+ מד
+ חיישן
+ פחמימות
+ אינסולין
+ זמן פחמימות
+ פיצול
+ משך
+ אחוז
+ מוחלט
+ הערות
+ שעת אירוע
+ פרופיל
+ הוזן על ידי
+ סוג גלוקוז
+ פרופיל Nightscout טרם נטען
+ בזאלי זמני
+ בולוס ממושך
+ גירסת Nightscout:
+ חסרים %1$d גר\'
+ ההעדפות יוצאו
+ ייצא הגדרות ל
+ יבא הגדרות מ-
+ הגדרות מיובאות
+ הקובץ לא נמצא
+ ייצא הגדרות
+ יבא הגדרות
+ מינון בזאלי זמני מקסימלי (יח\'\שעה)
+ ערך זה נקרא בזאלי מרבי ב-OpenAPS
+ בזאלי פעיל מרבי ש-OpenAPS יכול לספק [U]
+ ערך זה נקרא אינסולין פעיל מקסימלי (Max IOB) ב-OpenAPS. זהו מקסימום האינסולין הפעיל ב-[U] ש-APS מאפשר.
+ אתם תתבקשו למלא סיסמה ראשית שתשמש להצפנת ההעדפות המיוצאות.
+ אתם תתבקשו למלא סיסמה ראשית שתשמש לפיענוח ההעדפות המיובאות.
+ ייצוא בוטל! ההגדרות לא יוצאו!
+ ייבוא בוטל! ההעדפות לא הובאו!
+ לא ניתן לייבא את ההגדרות!
+ נא לחזור למסך הראשי ולנסות שוב.
+ סיסמה ראשית ישנה
+ קובץ זה יוצא והוצפן באמצעות סיסמה ראשית שונה. אנא ספקו סיסמה ראשית זו כדי לפענח את הקובץ.
+ בעקבות ייבוא ההגדרות הסיסמה הראשית הקיימת תוחלף עם הסיסמה הראשית המיובאת!
+ בחרו קובץ לייבוא
+ בדקו את ההעדפות לפני ביצוע הייבוא:
+ ההעדפות לא ניתנות לייבוא!
+ אין לייבא העדפות אלה!
+ הסבר בעיות ייבוא…
+ פרטי בעיות ייבוא
+ ייבוא
+ ייבא בכל מקרה (מסוכן!)
+ ההעדפות נוצרו בגרסה אחרת של AAPS (%1$s) בעוד לך יש גירסה %2$s. \n\n חלק מההגדרות עלולות להיות חסרות או בלתי תקינות - לאחר הייבוא נא לבדוק ולעדכן את ההעדפות.
+ ההעדפות נוצרו במכשיר אחר. זה בסדר אם ייבאתם אותן ממכשיר ישן או שונה, אך וודאו שההעדפות שהובאו נכונות!
+ אתם משתמשים פורמט מיושן מגרסאות ישנות של AAPS, שאינו מאובטח! השתמשו בו רק כמוצא אחרון, אם אין לכם קובץ הגדרות בפורמט העדכני, של JSON.
+ ההעדפות המיובאות הן כבר בנות %1$s ימים! אולי יש לכם עדפות עדכניות יותר או שבחרתם קובץ לא נכון? זכרו לייצא את ההעדפות באופן סדיר!
+ פורמט תאריך ושעה לא חוקי!
+ ההעדפות נוצרו בגרסה משנית ישנה של AAPS. זה בסדר אם ייבאתם אותן לאחר שדרוג גרסה, אך וודאו שההעדפות שהובאו נכונות!
+ ההעדפות נוצרו בגרסה ראשית אחרת של AAPS. גרסאות ראשיות הן שונות מאוד והגדרותיהן עלולות להיות לא תואמות אחת לשניה. נא לוודא שההעדפות שהובאו נכונות!
+ פורמט הקובץ
+ נוצר ב-
+ גרסת AAPS
+ גרסת בנייה
+ ייצא את שם מכשיר המטופל
+ מייצא את דגם המכשיר
+ · הצפנת קבצים
+ פורמט ייצוא ישן
+ פורמט הצפנה חדש
+ פורמט דיבאג חדש (בלתי מוצפן)
+ פורמט ייצוא לא ידוע
+ קובץ ההגדרות פגום
+ קובץ ההגדרות מאובטח
+ משתמש בפורמט הגדרות בלתי מאובטח ובלתי מוצפן
+ שגיאה בפורמט JSON, חסר שדה חובה (פורמט, תוכן, מטא דאטה, בטיחות)
+ שגיאת פענוח, הסיסמה שהתקבלה לא מפענחת את הקובץ
+ בקרת קבצים (hash) חסרה, לא ניתן לאמת את אותנטיות ההגדרות!
+ הקובץ שונה לאחר הייצוא!
+ שגיאת פענוח, נתוח ההעדפות נכשל!
+ שגיאת פענוח, הסיסמה שסופקה אינה חוקית או שקובץ ההגדרות שונה! יתכן שהקובץ המיובא יוצא עם סיסמה ראשית אחרת.
+ תצורת הצפנה חסרה, פורמט ההגדרות אינו חוקי!
+ לא צוין או לא נתמך אלגוריתם ההצפנה!
+ יוצא היום
+ יוצא לפני %1$s
+ יוצא ב %1$s
+ יוצא לפני פחות משעה
+ בספרייה: %1$s
+ הסכם רישיון למשתמש
+ לא מיועד לשימוש למטרת קבלת החלטות רפואיות. בעלי הזכויות מספקים את התוכנית כפי שהיא - \"AS IS\", ללא אחריות מכל סוג שהוא. כל סיכון הנובע מאיכות ו\או ביצועי התוכנה הוא באחריותך בלבד. במידה ותימצא תקלה בתוכנית, אתם תשאו בכל עלויות שיגרמו לך בשל התקלה.
+ אני מבין ומסכים
+ שמור
+ טעינה מחדש של הפרופיל
+ תקשורת SMS
+ מספרי טלפון מותרים
+ + XXXXXXXXXX; + YYYYYYYYYY
+ לאישור מתן בולוס %1$.2f יחידות יש להשיב עם הקוד %2$s
+ למתן %1$.2f יחידות בולוס ארוחה יש להשיב עם הקוד %2$s
+ להגדרת המטרה הזמנית %1$s יש להשיב עם הקוד %2$s
+ לביטול המטרה הזמנית יש להשיב עם הקוד %1$s
+ לביטול שירות השליטה מרחוק באמצעות SMS השיבו עם הקוד %1$s. \n\nהשירות ניתן להפעלה מחדש ממכשיר ה-AAPS הראשי בלבד.
+ שירות השליטה מרחוק באמצעות SMS מופסק. על מנת להפעילו, השתמשו בAAPS במכשיר הראשי.
+ כדי לשלוח ערך כיול %1$.2f יש להשיב עם הקוד %2$s
+ הבולוס נכשל
+ מספר הדקות המזערי שחייב לחלוף בין בולוס מרוחק אחד למשנהו
+ מספר הדקות המינימלי שצריכות לחלוף, בין בולוס אחד למשנהו
+ למען בטחונכם, על מנת לערוך את העדפה זו, עליכם להוסיף לפחות שני מספרי טלפון.
+ בולוס %1$.2fU ניתן בהצלחה
+ עומד להזריק %1$.2f יח\'
+ בולוס %1$.2fU ניתן בהצלחה
+ בולוס עבור ארוחה %1$.2fU ניתן בהצלחה
+ יעד %1$s עבור %2$d דקות
+ יעד %1$s עבור %2$d דקות הוגדר בהצלחה
+ יעד זמני בוטל בהצלחה
+ אפשר שליטה מרחוק באמצעות SMS
+ הגדרות פרופיל משאבת DanaR
+ משך פעילות אינסולין [h]
+ משך פעילות אינסולין
+ מעלה
+ בולוס עצר
+ עצירת בולוס
+ הלולאה הושבתה
+ הלולאה הופעלה
+ לולאה מושבתת
+ לולאה פעילה
+ %1$.2f מוגבלת ל- %2$.2f
+ ערך %1$s הינו מחוץ לתחום
+ לחיבור המשאבה יש להשיב עם הקוד %1$s
+ החיבור אל המשאבה נכשל
+ לניתוק המשאבה למשך %1$d דקות השיבו עם הקוד %2$s
+ המשאבה מנותקת
+ המשאבה חוברה מחדש
+ פקודה מרוחקת אינה מותרת
+ בולוס מרחוק אינו זמין. נסו שוב מאוחר יותר.
+ להפעלת בזאלי %1$.2f יח\' לשעה למשך %2$d דקות יש להשיב עם הקוד %3$s
+ להחלפת פרופיל ל- %1$s %2$d % הקש קוד %3$s
+ למתן בולוס ממושך %1$.2f יח\' למשך %2$d דקות יש להשיב עם הקוד %3$s
+ למתן %1$d גר\' ב-%2$s יש להשיב עם הקוד %3$s
+ להפעלת בזאלי %1$d%% למשך %2$d דקות הקש קוד %3$s
+ להשהיית הלולאה למשך %1$d דקות יש להשיב עם הקוד %2$s
+ להפעלת הלולאה מחדש יש להשיב עם הקוד %1$s
+ כדי לאפשר הלולאה יש להשיב עם הקוד %1$s
+ להשבתת הלולאה יש להשיב עם הקוד %1$s
+ בזאלי זמני %1$.2f יחידות/שעה למשך %2$d דקות הופעל בהצלחה
+ בולוס ממושך %1$.2f יחידות למשך %2$d דקות הופעל בהצלחה
+ %1$d גר\' פחמימות נקלטו בהצלחה
+ קליטת %1$d גר\' פחמימות נכשלה
+ בזאלי זמני %1$d%% למשך %2$d דקות הופעל בהצלחה
+ הפעלת בזאלי זמני נכשלה
+ הפעלת בולוס ממושך נכשלה
+ להפסקת בזאלי זמני הקש קוד %1$s
+ להפסקת בולוס ממושך יש להשיב עם הקוד %1$s
+ בזאלי זמני בוטל
+ בולוס ממושך בוטל
+ ביטול בזאלי זמני ניכשל
+ ביטול בולוס ממושך נכשל
+ פקודה לא מוכרת או תגובה שגויה
+ אשף מהיר
+ הגדרות אשף מהיר
+ טקסט הלחצן:
+ פחמימות:
+ תקף:
+ הוספה
+ עריכה
+ הסרה
+ ארוחה
+ תיקון
+ פעולות
+ העלאה ל-nightscout בלבד (סנכרון מבוטל)
+ העלאה ל- NS בלבד. ללא השפעה על SGV אלא אם נבחר מקור מקומי כגון Xdrip. ללא השפעה על הפרופילים כל עוד פרופיל NS בשימוש.
+ משאבה לא הופעלה!
+ הפעלה/מילוי
+ נא ודאו שהכמות מתאימה למפרט ערכת העירוי שלכם!
+ אחר
+ מילוי\מילוי מראש כמויות סטנדרטיות של אינסולין
+ כפתור 1
+ כפתור 2
+ כפתור 3
+ יחידות:
+ יחידות
+ משך פעילות אינסולין
+ טווח המטרה:
+ טווח להדמיה
+ סימוני גבוה ונמוך בתרשים סקירה כללית ובשעון חכם
+ סימון נמוך
+ סימון גבוה
+ Wear
+ שלח מחדש את כל הנתונים
+ פתיחת הגדרות Wear
+ ערכים בזאליים:
+ ערך הבסיס מתחת למינימום. פרופיל אינו מוגדר!
+ ערכי סוכר בדם:
+ ערכי סוכר אחרונים:
+ זריקות יומיות מרובות (MDI)
+ Minimed 640G
+ התראה מתמשכת
+ נתונים ישנים
+ לפני %1$d דקות
+ פרופיל מקומי
+ OpenAPS AMA
+ דלתא ממוצעת קצרה
+ דלתא ממוצעת ארוכה
+ מערך של %1$d אלמנטים. \n ערך נוכחי:
+ נתוני חישוב רגישות אוטו\'
+ תיקון באגים בסקריפט
+ שימוש בפונקציית חישוב רגישות אוטומטית (Autosens)
+ רענן אירועים מ-Nightscout
+ מחיקת טיפולים עתידיים
+ אכילה בקרוב
+ היפו
+ פעילות
+ מחיקת רשומה
+ ACT
+ CONF
+ לולאה
+ SP
+ OAPS
+ LP
+ בית
+ VPUMP
+ NSPROFILE
+ TREAT
+ OBJ
+ WEAR
+ SMS
+ קצר את כותרות הלשוניות
+ התבסס על הפרש ממוצע קצר במקום הפרש פשוט\רגיל
+ לשימוש כאשר נתונים ממקור לא מפוקח כמו Xdrip אינם יציבים.
+ פרופיל
+ ערך ברירת מחדל: 3 מנגנון הגנה עיקרי של OpenAPS. מגביל את המינון הבזאלי לעד פי 3 מהמינון הבזאלי הגבוה ביותר שהוגדר. ברוב המקרים אין צורך לשנות ערך זה, אך יש לזכור שזו המשמעות של “3x max daily; 4x current” בדיון על מנגנוני הגנה.
+ ערך ברירת מחדל: 4 זהו החצי השני של מנגנון הגנה עיקרי של OpenAPS, והחצי השני של \"3x max daily; 4x current\" במנגנוני ההגנה. המשמעות היא שהמינון הבזאלי, ללא קשר למקסימום שנקבע במשאבה, אינו יכול להיות גבוה יותר ממספר זה כפול הקצב הבזאלי הנוכחי. מיועד למנוע כניסה לתחומים מסוכנים ע\"י קביעת קצב בזאלי גבוה לפני הבנה של פעולת האלגוריתם. שוב: ברירת המחדל היא x4, רוב המשתמשים לעולם אינם צריכים לשנות ערך זה ואם הם מרגישים שמנגנון הגנה זה מפריע להם, הפתרון הוא בשינוי של הגדרות אחרות.
+ ערך ברירת מחדל: 1.2\nזוהי מגבלת המכפיל של autosens (ובקרוב autotune) שמגדירה 20%% כיחס מקסימלי של autosens, אשר קובע בתורו את גובה הבזאלי המקסימלי, גובהו המינימלי של יחס התיקון, ואת המינימום של ערכי המטרה האפשריים.
+ ערך ברירת מחדל: 0.7\nבצד השני של מגבלות הבטיחות של autosens, ערך זה מגביל את יכולתו של autosens להוריד את הערכים הבזאליים ועד כמה יכול להעלות את יחס התיקון ואת ערכי מטרת הסוכר בדם.
+ Autosens מווסת גם את ערכי המטרה
+ ערך ברירת מחדל: התאמה מדויקת\n נועד לאפשר ל-Autosens לשנות את המטרה של ערכי הסוכר, בנוסף ליחס התיקון והבזאלים.
+ ערך ברירת מחדל: 2\n מעכב בולוס מופעל אחרי שאתם מזריקים בולוס ארוחה, כך שהלולאה לא תפצה ע\"י בזאלי זמני נמוך אחרי הארוחה. הדוגמה כאן וברירת המחדל היא 2; כך שהגדרה של משך פעילות אינסולין של 3 שעות משמעה שהעיכוב יחלוף בהדרגה בתוך 1.5 שעות (3 ש\' לחלק ל-2).
+ ערך ברירת מחדל: 3.0 (AMA) או 8.0 (SMB). זוהי הגדרת ברירת מחדל לספיגת פחמימות ב-5 דקות. ברירת המחדל היא 3mg/dL/5min. פעולה זו משפיעה על קצב הדעיכה של פחמ\' פעילות, ועל הנחת קצב ספיגת הפחמ\' בחישוב רמות סוכר עתידיות כשהן בירידה מהירה מהצפוי או עליה איטית מהצפוי.
+ שימו לב!\nבדרך כלל אינכם צריכים לשנות את הערכים שלהלן. נא ללחוץ כאן, לקרוא את הטקסט ולוודא שאתם מבינים אותו לפני שתשנו ערכים אלה.
+ מספר טלפון ל SMS לא תקין
+ כיול
+ לשלוח כיול %1$.1f לxdrip?
+ xDrip+ אינו מותקן
+ כיול נשלח xDrip
+ הכיול נשלח. יש לאשר את הקבלה ב-xDrip.
+ xDrip אינו מקבל כיולים
+ משאבה מושהית
+ מבצע
+ הגדרות משאבה וירטואלית
+ טעינת מצב ל-Nightscout
+ NSClient
+ NSCI
+ כתובת URL:
+ גלילה אוטומטית
+ הפעל מחדש
+ NSClient
+ כתובת Nightscout
+ הזינו את כתובת ה-Nightscout שלכם
+ קוד API של Nightscout
+ קוד API של Nightscout
+ הזינו את קוד ה-API של Nightscout (מינימום 12 תווים)
+ ספק עכשיו
+ נקה תור
+ הצג תור
+ תור:
+ סטטוס:
+ מושהה
+ נקה יומן
+ ל-NSClient אין הרשאת כתיבה. סיסמת API שגויה?
+ הגדרות Wear
+ הצגת IOB מפורט
+ לחלק את ה IOB לבולוס ובזאלי במסך השעון
+ נכשל - נא לבדוק את הטלפון
+ לא זמין
+ סוג המטופל\ת
+ ילד/ה
+ מתבגר\ת
+ מבוגר\ת
+ מבוגר\ת עם תנגודת אינסולין גבוהה
+ הריון
+ נא לבחור את גיל המטופל\ת להתאמת מגבלות בטיחות
+ שם מטופל
+ נא לציין שם המטופל או כינוי, להבחנה בין מספר הגדרות
+ משתמש
+ Glimp
+ %1$s צריך ביטול אופטימיזציית סוללה בשביל תפקוד תקין
+ לולאה מושהית
+ מושהה (%1$d דק\')
+ סופר בולוס (%1$d דק\')
+ השהה לולאה
+ השהה לולאה לשעה אחת
+ השהה לולאה ל-2 שע\'
+ השהה לולאה ל-3 שע\'
+ השהה לולאה ל-10 שע\'
+ השהה לולאה ל-%1$d דקות
+ נתק את המשאבה למשך 15 דקות
+ נתק את המשאבה למשך 30 דקות
+ נתק את המשאבה למשך שעה
+ נתק את המשאבה למשך שעתיים
+ נתק את המשאבה למשך שלוש שעות
+ חידוש
+ חיבור משאבה מחדש
+ משך שגוי
+ לולאה מושהית
+ לולאה חודשה
+ מגמה 15 דקות
+ פחמ\' פעילות
+ סופר בולוס
+ רשום הפעלת AAPS ב-Nightscout
+ יציאה מ-AAPS כדי להחיל הגדרות.
+ באיזה סוג של אינסולין אתה משתמש?
+ אינסולין מהיר
+ Novorapid, Novolog, Humalog
+ Fiasp
+ אינסולין
+ אפשר סופר בולוס באשף
+ אפשר פונקציית סופר בולוס באשף. אין להפעיל לפני שאתם יודעים להשתמש בה, שימוש לא נכון עלול לגרום למתן מינון יתר של אינסולין!
+ הצגת אורות חיווי במסך הבית
+ סף התראה לתוקף העירוי [h]
+ סף התראה קריטית לתוקף העירוי [h]
+ סף התראה לתוקף האינסולין [h]
+ סף התראה קריטית לתוקף האינסולין [h]
+ סף התראה של תוקף החיישן [h]
+ סף התראה קריטית של תוקף החיישן [h]
+ סף התראה של רמת סוללת החיישן [%]
+ סף התראה קריטית של רמת סוללת החיישן [%]
+ סף התראה של תוקף הסוללה [h]
+ סף התראה קריטית של תוקף הסוללה [h]
+ אזהרת סף של מיכל ריק [U]
+ אזהרת סף קריטית של מיכל ריק [U]
+ אזהרת סף של רמת הסוללה [%]
+ אזהרת סף קריטית של רמת הסוללה [%]
+ חיזוי
+ אינ\' פעיל
+ פחמ\' פעילות
+ בזאל\'
+ סטייה
+ פעילות
+ אבס\'
+ שיפוע
+ אודות
+ הרשאות SMS חסרות
+ הרשאת סטטוס הטלפון חסרה
+ מצב xDrip (שעון)
+ שורת מצב xDrip (שעון)
+ xDS
+ הצג השפעת רמת הסוכר
+ הוסף השפעת הסוכר לשורת הסטטוס
+ אין העלאה ל-Nightscout
+ כל הנתונים שנשלחו ל-Nightscout נזרקו. AAPS מחובר ל-Nightscout אך לא נעשו יותר שינויים בו
+ ביטול בולוס ממושך
+ גיל חיישן
+ גיל צינורית
+ גיל אינסולין
+ החלפת פרופיל
+ גיל סוללת המשאבה
+ סנסור
+ צינורית
+ אינסולין
+ סוללת משאבה
+ גיל:
+ רמה:
+ אפשרויות התראה
+ ייצר התראות מאזעקות של Nightscout
+ ייצר התראות מהכרזות של Nightscout
+ סף התיישנות נתונים [min]
+ סף התיישנות נתונים דחוף [min]
+ מרווחים בשביל autosens [h]
+ מספר השעות אחורה לחישוב רגישות (זמן הספיגה של פחמימות אינו נכלל)
+ משאבה
+ OpenAPS
+ מעלה
+ זיהוי רגישות
+ באיזה אלגוריתם זיהוי רגישות להשתמש?
+ רגישות
+ רגישות Oref0
+ רגישות Oref1
+ רגישות AAPS
+ הגדרות ספיגה
+ זמן ספיגה מקסימלי של הארוחה [h]
+ מספר השעות בהן צפוי שכל הפחמימות מארוחה ייספגו
+ גיל סנס\'
+ גיל אינס\'
+ גיל צינ\'
+ גיל סול\'
+ OAPS
+ מעלה
+ בזאלי
+ EXT
+ השאר את המסך דולק
+ מניעת כיבוי המסך. הדבר צורך הרבה כח סוללה.
+ בהפעלת פונקציית ה-Autosens יש לזכור שחייבים להזין למערכת את כל הפחמימות שנאכלו. אחרת פחמימות לא יזוהו נכון כשינוי ברגישות!
+ רגישות משוקללת ממוצעת
+ אישור
+ ביטול
+ לא כל הפרופילים נטענו!
+ הערכים לא נשמרו
+ אפשר שידורים לאפליקציות אחרות (כגון xDrip). אין להפעיל אם מותקן לכם יותר ממופע אחד של AAPS או NSClient!
+ אפשר שידורים מקומיים.
+ פעילות & משוב
+ פחמימות & בולוס
+ סנסור & OPENAPS
+ משאבה
+ משך [min]
+ OpenAPS SMB
+ הפעלת UAM
+ אפשר SMB
+ השתמש בסופר מיקרו בולוסים במקום בבזאלי זמני לפעילות מהירה יותר
+ זיהוי של ארוחות לא מוכרזות
+ שעת שיא של עקומת IOB
+ זמן שיא [min]
+ Oref שיא חופשי
+ Oref אינסולין מהיר
+ Oref אינסולין אולטרה מהיר
+ Lyumjev
+ DIA במשך %1$f הוא קצר מדי - משתמש ב-%2$f במקום!
+ הפעלת פרופיל
+ לא חוקי
+ אחוזים
+ קיזוז זמנים
+ ברירות מחדל ערכי מטרה
+ משך אוכלים בקרוב
+ ערך מטרת אוכלים בקרוב
+ משך פעילות
+ ערך מטרת פעילות
+ משך היפו
+ ערך מטרת היפו
+ שימוש חוזר
+ שליטה מהשעון
+ הגדירו ערכי מטרה זמניים וציינו טיפולים מהשעון.
+ מזון
+ גר\'
+ ]]>
+ kJ
+ אנרגיה
+ חלבון
+ שומן
+ ]]>
+ הפקודה מבוצעת כעת
+ המשאבה אינה זמינה
+ לא התקבלו קריאות סוכר
+ שימוש בהודעות מערכת עבור התראות ודיווחים
+ הגבר את עוצמת הקול בהדרגה להתראות ולהודעות
+ התראות מקומיות
+ התראה אם לא התקבלו נתוני סוכר בדם
+ התראה אם המשאבה בלתי נגישה
+ סף משאבה בלתי נגישה [min]
+ התראה אם יש צורך בפחמימות
+ התרעה דחופה
+ מידע
+ אפליקלציית Eversense (עם פאץ\')
+ טעינת נתוני סוכר ל-Nightscout
+ הגדרות העלאת ערכי סוכר בדם
+ הצגת דלתא מפורטת
+ הצגת דלתא עם עוד נק\' עשרונית אחת
+ תדירות מתן SMB בדקות
+ מקסימום דקות עבור SMB
+ מקסימום הדקות של בזאלי אליו SMB מוגבל
+ מקס\' דקות של SMB UAM
+ מקס\' דקות של בזאלי להגבלת SMB לארוחות לא מוכרזות
+ סף מינ\' הפחמימות הנדרשות להצעה
+ כמות הפחמ\' המינימלית (גר\') הדרושה כדי שתוצג התראה על הצעת פחמימות. לא תוצגנה התראות על הצעות הנמוכות מכמות זו.
+ שליחת נתוני סוכר אל xDrip
+ ב-Xdrip בחרו 640g/Eversense כמקור נתונים
+ רמת סוכר מ-NSClient
+ חישוב רמת הסוכר
+ חישוב IOB של בולוס
+ חישוב IOB של בזאלי
+ חישוב מגמה
+ חישוב סופר בולוס
+ כן
+ לא
+ חיובי בלבד
+ שלילי בלבד
+ חישוב פחמ\' פעילות
+ חישוב ערך מטרה זמני
+ הלולאה פעילה
+ נבחר APS
+ ל-NSClient יש הרשאת כתיבה
+ מצב סגור מופעל
+ IOB מקסימלי הוגדר כראוי
+ ערכי סוכר זמינים מהמקור הנבחר
+ מתכנת משאבה למתן בולוס
+ רענן
+ סטטוס
+ פעילות
+ אין חיבור כבר %1$d דקות
+ %1$d%% (%2$d דק\' נותרו)
+ מאתחל:
+ מושהה עקב שגיאה
+ מושהה על ידי המשתמש
+ פועל
+ ביטול בזאלי זמני
+ הגדרת בזאלי זמני (%1$d%% / %2$d דק\')
+ בולוס (%1$.1f יח\')
+ מרענן
+ הפעולה המבוקשת אינה נתמכת על ידי המשאבה
+ שימוש לא בטוח: בולוס ממושך או רב שלבי פעיל. מצב הלולאה הוגדר למושהה עקב סוכר נמוך למשך 6 שעות. רק בולוסים רגילים נתמכים במצב לולאה
+ שימוש לא בטוח: המשאבה משתמשת בפרופיל בזאלי שונה מהראשון. הלולאה הושבתה. בחרו את הפרופיל הראשון במשאבה ורעננו.
+ התבקש בולוסים זהים בשתי הדקות האחרונות. כדי למנוע בולוסים כפולים בטעות ולשמור מפני באגים הדבר אסור.
+ עכשיו
+ קריאת היסטוריית המשאבה
+ הגדרת פרופיל בזאלי
+ רמת מיכל נמוכה
+ סוללת המשאבה חלשה
+ המשאבה מציגה את השגיאה E%1$d: %2$s
+ נמוך
+ ריק
+ רגיל
+ דרוש עדכון שעון המשאבה
+ אזהרה
+ אזהרת ביטול בזאלי זמני אושרה
+ לא ניתן להתחבר למשאבה. הבולוס לא ניתן.
+ מתן הבולוס נכשל. נראה כי לא נמסר בולוס. כדי להיות בטוחים, יש לבדוק את המשאבה כדי למנוע בולוס כפול ואז להזריק שוב בולוס. כדי להגן מפני באגים, בולוסים אינם ניתנים מחדש אוטומטית.
+ רק %1$.2f מתוך %2$.2f יח\' מהבולוס המבוקש הוזרקו בשל שגיאה. בדקו את המשאבה כדי לוודא זאת ולבצע את הפעולות המתאימות.
+ אספקת הבולוס ואימות ההיסטוריה של המשאבה נכשלו, אנא בדקו את המשאבה. אם נמסר בולוס, הוא יתווסף לטיפולים במהלך החיבור הבא למשאבה.
+ לא נותר מספיק אינסולין במיכל בשביל להשלים את הבולוס
+ שגיאה במתן הבולוס הממושך
+ Insight
+ לפני
+ הגדרת קצב בזאלי ניטרלי
+ אם תופעל, היא תבטל בזאלי זמני לפני תום כל שעה. שיטה זו יכולה לעזור לבטל ציפצופים ורטט רבים בחלק מהמשאבות.
+ הפעלת SMB תמיד
+ אפשר SMB תמיד באופן עצמאי מבולוסים. אפשרי רק עם מקור ערכי סוכר עם דיוק של נתונים כמו G5
+ הפעלת SMB אחרי פחמימות
+ הפעלת SMB במשך 6 שע\' אחרי פחמימות, גם אם אין פחמ\' פעילות. אפשרי רק עם מקור ערכי סוכר עם דיוק נתונים כמו G5
+ הפעלת SMB עם פחמ\' פעילות
+ הפעלת SMB כשיש פחמ\' פעילות.
+ הפעלת SMB עם ערכי מטרה זמניים
+ הפעלת SMB כאשר יש ערך מטרה זמני פעיל (אכילה בקרוב, פעילות גופנית)
+ הפעלת SMB עם ערכי מטרה גבוהים
+ הפעלת SMB כאשר יש ערך מטרה זמני גבוה פעיל (פעילות, מעל 100 mg/dl או 5.5 mmol/l)
+ אינסולין
+ פחמימות
+ מקשים
+ שולח כיול ל- xDrip או פותח את חלון הכיול של G5
+ פותח xDrip, לחצני אחורה חוזר ל-AAPS
+ מספר פחמימות להוספה כאשר לוחצים על הלחצן
+ כמות האינסולין להוספה כאשר לוחצים על הלחצן
+ לא ניתן היה להפעיל את יישום סנסור. וודא שהוא מותקן.
+ סנסור
+ התעלם ל-5 דק\'
+ התעלם ל-15 דק\'
+ התעלם ל-30 דק\'
+ דרוש
+ דפדפן היסטוריה
+ דיווח על SMB
+ הצג SMB על השעון כמו בולוס סטנדרטי.
+ צור הודעות משגיאות
+ צור התראות על מפחמימות דרושות
+ יצירת הכרזת Nightscout עבור הודעות על שגיאות והתראות מקומיות (ניתנות להצגה בפורטל הטיפולים תחת \"טיפולים\")
+ ייצר הכרזות Nightscout עבור התראות מסוג פחמימות דרושות
+ הראה את התחזיות על לוח השעון.
+ חיזוי
+ אפשרויות נתונים
+ העלאה ל-Fabric
+ אפשר דיווח אוטומטי על קריסה ושליחת נתוני השימוש למפתחים דרך שירות fabric.io.
+ עדכנו את יישום ה-Dexcom שלכם לגרסה נתמכת
+ אפליקציית Dexcom אינה מותקנת.
+ התחל פעילות TT
+ התחל TT אוכלים בקרוב
+ TT
+ רישום בולוס ללא הזרקה
+ קטגוריה
+ תת קטגוריה
+ בולוס רשום בלבד (לא מוזרק על ידי המשאבה)
+ לטעינת הנתונים האוטומטית חסרים נתוני סוכר מ-Nightscout
+ SMB מוגדר באמצעות משאבה
+ פעילות
+ רגישות
+ חריגות
+ פחמימות פעילות
+ אניסולין פעיל
+ בזאלי
+ לא נבחרה פעולה, דבר לא יתבצע.
+ הפעלת היפו TT
+ רץ כעת במצב מפתחים. לולאה סגורה אינה מורשת.
+ מצב הנדסה מופעל
+ מצב המהנדסים אינו מופעל ולא על ההסתעפות המשוחררת
+ קריאת פרופיל בזאלי
+ היסטוריית המשאבה השתנתה לאחר ביצוע חישוב הבולוס. הבולוס לא הוזרק. אנא חשב מחדש אם יש עדיין צורך בבולוס.
+ הבולוס הוזרק בהצלחה אבל רישומו נכשל. זה יכול לקרות אם שני בולוסים קטנים, באותו הגודל, ניתנים בתוך שתי הדקות האחרונות. בדקו את היסטוריית המשאבה ואת ערכי הטיפול והשתמשו בפורטל הטיפולים להוספת ערכים חסרים. הקפידו לא להוסיף טיפולים זהים באותה דקה.
+ הגדרת ערך מטרה גבוה נדחתה כיוון שהחישוב לא לקח בחשבון שינוי שנעשה לאחרונה בהיסטוריית המשאבה
+ מרענן סטטוס משאבה
+ המינון הבזאלי במשאבה השתנה ויעודכן בקרוב
+ המינון הבזאלי במשאבה השתנה אך קריאתו נכשלה
+ בודק שינויים בהיסטוריה
+ בולוסים מרובים באותו הגודל בתוך הובאו באותה דקה. ניתן להוסיף רק רשומה אחת לטיפולים. בדקו את המשאבה והוסיפו באופן ידני רשומת בולוס בלשונית פורטל הטיפולים. יש ליצור רשומות בולוס עם זמנים שונים מבולוסים אחרים.
+ \n\nhttp://www.androidaps.org\nhttp://www.androidaps.de (de)\n\nfacebook:\nhttp://facebook.androidaps.org\nhttp://facebook.androidaps.de (de)
+ הבולוס האחרון נרשם לפני 24 שעות או בשעה עתידית, נא לבדוק את כיוון השעון ותאריך במשאבה.
+ זמן\תאריך הבולוס שהוזרק מהמשאבה נראה לא נכון, IOB כנראה שגוי, בדקו את השעון ואת התאריך במשאבה.
+ שינוי פרופיל חסר. אנא החליפו פרופיל או לחצו על \"הפעל פרופיל\" בפרופיל המקומי.
+ ספירת בולוסים
+ ספירת TBR
+ המשאבה אינה מסוגלת לבצע בזאלי זמני
+ לא נקרא מינון בזאלי תקף מהמשאבה
+ מצב לולאה סגור מושבת בהעדפות
+ Autosens מושבת בהעדפות
+ SMB מושבת בהעדפות
+ UAM מושבת בהעדפות
+ UAM מושבת מפני שהוא מסתמך על תוסף רגישות של Oref1
+ מכפלת בזאלי מירבי
+ מכפלת בזאלי יומי מירבי
+ ניתן בולוס ב-3 הדקות האחרונות, מדלג על SMB
+ הבזאלי הוגדר כהלכה
+ הגבלת בולוס ממושך ל- %1$.1f יח\' בגלל %2$s
+ הגבלת מקסימום IOB ל-%1$.1f יח\' בגלל %2$s
+ הגבלת פחמימות ל-%1$d גר\' בגלל %2$s
+ הגבלת IOB ל-%1$.1f יח\' בגלל %2$s
+ ערך מקסימלי בהעדפות
+ מגבלה קשיחה
+ שימוש לא בטוח
+ קריאת סטטוס נכשלה
+ רשום החלפת אתר עירוי
+ רשום החלפת מכל אינסולין
+ SMB תמידי ו-SMB לאחר פחמימות מושבתים כיוון שמקור ערכי הסוכר הפעיל אינו תומך בסינון נתונים מתקדם
+ SMB אינו פעיל במצב לולאה פתוחה
+ מזון
+ איפוס
+ מנותק (%1$d דק\')
+ מינון אינסולין פעיל מרבי ממנו OpenAPS לא יחרוג [U]
+ ב-OpenAPS ערך זה נקרא מקסימום אינסולין פעיל (maxIOB). \nלא יוזרק עוד אינסולין אם כמות האינסולין הפעיל הנוכחי גדול מערך זה
+ המשאבה נעצרה
+ המשאבה הופעלה
+ המשאבה הושהתה
+ זמן ספיגה מקסימלי של הארוחה [h]
+ משך זמן בו כל ארוחה תחשב כנספגה. לא תהיה התחשבות בפחמימות שנותרו.
+ זמן
+ הצגת שדות הערות בתיבות דו-שיח של טיפול
+ הבא
+ הקודם
+ אשף ההתקנה
+ סיום
+ בחרו את השפה שלכם
+ תוספת אינסולין ראשונה
+ תוספת אינסולין שניה
+ תוספת אינסולין שלישית
+ תוספת פחמימות ראשונה
+ תוספת פחמימות שניה
+ תוספת פחמימות שלישית
+ סנסור
+ השתמש בחיבור WiFi בלבד
+ WiFi SSID
+ במצב טעינה בלבד
+ הגדרות חיבור
+ SSID מורשים (מופרדים בנקודה-פסיק)
+ אפשר חיבור בנדידה
+ יחס autosens מקסימלי
+ יחס autosens מינימלי
+ נמנום בולוס - מחלק משך פעילות אינסולין
+ מכפלת בטיחות בזאלי יומי מירבי
+ מכפלת בטיחות בזאלי נוכחי
+ לא זמין
+ סוג משאבה וירטואלית
+ הגדרת משאבה
+ בולוס: צעד=%1$s\nבולוס ממושך: [צעד=%2$s, משך=%3$s מינ\'-%4$sש\']\nבזאלי: צעד=%5$s\nבזאלי זמני: %6$s (עם %7$s), משך=%8$s מינ\'-%9$sש\'\n%10$s
+ טעינת נתוני סוכר אוטומטית
+ הגדרות אשף
+ חישובים הכלולים בתוצאת האשף:
+ הגדרות תצוגה
+ הגדרות כלליות
+ אפשר NSClient
+ ברוכים הבאים לאשף ההתקנה. האשף ידריך אתכם בתהליך ההתקנה\n
+ הגדרת משאבה
+ קרא סטטוס
+ יש לבצע שינויים ב-Nightscout
+ דלג על אשף ההתקנה
+ לחצו על הלחצן למטה כדי לאפשר ל-AndroidAPS להציע\לבצע שינויים במינון הבזאלי
+ הגדרת תוסף APS
+ הגדר את תוסף הרגישות
+ תוסף רגישות משמש לזיהוי רגישות וחישוב הפחמ\' הפעילות. לקבלת מידע נוסף, בקרו בכתובת:
+ https://github.com/MilosKozak/AndroidAPS/wiki/Sensitivity-detection-and-COB
+ NSClient מטפל בחיבור ל-Nightscout. אפשר לדלג על החלק הזה עכשיו, אך לא תוכלו לעבור את המשימות מבלי להגדיר אותו.
+ חשוב לזכור: פרופילי אינסולין חדשים דורשים משך פעילות אינסולין (DIA) של 5 ש\' לפחות. ערך של 5-6 ש\' בפרופיל חדש שווה לערך של 3 ש\' בפרופילים ישנים.
+ הגדר את תצורת מקור ערכי הסוכר
+ נא לבחור מקור פרופיל. אם המטופל הוא ילד כדאי להשתמש בפרופיל NS. אם אף אחד לא עוקב אחרייך ב-Nightscout כנראה שתעדיף פרופיל מקומי. יש זכור כי אתם בוחרים רק את מקור הפרופיל. כדי להשתמש בו יש להפעילו הפעלת \"החלפת פרופיל\"
+ בחרו באחד מהאלגוריתמים הזמינים. הם ממוינים מהישן לחדש. אלגוריתם חדש יותר הוא בדרך כלל חזק ואגרסיבי יותר. לפיכך, אם אתם משתמשים חדשים רצוי שתתחילו עם AMA ולא עם האלגוריתם האחרון. נא לא לשכוח לקרוא את תיעוד OpenAPS ולהגדיר אותו כראוי לפני השימוש.
+ ממתין לחיבור לריילילינק…\n
+ הערה: ניתן להמשיך בהתקנה לאחר אתחול המשאבה.\n
+ התחלת המשימה הראשונה שלכם
+ הרשאה
+ מבקש הרשאה
+ האפליקציה צריכה הרשאת מערכת של חלונות לצורך התראות
+ דרושה הרשאת מיקום עבור סריקת בלוטות\' וזיהוי WiFi
+ דרושה הרשאת אחסון כדי שתוכלו לאחסן קובצי יומן והגדרות יצוא.
+ בקשה
+ קביעת תצורת תוסף אינסולין
+ יציאה
+ פתח ניווט
+ סגור ניווט
+ העדפות תוסף
+ הושלם, כל הכבוד!
+ עוד לא הושלם
+ זמן שחלף
+ Poctech
+ קבלת ערכי סוכר מיישום Poctech
+ קבלת ערכי סוכר מאפליקציית Tomato (התקן MiaoMiao)
+ ערך מטרה זמני גבוה מעלה את הרגישות
+ = 100]]>
+ ערך מטרה זמני נמוך מוריד את הרגישות
+
+ תנגודת מורידה את ערך המטרה
+ כשמזוהה תנגודת, הורד את ערך המטרה של הגלוקוז
+ רגישות מעלה את ערך המטרה
+ כשמזוהה רגישות, הגדל את ערך המטרה של הגלוקוז
+ הגדרת משאבה לא חוקית, בדקו את הוראות ההפעלה וודאו שתפריט \'מידע מהיר\' נקרא בשם QUICK INFO באמצעות תוכנת התצורה 360.
+ מותאם אישית
+ מחק אירועי \"AndroidAPS Started\"
+ נמצאו הגדרות שמורות
+ שימו לב: אם אתם מפעילים ומתחברים למשאבה פיזית, AndroidAPS יעתיק את הפרופיל הבזאלי אל המשאבה תוך דריסת הפרופיל שכבר שמור על המשאבה. יש שההגדרות הבזאליות שב-AndroidAPS נכונות. אם אינכם בטוחים או אינכם רוצים לשנות את הגדרות הבזאליות שעל המשאבה, לחצו על \'ביטול\' וחזרו על תהליך המעבר אל המשאבה במועד מאוחר יותר.
+ נתוני טיפול לא שלמים
+ הגדרות תחזוקה
+ נמען דוא\"ל
+ הצפנת הגדרות מיוצאות
+ מספר הרשומות למשלוח
+ תחזוקה
+ תחזוקה
+ מספק מספר פונקציות של תחזוקה (כגון משלוח יומן, מחיקת יומן).
+ שלח יומנים בדוא\"ל
+ מחק רישומים
+ לא ניתן להוסיף טיפול (אינסולין: %1$.2f, פחמ\': %2$d, בשעה: %3$s) לטיפולים. נא לבדוק ולהוסיף רשומה באופן ידני כנדרש.
+ פחמימות ממושכות: %1$d גר\' (%2$d ש\'), עיכוב %3$d דק\'
+ אין נתוני autosens זמינים
+ הגדרות יומן רישום
+ אפס לברירת המחדל
+ תקלה ב-NSClient. שקלו להפעיל את Nightscout ו-NSClient מחדש.
+ AS
+ גרסה %1$s זמינה
+ היסט זמן
+ מצב APS מועדף
+ סה\"כ
+ חישוב
+ שלח קובצי יומן של היום למפתחים יחד עם זמן זה. מצב לא צפוי.
+ מינימום לבקשה לשינוי [%]
+ \'לולאה פתוחה\' תציג בקשת שינוי חדשה רק אם השינוי גדול מערך זה ב-%. ערך ברירת המחדל הוא 20%
+ מחפש התקנים…
+ הזיווג הושלם
+ האם הקודים המוצגים בהתקן זה ובמשאבה זהים?
+ זיווג Insight
+ Accu-Chek Insight
+ %1$.2f יח\' מתוך %2$.2f יח\' הוזרקו
+ %1$s: %2$s
+ הצינורית הוחלפה
+ שעון המשאבה עודכן
+ אישור
+ השתק
+ התראת משאבה
+ רישום החלפת אתר עירוי
+ רישום החלפת מכל
+ רישום החלפת צינורית
+ רישום החלפת סוללה
+ רישום שינויים במצב הפעלה
+ רישום התראות
+ הפעלת הדמיית בזאלי זמני
+ השתמש בבולוס ממושך במקום בזאלים זמניים לעקיפת הגבלת ה-250%
+ ביטול רטט בעת הזרקת בולוס ידנית
+ עבור בולוס רגיל וממושך (זמין רק עם קושחה 3.x של משאבת Insight)
+ ביטול רטט בעת הזרקת בולוס אוטומטית
+ עבור SMB ובזאלי זמני עם הדמייה (זמינה רק עם Insight עם קושחה גרסה 3 ומעלה)
+ עיכוב הניתוק [s]
+ מספר סידורי
+ גרסת תוכנה
+ גרסת תוכנת מעבד הממשק
+ גרסת תוכנת מעבד המחשב
+ גרסת תוכנת עיבוד MD tel
+ גרסת תוכנת עיבוד בטיחות
+ גרסת דף מידע בלוטות\'
+ כתובת בלוטות\'
+ נספח זהות מערכת
+ תאריך ייצור
+ מחיקת זיווג
+ פרטי זיווג
+ הפעל משאבה
+ עצור משאבה
+ מצב פעולה
+ סטטוס
+ מינון בולוס יומי מצטבר
+ מינון בזאלי יומי מצטבר
+ מינון יומי מצטבר כולל
+ משחזר
+ לא מזווג
+ התחברות אחרונה
+ החל
+ נעצר
+ %1$d%% למשך %2$d/%3$d דק\'
+ בולוס ממושך
+ בולוס רב שלבי
+ %1$.2f / %2$.2f יח\' במשך %3$d דק\'
+ אפשר התראה על סיום בזאלי זמני\n(הגדרת משאבה)
+ השבת התראה על סיום בזאלי זמני\n(הגדרת משאבה)
+ רענן
+ חיבור משאבת Accu-Chek Insight
+ לא הוכנס
+ חיבור אחרון: לפני %1$d דק\'
+ בזאלי זמני: %1$d%% במשך %2$d / %3$d דק\'
+ בולוס ממושך: %1$.2f / %2$.2f יח\' במשך %3$d דקות
+ בולוס רב שלבי: %1$.2f / %2$.2f יח\' למשך %3$d דק\'
+ מינון כולל: %1$.2f
+ מכל: %1$.2f יח\'
+ סול\': %1$d%%
+ משך זמן התאוששות מקסימלי [s]
+ משך זמן התאוששות מינימלי [s]
+ משך שחזור
+ מגבלת זמן במהלך לחיצת יד - אתחול בלוטות\'
+ א׳
+ ש\'
+ ו׳
+ ה\'
+ ד\'
+ ג\'
+ ב\'
+ פעולות אוטומציה המוגדרות ע\"י המשתמש
+ נא להזין שם לפעולה.
+ נא לציין טריגר אחד לפחות.
+ נא לציין פעולה אחת לפחות.
+ כבר מאופשר
+ כבר מושבת
+ כבר מושעה
+ חידוש לולאה
+ לא מושעה
+ הפעלת ערך מטרה זמני
+ הפסקת ערך מטרה זמני
+ פחות מ-
+ שווה או פחות מ-
+ שווה ל-
+ שווה או גדול מ-
+ גדול מ-
+ לא זמין
+ גלוקוז אינו זמין
+ גלוקוז %1$s %2$.0f %3$s
+ גלוקוז %1$s %2$.1f %3$s
+ אחוז פרופיל %1$s %2$d
+ אינסולין פעיל %1$s %2$.1f
+ וגם
+ או
+ או בררני
+ ב-%1$s
+ שימוש במיקום רשת
+ שימוש במיקום GPS
+ השתמש במיקום פסיבי
+ שירות מיקום
+ אוטומטי
+ אוטומציה
+ == ∑ %1$s יח\'
+ רישום החלפת סנסור ב-Nightscout
+ רישום אירוע \"החלפת סנסור\" ב-Nightscout באופן אוטומטי בעת הפעלת החיישן
+ Tomato (MiaoMiao)
+ Tomato
+ שם המשתמש שלכם להתחברות ל-Tidepool, בדרך כלל כתובת הדוא\"ל שלכם
+ שם משתמש להתחברות
+ סיסמת ההתחברות ל-Tidepool
+ סיסמת התחברות
+ בדיקת התחברות ל-Tidepool
+ אם האפשרות מופעלת, נתונים יועלו לכתובת https://int-app.tidepool.org במקום https://app.tidepool.org/
+ שימוש בשרתי אינטגרציה (בדיקה)
+ Tidepool
+ TDP
+ מעלה נתונים ל-Tidepool
+ העלאת נתוני סנסור
+ העלאת טיפולים (אינסולין, פחמימות)
+ העלאת בזאלים זמניים
+ העלאת החלפת פרופילים, ערכי מטרה זמניים
+ העלאת בדיקות סוכר
+ שינוי לשעון קיץ ב-24 השעות הקרובות
+ חל מעבר לשעון קיץ לפני פחות מ-3 שעות - לולאה סגורה מושבתת
+ אילוץ אחסון פנימי
+ יש לפנות לפחות %1$d מ\"ב מנפח האחסון של מכשירכם! הלולאה מושבתת!
+ פורמט שגוי
+ משך הבזאלי הזמני חייב להיות כפולה של %1$d דקות ויותר מ-0.
+ קוד שגוי. הפקודה בוטלה.
+ לא מוגדר
+ נוצרה החלפת פרופיל
+ זמן חוזרני
+ בכל
+ אף פעם
+ תנאי:
+ פעולה:
+ אינסולין פעיל [U]:
+ גלוקוז [%1$s]:
+ מחק
+ הוספה
+ העתקה
+ הוסף חדש
+ בודק גרסה
+ מאמת חתימה
+ זיהינו שאתם משתמשים בגרסה לא תקפה. הלולאה מושבתת!
+ גרסה ישנה
+ גרסה ישנה מאוד
+ גרסה חדשה זמינה כבר %1$d ימים! הגבלה להשהיה עקב סוכר נמוך תחל אחרי %2$d ימים, הלולאה תושבת אחרי %3$d ימים
+ שעתיים
+ אפליקציית Dexcom עם פאץ\'
+ דקס\'
+ קבלת ערכי רמת סוכר מאפליקציית Dexcom עם פאץ\'.
+ התראה
+ התראה: %1$s
+ הודעה:
+ אחוז הפרופיל
+ אחוז [%]:
+ הפעלת פרופיל %1$d%% במשך %2$d דק\'
+ הפעלת פרופיל %1$d%%
+ קיים
+ לא קיים
+ ערך מטרה זמני %1$s
+ חיבור בלוטות\' להתקן %1$s %2$s
+ התחברות למכשיר בלוטות\'
+ WiFi SSID %1$s %2$s
+ Autosens %1$s %2$s %%
+ Autosens %
+ %3$s %1$s %2$s
+ הפרש רמת סוכר
+ הפרש רמת סוכר [%1$s]
+ מיקום נוכחי
+ מיקום
+ רוחב:
+ אורך:
+ מרחק [m]:
+ שם:
+ %1$s %2$s
+ כאשר
+ כשנמצאים באזור
+ כשנמצאים מחוץ לאזור
+ כשנכנסים לאזור ששמו
+ כשעוזבים אזור ששמו
+ בולוס אחרון
+ הבולוס האחרון היה לפני %1$s %2$s דק\'
+ פחמ\' פעילות
+ פחמ\' פעילות %1$s %2$.0f
+ שם משימה
+ עריכה
+ בחרו סוג פעולה
+ בחירת סוג הטריגר
+ טריגרים:
+ הסר
+ תנאים מוקדמים:
+ החלפת פרופיל ל-
+ החלפת פרופיל ל-%1$s
+ חיבור אחרון למשאבה
+ חיבור אחרון למשאבה [לפני מס\' דקות]
+ חיבור אחרון למשאבה לפני %1$s %2$s דקות
+ שליחת מסרון: %1$s
+ שליחת מסרונים לכל המספרים
+ שליחת מסרון עם טקסט
+ פחמ\' פעילות לעומת אינ\' פעיל
+ מגבלת בולוס יושמה: %1$.2f עד %2$.2f יח\'
+ !!!!!! זוהתה ספיגת פחמימות איטית: %2$d%% מהזמן הצפוי. הערכת כמות הפחמימות הפעילות עלולה להיות ביתר ולכן תיתכן הזרקת אינסולין עודפת !!!!!!]]>
+ ספק את חלק זה מתוצאת אשף הבולוס [%]
+ אשף הבולוס מבצע חישוב אך רק חלק זה של האינסולין המחושב מוזרק. שימושי בשימוש עם אלגוריתם SMB.
+ טוען...
+ נודניק
+ טווח זמן
+ הזמן בין %1$s ו- %2$s
+ בין
+ מגדיל את ערך מקסימום הבזאלי מפני שהוא נמוך מערכו המרבי בפרופיל
+ גוף ההודעה אינו חוקי
+ %1$s פקטור הרגישות: %2$.1f
+ %1$.0f גר\' יחס פחמ\': %2$.1f
+ %1$.1f גר\' יחס פחמ\':%2$.1f
+ %1$d%%
+ אשף בולוס
+ דק\'
+ שם הפרופיל:
+ נבחר:
+ יחידות
+ האם ברצונכם להחליף את הפרופיל ולזנוח את השינויים שבוצעו בפרופיל הנוכחי?
+ מופעל
+ כבוי
+ ביטול השלמה
+ ביטול התחלה
+ האם ברצונכם לאפס את התחלת המשימה? אתם עלולים לאבד את התקדמותכם במשימה.
+ לא נבחרה משאבה
+ בחרו את היחידות שבהן ברצונכם להציג ערכים
+ העלאת שינויים בפרופיל המקומי ל-Nightscout
+ DIA
+ IC
+ ISF
+ ע\' מטרה
+ שכפול
+ יש לשמור או לאפס תחילה את השינויים הנוכחיים
+ למחוק את הפרופיל הנוכחי?
+ ליצור פרופיל מקומי חדש מפרופיל זה?
+ שם הפרפיל מכיל נקודות.\nשם כזה אינו נתמך ע\"י Nightscout \nהפרופיל לא הועלה ל-Nightscout.
+ ערך נמוך יותר באזור הטווח (הצגה בלבד)
+ ערך גבוה יותר באזור הטווח (הצגה בלבד)
+ סדר מחדש
+ גיל:
+ משקל:
+ מס\' זיהוי:
+ עדכן
+ הפרופיל הנפוץ ביותר:
+ הערה: רק נתונים הגלויים במסך זה יועלו באופן אנונימי. הזיהוי מוקצה להתקנה זו של AndroidAPS. תוכלו לשלוח שוב נתונים אם הפרופיל הראשי שלכם ישונה, אך תנו לו לרוץ במשך שבוע לפחות כדי להפוך את התוצאה לגלויה בזמן בטווח. עזרתכם מוערכת.
+ סקר
+ רשומת גיל לא חוקית
+ רשומת משקל לא חוקית
+ רשומת אחוזים לא חוקית
+ %1$s: נמוך: %2$02d%% בטווח: %3$02d%% גבוה: %4$02d%%]]>
+ ממוצע
+ זמן בטווח
+ מוניטור פעילות
+ האם ברצונכם לאפס את הסטטיסטיקות הפעילות?
+ סטטיסטיקה
+ רמת גלוקוז אקראית
+ הפקת נתוני גלוקוז אקראיים (מצב הדגמה בלבד)
+ ערכי גלוקוז בדם
+ כלים
+ הצג חישוב
+ אירוע אוטומציה
+ כבר מוגדר
+ לנקות את התור? כל הנתונים בתור יאבדו!
+ שימוש בבולוס ממושך יפסיק את מצב הלולאה הסגורה לזמן פעילות הבולוס. אתם בטוחים שאתם רוצים להמשיך?
+ הלולאה הסגורה מופסקת עקב מתן בולוס ממושך
+ EB
+ \"בודק טלפון\"
+ תפריט תרשים
+ רגישות
+ זמן בקשת SMB
+ זמן ביצוע SMB
+ זמן בקשת בזאלי זמני
+ זמן הפעלת בזאלי זמני
+ התראות משאבת Insight
+ מיישום מאמת עבור: %1$s ואחריו PIN
+ אפשר מאמת
+ אמת פקודות באמצעות סיסמאות חד פעמיות שהופקו ע\"י מאמת Google או יישומי 2FA אחרים.
+ תוספת PIN חובה בסוף האסימון
+ ספרות נוספות שיש לשנן ולהדביק בסוף כל אחת מהסיסמאות החד פעמיות
+ הגדרת מאמת
+ קוד לבדיקה:
+ OTP + PIN
+ קוד האימות מורכב מ-6 ספרות המוצגות על ידי יישום מאמת (הידוע בתור OTP) ואחריו 3 או יותר ספרות של PIN הכרחי.
+ OTP לבדיקה:
+ איפוס מאמתים
+ איפוס מפתח אימות
+ האם אתם בטוחים שברצונכם לאפס את מפתח האימות? איפוס יהפוך את כל המאמתים המוגדרים כעת לבלתי תקפים, ותצטרכו להגדיר אותם מחדש.
+ מפתח אימות חדש הופק! נא להשתמש בקוד QR מעודכן כדי לאפשר אימות.
+ יצוא סוד OTP
+ אתם בטוחים שברצונכם להעתיק את סוד ה-OTP ללוח ההעתקה?\n\nייתכן שתצטרכו לעשות זאת רק אם יישום האימות נתקל בבעיות בסריקת קוד QR, או שברצונכם להכניס אותו ידנית או להגדיר אסימון OTP של חומרה באמצעות יישום ייעודי.
+ סוד OTP (בפורמט Base32) יוצא והועתק אל לוח ההעתקה. הדביקו אותו לתוך תוכנת האימות או בחומרת צריבת OTP!
+ 1. התקנת מאמת
+ 2. קוד סריקה להגדרת קודי OTP של AndroidAPS
+ 3. ניסוי סיסמה חד-פעמית
+ איפוס מאמתים
+ בכל אחד מהטלפונים העוקבים, התקינו יישום מאמת התומך באסימוני RFC 6238 TOTP. יישומים פופולריים בחינם הם:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
+ אסור לשתף את קוד זה באינטרנט!\nהשתמשו בו אך ורק להתקנת אפליקציית האימות על טלפונים עוקבים.
+ אתחול המאמת גורם למאמתים שסופקו לכם להפסיק להיות חוקיים ויהיה צורך להגדירם שוב!
+ בחיבור
+ בניתוק
+ חיזוי
+ שיפוע הסטייה
+ ההרשאה נכשלה
+ אינסולין מוחלט
+ הסיסמה הראשית משמשת להצפנת גיבוי וכדי לעקוף את האבטחה ביישום. זכרו אותה או שמרו אותה במקום בטוח.
+ סיסמה ראשית נוכחית
+ אורות חיווי
+ העתקת הגדרות מ-Nightscout
+ להעתיק הגדרות מ-Nightscout (אם קיימות)?
+ סקין מקורי
+ סקין רזולוציה נמוכה
+ לחצנים מוצגים תמיד בתחתית המסך
+ תצוגה גדולה
+ סקין
+ השוואת פרופילים
+ עוזר פרופילים
+ פרופיל ברירת מחדל
+ פרופיל נוכחי
+ פרופיל זמין
+ סוג פרופיל
+ גיל: %1$.0f יח\' מינון יומי כולל: %2$.0f יח\'
+ גיל: %1$.0f יח\' מינון יומי כולל: %2$.0f יח\' %3$d%%
+ גיל: %1$.0f יח\' משקל: %2$.0f ק\"ג
+ % של הבזאלי
+ פרופיל ברירת מחדל
+ Open Humans
+ מסיים התקנת Open Humans…
+ זה עלול לקחת זמן מה. נא לא לכבות את את המכשיר או את התוסף.
+ ההתקנה הושלמה
+ מכשירכם ישלח את מידע ל-Open Humans בהקדם.
+ מכשירכם שולח כעת את המידע ל-Open Humans.
+ ההתקנה נכשלה
+ חלה שגיאה. בבקשה נסו להתחבר שוב כדי להמשיך. סליחה ותודה!
+ זהו כלי קוד פתוח שיעתיק את הנתונים שלכם ל-Open Humans. אין לנו זכויות לחלוק את הנתונים שלך עם צדדים שלישיים ללא אישורכם המפורש. הנתונים שהפרויקט והיישום מקבלים מזוהים באמצעות מספר זיהוי משתמש אקראי ויעברו באופן מאובטח לחשבון Open Humans באישורכם. תוכלו להפסיק לשלוח ולמחוק את נתוניכם בכל עת דרך www.openhumans.org.
+ אני מבינ/ה ומסכימ/ה.
+ התחברות
+ התנתקות
+ אתם בטוחים שברצונכם להתנתק ולהפסיק לתרום מידע למדע?
+ זיהוי משתתף פרויקט: %s
+ גודל התור: %d
+ תנאי השימוש
+ לא מחובר/ת
+ עליכם להסכים לתנאי השימוש.
+ ההתחברות הצליחה
+ ההתקנה תושלם כעת ברקע. תודה על שליחת הנתונים שלכם.\n\nאנא השאירו את תוסף זה ואת מכשיר הטלפון שלכם מופעל לזמן קצר כדי להשלים את ההתקנה.
+ משלים התחברות…
+ תרמו את נתוניכם למדע
+ OH
+ התנתקתם מ-Open Humans
+ לחצו כאן כדי להתחבר מחדש אם זה לא היה בכוונה.
+ אפשר העלאה רק אם מחובר ל-WiFi
+ אפשר העלאה רק בזמן טעינת הסוללה
+ מצב עובד: %s
+ נתונים שהועלו
+ הנתונים הבאים יועלו לחשבון Open Humans שלכם: ערכי גלוקוז, בולוסים, פחמימות, אירועים מפורטל הטיפולים (מלבד הערות), בולוסים ממושכים, החלפות פרופיל, מינונים יומיים כוללים, באזאלים זמניים, ערכי מטרה זמניים, העדפות, גרסת יישום, דגם המכשיר ומממדי המסך. מידע סודי או פרטי כגון כתובת ה-Nightscout האישית או סוד ה-API שלכם לא יועלו.
+ מצב ריילילינק:
diff --git a/app/src/main/res/values-ko-rKR/exam.xml b/app/src/main/res/values-ko-rKR/exam.xml
index ee3cb67160..ce40bcd380 100644
--- a/app/src/main/res/values-ko-rKR/exam.xml
+++ b/app/src/main/res/values-ko-rKR/exam.xml
@@ -131,8 +131,6 @@
높은 IC 비율은 탄수화물 섭취시 인슐린이 보다 덜 주입되게 합니다.낮은 IC 비율은 탄수화물 섭취시 인슐린이 보다 덜 주입되게 합니다.COB가 0 인 경우 IC 비율을 변경하면 혈당을 교정하기 위해 다른 양의 인슐린이 주입됩니다.
- 빵유닛(Bread Unit)을 10g 혹은 12g으로 계산한다면 IC 값도 달라집니다.
- IC의 의미는 다음과 같습니다: 1U의 인슐린으로 얼마나 많은 빵유닛(Bread Units)이 처리되는지.https://androidaps.readthedocs.io/en/latest/CROWDIN/ko/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u주제: 프로파일 변경프로파일을 90%로 설정하면 어떻게 됩니까?
diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml
index afbaedee45..3fda4cdd20 100644
--- a/app/src/main/res/values-ko-rKR/strings.xml
+++ b/app/src/main/res/values-ko-rKR/strings.xml
@@ -330,12 +330,10 @@
IOB 자세하게 보여주기워치페이스에 IOB를 Bolus IOB와 Basal IOB로 나누어서 보여줍니다.성공하지 못했습니다. 폰을 확인하세요
- 나이어린이청소년성인인슐린 저항성 높은 성인
- 안전제한을 설정하기 위해 당뇨인의 나이를 선택하세요Glimp최적의 성능을 위해 %1$s에서 배터리 최적화를 해제해야합니다.Loop 일시중지
diff --git a/app/src/main/res/values-lt-rLT/exam.xml b/app/src/main/res/values-lt-rLT/exam.xml
index dd8f3aba08..db87e0a65b 100644
--- a/app/src/main/res/values-lt-rLT/exam.xml
+++ b/app/src/main/res/values-lt-rLT/exam.xml
@@ -134,8 +134,6 @@
Didesnis insulino ir angliavandenių IA santykis reiškia, kad mažiau insulino reikia padengti tam tikram angliavandenių kiekiui.Mažesnis insulino ir angliavandenių IA santykis reiškia, kad mažiau insulino reikia padengti tam tikram angliavandenių kiekiui.Jei turite 0 AAO (aktyvių angliavandenių organizme), pakeitus IA, glikemija bus koreguojama kitokiu insulino kiekiu.
- IA vertė skirsis priklausomai nuo to, ar duonos vienetui skaičiuojate 10g, ar 12g angliavandenių.
- IA reiškia: kiek vienas vienetas insulino dengia duonos vienetų.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uTema: Profilio keitimas Kai profilio keitime nustatote 90%…
diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml
index ca91704dae..b0d58a7eb8 100644
--- a/app/src/main/res/values-lt-rLT/strings.xml
+++ b/app/src/main/res/values-lt-rLT/strings.xml
@@ -261,7 +261,6 @@
Vertė %1$s viršija griežtą limitąPompos prijungimui atsakykite su kodu %1$sNepavyko prisijungti prie pompos
- Norėdami atjungti pompą %1d min., atsakykite kodu %2$sPompa atjungtaPompa prijungtaNuotolinis valdymas negalimas
@@ -405,12 +404,10 @@
Rodyti laikrodyje bazės ir bolusų AIOBandymas nesėkmingas - pasitikrinkite telefonąn/a
- Paciento amžiusVaikasPaauglysSuaugęsInsulinui rezistentiškas suaugęs
- Pasirinkite paciento amžių saugumo riboms nustatytiPaciento vardasPateikite paciento vardą arba slapyvardį, kad galima būtų atskirti tarp skirtingų konfigūracijų.Vartotojas
@@ -990,6 +987,7 @@
vidinės saugyklos apribojimasAtlaisvinkite ne mažiau kaip %1$d MB iš vidinės atminties! Ciklas išjungtas!Neteisingas formatas
+ Laikinos bazės trukmė turi būti kartotinė %1$d minučių ir didesnė nei 0.Neteisingas kodas. Komanda atšaukta.NesukonfigūruotaProfilio perjungimas sukurtas
@@ -1155,6 +1153,9 @@
Atstatyti autentifikatoriaus kodąAr tikrai norite iš naujo nustatyti autentifikatoriaus raktą? Dėl to visi šiuo metu konfigūruojami autentifikatoriai negalios, ir jums reikės juos nustatyti dar kartą.Sukurtas naujas autentifikavimo raktas! Autentifikatoriams pateikti naudokite atnaujintą QR kodą.
+ Eksportuojamas OTP kodas
+ Ar tikrai norite nukopijuoti OTP slaptažodį į mainų sritį?\n\nTai gali būti reikalinga tik tuo atveju, jei jūsų programai kyla problemų identifikuojant nuskaitant QR kodą. Arba norite jį įvesti rankiniu būdu ar sukonfigūruoti įrangos OTP prieigos raktą naudodami specialią programą.
+ OTP kodas (Base32 formatas) eksportuotas ir nukopijuotas į mainų sritį. Įklijuokite jį į autentifikatorių arba OTP programą!1. Įdiegti Authenticator2. Nuskanuoti kodą AndroidAPS OTP kodų nustatymyu3. Patikrinti vienkartinį slaptažodį
@@ -1218,4 +1219,5 @@
Darbinė Būklė: %sĮkelti duomenisĮ jūsų Open Humans paskyrą bus įkelti šie duomenys: glikemijos reikšmės, bolusai, angliavandeniai, priežiūros portalo įvykiai (išskyrus pastabas), ištęstiniai bolusai, profilio pakeitimai, visos paros dozės, laikinos valandinės bazės, laikini tikslai, nustatymai, programos versija, įrenginio modelis ir ekrano matmenys. Konfidenciali ar privati informacija, pvz., Jūsų Nightscout URL arba API slaptažodis, nebus įkelta.
+ RileyLink statusas:
diff --git a/app/src/main/res/values-nl-rNL/exam.xml b/app/src/main/res/values-nl-rNL/exam.xml
index a63d6cda98..3039d5ae62 100644
--- a/app/src/main/res/values-nl-rNL/exam.xml
+++ b/app/src/main/res/values-nl-rNL/exam.xml
@@ -134,8 +134,6 @@
Hogere KH ratios leiden tot minder insuline afgifte voor een bepaalde hoeveelheid koolhydraten.Lagere KH ratios leiden tot minder insuline afgifte voor een bepaalde hoeveelheid koolhydraten.Als je 0 COB hebt zal het veranderen van KH ratio leiden tot een andere hoeveelheid insuline om jouw BG te corrigeren.
- KH ratio zal anders zijn als je een brood-eenheid telt als 10g of 12g.
- KH ratio betekent: Hoeveel brood-eenheden gebruik je voor 1U insuline.https://androidaps.readthedocs.io/en/latest/CROWDIN/nl/Getting-Started/FAQ.html#Koolhydraat-ratio-KH-g-EOnderwerp: Profiel wissels Bij het opgeven van 90% in je profiel wissel…
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index 38ffb10fd9..3a3caf6e30 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -261,7 +261,6 @@
Waarde %1$s valt buiten de toegestane harde limietenOm verbinding te maken met pomp antwoord met code %1$sVerbinding maken met pomp is mislukt
- Om verbinding te verbreken met pomp gedurende %1d minuten antwoord met code %2$sPomp verbinding verbrokenPomp opnieuw verbondenCommando\'s op afstand zijn niet toegestaan
@@ -405,12 +404,10 @@
Splits IOB in bolus en basaal op de watchfaceNiet geslaagd - controleer de telefoonn.v.t.
- Leeftijd PatientKindTienerVolwasseneinsuline resistente volwassene
- Kies leeftijd van de patient voor veiligheids limietenNaam patiëntGeef de naam of roepnaam van de patiënt op om onderscheid te maken tussen meerdere setupsGebruiker
diff --git a/app/src/main/res/values-no-rNO/exam.xml b/app/src/main/res/values-no-rNO/exam.xml
index 8bc7127bf1..f80bbf5d4e 100644
--- a/app/src/main/res/values-no-rNO/exam.xml
+++ b/app/src/main/res/values-no-rNO/exam.xml
@@ -53,15 +53,15 @@
Får jag insulin når loop er stanset/pauset?Ja, basal insulin vil fortsatt bli levert.Nei, levering av insulin er stanset.
- Tema: Basal, ISF og IC testing
- Når bør jeg validere basal, ISF og IC verdier?
+ Tema: Basal, ISF og IK testing
+ Når bør jeg validere basal, ISF og IK verdier?Før jeg begynner å loope.Om du ofte opplever lave BS verdier.Om du ofte opplever høye BS verdier.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settingsTema: Forutsetninger før oppstartHva trenger jeg?
- Validert profil informasjon (basal, IC, ISF, DIA).
+ Validert profil informasjon (basal, IK, ISF, DIA).En datamaskin for å lage en APK.En telefon som støttes.En bil.
@@ -131,18 +131,18 @@
https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-uhttps://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.htmlTema: Insulin-karbo (IK) forholdet
- Høyere IC forhold fører til at mindre insulin leveres for en gitt mengde karbohydrater.
- Lavere IC forhold fører til at mindre insulin leveres for en gitt mengde karbohydrater.
- Hvis du har 0 COB, vil endring av IC forholdet føre til endring av insulinmengden som trengs for å korrigere ditt BS nivå.
- IC vil være forskjellig hvis du regner en skive brød som 10g eller 12g.
- IC betyr: Hvor mange brødenheter som dekkes av 1E insulin.
+ Høyere IK forhold fører til at mindre insulin leveres for en gitt mengde karbohydrater.
+ Lavere IK forhold fører til at mindre insulin leveres for en gitt mengde karbohydrater.
+ Hvis du har 0 COB, vil endring av IK forholdet føre til endring av insulinmengden som trengs for å korrigere ditt BS nivå.
+ IK vil være forskjellig hvis du regner en skive brød som 10g eller 12g.
+ IK betyr: Hvor mange brødenheter som dekkes av 1E insulin.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uTema: Profilbytte Når man angir 90% i profilbytte…Basal vil være 10% høyere.Basal vil være 10% lavere.
- IC verdien vil være 10% høyere.
- IC verdien vil være 10% lavere.
+ IK verdien vil være 10% høyere.
+ IK verdien vil være 10% lavere.ISF verdien vil være 10% høyere.ISF verdien vil være 10% lavere.Du vil få omtrent 10% mindre insulin totalt.
diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml
index ee5298e91f..b0ceaf7462 100644
--- a/app/src/main/res/values-no-rNO/strings.xml
+++ b/app/src/main/res/values-no-rNO/strings.xml
@@ -261,7 +261,7 @@
Verdien %1$s er utenfor angitt begrensningFor å koble til pumpen, svar med kode %1$sTilkobling til pumpen mislyktes
- For å koble fra pumpen i %1d minutter, svar med koden %2$s
+ For å koble fra pumpen i %1$d minutter, svar med koden %2$sPumpe frakobletPumpen tilkoblet igjenFjernstyringskommando er ikke tillatt
@@ -405,12 +405,13 @@
Vis IOB med bolus och basal IOB på klokkemislykket - sjekk telefonenn/a
- Pasientens alder
+ Pasient typeBarnTenåringVoksenInsulin resistent voksen
- Velg pasientens alder for oppsett av sikkerhetsgrenser
+ Graviditet
+ Velg pasientens type for oppsett av sikkerhetsgrenserPasientens navnAngi pasientnavn eller kallenavn for å kunne skille mellom flere oppsettBruker
@@ -454,6 +455,8 @@
Advarsel: alder insulin [h]OBS: alder CGM [h]Advarsel: alder CGM [h]
+ Nivå for når batterivarsel skal gis [%]
+ Nivå for når kritisk batteriadvarsel skal gis [%]OBS: alder batteri [h]Advarsel: alder batteri [h]OBS: nivå insulinreservoar [U]
@@ -484,6 +487,12 @@
Insulin alderGjør profilbytteAlder pumpebatteri
+ Sensor
+ Kanyle
+ Insulin
+ Pumpe batteri
+ alder:
+ nivå:Alarm valgOpprett varsler fra NS alarmerOpprett varsler fra NS meldinger
@@ -1156,6 +1165,9 @@
Tilbakestill Authenticator nøkkelEr du sikker på at du vil tilbakestille Authenticator nøkkel? Dette vil gjøre alle lagrede Authenticators ugyldige, og du må sette dem opp på nytt igjen.Ny Authenticator nøkkel ble generert! Vennligst bruk oppdatert QR kode til å aktivere autentiserere.
+ Eksporterer OTP hemmelig kode
+ Er du sikker på at du vil kopiere OTP hemmelig kode til utklippstavlen?\n\nDu trenger bare det hvis din Authenticator app har problemer med skanning av QRCode og du ønsker å legge den inn manuelt, eller du ønsker å konfigurere maskinvare OTP-kode ved hjelp av dedikert app.
+ OTP hemmelig kode (i base32-format) er eksportert og kopiert til utklippstavlen. Lim den inn i Authenticator app eller hardware OTP system!1. Installer Authenticator2. Skann kode for å sette opp AndroidAPS OTP koder3. Test engangspassord
@@ -1175,6 +1187,7 @@
Kopier innstillingene fra NSKopiere NS innstillinger (hvis de eksisterer)?Opprinnelig visningstema
+ Tema for lav oppløsningKnapper vises alltid på bunnen av skjermenStor skjermTema
diff --git a/app/src/main/res/values-pl-rPL/exam.xml b/app/src/main/res/values-pl-rPL/exam.xml
index b346bd076c..e14eee2190 100644
--- a/app/src/main/res/values-pl-rPL/exam.xml
+++ b/app/src/main/res/values-pl-rPL/exam.xml
@@ -134,8 +134,8 @@
Wyższe wartości ICprowadzą do mniejszej ilości insuliny dostarczonej do podanej ilości węglowodanów.Niższe wartości IC prowadzą do mniejszej ilości insuliny podanej do wprowadzonej ilości węglowodanów.Załóżmy, że masz 0 COB. Zmiana IC doprowadzi do podania innej ilości insuliny w celu skorygowania twojej wartości BG.
- IC będzie inny, jeśli policzysz jednostkę chleba jako 10 g lub 12 g.
- Znaczenie IC to: Ile jednostek chleba jest pokrytych 1U insuliny.
+ IC będzie inny, jeśli policzysz jednostkę chlebową (wymiennik węglowodanów) jako 10g lub 12g.
+ Znaczenie IC to: Ile jednostek chlebowych (wymienników węglowodanowych) jest pokrytych 1U insuliny.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uTemat: Przełączanie profili Jeśli podasz 90% podczas zmiany profilu…
diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml
index c2654fb745..305039d112 100644
--- a/app/src/main/res/values-pl-rPL/strings.xml
+++ b/app/src/main/res/values-pl-rPL/strings.xml
@@ -261,7 +261,7 @@
Wartość %1$s jest poza dopuszczalną granicąAby podłączyć pompę odpowiedz kodem %1$sPołączenie z pompą nie powiodło się
- Aby odłączyć pompę na %1d minut odpowiedz kodem %2$s
+ Aby odłączyć pompę na %1$d minut odpowiedz kodem %2$sPompa odłączonaPompa ponownie podłączonaZdalne komendy nie są dozwolone
@@ -405,12 +405,13 @@
Rozłóż IOB na bolus i IOB bazy na zegarkunie udało się - proszę sprawdzić telefonn/a
- Wiek pacjenta
+ Typ pacjentaDzieckoNastolatekOsoba dorosłaOsoba dorosła insulinooporna
- Proszę wybierz wiek pacjenta w celu ustawienia wartości limitów bezpieczeństwa
+ Ciąża
+ Wybierz typ pacjenta, aby ustawić limity bezpieczeństwaNazwa pacjentaProszę podać nazwę pacjenta lub pseudonim w celu rozróżnienia pomiędzy różnymi konfiguracjamiUżytkownik
@@ -454,6 +455,8 @@
Krytyczny czas insuliny [h]Ostrzeżenie o czasie sensora CGM [h]Krytyczny czas sensora CGM [h]
+ Próg ostrzeżenia o poziomie baterii sensora [%]
+ Próg ostrzeżenia o krytycznym poziomie baterii sensora [%]Ostrzeżenie o czasie baterii [h]Krytyczny czas baterii [h]Próg ostrzeżenia o poziomie zbiornika [U]
@@ -485,6 +488,12 @@
Czas insulinyZmień profilCzas baterii pompy
+ Sensor
+ Kaniula
+ Insulina
+ Bateria pompy
+ wiek:
+ poziom:Opcje alarmuUtwórz powiadomienia z alarmów NSUtwórz powiadomienia z komunikatów NS
@@ -1179,6 +1188,7 @@
Kopiowanie ustawień z NSCzy skopiować ustawienia NS (jeśli istnieją)?Motyw oryginalny
+ Mały ekranPrzyciski są zawsze wyświetlane na dole ekranuDuży ekranMotyw
diff --git a/app/src/main/res/values-pt-rBR/exam.xml b/app/src/main/res/values-pt-rBR/exam.xml
index cd256141c4..c4df446552 100644
--- a/app/src/main/res/values-pt-rBR/exam.xml
+++ b/app/src/main/res/values-pt-rBR/exam.xml
@@ -134,8 +134,6 @@
Proporções IC mais altos levam a menos insulina entregue para uma dada quantidade de carboidratos.Proporções IC mais baixos levam a menos insulina entregue para uma dada quantidade de carboidratos.Se tiver 0 COB, alterar a proporção IC irá levar a uma quantidade diferente de insulina para corrigir um determinado valor da glicemia.
- O IC será diferente se você contar a unidade de pão como 10g ou 12g.
- O significado do IC é: Quantos pães são cobertas por 1U de insulina.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uTópico: Alternando Perfil Ao especificar 90% na mudança de perfil…
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 9e7baf1bad..d3cc2f1645 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -381,12 +381,10 @@
Dividir IOB entre IOB de bolus e de basal na face do relógionão foi bem sucedido - por favor, verifique o telefonen/a
- Idade do PacienteCriançaAdolescenteAdultoAdulto resistente insulina
- Por favor seleccione a idade do diabético para definir os limites de segurançaNome do PacientePor favor, forneça nome do paciente ou apelido para diferenciar entre várias configuraçõesUsuário
diff --git a/app/src/main/res/values-pt-rPT/exam.xml b/app/src/main/res/values-pt-rPT/exam.xml
index 4ce02a40a9..efdc4f1120 100644
--- a/app/src/main/res/values-pt-rPT/exam.xml
+++ b/app/src/main/res/values-pt-rPT/exam.xml
@@ -134,8 +134,6 @@
Rácios IC mais altos levam a menos insulina administrada para uma dada quantidade de hidratos.Rácios IC mais baixos levam a menos insulina administrada para uma dada quantidade de hidratos.Se tiver 0 COB, alterar o rácio IC irá levar a uma quantidade diferente de insulina para corrigir um determinado valor da Glic.
- IC será diferente se contar a unidade de pão como 10g ou 12g.
- O significado do IC é: Quantas unidades de pão são cobertas por 1U de insulina.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uTópico: Mudança De Perfil Ao especificar 90% na mudança de perfil…
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index ca6a31ce0e..1cdb34559e 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -261,7 +261,6 @@
O valor %1$s está fora dos limites permitidosPara ligar a bomba responda com o código %1$sLigação à bomba falhou
- Para desligar a bomba por %1d minutos responda com o código %2$sBomba desligadaBomba ligada novamenteO comando remoto não é permitido
@@ -405,12 +404,10 @@
Dividir IOB entre IOB de bolus e de basal na face do relógiosem efeito - por favor verifique no telemóveln/d
- Idade do PacienteCriançaAdolescenteAdultoAdulto resistente insulina
- Por favor seleccione a idade do diabético para definir os limites de segurançaNome do PacientePor favor, forneça nome do paciente ou alcunha para diferenciar entre várias configuraçõesUtilizador
diff --git a/app/src/main/res/values-ro-rRO/exam.xml b/app/src/main/res/values-ro-rRO/exam.xml
index be73b91f50..fd16aa99a9 100644
--- a/app/src/main/res/values-ro-rRO/exam.xml
+++ b/app/src/main/res/values-ro-rRO/exam.xml
@@ -134,8 +134,6 @@
Valorile IC mai mari determină o cantitate mai mică de insulină livrată pentru o cantitate dată de carbohidrați.Valorile IC mai mici determină o cantitate mai mică de insulină livrată pentru o cantitate dată de carbohidrați.Dacă aveți 0 CoB (carbohidrați activi), schimbarea IC va determina modificarea cantității de insulină livrată pentru a corecta glicemia.
- Valoarea IC va fi diferita dacă considerați 1BE (unitate de pâine) ca 10g sau 12g glucide.
- IC înseamnă: Câte unități de pâine sunt acoperite de 1 unitate de insulină.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uSubiect: Schimbarea de profil Atunci când se specifică 90% la schimbarea de profil…
diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml
index 33ac5eea56..9d8e80321a 100644
--- a/app/src/main/res/values-ro-rRO/strings.xml
+++ b/app/src/main/res/values-ro-rRO/strings.xml
@@ -261,7 +261,6 @@
Valoarea %1$s este mai mare decât limita stabilităPentru a conecta pompa raspundeti cu codul %1$sConectarea cu pompa a esuat
- Pentru a deconecta pompa timp de %1d minute, raspundeti cu: %2$sPompă deconectatăPompă reconectatăComanda de la distanță nu este permisă
@@ -405,12 +404,10 @@
Separă IOB în bolus și IOB bazal pe ceasfără succes - verificați telefonulindisponibil
- Vârsta pacientuluiCopilAdolescentAdultAdult rezistent la insulină
- Vă rog să selectați vârsta pacientului în vederea stabilirii valorilor maxime admise de siguranțăNumele pacientuluiVă rugăm să furnizați numele sau porecla pacientului pentru a diferenția între configurăriUtilizator
diff --git a/app/src/main/res/values-ru-rRU/exam.xml b/app/src/main/res/values-ru-rRU/exam.xml
index 732da76770..a131119924 100644
--- a/app/src/main/res/values-ru-rRU/exam.xml
+++ b/app/src/main/res/values-ru-rRU/exam.xml
@@ -136,7 +136,7 @@ Context | Edit Context
Более высокие коэффициенты инсулин-углеводы IC приводят к уменьшению инсулина на данное количество углеводов.Более низкие коэффициенты инсулин-углеводы IC приводят к уменьшению инсулина на данное количество углеводов.Если у вас 0 активных углеводов COB, изменение соотношения инсулин-углеводы IC приведет к иному количеству инсулина на коррекцию данной ГК.
- Соотношение инсулин-углеводы изменится если принимать ХЕ за 10 или 12г.
+ Соотношение инсулин-углеводы IC изменится если принимать ХЕ за 10 или 12г.Смысл соотношения инсулин-углеводы IC таков: сколько хлебных единиц покрываются одной ед. инсулина.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uТема: Переключение Профиля
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 5788656162..82e509ac58 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -261,7 +261,7 @@
Значение %1$s недопустимоЧтобы подсоединить помпу ответьте кодом %1$sОшибка подключения к помпе
- Для разъединения с помпой на %1d мин ответьте кодом %2$s
+ Для разъединения с помпой на %1$d мин ответьте кодом %2$sПомпа отключенаСвязь с помпой возобновленаудаленная команда не разрешена
@@ -405,12 +405,13 @@
разбивка IOB на болюсный и базальный IOB на циферблате смарт-часовнеудача - проверьте телефонн/д
- Возраст пациента
+ Тип пациентаребенокподростоквзрослыйИнсулинорезистентный взрослый
- выберите возраст пациента для определения ограничителей безопасности
+ Беременность
+ Пожалуйста, выберите тип пациента для установки лимитов безопасностиИмя пациентаУкажите имя или псевдоним пациента, чтобы распознавать разные настройкиПользователь
@@ -454,6 +455,8 @@
Критический порог предупреждения о времени, отработанном инсулином [h]Порог предупреждения о времени, отработанном сенсором [h]Критический порог предупреждения о времени, отработанном сенсором [h]
+ Порог предупреждения о разрядке батареи [%]
+ Порог предупреждения о критическом уровне разрядки батареи [%]Порог предупреждения о разрядке батареи [h]Порог предупреждения о критическом уровне разрядки батареи [h]Порог уровня наполненности резервуара для оповещения [ед.]
@@ -484,6 +487,12 @@
Инсулин проработалПереключить профильБатарея помпы работает
+ Сенсор
+ Канюля
+ Инсулин
+ Батарея помпы
+ Возраст:
+ Уровень:опции оповещенияСоздать уведомления из оповещений NSСоздать уведомления из оповещений NS
@@ -1158,6 +1167,9 @@ Context | Edit Context
Сбросить ключ идентификацииВы действительно хотите сбросить ключ аутентификации? Все сконфигурированные в настоящее время ключи станут недопустимы, и придется их настроить заново.Создан новый ключ аутентификации! Для идентификации используйте обновленный QRCode.
+ Экспорт секретного кода OTP
+ Вы действительно хотите скопировать пароль OTP в буфер обмена?\n\nЭто может потребоваться только в том случае, если у вашего приложения идентификации проблемы при сканировании QR кода, вы хотите ввести его вручную или настроить аппаратный маркер OTP с помощью специального приложения.
+ Секретный одноразовый код OTP (в формате Base32) экспортирован и скопирован в буфер обмена. Вставьте его в систему идентификации или аппаратный маркер OTP!1. Установить Аутентификатор2. Код сканирования для настройки кодов OTP AndroidAPS3. Одноразовый Пароль
@@ -1177,6 +1189,7 @@ Context | Edit Context
Копировать параметры из NSКопировать настройки NS (если есть)?Исходная тема оформления
+ Скин для низкого разрешенияКнопки всегда отображаются в нижней части экранаБольшой дисплейТема оформления
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index 2064179e64..7809168e77 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -260,7 +260,6 @@
Hodnota %1$s je mimo prednastavený rozsahAk chcete pripojiť pumpu, odpovedzte pomocou SMS s kódom %1$sPripojenie k pumpe zlyhalo
- Ak chcete odpojiť pumpu na %1d minút, odpovedzte pomocou SMS s kódom %2$sPumpa odpojenáPumpa bola znovu pripojenáPríkazy na diaľku nie sú povolené
@@ -404,12 +403,10 @@
Rozpísať IOB na hodinkách do bolusového a bazálnehoNeúspešné - skontrolujte telefónnie je k dispozícii
- Vek pacientaDieťaDospievajúciDospelýDospelý s nízkou citlivosťou
- Vyberte vek pacienta pre nastavenie bezpečnostných limitovMeno pacientaZadajte meno pacienta, alebo prezývku pre rozlíšenie medzi viacerými nastaveniamiPoužívateľ
diff --git a/app/src/main/res/values-sv-rSE/exam.xml b/app/src/main/res/values-sv-rSE/exam.xml
index 10e769312a..397f0987f1 100644
--- a/app/src/main/res/values-sv-rSE/exam.xml
+++ b/app/src/main/res/values-sv-rSE/exam.xml
@@ -134,8 +134,8 @@
Högre IC-kvot leder till mindre insulin som levereras för en given mängd kolhydrater.Lägre IC-kvot leder till mindre insulin som levereras för en given mängd kolhydrater.Om du har 0 COB, kommer en förändring av IC-kvoten leda till en annan mängd insulin för att korrigera din BG-nivå.
- IC kommer att vara annorlunda om du räknar en skiva bröd som 10g eller 12g.
- IC-betydelsen är: Hur många skivor bröd omfattas av 1U insulin.
+ IC kommer att vara annorlunda om du räknar brödenheter (utbytesenhet) som 10g eller 12g.
+ IC betyder: Hur många brödenheter (utbytesenheter) som omfattas av 1U insulin.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uÄmne: Profilbyte När du anger 90% i profilbytet…
diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml
index bbb31a8e13..6926f1eeb7 100644
--- a/app/src/main/res/values-sv-rSE/strings.xml
+++ b/app/src/main/res/values-sv-rSE/strings.xml
@@ -21,6 +21,7 @@
Visar förutbestämda inställningar för mat i NightscoutInsulininställning för vanliga direktverkande insuliner som Humalog, Lispro, Apidra och Novorapid/NovologInsulininställning för ultrasnabba insuliner, t ex Fiasp
+ Insulininställning för LyumjevLåter dig ställa in tidpunkten för toppen på insulinets aktivitet. Bör bara användas av avancerade användareAktivera eller inaktivera implementationen som kör loopen.Synkroniserar dina data med Nightscout
@@ -261,7 +262,7 @@ Eversense-appen.
Värdet %1$s är utanför hård begränsningFör att ansluta pumpen, svara med kod %1$sAnslutning till pump misslyckades
- För att koppla från pumpen i %1d minuter, svara med kod %2$s
+ För att koppla från pumpen i %1$d minuter, svara med kod %2$sPump frånkoppladPump återanslutenOtillåtet fjärrkommando
@@ -405,12 +406,13 @@ Eversense-appen.
Visa IOB med bolus och basal på klockamisslyckat - kontrollera telefonen-
- Personens ålder
+ PatienttypBarnTonåringVuxenInsulinresistent vuxen
- Vg ange personens ålder för inställningar av gränser
+ Gravid
+ Välj en patienttyp för att ställa in säkerhetsgränserPatientens namnVänligen ange patientens namn eller smeknamn för att kunna skilja mellan flera uppsättningar av inställningarDitt namn
@@ -454,6 +456,8 @@ Eversense-appen.
Insulinålder - akut varning: [h]Sensorålder - varning: [h]Sensorålder - akut varning: [h]
+ Varningsnivå sensorbatteri [%]
+ Kritisk nivå sensorbatteri [%]Batteriålder - varning: [h]Batteriålder - akut varning: [h]Varningsnivå för reservoar [U]
@@ -484,6 +488,12 @@ Eversense-appen.
InsulinålderGenomför profilbytePumpbatteri ålder
+ Sensor
+ Kanyl
+ Insulin
+ Pumpbatteri
+ ålder:
+ nivå:LarminställningarSkapa aviseringar från NS-larmSkapa aviseringar från NS-meddelanden
@@ -536,6 +546,7 @@ Eversense-appen.
Free-Peak OrefRapid-Acting OrefUltra-Rapid Oref
+ Lyumjev%1$f tim DIA är för kort. Använder %2$f istället!Aktivera profilOGILTIG
@@ -798,6 +809,8 @@ Eversense-appen.
Konfigurera BG-källaVänligen välj källa för profil. Om patienten är ett barn bör du använda NS profil. Om ingen följer dig på Nightscout kommer du förmodligen föredra lokal profil. Kom ihåg att du endast väljer profilkälla här. För att använda den måste du aktivera den genom att köra ”Byt Profil”Välj en av dessa algoritmer. De sorteras från den äldsta till nyaste. Nyare algoritm är oftast mer kraftfull och mer aggressiv. Om du är ny som loopanvändare vill du förmodligen börja med AMA och inte med senaste. Glöm inte att läsa dokumentationen om OpenAPS och konfigurera algoritmen innan användning.
+ Väntar på Riley Link-anslutning...\n
+ Du kan fortsätta installationen först när pumpen har initierats.\nPåbörja ditt första målBehörighetBe om behörighet
@@ -987,6 +1000,7 @@ Eversense-appen.
intern lagringsbegränsningFrigör minst %1$d MB från internminnet. Loop inaktiverad!Felaktigt format
+ Durationen måste vara större än 0 och en multipel av %1$d minuter.Fel kod. Kommandot avbrutet.Inte konfigureradSkapade ett profilbyte
@@ -1152,6 +1166,9 @@ Eversense-appen.
Återställ autentiseringsnyckelÄr du säker på att återställa autentiseringsnyckeln? Det gör alla konfigurerade autentiseringsappar ogiltiga och du kommer behöva ställa in dem igen.Ny autentiseringsnyckel genererades! Använd uppdaterad QR-kod till att aktivera autentiserare.
+ Exporterar OTP-hemlighet
+ Är du säker på att du vill kopiera OTP-hemligheten till Urklipp?\n\nDu behöver bara göra detta om din autentiseringsapp har problem QR-koder så du vill ange den manuellt eller om du vill konfigurera OTP-token med hjälp av en dedikerad app.
+ OTP-hemligheten exporteras och kopieras till klippbordet i Base32-format. Klistra in den i autentiseringsfunktionen eller OTP-brännaren!1. Installera autentiseringsapp2. Scanna koden för att ställa in engångslösenord för AndroidAPS3. Testa engångslösenord
@@ -1171,6 +1188,7 @@ Eversense-appen.
Kopiera inställningar från NSKopiera NS-inställningar (om det finns)?Ursprungligt tema
+ Lågupplöst temaKnappar visas alltid längst ned på skärmenStor skärmTema
@@ -1215,4 +1233,5 @@ Eversense-appen.
Jobbstatus: %sUppladdad dataFöljande data kommer att överföras till ditt Open Humans-konto: Glukosvärden, careportalhändelser (utom anteckningar), utökade bolusar, profilbyten, totala dagliga doser, temp basaler, temp mål, inställningar, appversion, enhetsmodell och skärmstorlek. Hemlig eller privat information, t. ex. din Nightscout-adress eller API-hemlighet, kommer inte att överföras.
+ Riley Link-status:
diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml
index 0c525f3183..fd6a4ef74b 100644
--- a/app/src/main/res/values-tr-rTR/strings.xml
+++ b/app/src/main/res/values-tr-rTR/strings.xml
@@ -293,12 +293,10 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
Ayrıntılı IOB gösterWatchface üzerinde IOB\'yi bolus ve bazal IOB\'ye ayırınbaşarısız - lütfen telefonu kontrol edin
- Hasta yaşıÇocukErgenYetişkinYetişkin İnsülin direnci
- Güvenlik sınırlarını ayarlamak için lütfen hasta yaşını seçinizGlimpDöngü durdulduAskıya alındı (%1$d m)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index ec2b5760b4..f3a71d5df5 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -308,12 +308,10 @@
显示详细 IOB在手表的表盘上分别显示大剂量IOB和基础IOB未成功-请检查手机
- 病人年龄儿童青少年成人胰岛素抵抗成人
- 请选择患者年龄以设置安全限制Glimp%1$s 需要加入电池优化白名单才能正常运行闭环暂停了
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 9d3c758f57..b8fb302f4d 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -77,12 +77,14 @@
@string/teenage@string/adult@string/resistantadult
+ @string/pregnant@string/key_child@string/key_teenage@string/key_adult@string/key_resistantadult
+ @string/key_pregnant
diff --git a/app/src/main/res/values/exam.xml b/app/src/main/res/values/exam.xml
index 49dc294fa1..f3a6625011 100644
--- a/app/src/main/res/values/exam.xml
+++ b/app/src/main/res/values/exam.xml
@@ -134,8 +134,8 @@
Higher IC ratios lead to less insulin delivered for a given amount of carbs.Lower IC ratios lead to less insulin delivered for a given amount of carbs.If you have 0 COB, changing the IC ratio will lead to a different amount of insulin to correct a given BG value.
- IC will be different if you count bread unit as 10g or 12g.
- IC meaning is: How many bread units are covered by 1U of insulin.
+ IC will be different if you count bread (exchange) unit as 10g or 12g.
+ IC meaning is: How many bread (exchange) units are covered by 1U of insulin.https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-uTopic: Profile Switching When specifying 90% in profile switch…
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9b6011b98e..e40850f3ec 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -306,7 +306,7 @@
Value %1$s is out of hard limitsTo connect pump reply with code %1$sConnection to pump failed
- To disconnect pump for %1d minutes reply with code %2$s
+ To disconnect pump for %1$d minutes reply with code %2$sPump disconnectedPump reconnectedRemote command is not allowed
@@ -464,17 +464,19 @@
n/asmscommunicator_allowednumberssmscommunicator_remotecommandsallowed
- Patient age
+ Patient typeChildTeenageAdultInsulin resistant adult
+ Pregnancyagechildteenageadultresistantadult
- Please select patient age to setup safety limits
+ pregnant
+ Please select patient type to setup safety limitsPatient namePlease provide patient name or nickname to differentiate among multiple setupsUser
@@ -528,6 +530,10 @@
Threshold warning sensor age [h]statuslights_sage_criticalThreshold critical sensor age [h]
+ statuslights_sbat_warning
+ Threshold warning sensor battery level [%]
+ statuslights_sbat_critical
+ Threshold critical sensor battery level [%]statuslights_bage_warningThreshold warning battery age [h]statuslights_bage_critical
@@ -566,6 +572,12 @@
Insulin ageDo Profile SwitchPump battery age
+ Sensor
+ Canula
+ Insulin
+ Pump battery
+ age:
+ level:Alarm optionsns_announcementsns_alarms
@@ -1405,6 +1417,7 @@
Copy NS settings (if exists)?statuslights_overview_advancedOriginal skin
+ Low Resolution skinButtons are always displayed on bottom of screenLarge displayskin
@@ -1453,4 +1466,6 @@
Uploaded DataThe following data will be uploaded to your Open Humans account: Glucose values, boluses, carbs, careportal events (except notes), extended boluses, profile switches, total daily doses, temporary basals, temp targets, preferences, application version, device model and screen dimensions. Secret or private information such as your Nightscout URL or API secret will not be uploaded.RileyLink status:
+ Filter
+
diff --git a/app/src/main/res/xml/pref_overview.xml b/app/src/main/res/xml/pref_overview.xml
index 77e21cab7b..75f81c96c4 100644
--- a/app/src/main/res/xml/pref_overview.xml
+++ b/app/src/main/res/xml/pref_overview.xml
@@ -360,6 +360,32 @@
validate:minNumber="24"
validate:testType="numericRange" />
+
+
+
+
" + resourceHelper.gs(R.string.absolute) + ": " + DecimalFormatter.to2Decimal(absolute) + " U/h";
}
} else {
- ret += " " + resourceHelper.gs(R.string.comment) + ": " + comment;
+ if (!comment.isEmpty())
+ ret += " " + resourceHelper.gs(R.string.comment) + ": " + comment;
}
return ret;
}
diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/BgSourceInterface.java b/core/src/main/java/info/nightscout/androidaps/interfaces/BgSourceInterface.java
index d42ead7950..6a38de63b7 100644
--- a/core/src/main/java/info/nightscout/androidaps/interfaces/BgSourceInterface.java
+++ b/core/src/main/java/info/nightscout/androidaps/interfaces/BgSourceInterface.java
@@ -9,4 +9,8 @@ public interface BgSourceInterface {
boolean advancedFilteringSupported();
void handleNewData(Intent intent);
+
+ default int getSensorBatteryLevel() {
+ return -1;
+ }
}
diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/ProfileFunction.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/ProfileFunction.kt
index 64582a62d9..bab94ab5c4 100644
--- a/core/src/main/java/info/nightscout/androidaps/interfaces/ProfileFunction.kt
+++ b/core/src/main/java/info/nightscout/androidaps/interfaces/ProfileFunction.kt
@@ -13,5 +13,6 @@ interface ProfileFunction {
fun getProfile(): Profile?
fun getUnits(): String
fun getProfile(time: Long): Profile?
+ fun getProfile(time: Long, activeTreatments: TreatmentsInterface): Profile?
fun prepareProfileSwitch(profileStore: ProfileStore, profileName: String, duration: Int, percentage: Int, timeShift: Int, date: Long): ProfileSwitch
}
\ No newline at end of file
diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java b/core/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java
index 8c8d7f026f..c17fc1119f 100644
--- a/core/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java
+++ b/core/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java
@@ -55,6 +55,8 @@ public interface TreatmentsInterface {
NonOverlappingIntervals getTemporaryBasalsFromHistory();
+ void removeTempBasal(TemporaryBasal temporaryBasal);
+
boolean isInHistoryExtendedBoluslInProgress();
ExtendedBolus getExtendedBolusFromHistory(long time);
diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt b/core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt
index ed084120f4..6156142755 100644
--- a/core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt
+++ b/core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt
@@ -11,6 +11,7 @@ import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.interfaces.ProfileStore
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.ProfileFunction
+import info.nightscout.androidaps.interfaces.TreatmentsInterface
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
@@ -70,8 +71,9 @@ class ProfileFunctionImplementation @Inject constructor(
override fun getProfile(): Profile? =
getProfile(System.currentTimeMillis())
- override fun getProfile(time: Long): Profile? {
- val activeTreatments = activePlugin.activeTreatments
+ override fun getProfile(time: Long): Profile? = getProfile(time, activePlugin.activeTreatments)
+
+ override fun getProfile(time: Long, activeTreatments: TreatmentsInterface): Profile? {
val activeProfile = activePlugin.activeProfileInterface
//log.debug("Profile for: " + new Date(time).toLocaleString() + " : " + getProfileName(time));
diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java
index a7ef33c786..1c81ebbce9 100644
--- a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java
+++ b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java
@@ -73,6 +73,7 @@ public class Notification {
public static final int CARBS_REQUIRED = 60;
public static final int OMNIPOD_POD_SUSPENDED = 61;
public static final int OMNIPOD_POD_ALERTS_UPDATED = 62;
+ public static final int OMNIPOD_POD_ALERTS = 63;
public static final int IMPORTANCE_HIGH = 2;
diff --git a/core/src/main/res/values-bg-rBG/strings.xml b/core/src/main/res/values-bg-rBG/strings.xml
index dda69073db..37464462bd 100644
--- a/core/src/main/res/values-bg-rBG/strings.xml
+++ b/core/src/main/res/values-bg-rBG/strings.xml
@@ -170,7 +170,6 @@
Изчаква резултат от помпатаSMB
- %dгр допълнителни въглехидрати ще са необходими до %d минутиСтатистикаКомулативна TDD
diff --git a/core/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml
index bf30fdf148..32f5fd4a36 100644
--- a/core/src/main/res/values-cs-rCZ/strings.xml
+++ b/core/src/main/res/values-cs-rCZ/strings.xml
@@ -170,7 +170,7 @@
Čekání na výsledekSMB
- Požadováno dalších %d g sacharidů během %d minut
+ Požadováno dalších %1$d g sacharidů během %2$d minutStatistikyKumulativní CDD
diff --git a/core/src/main/res/values-de-rDE/strings.xml b/core/src/main/res/values-de-rDE/strings.xml
index 5883891969..3c0f7e48dd 100644
--- a/core/src/main/res/values-de-rDE/strings.xml
+++ b/core/src/main/res/values-de-rDE/strings.xml
@@ -170,7 +170,7 @@
Auf Pumpenergebnis wartenSMB
- %d g zusätzliche Kohlenhydrate innerhalb von %d Minuten erforderlich
+ %1$d g zusätzliche Kohlenhydrate innerhalb von %2$d Minuten erforderlichStatistikKumulative TDD
diff --git a/core/src/main/res/values-es-rES/strings.xml b/core/src/main/res/values-es-rES/strings.xml
index 050222388b..f22c6ac7d3 100644
--- a/core/src/main/res/values-es-rES/strings.xml
+++ b/core/src/main/res/values-es-rES/strings.xml
@@ -170,7 +170,6 @@
Esperando resultadoSMB
- %dg Carbohidratos adicionales necesarios dentro De %d minutosEstadísticasTDD acumulativa
diff --git a/core/src/main/res/values-fr-rFR/strings.xml b/core/src/main/res/values-fr-rFR/strings.xml
index 05bc714163..d37051c4c9 100644
--- a/core/src/main/res/values-fr-rFR/strings.xml
+++ b/core/src/main/res/values-fr-rFR/strings.xml
@@ -170,7 +170,7 @@
Attente de résultatSMB
- %d g de glucides supplémentaires requis d\'ici %d minutes
+ %1$dg de glucides requis dans %2$d min.StatsDTI cumulé
diff --git a/core/src/main/res/values-it-rIT/strings.xml b/core/src/main/res/values-it-rIT/strings.xml
index 0c9e203fd4..af87258fbc 100644
--- a/core/src/main/res/values-it-rIT/strings.xml
+++ b/core/src/main/res/values-it-rIT/strings.xml
@@ -170,7 +170,7 @@
In attesa del risultatoSMB
- %d g di CHO aggiuntivi richiesti entro %d minuti
+ %1$d g di CHO aggiuntivi richiesti entro %2$d minutiStatisticheTDD cumulativo
diff --git a/core/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml
index b47480e9ec..c79a44770a 100644
--- a/core/src/main/res/values-iw-rIL/strings.xml
+++ b/core/src/main/res/values-iw-rIL/strings.xml
@@ -2,27 +2,216 @@
+ שגיאה
+ לא הוגדר
+ עדכון הפרופיל הבזאלי נכשל
+ הפרופיל הבזאלי עודכן במשאבה
+ קלט לא חוקי
+ שגיאת אספקה של בזאלי זמני
+ עומד להזריק %1$.2f יח\'
+ ממתין למשאבה
+ מתחבר במשך %1$d שניות
+ מזריק כעת %1$.2f יח\'
+ לוחץ יד
+ מתחבר
+ מחובר
+ מנותק
+ מתנתק
+ AndroidAPS הופעל
+ %1$.1f יח\'
+ %1$.2f יח\'
+ %1$+.2f יח\'
+ %1$d גר\'
+ %1$.0f / %2$d יח\'
+ %1$.2f יח\' לשעה
+ %1$.2f שע\'
+ %1$d דק\'
+ המשאבה אינה פנויה
+ שגיאה בחיבור המשאבה
+ הגיעתם למגבלה המותרת
+ משימות
+ סגור
+ נא להמתין…
+ השתק
+ טען מחדש
+ נלחץ עצור
+ עצור
+ פחמימות
+ פרופיל לא חוקי !!!
+ לא הוגדר פרופיל
+ תאריך
+ יחידות
+ DIA
+ IC
+ ISF
+ אינסולין בזאלי
+ ערך מטרה
+ מאתחל...
+ מספר סידורי
+ סוללה
+ התחברות אחרונה
+ בולוס אחרון
+ יחידות יומיות
+ בזאלי בסיסי
+ בזאלי זמני
+ בולוס ממושך
+ מכל
+ היסטוריית המשאבה
+ הצג פרופיל
+ סוג האירוע
+ mg/dL
+ mmol/L
+ הגדרות מתקדמות
+ בלוטות\'
+ BT Watchdog
+ מכבה את הבלוטות\' של הטלפון לשנייה אחת אם לא ניתן לתקשר עם המשאבה. זה עשוי לעזור במס\' דגמי טלפונים שבהם מערכת הבלוטות\' קופאת.
+ מזווג
+ מגביל את הקצב הבזאלי המרבי ל-%1$.2f יח\' לשעה בגלל %2$s
+ מגבלת משאבה
+ מגביל את אחוז הקצב הבזאלי המרבי ל-%1$d%% בגלל %2$s
+ זה חייב להיות ערך חיובי
+ מגביל בולוס ל-%1$.1f יח\' בגלל %2$s
+ משאבה לא אותחלה! לא נקבע פרופיל!
+ אישור
+ הודעה
+ אישור
+ ביטול
+ בטל
+ בלוטות\' באנרגיה נמוכה לא נתמך.
+ בלוטות\' כבוי.
+ המיקום אינו מופעל
+ בכדי שסריקת בלוטות\' תעבוד יש לאפשר את שירות המיקום. AAPS לא עוקב אחר המיקום שלכם וניתן להפסיק את השירות לאחר סיום הזיווג.
+ לפני %1$d דקות
+ לפני %1$.1f שעות
+ ש\'
+ ימים
+ שעות
+ שניה
+ דקה
+ שעה
+ יום
+ שבוע
+ שניות
+ דקות
+ שעות
+ ימים
+ שבועות
+ דק\'
+ י\'
+ סיסמה שגויה
+ הסיסמאות אינן תואמות
+ ערכי הבזאלי לא מותאמים לשעות: %1$s
+ ערכי הבזאלי הוחלפו בהערכים המינימליים שנתמכים: %1$s
+ ערכי הבזאלי הוחלפו בערכים הנתמכים המינימליים: %1$s
+ /יח\'
+ יח\'\שע\'
+ גר\'\יח\'
+ לא נבחר פרופיל
+ * רק ערכים בדידים, טווחים אינם נתמכים עבור ערכי בזאלי ובולוס במשאבה וירטואלית.
+ ביטול בזאלי זמני
+ אפשר לבזאלי זמני לרוץ
+ דרג
+ משך
+ סיבה
+ אין בקשות החלפה
+ פרופיל לא חוקי: %1$s
+ %1$d דק\'
+ %1$s: ∑: %2$.2f יחידות בולוס: %3$.2f יחידות בזאלי: %4$.2f יחידות(%5$.0f%%)]]>
+ %1$s: ∑: %2$.2f יחידות בולוס: %3$.2f יחידות בזאלי: %4$.2f יחידות(%5$.0f%%) פחמ: %6$.0f גרם]]>
+ בדיקת רמת סוכר בדם
+ רמת סוכר ידנית או כיול
+ הודעה
+ הערה
+ שאלה
+ פעילות גופנית
+ החלפת פרפרית
+ חיבור סנסור
+ התחלת סנסור חדש
+ החלפת מחסנית אינסולין
+ החלפת פרופיל
+ בולוס חטיף
+ בולוס ארוחה
+ בולוס תיקון
+ בולוס משולב
+ התחלת בזאלי זמני
+ סיום בזאלי זמני
+ תיקון פחמימות
+ OpenAPS במצב לא מקוון
+ החלפת סוללת משאבה
+ ערך מטרה זמני
+ ביטול ערך מטרה זמני
+ אצבע
+ חיישן
+ ידני
+ לא ידוע
+ החיבור חרג ממגבלת הזמן
+ נקבע
+ תגובה
+ הצלחה
+ אחוז
+ מוחלט
+ אינסולין
+ יחידות
+ ממתין לתוצאות
+ SMB
+ %1$d גר\' פחמימות דרושות ב-%2$d הדקות הקרובות
+ סטטיסטיקה
+ מינון יומי מצטבר (TDD)
+ TDD משוקלל אקספוננציאלי
+ בזאלי
+ בולוס
+ מינון יומי כולל (TDD)
+ יחס
+ # ימים
+ משקל
+ שימוש בבולוס למילוי / פריימינג עשוי לגרום לחוסר דיוק!
+ הנתונים ישנים. לרענון לחצו \"טען מחדש\"
+ סה\"כ בזאלי בסיסי
+ סה\"כ בזאלי בסיסי * 2
+ זיהוי שעה
+ %1$d ש\' %2$d דק\'
+ הפעולה לא נתמכת ע\"י המשאבה ו\או מנהל התקן.
+ הפעולה עוד לא נתמכת על ידי המשאבה.
+ אישור
+ מעולם לא נוצר קשר
+ מתעורר
+ שגיאת תקשורת
+ חריגה ממגבלת הזמן בתקשורת
+ המשאבה לא זמינה
+ קונפיגורציה לא חוקית
+ פעיל
+ ישן
+ בזאלים
+ קונפיגורציות
+ התראות
+ סטטיסטיקה
+ לא ידועים
+ כל
+ בולוסים
+ מילוי
+ התראות
+ גלוקוז
diff --git a/core/src/main/res/values-lt-rLT/strings.xml b/core/src/main/res/values-lt-rLT/strings.xml
index 2d24ad2fc1..8c8a687481 100644
--- a/core/src/main/res/values-lt-rLT/strings.xml
+++ b/core/src/main/res/values-lt-rLT/strings.xml
@@ -170,7 +170,6 @@
Laukiama rezultatoSMB
- Būtina suvartoti %d g papildomų AV per %d minStatistikaBPD viso
diff --git a/core/src/main/res/values-nl-rNL/strings.xml b/core/src/main/res/values-nl-rNL/strings.xml
index 1aec4f4c0e..54f299ecf4 100644
--- a/core/src/main/res/values-nl-rNL/strings.xml
+++ b/core/src/main/res/values-nl-rNL/strings.xml
@@ -170,7 +170,6 @@
Wachtend op resultaatSMB
- %d g extra koolhydraten nodig binnen %d minutenStatistiekenCumulatieve TDD
diff --git a/core/src/main/res/values-no-rNO/strings.xml b/core/src/main/res/values-no-rNO/strings.xml
index 58134736fd..c9e12c5a0f 100644
--- a/core/src/main/res/values-no-rNO/strings.xml
+++ b/core/src/main/res/values-no-rNO/strings.xml
@@ -170,7 +170,7 @@
Venter på resultatSMB
- %d g ekstra karbo kreves innen %d minutter
+ %1$d g ekstra karbohydrater kreves innen %2$d minutterStatistikkAkkumulert TDD
diff --git a/core/src/main/res/values-pl-rPL/strings.xml b/core/src/main/res/values-pl-rPL/strings.xml
index e1332c1f87..9b738dc373 100644
--- a/core/src/main/res/values-pl-rPL/strings.xml
+++ b/core/src/main/res/values-pl-rPL/strings.xml
@@ -170,7 +170,7 @@
Oczekiwanie na wynikSMB
- Zalecane podanie %d g węglowodanów w przeciągu %d minut
+ Zalecane podanie %1$d g węglowodanów w przeciągu %2$d minutStatystykiKumulatywna TDD (dawka dzienna)
diff --git a/core/src/main/res/values-pt-rPT/strings.xml b/core/src/main/res/values-pt-rPT/strings.xml
index 23444504a2..39fdfeb07d 100644
--- a/core/src/main/res/values-pt-rPT/strings.xml
+++ b/core/src/main/res/values-pt-rPT/strings.xml
@@ -170,7 +170,6 @@
À espera de resultadoSMB
- %d g Hidratos Adicionais Necessários Dentro de %d MinutosEstatísticasDose diária acumulativa
diff --git a/core/src/main/res/values-ro-rRO/strings.xml b/core/src/main/res/values-ro-rRO/strings.xml
index 3323e07643..47aeb6bf40 100644
--- a/core/src/main/res/values-ro-rRO/strings.xml
+++ b/core/src/main/res/values-ro-rRO/strings.xml
@@ -171,7 +171,6 @@
Se așteaptă rezultatulSMB
- %d g carbohidrați suplimentari necesari în %d minuteStatisticiTDD cumulat
diff --git a/core/src/main/res/values-ru-rRU/strings.xml b/core/src/main/res/values-ru-rRU/strings.xml
index 86e299c539..b297696ba5 100644
--- a/core/src/main/res/values-ru-rRU/strings.xml
+++ b/core/src/main/res/values-ru-rRU/strings.xml
@@ -170,7 +170,7 @@
Ожидание результатаСупер микро болюс SMB
- Необходимо дополнительно %d г углеводов в течение %d минут
+ Необходимо дополнительно %1$d г углеводов в течение %2$d минутСтатистиканакопительные TDD
diff --git a/core/src/main/res/values-sk-rSK/strings.xml b/core/src/main/res/values-sk-rSK/strings.xml
index 9770c113fa..453614d602 100644
--- a/core/src/main/res/values-sk-rSK/strings.xml
+++ b/core/src/main/res/values-sk-rSK/strings.xml
@@ -170,7 +170,6 @@
Čakanie na výsledokSMB
- %d g dodatočných sacharidov požadovaných v priebehu %d minútŠtatistikyKumulatívny TDD
diff --git a/core/src/main/res/values-sv-rSE/strings.xml b/core/src/main/res/values-sv-rSE/strings.xml
index 1c03ae8201..f95262eb2a 100644
--- a/core/src/main/res/values-sv-rSE/strings.xml
+++ b/core/src/main/res/values-sv-rSE/strings.xml
@@ -170,7 +170,7 @@
Väntar på resultatSMB
- %dg KH behövs inom %d minuter
+ %1$dg KH behövs inom %2$d minuterStatistikKumulativ TDD
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index cf0ba8bd9d..87e58a0b45 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -213,7 +213,7 @@
SMB
- %d g Additional Carbs Required Within %d Minutes
+ %1$d g Additional Carbs Required Within %2$d MinutesStats
diff --git a/dana/src/main/res/values-iw-rIL/strings.xml b/dana/src/main/res/values-iw-rIL/strings.xml
index 3ea04e700d..dce7b1073c 100644
--- a/dana/src/main/res/values-iw-rIL/strings.xml
+++ b/dana/src/main/res/values-iw-rIL/strings.xml
@@ -1,2 +1,121 @@
-
+
+ מזווג
+ לא נמצאו מכשירים עד כה
+ הזיווג הצליח
+ הזיווג חרג ממגבלת הזמן
+ מחכה לזיווג עם משאבה
+ DanaRS
+ Dana
+ חיבור משאבת DANA Diabecare RS
+ בולוס גבוה מדי
+ שגיאת פקודה
+ שגיאת מהירות
+ כמות אינסולין גבוהה מדי
+ התבקש: %1$.2f יח\' הוזרק: %2$.2f יח\' קוד שגיאה: %3$s
+ ערך לא מוגדר כראוי
+ הגדר מינון באזלי ל-0.01 יח\'\שעה
+ לאפס את נתוני הזיווג?
+ %1$s\nדגם: %2$02X\nפרוטוקול: %3$02X\nקוד: %4$02X
+ מעבד אירוע
+ אפשר בזאלי ממושך במשאבה
+ הוזרק
+ נעצר
+ קושחת משאבה לא נתמכת
+ תקלת משאבה
+ סוללה חלשה
+ מספק כמות פחותה מהמינון הבזאלי שהוגדר מראש
+ משאבה כבויה
+ סוללת משאבה לא טעונה
+ חסימה
+ מכל ריק
+ נא לבדוק את הבוכנה
+ באזלי מקסימלי
+ מקסימום יומי
+ התראת מדידת סוכר בדם
+ רמת אינסולין נותרת
+ החמיץ בולוס
+ נתוני הזיווג אינם חוקיים. מבצע זיווג מחדש
+ מקבל סטטוס המשאבה
+ מקבל סטטוס בולוס ממושך
+ מקבל סטטוס בולוס
+ מקבל סטטוס בזאלי זמני
+ מקבל הגדרות משאבה
+ מקבל תאריך ושעת המשאבה
+ הפרש זמן גדול
+ הפרש זמן גדול:\nשעון המשאבה לא מכוון במעל ל-1.5 שעות.\n נא להתאים את השעון במשאבה באופן ידני ולוודא כי קריאת ההיסטוריה מהמשאבה אינה גורמת להתנהגות בלתי צפויה.\nבמידת האפשר, מחקו את ההיסטוריה מהמשאבה לפני שתשנו את השעה או השביתו את הלולאה הסגורה למשך פעילות אינסולין (DIA) לאחר רשומת ההיסטוריה השגויה האחרונה אך לפחות DIA אחד מעכשיו.
+ נא לזווג את המשאבה עם הטלפון שלכם!
+ מתקרב למגבלת האינסולין היומית
+ מתחיל מתן בולוס
+ המתינו לסיום מתן הבולוס. נותרו %1$d שניות.
+ הפסקת בזאלי זמני
+ מגדיר בולוס ממושך
+ מפסיק בולוס ממושך
+ מעדכן את הקצב הבזאלי
+ הגדרת בזאלי זמני
+ ממתין לסינכרון השעון (%1$d שנ\')
+ סיסמת משאבה שגויה!
+ התראות
+ שעות בזאלי
+ בולוסים
+ פחמימות
+ אינסולין יומי
+ שגיאות
+ גלוקוז
+ מילוי מחדש
+ השהיה
+ מילוי
+ אפשרויות משתמש
+ מבנה הצגת השעה
+ לחצן גלילה
+ צפצוף בלחיצה על כפתורים
+ התראה
+ צלילים
+ רטט
+ שניהם
+ זמן הפעלת מסך [seconds]
+ זמן תאורת מסך [seconds]
+ יחידות גלוקוז
+ כיבוי [hours]
+ מכל נמוך [Units]
+ שמירת הגדרות במשאבה
+ חיבור משאבת DANA Diabecare R
+ חיבור משאבת DANA Diabecare R מהשוק הקוריאני
+ חיבור משאבת DANA Diabecare R עם קושחה משודרגת
+ DANA
+ לא נמצא מתאם בלוטות\'
+ ההתקן שנבחר לא נמצא
+ שנה מצב מיח\' ליום ליח\' לשעה במשאבה
+ DanaR קוריאנית
+ DanaR
+ דרייבר המשאבה תוקן
+ DanaRv2
+ ביטול מצב EasyUI במשאבה
+ הגדרת פרופיל הבזאלי נכשל
+ מצב בלוטות\'
+ אינסולין פעיל מהמשאבה
+ צעד במינון בזאלי
+ צעד במינון בולוס
+ קושחה
+ הגדרות משאבת Dana
+ 12 שע\'
+ 24 שע\'
+ מופעל
+ כבוי
+ מכשיר בלוטות\' DanaR
+ סיסמת משאבה (v1 בלבד)
+ סיסמת משאבה
+ השתמש בבולוס ממושך של >200%%
+ הצגת בולוס ממושך כ-%%
+ מהירות בולוס
+ בחרו משאבה
+ רשום החלפת מכל
+ הוסף אירוע \"החלפת אינסולין\" לפורטל הטיפולים כשימצא בהיסטוריה
+ רשום החלפת צינורית
+ הוסף אירוע \"החלפת צינורית\" לפורטל הטיפולים כשימצא בהיסטוריה
+ PIN1
+ PIN2
+ לחצו OK במשאבה\nוהכניסו את שני המספרים המוצגים\nהשאירו את מסך המשאבה מופעל ע\"י לחיצה על לחצן מינוס עד סיום הכנסת הקוד.
+ 1: (12 ספרות)
+ 2: (8 ספרות)
+
diff --git a/dana/src/main/res/values-sv-rSE/strings.xml b/dana/src/main/res/values-sv-rSE/strings.xml
index e360cafe02..f48d7bff78 100644
--- a/dana/src/main/res/values-sv-rSE/strings.xml
+++ b/dana/src/main/res/values-sv-rSE/strings.xml
@@ -115,8 +115,7 @@
Logga kanylbyte automatiskt när det upptäcks i historikenPIN1PIN2
- Tryck på OK på pumpen och skriv in de två\nnycklarna som visas på pumpens skärm.\n
-\nFör att förhindra att skärmen släcks, tryck\npå minus (-) tills du skrivit in nycklarna.
+ Tryck på OK på pumpen och skriv in nycklarna som visas på skärmen. För att förhindra att pumpskärmen släcks, tryck på minus (-) ibland.1: (12 tecken)2: (8 tecken)
diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSettingPumpTime.kt b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSettingPumpTime.kt
index d8d216c16e..5e758b0479 100644
--- a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSettingPumpTime.kt
+++ b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSettingPumpTime.kt
@@ -28,6 +28,7 @@ class MsgSettingPumpTime(
}
override fun handleMessageNotReceived() {
+ super.handleMessageNotReceived()
danaPump.resetPumpTime()
}
}
\ No newline at end of file
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt b/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt
index 2979ab605a..cc20b91d22 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt
@@ -210,7 +210,7 @@ class DanaRSPlugin @Inject constructor(
}
override fun isSuspended(): Boolean {
- return danaPump.pumpSuspended
+ return danaPump.pumpSuspended || danaPump.errorState != DanaPump.ErrorState.NONE
}
override fun isBusy(): Boolean {
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/activities/BLEScanActivity.kt b/danars/src/main/java/info/nightscout/androidaps/danars/activities/BLEScanActivity.kt
index f49ee80376..85f68f5290 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/activities/BLEScanActivity.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/activities/BLEScanActivity.kt
@@ -15,9 +15,9 @@ import android.widget.BaseAdapter
import android.widget.TextView
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
import info.nightscout.androidaps.danars.R
+import info.nightscout.androidaps.danars.events.EventDanaRSDeviceChange
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.pump.common.ble.BlePreCheck
-import info.nightscout.androidaps.danars.events.EventDanaRSDeviceChange
import info.nightscout.androidaps.utils.sharedPreferences.SP
import kotlinx.android.synthetic.main.danars_blescanner_activity.*
import java.util.*
@@ -63,13 +63,17 @@ class BLEScanActivity : NoSplashAppCompatActivity() {
stopScan()
}
- private fun startScan() {
- if (bluetoothLeScanner != null) bluetoothLeScanner!!.startScan(mBleScanCallback)
- }
+ private fun startScan() =
+ try {
+ bluetoothLeScanner?.startScan(mBleScanCallback)
+ } catch (e: IllegalStateException) {
+ } // ignore BT not on
- private fun stopScan() {
- if (bluetoothLeScanner != null) bluetoothLeScanner!!.stopScan(mBleScanCallback)
- }
+ private fun stopScan() =
+ try {
+ bluetoothLeScanner?.stopScan(mBleScanCallback)
+ } catch (e: IllegalStateException) {
+ } // ignore BT not on
private fun addBleDevice(device: BluetoothDevice?) {
if (device == null || device.name == null || device.name == "") {
@@ -90,6 +94,7 @@ class BLEScanActivity : NoSplashAppCompatActivity() {
}
internal inner class ListAdapter : BaseAdapter() {
+
override fun getCount(): Int = devices.size
override fun getItem(i: Int): BluetoothDeviceItem = devices[i]
override fun getItemId(i: Int): Long = 0
@@ -111,6 +116,7 @@ class BLEScanActivity : NoSplashAppCompatActivity() {
}
private inner class ViewHolder internal constructor(v: View) : View.OnClickListener {
+
private lateinit var item: BluetoothDeviceItem
private val name: TextView = v.findViewById(R.id.ble_name)
private val address: TextView = v.findViewById(R.id.ble_address)
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet.java b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet.java
index 87ff77d0e6..ff99f0d891 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet.java
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet.java
@@ -38,6 +38,9 @@ public class DanaRS_Packet {
injector.androidInjector().inject(this);
}
+ public boolean success() {
+ return !failed;
+ }
public void setReceived() {
received = true;
}
@@ -74,6 +77,7 @@ public class DanaRS_Packet {
}
public void handleMessageNotReceived() {
+ failed = true;
}
public String getFriendlyName() {
@@ -194,7 +198,7 @@ public class DanaRS_Packet {
@TargetApi(Build.VERSION_CODES.KITKAT)
- public String asciiStringFromBuff(byte[] buff, int offset, int length) {
+ public static String asciiStringFromBuff(byte[] buff, int offset, int length) {
byte[] strbuff = new byte[length];
System.arraycopy(buff, offset, strbuff, 0, length);
return new String(strbuff, StandardCharsets.UTF_8);
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Get_24_CIR_CF_Array.kt b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Get_24_CIR_CF_Array.kt
index 5f8be76b2e..1d9b752cf9 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Get_24_CIR_CF_Array.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Get_24_CIR_CF_Array.kt
@@ -20,8 +20,8 @@ class DanaRS_Packet_Bolus_Get_24_CIR_CF_Array(
override fun handleMessage(data: ByteArray) {
danaPump.units = byteArrayToInt(getBytes(data, DATA_START, 1))
for (i in 0 .. 23) {
- val cf = byteArrayToInt(getBytes(data, DATA_START + 1 + 2 * i, 2)).toDouble()
- val cir = if (danaPump.units == DanaPump.UNITS_MGDL)
+ val cir = byteArrayToInt(getBytes(data, DATA_START + 1 + 2 * i, 2)).toDouble()
+ val cf = if (danaPump.units == DanaPump.UNITS_MGDL)
byteArrayToInt(getBytes(data, DATA_START + 1 + 48 + 2 * i, 2)).toDouble()
else
byteArrayToInt(getBytes(data, DATA_START + 1 + 48 + 2 * i, 2)) / 100.0
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Set_24_CIR_CF_Array.kt b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Set_24_CIR_CF_Array.kt
index 7a0e925ab6..ab0ee772bf 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Set_24_CIR_CF_Array.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Bolus_Set_24_CIR_CF_Array.kt
@@ -1,11 +1,13 @@
package info.nightscout.androidaps.danars.comm
import dagger.android.HasAndroidInjector
+import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.dana.DanaPump
import info.nightscout.androidaps.danars.encryption.BleEncryption
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.logging.LTag
import javax.inject.Inject
+import kotlin.math.round
class DanaRS_Packet_Bolus_Set_24_CIR_CF_Array(
injector: HasAndroidInjector,
@@ -25,12 +27,15 @@ class DanaRS_Packet_Bolus_Set_24_CIR_CF_Array(
val cfStart = 24 * 2
for (i in 0..23) {
var isf = profile.getIsfMgdlTimeFromMidnight(i * 3600)
- if (danaPump.units == DanaPump.UNITS_MMOL) isf *= 10
- val ic = profile.getIcTimeFromMidnight(i * 3600) * 100
- request[2 * i] = (isf.toInt() and 0xff).toByte()
- request[2 * i] = (isf.toInt() ushr 8 and 0xff).toByte()
- request[cfStart + 2 * i] = (ic.toInt() and 0xff).toByte()
- request[cfStart + 2 * i] = (ic.toInt() ushr 8 and 0xff).toByte()
+ if (danaPump.units == DanaPump.UNITS_MMOL) {
+ isf = Profile.fromMgdlToUnits(isf, Constants.MMOL)
+ isf *= 100
+ }
+ val ic = profile.getIcTimeFromMidnight(i * 3600)
+ request[2 * i] = (round(ic).toInt() and 0xff).toByte()
+ request[2 * i + 1] = (round(ic).toInt() ushr 8 and 0xff).toByte()
+ request[cfStart + 2 * i] = (round(isf).toInt() and 0xff).toByte()
+ request[cfStart + 2 * i + 1] = (round(isf).toInt() ushr 8 and 0xff).toByte()
}
return request
}
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_General_Initial_Screen_Information.kt b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_General_Initial_Screen_Information.kt
index e077e30fe9..8eeb017ebb 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_General_Initial_Screen_Information.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_General_Initial_Screen_Information.kt
@@ -57,8 +57,8 @@ class DanaRS_Packet_General_Initial_Screen_Information(
//protocol 10+
dataIndex += dataSize
dataSize = 1
- danaPump.errorState = info.nightscout.androidaps.dana.DanaPump.ErrorState[byteArrayToInt(getBytes(data, dataIndex, dataSize))]
- ?: info.nightscout.androidaps.dana.DanaPump.ErrorState.NONE
+ danaPump.errorState = DanaPump.ErrorState[byteArrayToInt(getBytes(data, dataIndex, dataSize))]
+ ?: DanaPump.ErrorState.NONE
aapsLogger.debug(LTag.PUMPCOMM, "ErrorState: " + danaPump.errorState.name)
}
aapsLogger.debug(LTag.PUMPCOMM, "Pump suspended: " + danaPump.pumpSuspended)
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_Time.kt b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_Time.kt
index 11659879e3..ded5b89540 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_Time.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_Time.kt
@@ -31,6 +31,7 @@ class DanaRS_Packet_Option_Get_Pump_Time(
}
override fun handleMessageNotReceived() {
+ super.handleMessageNotReceived()
danaPump.resetPumpTime()
}
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_UTC_And_TimeZone.kt b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_UTC_And_TimeZone.kt
index 9f35fcb82c..61040521ea 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_UTC_And_TimeZone.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Option_Get_Pump_UTC_And_TimeZone.kt
@@ -32,6 +32,7 @@ class DanaRS_Packet_Option_Get_Pump_UTC_And_TimeZone(
}
override fun handleMessageNotReceived() {
+ super.handleMessageNotReceived()
danaPump.resetPumpTime()
}
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt b/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt
index 23873e34e9..06c6dbd9ab 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt
@@ -11,6 +11,7 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.dana.DanaPump
+import info.nightscout.androidaps.dana.comm.RecordTypes
import info.nightscout.androidaps.dana.events.EventDanaRNewStatus
import info.nightscout.androidaps.danars.DanaRSPlugin
import info.nightscout.androidaps.danars.R
@@ -234,12 +235,13 @@ class DanaRSService : DaggerService() {
lastHistoryFetched = if (danaPump.lastEventTimeLoaded != 0L) danaPump.lastEventTimeLoaded - T.mins(1).msecs() else 0
aapsLogger.debug(LTag.PUMPCOMM, "Events loaded")
danaPump.lastConnection = System.currentTimeMillis()
- return PumpEnactResult(injector).success(true)
+ return PumpEnactResult(injector).success(msg.success())
}
fun setUserSettings(): PumpEnactResult {
- sendMessage(DanaRS_Packet_Option_Set_User_Option(injector))
- return PumpEnactResult(injector).success(true)
+ val message = DanaRS_Packet_Option_Set_User_Option(injector)
+ sendMessage(message)
+ return PumpEnactResult(injector).success(message.success())
}
fun bolus(insulin: Double, carbs: Int, carbTime: Long, t: Treatment): Boolean {
@@ -332,12 +334,13 @@ class DanaRSService : DaggerService() {
SystemClock.sleep(500)
}
rxBus.send(EventPumpStatusChanged(resourceHelper.gs(R.string.settingtempbasal)))
- sendMessage(DanaRS_Packet_Basal_Set_Temporary_Basal(injector, percent, durationInHours))
+ val msgTBR = DanaRS_Packet_Basal_Set_Temporary_Basal(injector, percent, durationInHours)
+ sendMessage(msgTBR)
SystemClock.sleep(200)
sendMessage(DanaRS_Packet_Basal_Get_Temporary_Basal_State(injector))
loadEvents()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING))
- return true
+ return msgTBR.success()
}
fun highTempBasal(percent: Int): Boolean {
@@ -347,11 +350,12 @@ class DanaRSService : DaggerService() {
SystemClock.sleep(500)
}
rxBus.send(EventPumpStatusChanged(resourceHelper.gs(R.string.settingtempbasal)))
- sendMessage(DanaRS_Packet_APS_Basal_Set_Temporary_Basal(injector, percent))
+ val msgTBR = DanaRS_Packet_APS_Basal_Set_Temporary_Basal(injector, percent)
+ sendMessage(msgTBR)
sendMessage(DanaRS_Packet_Basal_Get_Temporary_Basal_State(injector))
loadEvents()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING))
- return true
+ return msgTBR.success()
}
fun tempBasalShortDuration(percent: Int, durationInMinutes: Int): Boolean {
@@ -365,42 +369,46 @@ class DanaRSService : DaggerService() {
SystemClock.sleep(500)
}
rxBus.send(EventPumpStatusChanged(resourceHelper.gs(R.string.settingtempbasal)))
- sendMessage(DanaRS_Packet_APS_Basal_Set_Temporary_Basal(injector, percent))
+ val msgTBR = DanaRS_Packet_APS_Basal_Set_Temporary_Basal(injector, percent)
+ sendMessage(msgTBR)
sendMessage(DanaRS_Packet_Basal_Get_Temporary_Basal_State(injector))
loadEvents()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING))
- return true
+ return msgTBR.success()
}
fun tempBasalStop(): Boolean {
if (!isConnected) return false
rxBus.send(EventPumpStatusChanged(resourceHelper.gs(R.string.stoppingtempbasal)))
- sendMessage(DanaRS_Packet_Basal_Set_Cancel_Temporary_Basal(injector))
+ val msgCancel = DanaRS_Packet_Basal_Set_Cancel_Temporary_Basal(injector)
+ sendMessage(msgCancel)
sendMessage(DanaRS_Packet_Basal_Get_Temporary_Basal_State(injector))
loadEvents()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING))
- return true
+ return msgCancel.success()
}
fun extendedBolus(insulin: Double, durationInHalfHours: Int): Boolean {
if (!isConnected) return false
rxBus.send(EventPumpStatusChanged(resourceHelper.gs(R.string.settingextendedbolus)))
- sendMessage(DanaRS_Packet_Bolus_Set_Extended_Bolus(injector, insulin, durationInHalfHours))
+ val msgExtended = DanaRS_Packet_Bolus_Set_Extended_Bolus(injector, insulin, durationInHalfHours)
+ sendMessage(msgExtended)
SystemClock.sleep(200)
sendMessage(DanaRS_Packet_Bolus_Get_Extended_Bolus_State(injector))
loadEvents()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING))
- return true
+ return msgExtended.success()
}
fun extendedBolusStop(): Boolean {
if (!isConnected) return false
rxBus.send(EventPumpStatusChanged(resourceHelper.gs(R.string.stoppingextendedbolus)))
- sendMessage(DanaRS_Packet_Bolus_Set_Extended_Bolus_Cancel(injector))
+ val msgStop = DanaRS_Packet_Bolus_Set_Extended_Bolus_Cancel(injector)
+ sendMessage(msgStop)
sendMessage(DanaRS_Packet_Bolus_Get_Extended_Bolus_State(injector))
loadEvents()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING))
- return true
+ return msgStop.success()
}
fun updateBasalsInPump(profile: Profile): Boolean {
@@ -411,9 +419,13 @@ class DanaRSService : DaggerService() {
sendMessage(msgSet)
val msgActivate = DanaRS_Packet_Basal_Set_Profile_Number(injector, 0)
sendMessage(msgActivate)
+ if (danaPump.profile24) {
+ val msgProfile = DanaRS_Packet_Bolus_Set_24_CIR_CF_Array(injector, profile)
+ sendMessage(msgProfile)
+ }
readPumpStatus()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING))
- return true
+ return msgSet.success()
}
fun loadHistory(type: Byte): PumpEnactResult {
@@ -421,15 +433,15 @@ class DanaRSService : DaggerService() {
if (!isConnected) return result
var msg: DanaRS_Packet_History_? = null
when (type) {
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_ALARM -> msg = DanaRS_Packet_History_Alarm(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_PRIME -> msg = DanaRS_Packet_History_Prime(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_BASALHOUR -> msg = DanaRS_Packet_History_Basal(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_BOLUS -> msg = DanaRS_Packet_History_Bolus(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_CARBO -> msg = DanaRS_Packet_History_Carbohydrate(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_DAILY -> msg = DanaRS_Packet_History_Daily(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_GLUCOSE -> msg = DanaRS_Packet_History_Blood_Glucose(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_REFILL -> msg = DanaRS_Packet_History_Refill(injector)
- info.nightscout.androidaps.dana.comm.RecordTypes.RECORD_TYPE_SUSPEND -> msg = DanaRS_Packet_History_Suspend(injector)
+ RecordTypes.RECORD_TYPE_ALARM -> msg = DanaRS_Packet_History_Alarm(injector)
+ RecordTypes.RECORD_TYPE_PRIME -> msg = DanaRS_Packet_History_Prime(injector)
+ RecordTypes.RECORD_TYPE_BASALHOUR -> msg = DanaRS_Packet_History_Basal(injector)
+ RecordTypes.RECORD_TYPE_BOLUS -> msg = DanaRS_Packet_History_Bolus(injector)
+ RecordTypes.RECORD_TYPE_CARBO -> msg = DanaRS_Packet_History_Carbohydrate(injector)
+ RecordTypes.RECORD_TYPE_DAILY -> msg = DanaRS_Packet_History_Daily(injector)
+ RecordTypes.RECORD_TYPE_GLUCOSE -> msg = DanaRS_Packet_History_Blood_Glucose(injector)
+ RecordTypes.RECORD_TYPE_REFILL -> msg = DanaRS_Packet_History_Refill(injector)
+ RecordTypes.RECORD_TYPE_SUSPEND -> msg = DanaRS_Packet_History_Suspend(injector)
}
if (msg != null) {
sendMessage(DanaRS_Packet_General_Set_History_Upload_Mode(injector, 1))
@@ -441,8 +453,7 @@ class DanaRSService : DaggerService() {
SystemClock.sleep(200)
sendMessage(DanaRS_Packet_General_Set_History_Upload_Mode(injector, 0))
}
- result.success = true
- result.comment = "OK"
+ result.success = msg?.success() ?: false
return result
}
diff --git a/medtronic/src/main/res/values-iw-rIL/strings.xml b/medtronic/src/main/res/values-iw-rIL/strings.xml
index e370c4a256..1c95aa82e7 100644
--- a/medtronic/src/main/res/values-iw-rIL/strings.xml
+++ b/medtronic/src/main/res/values-iw-rIL/strings.xml
@@ -1,8 +1,46 @@
+ חיבור משאבת Medtronic, נדרש התקן ריילילינק ודגמי משאבה ספציפיים
+ מספר סידורי של המשאבה
+ סוג המשאבה
+ תדר המשאבה
+ המתנה לפני מתן בולוס (שניות)
+ מקסימום בולוס במשאבה (יח\')
+ מקסימום בזאלי במשאבה (יח\' לשעה)
+ קידוד מדטרוניק
+ ארצות הברית & קנדה (916 MHz)
+ ברחבי העולם (868 Mhz)
+ קידוד תוכנה 4B6b
+ קידוד חומרה 4B6b
+ התעוררות וכוונון
+ ביטול חסימת בולוס
+ איפוס תצורת RileyLink
+ סוג סוללה (תצוגת חשמל)
+ לא נבחר (תצוגה פשוטה)
+ אלקליין (תצוגה מורחבת)
+ ליתיום (תצוגה מורחבת)
+ NiZn (תצוגה מורחבת)
+ NiMH (תצוגה מורחבת)
+ איתור באגים בבולוס או טיפולים
+ שגיאות
+ מס\' סידורי לא הוגדר.
+ מס\' סידורי לא חוקי.
+ סוג המשאבה לא הוגדר.
+ סוג המשאבה לא נתמך.
+ תדר המשאבה לא הוגדר.
+ תדר המשאבה לא חוקי.
+ כתובת ריילילינק לא חוקית.
+ סוג המשאבה מזוהה אך אינו זהה לסוג מוגדר.
+ הגדרת פרופילי הבזאלי/תבניות אינה מאופשרת במשאבה. הפעילו אותם בגוף המשאבה.
+ פרופיל הבזאלי שהוגדר על המשאבה שגוי (חייב להיות סטנדרטי).
+ סוג הבזאלי הזמני שהוגדר במשאבה שגוי (חייב להיות מוחלט).
+ בולוס מרבי המוגדר במשאבה אינו נכון (חייב להיות %1$.2f).
+ בזאלי מרבי המוגדר במשאבה אינו נכון (חייב להיות %1$.2f).
+ הפעולה אינה אפשרית.\n\n יש להגדיר קודם את המשאבה על מנת לבצע פעולה זו.
+ התבקש שינוי זמן העולה על 24 שעות.
@@ -10,8 +48,37 @@
+ היסטוריית משאבת Medtronic
+ ביטלתם את הבולוס אחרי שכבר נקבע במשאבה. מאחר שמשאבות Medtronic אינן תומכות בביטול, תצטרכו לבטלו ידנית. הכניסו את המשאבה למצב השהיה ולאחר מכן צאו ממצב ההשהיה (אם אתם עדיין רוצים לבטל). היישום יאסוף שינויים בעדכון הבא (תוך פחות מ-5 דקות).
+ לא ניתן לקרוא את הבזאלי הזמני הנוכחי.
+ לא ניתן לבטל את הבזאלי הזמני הנוכחי. עוצר את הפעולה.
+ הגדרת הפרופיל נכשלה מאחר שהתבניות העוקבות כוללות מינון בזאלי גבוה מדי: %1$s
+ לא ניתן היה לספק את הבולוס.
+ לא ניתן לספק את הבולוס משום שכמות האינסולין הזמין (%1$.2f) נמוך מהדרוש (%2$.2f).
+ לא היה ניתן להגדיר את הבזאלי הזמני.
+ לא ניתן לבטל את הבזאלי הזמני הנוכחי.
+ לא ניתן להגדיר את הפרופיל הבזאלי.
+ הפרופיל הנוכחי זהה ולכן לא יוגדר מחדש.
+ קבלת היסטוריה-עמוד %1$d (%2$d/16)
+ קבלת היסטוריה-עמוד %1$d
+ קבלת זמן המשאבה
+ קבלת הגדרות
+ קבלת דגם המשאבה
+ קבלת פרופיל בזאלי
+ הגדרת פרופיל בזאלי
+ קבלת בזאלי זמני
+ הגדרת בזאלי זמני
+ הגדרת בולוס
+ המשאבה אינה זמינה
+ אזהרה
+ עכשיו
+ לפני
+ דרוש עדכון שעון המשאבה
+ מופעל
+ כבוי
+ שעון המשאבה עודכן
diff --git a/omnipod/build.gradle b/omnipod/build.gradle
index 50f97665c2..46f11bf653 100644
--- a/omnipod/build.gradle
+++ b/omnipod/build.gradle
@@ -18,13 +18,6 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
-
- // OMNIPOD: for usage in Firebase event during testing phase
- buildConfigField "String", "VERSION", '"2.7-omnipod-0.4.1-SNAPSHOT"'
- // OMNIPOD: Keep track of what commit from the main repository we're on, these fields aren't actually used anywhere
- buildConfigField "String", "DEV_VERSION", '"2.7.0-rc4"'
- buildConfigField "String", "DEV_VERSION_COMMIT", '"7d5dc54656c961660451c4fa4c6ea66bd83a1c46"'
- buildConfigField "String", "DEV_VERSION_COMMIT_DATE", '"21.8.2020"' // 21st of August
}
kotlinOptions {
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java
index ec8626d19f..c7b92f7181 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java
@@ -4,11 +4,11 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
-import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.SystemClock;
+import android.text.TextUtils;
import androidx.annotation.NonNull;
@@ -33,6 +33,7 @@ import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.ExtendedBolus;
+import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.events.EventAppInitialized;
@@ -52,6 +53,7 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.common.ManufacturerType;
import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction;
import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType;
+import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
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.data.TempBasalPair;
@@ -74,13 +76,18 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.acti
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoRecentPulseLog;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.ActivationProgress;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.AlertConfiguration;
-import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodProgressStatus;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.AlertSet;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.util.TimeUtil;
+import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodActiveAlertsChanged;
+import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodFaultEventChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodPumpValuesChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodTbrChanged;
+import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodUncertainTbrRecovered;
import info.nightscout.androidaps.plugins.pump.omnipod.manager.AapsOmnipodManager;
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandAcknowledgeAlerts;
import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandHandleTimeChange;
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandPlayTestBeep;
import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandUpdateAlertConfiguration;
import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.OmnipodCustomCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.OmnipodCustomCommandType;
@@ -88,6 +95,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.rileylink.service.RileyLi
import info.nightscout.androidaps.plugins.pump.omnipod.ui.OmnipodOverviewFragment;
import info.nightscout.androidaps.plugins.pump.omnipod.util.AapsOmnipodUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodAlertUtil;
+import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.queue.commands.CustomCommand;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.DecimalFormatter;
@@ -135,6 +143,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
private final List customActions = Collections.singletonList(new CustomAction(
R.string.omnipod_custom_action_reset_rileylink, OmnipodCustomActionType.RESET_RILEY_LINK_CONFIGURATION, true));
private final CompositeDisposable disposables = new CompositeDisposable();
+ private final NSUpload nsUpload;
// variables for handling statuses and history
private boolean firstRun = true;
@@ -148,6 +157,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
private final Handler loopHandler = new Handler(Looper.getMainLooper());
private final Runnable statusChecker;
+ private boolean isSetTempBasalRunning;
private boolean isCancelTempBasalRunning;
@Inject
@@ -169,7 +179,8 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
AapsOmnipodUtil aapsOmnipodUtil,
RileyLinkUtil rileyLinkUtil,
OmnipodAlertUtil omnipodAlertUtil,
- ProfileFunction profileFunction
+ ProfileFunction profileFunction,
+ NSUpload nsUpload
) {
super(new PluginDescription() //
.mainType(PluginType.PUMP) //
@@ -195,6 +206,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
this.rileyLinkUtil = rileyLinkUtil;
this.omnipodAlertUtil = omnipodAlertUtil;
this.profileFunction = profileFunction;
+ this.nsUpload = nsUpload;
pumpDescription = new PumpDescription(pumpType);
@@ -241,6 +253,11 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
getCommandQueue().customCommand(new CommandUpdateAlertConfiguration(), null);
}
+ if (aapsOmnipodManager.isAutomaticallyAcknowledgeAlertsEnabled() && podStateManager.isPodActivationCompleted() && !podStateManager.isPodDead() &&
+ podStateManager.getActiveAlerts().size() > 0 && !getCommandQueue().isCustomCommandInQueue(CommandAcknowledgeAlerts.class)) {
+ queueAcknowledgeAlertsCommand();
+ }
+
doPodCheck();
loopHandler.postDelayed(this, STATUS_CHECK_INTERVAL_MILLIS);
@@ -258,13 +275,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
// When PodStateManager is created, which causes an IllegalArgumentException for DateTimeZones not being recognized
podStateManager.loadPodState();
- // BS @ 2020-10-17 FIXME: for backwards compatibility; remove before release
- if (podStateManager.isPodInitialized() &&
- podStateManager.getActivationProgress() == ActivationProgress.NONE &&
- podStateManager.getPodProgressStatus().isAtLeast(PodProgressStatus.ABOVE_FIFTY_UNITS)) {
- podStateManager.setActivationProgress(ActivationProgress.COMPLETED);
- }
-
lastConnectionTimeMillis = sp.getLong(
RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L);
@@ -279,7 +289,22 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
disposables.add(rxBus
.toObservable(EventOmnipodTbrChanged.class)
.observeOn(Schedulers.io())
- .subscribe(event -> updateAapsTbr(), fabricPrivacy::logException)
+ .subscribe(event -> handleCancelledTbr(), fabricPrivacy::logException)
+ );
+ disposables.add(rxBus
+ .toObservable(EventOmnipodUncertainTbrRecovered.class)
+ .observeOn(Schedulers.io())
+ .subscribe(event -> handleUncertainTbrRecovery(), fabricPrivacy::logException)
+ );
+ disposables.add(rxBus
+ .toObservable(EventOmnipodActiveAlertsChanged.class)
+ .observeOn(Schedulers.io())
+ .subscribe(event -> handleActivePodAlerts(), fabricPrivacy::logException)
+ );
+ disposables.add(rxBus
+ .toObservable(EventOmnipodFaultEventChanged.class)
+ .observeOn(Schedulers.io())
+ .subscribe(event -> handlePodFaultEvent(), fabricPrivacy::logException)
);
disposables.add(rxBus
.toObservable(EventPreferenceChange.class)
@@ -291,10 +316,12 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
event.isChanged(getResourceHelper(), R.string.key_omnipod_smb_beeps_enabled) ||
event.isChanged(getResourceHelper(), R.string.key_omnipod_suspend_delivery_button_enabled) ||
event.isChanged(getResourceHelper(), R.string.key_omnipod_pulse_log_button_enabled) ||
+ event.isChanged(getResourceHelper(), R.string.key_omnipod_rileylink_stats_button_enabled) ||
event.isChanged(getResourceHelper(), R.string.key_omnipod_time_change_event_enabled) ||
event.isChanged(getResourceHelper(), R.string.key_omnipod_notification_uncertain_tbr_sound_enabled) ||
event.isChanged(getResourceHelper(), R.string.key_omnipod_notification_uncertain_smb_sound_enabled) ||
- event.isChanged(getResourceHelper(), R.string.key_omnipod_notification_uncertain_bolus_sound_enabled)) {
+ event.isChanged(getResourceHelper(), R.string.key_omnipod_notification_uncertain_bolus_sound_enabled) ||
+ event.isChanged(getResourceHelper(), R.string.key_omnipod_automatically_acknowledge_alerts_enabled)) {
aapsOmnipodManager.reloadSettings();
} else if (event.isChanged(getResourceHelper(), R.string.key_omnipod_expiration_reminder_enabled) ||
event.isChanged(getResourceHelper(), R.string.key_omnipod_expiration_reminder_hours_before_shutdown) ||
@@ -333,20 +360,73 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
return rileyLinkServiceData.rileyLinkServiceState.isReady();
}
- private void updateAapsTbr() {
- // As per the characteristics of the Omnipod, we only know whether or not a TBR is currently active
- // But it doesn't tell us the duration or amount, so we can only update TBR status in AAPS if
- // The pod is not running a TBR, while AAPS thinks it is
- if (!podStateManager.isTempBasalRunning()) {
- // Only report TBR cancellations if they haven't been explicitly requested
- if (!isCancelTempBasalRunning) {
- if (activePlugin.getActiveTreatments().isTempBasalInProgress() && !aapsOmnipodManager.hasSuspendedFakeTbr()) {
- aapsOmnipodManager.reportCancelledTbr();
+ private void handleCancelledTbr() {
+ // Only report TBR cancellations if they haven't been explicitly requested
+ if (isCancelTempBasalRunning) {
+ return;
+ }
+ if (!podStateManager.isTempBasalRunning() && activePlugin.getActiveTreatments().isTempBasalInProgress() && !aapsOmnipodManager.hasSuspendedFakeTbr()) {
+ aapsOmnipodManager.reportCancelledTbr();
+ }
+ }
+
+ private void handleUncertainTbrRecovery() {
+ // Ignore changes in certainty during tbr commands; these are normal
+ if (isSetTempBasalRunning || isCancelTempBasalRunning) {
+ return;
+ }
+
+ TemporaryBasal tempBasal = activePlugin.getActiveTreatments().getTempBasalFromHistory(System.currentTimeMillis());
+
+ if (podStateManager.isTempBasalRunning() && tempBasal == null) {
+ if (podStateManager.hasTempBasal()) {
+ aapsLogger.warn(LTag.PUMP, "Registering TBR that AAPS was unaware of");
+ long pumpId = aapsOmnipodManager.addTbrSuccessToHistory(podStateManager.getTempBasalStartTime().getMillis(),
+ new TempBasalPair(podStateManager.getTempBasalAmount(), false, (int) podStateManager.getTempBasalDuration().getStandardMinutes()));
+
+ TemporaryBasal temporaryBasal = new TemporaryBasal(getInjector()) //
+ .absolute(podStateManager.getTempBasalAmount()) //
+ .duration((int) podStateManager.getTempBasalDuration().getStandardMinutes())
+ .date(podStateManager.getTempBasalStartTime().getMillis()) //
+ .source(Source.PUMP) //
+ .pumpId(pumpId);
+
+ activePlugin.getActiveTreatments().addToHistoryTempBasal(temporaryBasal);
+ } else {
+ // Not sure what's going on. Notify the user
+ aapsLogger.error(LTag.PUMP, "Unknown TBR in both Pod state and AAPS");
+ rxBus.send(new EventNewNotification(new Notification(Notification.OMNIPOD_PUMP_ALARM, resourceHelper.gs(R.string.omnipod_error_tbr_running_but_aaps_not_aware), Notification.NORMAL).sound(R.raw.boluserror)));
+ }
+ } else if (!podStateManager.isTempBasalRunning() && tempBasal != null) {
+ aapsLogger.warn(LTag.PUMP, "Removing AAPS TBR that actually hadn't succeeded");
+ activePlugin.getActiveTreatments().removeTempBasal(tempBasal);
+ }
+ }
+
+ private void handleActivePodAlerts() {
+ if (podStateManager.isPodActivationCompleted() && !podStateManager.isPodDead()) {
+ AlertSet activeAlerts = podStateManager.getActiveAlerts();
+ if (activeAlerts.size() > 0) {
+ String alerts = TextUtils.join(", ", aapsOmnipodUtil.getTranslatedActiveAlerts(podStateManager));
+ String notificationText = resourceHelper.gq(R.plurals.omnipod_pod_alerts, activeAlerts.size(), alerts);
+ Notification notification = new Notification(Notification.OMNIPOD_POD_ALERTS, notificationText, Notification.URGENT);
+ rxBus.send(new EventNewNotification(notification));
+ nsUpload.uploadError(notificationText);
+
+ if (aapsOmnipodManager.isAutomaticallyAcknowledgeAlertsEnabled() && !getCommandQueue().isCustomCommandInQueue(CommandAcknowledgeAlerts.class)) {
+ queueAcknowledgeAlertsCommand();
}
}
}
}
+ private void handlePodFaultEvent() {
+ if (podStateManager.isPodFaulted()) {
+ String notificationText = resourceHelper.gs(R.string.omnipod_pod_status_pod_fault_description, podStateManager.getFaultEventCode().getValue(), podStateManager.getFaultEventCode().name());
+ nsUpload.uploadError(notificationText);
+ }
+ }
+
@Override
protected void onStop() {
super.onStop();
@@ -359,6 +439,16 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
disposables.clear();
}
+ private void queueAcknowledgeAlertsCommand() {
+ getCommandQueue().customCommand(new CommandAcknowledgeAlerts(), new Callback() {
+ @Override public void run() {
+ if (result != null) {
+ aapsLogger.debug(LTag.PUMP, "Acknowledge alerts result: {} ({})", result.success, result.comment);
+ }
+ }
+ });
+ }
+
private void doPodCheck() {
if (System.currentTimeMillis() > this.nextPodCheck) {
if (!podStateManager.isPodRunning()) {
@@ -366,7 +456,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
rxBus.send(new EventNewNotification(notification));
} else {
if (podStateManager.isSuspended()) {
- Notification notification = new Notification(Notification.OMNIPOD_POD_SUSPENDED, resourceHelper.gs(R.string.omnipod_confirmation_pod_suspended), Notification.NORMAL);
+ Notification notification = new Notification(Notification.OMNIPOD_POD_SUSPENDED, resourceHelper.gs(R.string.omnipod_error_pod_suspended), Notification.NORMAL);
rxBus.send(new EventNewNotification(notification));
}
}
@@ -455,18 +545,26 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
}
/**
- * The only actual status requests we send to the Pod here are on startup (in {@link #initializeAfterRileyLinkConnection() initializeAfterRileyLinkConnection()})
- * And when the user explicitly requested it by clicking the Refresh button on the Omnipod tab (which is executed through {@link #executeCustomCommand(CustomCommand)})
* We don't do periodical status requests because that could drain the Pod's battery
+ * The only actual status requests we send to the Pod here are on startup (in {@link #initializeAfterRileyLinkConnection() initializeAfterRileyLinkConnection()})
+ * And when the basal and/or temp basal status is uncertain
+ * When the user explicitly requested it by clicking the Refresh button on the Omnipod tab (which is executed through {@link #executeCustomCommand(CustomCommand)})
*/
@Override
public void getPumpStatus() {
if (firstRun) {
initializeAfterRileyLinkConnection();
firstRun = false;
+ } else if (!podStateManager.isBasalCertain() || !podStateManager.isTempBasalCertain()) {
+ aapsLogger.info(LTag.PUMP, "Acknowledged AAPS getPumpStatus request because basal and/or temp basal is uncertain");
+ getPodStatus();
}
}
+ private PumpEnactResult getPodStatus() {
+ return executeCommand(OmnipodCommandType.GET_POD_STATUS, aapsOmnipodManager::getPodStatus);
+ }
+
@NonNull
@Override
public PumpEnactResult setNewBasalProfile(Profile profile) {
@@ -484,7 +582,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
// When we activate a new Pod, we just use ProfileFunction to set the currently active profile
return true;
}
- return podStateManager.getBasalSchedule().equals(AapsOmnipodManager.mapProfileToBasalSchedule(profile));
+ return Objects.equals(podStateManager.getBasalSchedule(), AapsOmnipodManager.mapProfileToBasalSchedule(profile));
}
@Override
@@ -545,6 +643,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
// if enforceNew is true, current temp basal is cancelled and new TBR set (duration is prolonged),
// if false and the same rate is requested enacted=false and success=true is returned and TBR is not changed
@Override
+ @NonNull
public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer
durationInMinutes, Profile profile, boolean enforceNew) {
aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute: rate: {}, duration={}", absoluteRate, durationInMinutes);
@@ -568,7 +667,13 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
}
}
- PumpEnactResult result = executeCommand(OmnipodCommandType.SET_TEMPORARY_BASAL, () -> aapsOmnipodManager.setTemporaryBasal(new TempBasalPair(absoluteRate, false, durationInMinutes)));
+ isSetTempBasalRunning = true;
+ PumpEnactResult result;
+ try {
+ result = executeCommand(OmnipodCommandType.SET_TEMPORARY_BASAL, () -> aapsOmnipodManager.setTemporaryBasal(new TempBasalPair(absoluteRate, false, durationInMinutes)));
+ } finally {
+ isSetTempBasalRunning = false;
+ }
aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - setTBR. Response: " + result.success);
@@ -580,6 +685,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
}
@Override
+ @NonNull
public PumpEnactResult cancelTempBasal(boolean enforceNew) {
TemporaryBasal tbrCurrent = readTBR();
@@ -648,7 +754,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
return pump;
}
- @Override public ManufacturerType manufacturer() {
+ @Override @NonNull public ManufacturerType manufacturer() {
return pumpType.getManufacturer();
}
@@ -706,14 +812,10 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
public void executeCustomAction(CustomActionType customActionType) {
OmnipodCustomActionType mcat = (OmnipodCustomActionType) customActionType;
- switch (mcat) {
- case RESET_RILEY_LINK_CONFIGURATION:
- serviceTaskExecutor.startTask(new ResetRileyLinkConfigurationTask(getInjector()));
- break;
-
- default:
- aapsLogger.warn(LTag.PUMP, "Unknown custom action: " + mcat);
- break;
+ if (mcat == OmnipodCustomActionType.RESET_RILEY_LINK_CONFIGURATION) {
+ serviceTaskExecutor.startTask(new ResetRileyLinkConfigurationTask(getInjector()));
+ } else {
+ aapsLogger.warn(LTag.PUMP, "Unknown custom action: " + mcat);
}
}
@@ -732,7 +834,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
case ACKNOWLEDGE_ALERTS:
return executeCommand(OmnipodCommandType.ACKNOWLEDGE_ALERTS, aapsOmnipodManager::acknowledgeAlerts);
case GET_POD_STATUS:
- return executeCommand(OmnipodCommandType.GET_POD_STATUS, aapsOmnipodManager::getPodStatus);
+ return getPodStatus();
case READ_PULSE_LOG:
return retrievePulseLog();
case SUSPEND_DELIVERY:
@@ -745,6 +847,8 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
return handleTimeChange(((CommandHandleTimeChange) command).isRequestedByUser());
case UPDATE_ALERT_CONFIGURATION:
return updateAlertConfiguration();
+ case PLAY_TEST_BEEP:
+ return executeCommand(OmnipodCommandType.PLAY_TEST_BEEP, () -> aapsOmnipodManager.playTestBeep(((CommandPlayTestBeep) command).getBeepType()));
default:
aapsLogger.warn(LTag.PUMP, "Unknown custom command: " + commandType);
return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(resourceHelper.gs(R.string.omnipod_error_unknown_custom_command, commandType));
@@ -808,7 +912,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
} else {
// Even if automatically changing the time is disabled, we still want to at least do a GetStatus request,
// in order to update the Pod's activation time, which we need for calculating the time on the Pod
- result = executeCommand(OmnipodCommandType.GET_POD_STATUS, aapsOmnipodManager::getPodStatus);
+ result = getPodStatus();
}
if (result.success) {
@@ -857,7 +961,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
@Override
public boolean isUnreachableAlertTimeoutExceeded(long unreachableTimeoutMilliseconds) {
// We have a separate notification for when no Pod is active, see doPodCheck()
- if (podStateManager.isPodActivationCompleted() && podStateManager.getLastSuccessfulCommunication() != null) { // Null check for backwards compatibility
+ if (podStateManager.isPodActivationCompleted() && podStateManager.getLastSuccessfulCommunication() != null) {
long currentTimeMillis = System.currentTimeMillis();
if (podStateManager.getLastSuccessfulCommunication().getMillis() + unreachableTimeoutMilliseconds < currentTimeMillis) {
@@ -939,23 +1043,24 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface,
private void initializeAfterRileyLinkConnection() {
if (podStateManager.getActivationProgress().isAtLeast(ActivationProgress.PAIRING_COMPLETED)) {
+ boolean success = false;
for (int i = 0; STARTUP_STATUS_REQUEST_TRIES > i; i++) {
- PumpEnactResult result = executeCommand(OmnipodCommandType.GET_POD_STATUS, aapsOmnipodManager::getPodStatus);
+ PumpEnactResult result = getPodStatus();
if (result.success) {
+ success = true;
aapsLogger.debug(LTag.PUMP, "Successfully retrieved Pod status on startup");
break;
- } else {
- aapsLogger.warn(LTag.PUMP, "Failed to retrieve Pod status on startup");
}
}
+ if (!success) {
+ aapsLogger.warn(LTag.PUMP, "Failed to retrieve Pod status on startup");
+ rxBus.send(new EventNewNotification(new Notification(Notification.OMNIPOD_PUMP_ALARM, resourceHelper.gs(R.string.omnipod_error_failed_to_refresh_status_on_startup), Notification.NORMAL)));
+ }
} else {
aapsLogger.debug(LTag.PUMP, "Not retrieving Pod status on startup: no Pod running");
}
- Bundle params = new Bundle();
- params.putString("version", BuildConfig.VERSION);
-
- fabricPrivacy.logCustom("OmnipodPumpInit", params);
+ fabricPrivacy.logCustom("OmnipodPumpInit");
}
@NonNull private PumpEnactResult deliverBolus(final DetailedBolusInfo detailedBolusInfo) {
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dagger/OmnipodWizardModule.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dagger/OmnipodWizardModule.kt
index 4421900b15..338534da78 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dagger/OmnipodWizardModule.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dagger/OmnipodWizardModule.kt
@@ -25,6 +25,7 @@ import javax.inject.Provider
abstract class OmnipodWizardModule {
companion object {
+
@Provides
@OmnipodPluginQualifier
fun providesViewModelFactory(@OmnipodPluginQualifier viewModels: MutableMap, @JvmSuppressWildcards Provider>): ViewModelProvider.Factory {
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodCommandType.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodCommandType.java
index 8d9b250ac4..7cbc3c8a11 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodCommandType.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodCommandType.java
@@ -21,7 +21,8 @@ public enum OmnipodCommandType {
ACKNOWLEDGE_ALERTS(R.string.omnipod_cmd_acknowledge_alerts), //
READ_POD_PULSE_LOG(R.string.omnipod_cmd_read_pulse_log), //
SUSPEND_DELIVERY(R.string.omnipod_cmd_suspend_delivery),
- RESUME_DELIVERY(R.string.omnipod_cmd_resume_delivery);
+ RESUME_DELIVERY(R.string.omnipod_cmd_resume_delivery),
+ PLAY_TEST_BEEP(R.string.omnipod_cmd_play_test_beep);
private int resourceId;
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodStorageKeys.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodStorageKeys.java
index a780f11b5c..07601bb9bd 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodStorageKeys.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/OmnipodStorageKeys.java
@@ -20,6 +20,8 @@ public class OmnipodStorageKeys {
public static final int NOTIFICATION_UNCERTAIN_TBR_SOUND_ENABLED = R.string.key_omnipod_notification_uncertain_tbr_sound_enabled;
public static final int NOTIFICATION_UNCERTAIN_SMB_SOUND_ENABLED = R.string.key_omnipod_notification_uncertain_smb_sound_enabled;
public static final int NOTIFICATION_UNCERTAIN_BOLUS_SOUND_ENABLED = R.string.key_omnipod_notification_uncertain_bolus_sound_enabled;
+ public static final int AUTOMATICALLY_ACKNOWLEDGE_ALERTS_ENABLED = R.string.key_omnipod_automatically_acknowledge_alerts_enabled;
+ public static final int RILEYLINK_STATS_BUTTON_ENABLED = R.string.key_omnipod_rileylink_stats_button_enabled;
}
public static class Statistics {
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/PodHistoryEntryType.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/PodHistoryEntryType.java
index 89560786e0..47b2fd7693 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/PodHistoryEntryType.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/definition/PodHistoryEntryType.java
@@ -35,6 +35,7 @@ public enum PodHistoryEntryType {
CONFIGURE_ALERTS(50, R.string.omnipod_cmd_configure_alerts, PumpHistoryEntryGroup.Alarm),
ACKNOWLEDGE_ALERTS(51, R.string.omnipod_cmd_acknowledge_alerts, PumpHistoryEntryGroup.Alarm),
+ PLAY_TEST_BEEP(52, R.string.omnipod_cmd_play_test_beep, PumpHistoryEntryGroup.Alarm),
SUSPEND_DELIVERY(60, R.string.omnipod_cmd_suspend_delivery, PumpHistoryEntryGroup.Basal),
RESUME_DELIVERY(61, R.string.omnipod_cmd_resume_delivery, PumpHistoryEntryGroup.Basal),
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/ConfigureBeepAction.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/ConfigureBeepAction.java
new file mode 100644
index 0000000000..e5c0e0dbb4
--- /dev/null
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/ConfigureBeepAction.java
@@ -0,0 +1,48 @@
+package info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action;
+
+import org.joda.time.Duration;
+
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.command.BeepConfigCommand;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.StatusResponse;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.BeepConfigType;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager;
+import info.nightscout.androidaps.plugins.pump.omnipod.rileylink.manager.OmnipodRileyLinkCommunicationManager;
+
+public class ConfigureBeepAction implements OmnipodAction {
+ private final PodStateManager podStateManager;
+ private final BeepConfigType beepType;
+ private final boolean basalCompletionBeep;
+ private final Duration basalIntervalBeep;
+ private final boolean tempBasalCompletionBeep;
+ private final Duration tempBasalIntervalBeep;
+ private final boolean bolusCompletionBeep;
+ private final Duration bolusIntervalBeep;
+
+ public ConfigureBeepAction(PodStateManager podState, BeepConfigType beepType, boolean basalCompletionBeep, Duration basalIntervalBeep, boolean tempBasalCompletionBeep, Duration tempBasalIntervalBeep, boolean bolusCompletionBeep, Duration bolusIntervalBeep) {
+ if (podState == null || beepType == null) {
+ throw new IllegalArgumentException("Required parameter(s) missing");
+ }
+
+ this.beepType = beepType;
+ this.basalCompletionBeep = basalCompletionBeep;
+ this.basalIntervalBeep = basalIntervalBeep;
+ this.tempBasalCompletionBeep = tempBasalCompletionBeep;
+ this.tempBasalIntervalBeep = tempBasalIntervalBeep;
+ this.bolusCompletionBeep = bolusCompletionBeep;
+ this.bolusIntervalBeep = bolusIntervalBeep;
+ this.podStateManager = podState;
+ }
+
+ public ConfigureBeepAction(PodStateManager podState, BeepConfigType beepType) {
+ this(podState, beepType, false, Duration.ZERO, false, Duration.ZERO, false, Duration.ZERO);
+ }
+
+ @Override
+ public StatusResponse execute(OmnipodRileyLinkCommunicationManager communicationService) {
+ return communicationService.sendCommand(
+ StatusResponse.class, podStateManager,
+ new BeepConfigCommand(beepType, basalCompletionBeep, basalIntervalBeep,
+ tempBasalCompletionBeep, tempBasalIntervalBeep,
+ bolusCompletionBeep, bolusIntervalBeep));
+ }
+}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/InsertCannulaAction.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/InsertCannulaAction.java
index ff47b1b900..a6fdd139d9 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/InsertCannulaAction.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/InsertCannulaAction.java
@@ -58,7 +58,7 @@ public class InsertCannulaAction implements OmnipodAction {
if (podStateManager.getActivationProgress().needsCannulaInsertion()) {
communicationService.executeAction(new BolusAction(podStateManager, OmnipodConstants.POD_CANNULA_INSERTION_BOLUS_UNITS,
- Duration.standardSeconds(1), false, false));
+ Duration.standardSeconds(1), false, true));
podStateManager.setActivationProgress(ActivationProgress.INSERTING_CANNULA);
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/service/PrimeService.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/service/PrimeService.java
index 062731e002..ed75d439be 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/service/PrimeService.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/action/service/PrimeService.java
@@ -32,6 +32,6 @@ public class PrimeService {
public StatusResponse executePrimeBolusCommand(OmnipodRileyLinkCommunicationManager communicationService, PodStateManager podStateManager) {
return communicationService.executeAction(new BolusAction(podStateManager, OmnipodConstants.POD_PRIME_BOLUS_UNITS,
- Duration.standardSeconds(1), false, false));
+ Duration.standardSeconds(1), false, true));
}
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/message/command/BeepConfigCommand.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/message/command/BeepConfigCommand.java
index fc36e68eab..47cf4533ba 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/message/command/BeepConfigCommand.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/communication/message/command/BeepConfigCommand.java
@@ -30,10 +30,6 @@ public class BeepConfigCommand extends MessageBlock {
encode();
}
- public BeepConfigCommand(BeepConfigType beepType) {
- this(beepType, false, Duration.ZERO, false, Duration.ZERO, false, Duration.ZERO);
- }
-
private void encode() {
encodedData = new byte[]{beepType.getValue()};
encodedData = ByteUtil.concat(encodedData, (byte) ((basalCompletionBeep ? (1 << 6) : 0) + (basalIntervalBeep.getStandardMinutes() & 0x3f)));
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/AlertSet.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/AlertSet.java
index c9d61f9172..28c2268212 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/AlertSet.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/AlertSet.java
@@ -2,6 +2,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.driver.definition;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
public class AlertSet {
private final List alertSlots;
@@ -39,6 +40,17 @@ public class AlertSet {
return value;
}
+ @Override public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ AlertSet alertSet = (AlertSet) o;
+ return alertSlots.equals(alertSet.alertSlots);
+ }
+
+ @Override public int hashCode() {
+ return Objects.hash(alertSlots);
+ }
+
@Override
public String toString() {
return "AlertSet{" +
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/exception/DeliveryStatusVerificationFailedException.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/exception/DeliveryStatusVerificationFailedException.java
deleted file mode 100644
index f6c86561dc..0000000000
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/exception/DeliveryStatusVerificationFailedException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package info.nightscout.androidaps.plugins.pump.omnipod.driver.exception;
-
-import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.DeliveryStatus;
-
-public class DeliveryStatusVerificationFailedException extends OmnipodException {
- private final DeliveryStatus expectedStatus;
-
- public DeliveryStatusVerificationFailedException(DeliveryStatus expectedStatus, Throwable cause) {
- super("Failed to verify delivery status (expected=" + expectedStatus + ")", cause, false);
- this.expectedStatus = expectedStatus;
- }
-
- public DeliveryStatus getExpectedStatus() {
- return expectedStatus;
- }
-}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/exception/PrecedingCommandFailedUncertainlyException.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/exception/PrecedingCommandFailedUncertainlyException.java
new file mode 100644
index 0000000000..a1bbd6c7ab
--- /dev/null
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/exception/PrecedingCommandFailedUncertainlyException.java
@@ -0,0 +1,7 @@
+package info.nightscout.androidaps.plugins.pump.omnipod.driver.exception;
+
+public class PrecedingCommandFailedUncertainlyException extends OmnipodException {
+ public PrecedingCommandFailedUncertainlyException(Throwable cause) {
+ super("Preceding command failed", cause, false);
+ }
+}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/OmnipodManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/OmnipodManager.java
index e4601e2a68..d29f479dfa 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/OmnipodManager.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/OmnipodManager.java
@@ -18,6 +18,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.acti
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.BolusAction;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.CancelDeliveryAction;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.ConfigureAlertsAction;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.ConfigureBeepAction;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.DeactivatePodAction;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.GetPodInfoAction;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.action.GetStatusAction;
@@ -33,6 +34,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.mess
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.ActivationProgress;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.AlertConfiguration;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.BeepConfigType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.BeepType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.DeliveryStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.DeliveryType;
@@ -41,7 +43,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodInfo
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodProgressStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.schedule.BasalSchedule;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.CommandFailedAfterChangingDeliveryStatusException;
-import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.DeliveryStatusVerificationFailedException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalActivationProgressException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalDeliveryStatusException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalPodProgressException;
@@ -49,8 +50,8 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NonceOut
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.OmnipodException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodFaultException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodProgressStatusVerificationFailedException;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PrecedingCommandFailedUncertainlyException;
import info.nightscout.androidaps.plugins.pump.omnipod.rileylink.manager.OmnipodRileyLinkCommunicationManager;
-import info.nightscout.androidaps.utils.sharedPreferences.SP;
import io.reactivex.Completable;
import io.reactivex.Flowable;
import io.reactivex.Single;
@@ -62,17 +63,16 @@ public class OmnipodManager {
private static final int ACTION_VERIFICATION_TRIES = 1;
private final OmnipodRileyLinkCommunicationManager communicationService;
- private PodStateManager podStateManager;
+ private final PodStateManager podStateManager;
private ActiveBolusData activeBolusData;
private SingleSubject bolusCommandExecutionSubject;
private final Object bolusDataMutex = new Object();
- private AAPSLogger aapsLogger;
+ private final AAPSLogger aapsLogger;
public OmnipodManager(AAPSLogger aapsLogger,
- SP sp,
OmnipodRileyLinkCommunicationManager communicationService,
PodStateManager podStateManager) {
if (communicationService == null) {
@@ -173,40 +173,68 @@ public class OmnipodManager {
public synchronized void setBasalSchedule(BasalSchedule schedule, boolean acknowledgementBeep) {
assertReadyForDelivery();
- boolean wasSuspended = podStateManager.isSuspended();
- if (!wasSuspended) {
- suspendDelivery(acknowledgementBeep);
- }
-
- try {
- executeAndVerify(() -> communicationService.executeAction(new SetBasalScheduleAction(podStateManager, schedule,
- false, podStateManager.getScheduleOffset(), acknowledgementBeep)));
- podStateManager.setBasalSchedule(schedule);
- } catch (OmnipodException ex) {
- if (ex.isCertainFailure()) {
- if (!wasSuspended) {
- throw new CommandFailedAfterChangingDeliveryStatusException("Suspending delivery succeeded but setting the new basal schedule did not", ex);
- }
- throw ex;
- }
-
- // verifyDeliveryStatus will throw an exception if verification fails
- if (verifyDeliveryStatus(DeliveryStatus.NORMAL, ex)) {
- podStateManager.setBasalSchedule(schedule);
- } else {
- if (!wasSuspended) {
- throw new CommandFailedAfterChangingDeliveryStatusException("Suspending delivery succeeded but setting the new basal schedule did not", ex);
- }
+ if (!podStateManager.isBasalCertain()) {
+ try {
+ getPodStatus();
+ } catch (OmnipodException ex) {
ex.setCertainFailure(true);
throw ex;
}
}
+
+ boolean wasSuspended = podStateManager.isSuspended();
+ if (!wasSuspended) {
+ try {
+ suspendDelivery(acknowledgementBeep);
+ } catch (OmnipodException ex) {
+ if (ex.isCertainFailure()) {
+ throw ex;
+ }
+
+ // Uncertain failure
+ throw new PrecedingCommandFailedUncertainlyException(ex);
+ }
+ }
+
+ BasalSchedule oldBasalSchedule = podStateManager.getBasalSchedule();
+
+ try {
+ podStateManager.setBasalSchedule(schedule);
+ podStateManager.setBasalCertain(false);
+ executeAndVerify(() -> communicationService.executeAction(new SetBasalScheduleAction(podStateManager, schedule,
+ false, podStateManager.getScheduleOffset(), acknowledgementBeep)));
+ } catch (OmnipodException ex) {
+ if (ex.isCertainFailure()) {
+ podStateManager.setBasalSchedule(oldBasalSchedule);
+ podStateManager.setBasalCertain(true);
+ if (!wasSuspended) {
+ throw new CommandFailedAfterChangingDeliveryStatusException("Suspending delivery succeeded but setting the new basal schedule did not", ex);
+ }
+ throw ex;
+ }
+
+ // Uncertain failure
+ throw ex;
+ }
}
// CAUTION: cancels temp basal and then sets new temp basal. An OmnipodException[certainFailure=false] indicates that the pod might have cancelled the previous temp basal, but did not set a new temp basal
public synchronized void setTemporaryBasal(double rate, Duration duration, boolean acknowledgementBeep, boolean completionBeep) {
assertReadyForDelivery();
+ if (!podStateManager.isTempBasalCertain() || !podStateManager.isBasalCertain()) {
+ try {
+ getPodStatus();
+ } catch (OmnipodException ex) {
+ ex.setCertainFailure(true);
+ throw ex;
+ }
+ }
+
+ if (podStateManager.isSuspended()) {
+ throw new IllegalDeliveryStatusException(DeliveryStatus.NORMAL, DeliveryStatus.SUSPENDED);
+ }
+
boolean cancelCurrentTbr = podStateManager.isTempBasalRunning();
if (cancelCurrentTbr) {
@@ -217,85 +245,65 @@ public class OmnipodManager {
throw ex;
}
- try {
- if (!verifyDeliveryStatus(DeliveryStatus.NORMAL, ex)) {
- ex.setCertainFailure(true);
- throw ex;
- }
- } catch (DeliveryStatusVerificationFailedException ex2) {
- podStateManager.setTempBasalCertain(false);
- throw ex2;
- }
+ // Uncertain failure
+ throw new PrecedingCommandFailedUncertainlyException(ex);
}
}
try {
+ podStateManager.setTempBasal(DateTime.now().plus(OmnipodConstants.AVERAGE_TEMP_BASAL_COMMAND_COMMUNICATION_DURATION), rate, duration);
+ podStateManager.setTempBasalCertain(false);
executeAndVerify(() -> communicationService.executeAction(new SetTempBasalAction(
podStateManager, rate, duration, acknowledgementBeep, completionBeep)));
- podStateManager.setTempBasal(DateTime.now().minus(OmnipodConstants.AVERAGE_TEMP_BASAL_COMMAND_COMMUNICATION_DURATION), rate, duration, true);
} catch (OmnipodException ex) {
if (ex.isCertainFailure()) {
+ podStateManager.clearTempBasal();
+ podStateManager.setTempBasalCertain(true);
if (cancelCurrentTbr) {
throw new CommandFailedAfterChangingDeliveryStatusException("Failed to set new TBR while cancelling old TBR succeeded", ex);
}
throw ex;
}
- // verifyDeliveryStatus will throw an exception if verification fails
- try {
- if (verifyDeliveryStatus(DeliveryStatus.TEMP_BASAL_RUNNING, ex)) {
- podStateManager.setTempBasal(DateTime.now().minus(OmnipodConstants.AVERAGE_TEMP_BASAL_COMMAND_COMMUNICATION_DURATION), rate, duration, true);
- } else {
- if (cancelCurrentTbr) {
- throw new CommandFailedAfterChangingDeliveryStatusException("Failed to set new TBR while cancelling old TBR succeeded", ex);
- }
-
- ex.setCertainFailure(true);
- throw ex;
- }
- } catch (CommandFailedAfterChangingDeliveryStatusException ex2) {
- // Don't set temp basal in Pod State for this Exception
- throw ex2;
- } catch (OmnipodException ex2) {
- if (!ex2.isCertainFailure()) {
- // We're not sure that setting the new TBR failed, so we assume that it succeeded
- // If it didn't, PodStateManager.updateFromResponse() will fix the state
- // upon receiving the next StatusResponse
- podStateManager.setTempBasal(DateTime.now().minus(OmnipodConstants.AVERAGE_TEMP_BASAL_COMMAND_COMMUNICATION_DURATION), rate, duration, false);
- }
- throw ex2;
- }
+ // Uncertain failure
+ throw ex;
}
}
public synchronized void cancelTemporaryBasal(boolean acknowledgementBeep) {
- try {
- cancelDelivery(EnumSet.of(DeliveryType.TEMP_BASAL), acknowledgementBeep);
- } catch (OmnipodException ex) {
- if (ex.isCertainFailure()) {
- throw ex;
- }
-
- try {
- if (!verifyDeliveryStatus(DeliveryStatus.NORMAL, ex)) {
- ex.setCertainFailure(true);
- throw ex;
- }
- } catch (DeliveryStatusVerificationFailedException ex2) {
- podStateManager.setTempBasalCertain(false);
- throw ex2;
- }
- }
+ cancelDelivery(EnumSet.of(DeliveryType.TEMP_BASAL), acknowledgementBeep);
}
private synchronized StatusResponse cancelDelivery(EnumSet deliveryTypes, boolean acknowledgementBeep) {
assertReadyForDelivery();
- return executeAndVerify(() -> {
- StatusResponse statusResponse = communicationService.executeAction(new CancelDeliveryAction(podStateManager, deliveryTypes, acknowledgementBeep));
- aapsLogger.info(LTag.PUMPCOMM, "Status response after cancel delivery[types={}]: {}", deliveryTypes.toString(), statusResponse.toString());
- return statusResponse;
- });
+ if (deliveryTypes.contains(DeliveryType.BASAL)) {
+ podStateManager.setBasalCertain(false);
+ }
+ if (deliveryTypes.contains(DeliveryType.TEMP_BASAL)) {
+ podStateManager.setTempBasalCertain(false);
+ }
+
+ try {
+ return executeAndVerify(() -> {
+ StatusResponse statusResponse;
+ statusResponse = communicationService.executeAction(new CancelDeliveryAction(podStateManager, deliveryTypes, acknowledgementBeep));
+
+ aapsLogger.info(LTag.PUMPCOMM, "Status response after cancel delivery[types={}]: {}", deliveryTypes.toString(), statusResponse.toString());
+ return statusResponse;
+ });
+ } catch (OmnipodException ex) {
+ if (ex.isCertainFailure()) {
+ if (deliveryTypes.contains(DeliveryType.BASAL)) {
+ podStateManager.setBasalCertain(true);
+ }
+ if (deliveryTypes.contains(DeliveryType.TEMP_BASAL)) {
+ podStateManager.setTempBasalCertain(true);
+ }
+ }
+
+ throw ex;
+ }
}
// Returns a SingleSubject that returns when the bolus has finished.
@@ -304,6 +312,19 @@ public class OmnipodManager {
public synchronized BolusCommandResult bolus(Double units, boolean acknowledgementBeep, boolean completionBeep, BiConsumer progressIndicationConsumer) {
assertReadyForDelivery();
+ if (!podStateManager.isBasalCertain()) {
+ try {
+ getPodStatus();
+ } catch (OmnipodException ex) {
+ ex.setCertainFailure(true);
+ throw ex;
+ }
+ }
+
+ if (podStateManager.isSuspended()) {
+ throw new IllegalDeliveryStatusException(DeliveryStatus.NORMAL, DeliveryStatus.SUSPENDED);
+ }
+
bolusCommandExecutionSubject = SingleSubject.create();
CommandDeliveryStatus commandDeliveryStatus = CommandDeliveryStatus.SUCCESS;
@@ -423,20 +444,7 @@ public class OmnipodManager {
public synchronized void suspendDelivery(boolean acknowledgementBeep) {
assertReadyForDelivery();
-
- try {
- cancelDelivery(EnumSet.allOf(DeliveryType.class), acknowledgementBeep);
- } catch (OmnipodException ex) {
- if (ex.isCertainFailure()) {
- throw ex;
- }
-
- // verifyDeliveryStatus will throw an exception if verification fails
- if (!verifyDeliveryStatus(DeliveryStatus.SUSPENDED, ex)) {
- ex.setCertainFailure(true);
- throw ex;
- }
- }
+ cancelDelivery(EnumSet.allOf(DeliveryType.class), acknowledgementBeep);
}
// CAUTION: cancels all delivery
@@ -484,6 +492,25 @@ public class OmnipodManager {
podStateManager.discardState();
}
+ public synchronized void configureBeeps(BeepConfigType beepType, boolean basalCompletionBeep, Duration basalIntervalBeep,
+ boolean tempBasalCompletionBeep, Duration tempBasalIntervalBeep,
+ boolean bolusCompletionBeep, Duration bolusIntervalBeep) {
+ if (!podStateManager.isPodInitialized()) {
+ throw new IllegalPodProgressException(PodProgressStatus.REMINDER_INITIALIZED, null);
+ }
+ communicationService.executeAction(new ConfigureBeepAction(
+ podStateManager, beepType, basalCompletionBeep,
+ basalIntervalBeep, tempBasalCompletionBeep, tempBasalIntervalBeep,
+ bolusCompletionBeep, bolusIntervalBeep));
+ }
+
+ public synchronized void playTestBeep(BeepConfigType beepType) {
+ if (!podStateManager.isPodInitialized()) {
+ throw new IllegalPodProgressException(PodProgressStatus.REMINDER_INITIALIZED, null);
+ }
+ communicationService.executeAction(new ConfigureBeepAction(podStateManager, beepType));
+ }
+
public OmnipodRileyLinkCommunicationManager getCommunicationService() {
return communicationService;
}
@@ -573,28 +600,6 @@ public class OmnipodManager {
throw new PodProgressStatusVerificationFailedException(expectedPodProgressStatus, ex);
}
- /**
- * @param expectedStatus expected delivery status
- * @param verificationCause the Exception causing us to verify the delivery status
- * @return true if the Pod's status matches the expected status, otherwise false
- * @throws DeliveryStatusVerificationFailedException in case reading the Pod status fails
- */
- private boolean verifyDeliveryStatus(DeliveryStatus expectedStatus, Throwable verificationCause) {
- aapsLogger.debug(LTag.PUMPCOMM, "Attempting to verify delivery status (expected={})", expectedStatus);
- for (int i = 0; 3 > i; i++) {
- try {
- StatusResponse podStatus = getPodStatus();
- aapsLogger.debug(LTag.PUMPCOMM, "Resolved delivery status (expected={}, actual={})", expectedStatus, podStatus.getDeliveryStatus());
- return podStatus.getDeliveryStatus().equals(expectedStatus);
- } catch (Exception ex) {
- aapsLogger.debug(LTag.PUMPCOMM, "Ignoring exception thrown in getPodStatus() during attempt to verify delivery status: {}: {}",
- ex.getClass().getSimpleName(), ex.getMessage());
- }
- }
- aapsLogger.warn(LTag.PUMPCOMM, "Failed to verify delivery status");
- throw new DeliveryStatusVerificationFailedException(expectedStatus, verificationCause);
- }
-
private Duration calculateEstimatedBolusDuration(DateTime startTime, double units, double deliveryRateInUnitsPerSecond) {
if (!podStateManager.isPodActivationCompleted()) {
// No basal or temp basal is active yet
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/PodStateManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/PodStateManager.java
index 34726daffb..2163e9ffb1 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/PodStateManager.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/manager/PodStateManager.java
@@ -116,7 +116,7 @@ public abstract class PodStateManager {
}
public final void setInitializationParameters(int lot, int tid, FirmwareVersion piVersion, FirmwareVersion pmVersion, DateTimeZone timeZone, PodProgressStatus podProgressStatus) {
- if (isPodInitialized() && getPodProgressStatus().isAfter(PodProgressStatus.REMINDER_INITIALIZED)) {
+ if (isPodInitialized() && getActivationProgress().isAtLeast(ActivationProgress.PAIRING_COMPLETED)) {
throw new IllegalStateException("Cannot set pairing parameters: pairing parameters have already been set");
}
if (piVersion == null) {
@@ -238,15 +238,6 @@ public abstract class PodStateManager {
return getSafe(() -> podState.getLastUpdatedFromResponse());
}
- /**
- * @return true if the Pod State contains a fault event. Is the Pod state does not contain
- * a fault event, this does NOT necessarily mean that the Pod is not faulted. For a reliable
- * indication on whether or not the pod is faulted, see {@link #isPodFaulted() isPodFaulted()}
- */
- public final boolean isFaulted() {
- return podState != null && podState.getFaultEventCode() != null;
- }
-
public final FaultEventCode getFaultEventCode() {
return getSafe(() -> podState.getFaultEventCode());
}
@@ -377,6 +368,15 @@ public abstract class PodStateManager {
setAndStore(() -> podState.setBasalSchedule(basalSchedule));
}
+ public final boolean isBasalCertain() {
+ Boolean certain = getSafe(() -> podState.isBasalCertain());
+ return certain == null || certain;
+ }
+
+ public final void setBasalCertain(boolean certain) {
+ setAndStore(() -> podState.setBasalCertain(certain));
+ }
+
public final DateTime getLastBolusStartTime() {
return getSafe(() -> podState.getLastBolusStartTime());
}
@@ -425,14 +425,19 @@ public abstract class PodStateManager {
}
public final void setTempBasalCertain(boolean certain) {
- setSafe(() -> podState.setTempBasalCertain(certain));
+ setAndStore(() -> {
+ if (!Objects.equals(podState.isTempBasalCertain(), certain)) {
+ podState.setTempBasalCertain(certain);
+ onTbrChanged();
+ }
+ });
}
- public final void setTempBasal(DateTime startTime, Double amount, Duration duration, boolean certain) {
- setTempBasal(startTime, amount, duration, certain, true);
+ public final void setTempBasal(DateTime startTime, Double amount, Duration duration) {
+ setTempBasal(startTime, amount, duration, true);
}
- public final void setTempBasal(DateTime startTime, Double amount, Duration duration, Boolean certain, boolean store) {
+ private void setTempBasal(DateTime startTime, Double amount, Duration duration, boolean store) {
DateTime currentStartTime = getTempBasalStartTime();
Double currentAmount = getTempBasalAmount();
Duration currentDuration = getTempBasalDuration();
@@ -441,7 +446,6 @@ public abstract class PodStateManager {
podState.setTempBasalStartTime(startTime);
podState.setTempBasalAmount(amount);
podState.setTempBasalDuration(duration);
- podState.setTempBasalCertain(certain);
};
if (store) {
@@ -453,6 +457,14 @@ public abstract class PodStateManager {
}
}
+ public final void clearTempBasal() {
+ clearTempBasal(true);
+ }
+
+ private void clearTempBasal(boolean store) {
+ setTempBasal(null, null, null, store);
+ }
+
/**
* @return true when a Temp Basal is stored in the Pod Stated
* Please note that this could also be an expired Temp Basal. For an indication on whether or not
@@ -466,13 +478,22 @@ public abstract class PodStateManager {
* @return true when a Temp Basal is stored in the Pod State and this temp basal is currently running (based on start time and duration)
*/
public final boolean isTempBasalRunning() {
- return isTempBasalRunningAt(DateTime.now());
+ return isTempBasalRunningAt(null);
}
/**
- * @return true when a Temp Basal is stored in the Pod State and this temp basal is running at the given time (based on start time and duration)
+ * @param time the time for which to look up whether a temp basal is running, null meaning now
+ * @return true when a Temp Basal is stored in the Pod State and this temp basal is running at the given time (based on start time and duration),
+ * or when the time provided is null and the delivery status of the Pod inidicated that a TBR is running, but not TBR is stored
+ * This can happen in some rare cases.
*/
public final boolean isTempBasalRunningAt(DateTime time) {
+ if (time == null) { // now
+ if (!hasTempBasal() && getLastDeliveryStatus().isTbrRunning()) {
+ return true;
+ }
+ time = DateTime.now();
+ }
if (hasTempBasal()) {
DateTime tempBasalStartTime = getTempBasalStartTime();
DateTime tempBasalEndTime = tempBasalStartTime.plus(getTempBasalDuration());
@@ -537,28 +558,47 @@ public abstract class PodStateManager {
podState.setActivatedAt(activatedAtCalculated);
}
podState.setSuspended(status.getDeliveryStatus() == DeliveryStatus.SUSPENDED);
- podState.setActiveAlerts(status.getUnacknowledgedAlerts());
+ if (!Objects.equals(status.getUnacknowledgedAlerts(), podState.getActiveAlerts())) {
+ podState.setActiveAlerts(status.getUnacknowledgedAlerts());
+ onActiveAlertsChanged();
+ }
podState.setLastDeliveryStatus(status.getDeliveryStatus());
podState.setReservoirLevel(status.getReservoirLevel());
podState.setTotalTicksDelivered(status.getTicksDelivered());
podState.setPodProgressStatus(status.getPodProgressStatus());
podState.setTimeActive(status.getTimeActive());
- if (status.getDeliveryStatus().isTbrRunning()) {
- if (!isTempBasalCertain() && isTempBasalRunning()) {
- podState.setTempBasalCertain(true);
+
+ boolean isBasalCertain = podState.isBasalCertain() == null || podState.isBasalCertain();
+ boolean isTempBasalCertain = podState.isTempBasalCertain() == null || podState.isTempBasalCertain();
+ if (!status.getDeliveryStatus().isTbrRunning()) {
+ if (isTempBasalCertain) {
+ clearTempBasal(); // Triggers onTbrChanged when appropriate
+ } else {
+ // Don't trigger onTbrChanged as we will trigger onUncertainTbrRecovered below
+ podState.setTempBasalStartTime(null);
+ podState.setTempBasalAmount(null);
+ podState.setTempBasalDuration(null);
}
- } else {
- // Triggers {@link #onTbrChanged() onTbrChanged()} when appropriate
- setTempBasal(null, null, null, true, false);
}
- podState.setLastUpdatedFromResponse(DateTime.now());
+ if (!isTempBasalCertain) {
+ podState.setTempBasalCertain(true);
+ onUncertainTbrRecovered();
+ }
+ if (!isBasalCertain) {
+ podState.setBasalCertain(true);
+ }
if (status instanceof PodInfoDetailedStatus) {
PodInfoDetailedStatus detailedStatus = (PodInfoDetailedStatus) status;
if (detailedStatus.isFaulted()) {
- podState.setFaultEventCode(detailedStatus.getFaultEventCode());
+ if (!Objects.equals(podState.getFaultEventCode(), detailedStatus.getFaultEventCode())) {
+ podState.setFaultEventCode(detailedStatus.getFaultEventCode());
+ onFaultEventChanged();
+ }
}
}
+
+ podState.setLastUpdatedFromResponse(DateTime.now());
});
}
@@ -567,6 +607,21 @@ public abstract class PodStateManager {
// Can be overridden in subclasses
}
+ protected void onUncertainTbrRecovered() {
+ // Deliberately left empty
+ // Can be overridden in subclasses
+ }
+
+ protected void onActiveAlertsChanged() {
+ // Deliberately left empty
+ // Can be overridden in subclasses
+ }
+
+ protected void onFaultEventChanged() {
+ // Deliberately left empty
+ // Can be overridden in subclasses
+ }
+
private void setAndStore(Runnable runnable) {
setSafe(runnable);
storePodState();
@@ -660,6 +715,7 @@ public abstract class PodStateManager {
private DeliveryStatus lastDeliveryStatus;
private AlertSet activeAlerts;
private BasalSchedule basalSchedule;
+ private Boolean basalCertain;
private DateTime lastBolusStartTime;
private Double lastBolusAmount;
private Duration lastBolusDuration;
@@ -864,6 +920,14 @@ public abstract class PodStateManager {
this.basalSchedule = basalSchedule;
}
+ Boolean isBasalCertain() {
+ return basalCertain;
+ }
+
+ void setBasalCertain(Boolean certain) {
+ this.basalCertain = certain;
+ }
+
DateTime getLastBolusStartTime() {
return lastBolusStartTime;
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodActiveAlertsChanged.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodActiveAlertsChanged.kt
new file mode 100644
index 0000000000..743d321d69
--- /dev/null
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodActiveAlertsChanged.kt
@@ -0,0 +1,8 @@
+package info.nightscout.androidaps.plugins.pump.omnipod.event
+
+import info.nightscout.androidaps.events.Event
+
+/**
+ * Created by andy on 04.06.2018.
+ */
+class EventOmnipodActiveAlertsChanged : Event()
\ No newline at end of file
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodFaultEventChanged.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodFaultEventChanged.kt
new file mode 100644
index 0000000000..d9d2b1e11d
--- /dev/null
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodFaultEventChanged.kt
@@ -0,0 +1,8 @@
+package info.nightscout.androidaps.plugins.pump.omnipod.event
+
+import info.nightscout.androidaps.events.Event
+
+/**
+ * Created by andy on 04.06.2018.
+ */
+class EventOmnipodFaultEventChanged : Event()
\ No newline at end of file
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodUncertainTbrRecovered.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodUncertainTbrRecovered.kt
new file mode 100644
index 0000000000..f2c4dc855a
--- /dev/null
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/event/EventOmnipodUncertainTbrRecovered.kt
@@ -0,0 +1,8 @@
+package info.nightscout.androidaps.plugins.pump.omnipod.event
+
+import info.nightscout.androidaps.events.Event
+
+/**
+ * Created by andy on 04.06.2018.
+ */
+class EventOmnipodUncertainTbrRecovered : Event()
\ No newline at end of file
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java
index bf51916268..b0ff0ef435 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java
@@ -1,5 +1,8 @@
package info.nightscout.androidaps.plugins.pump.omnipod.manager;
+import android.content.Context;
+import android.content.Intent;
+
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.json.JSONException;
@@ -14,6 +17,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import dagger.android.HasAndroidInjector;
+import info.nightscout.androidaps.activities.ErrorHelperActivity;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
@@ -46,7 +50,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.mess
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoRecentPulseLog;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.communication.message.response.podinfo.PodInfoResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.AlertConfiguration;
-import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.DeliveryStatus;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.BeepConfigType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.FaultEventCode;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.OmnipodConstants;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.PodInfoType;
@@ -55,7 +59,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.schedul
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.ActivationTimeExceededException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.CommandFailedAfterChangingDeliveryStatusException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.CrcMismatchException;
-import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.DeliveryStatusVerificationFailedException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalActivationProgressException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalDeliveryStatusException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.IllegalMessageAddressException;
@@ -70,7 +73,9 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NonceRes
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.NotEnoughDataException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.OmnipodException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodFaultException;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodProgressStatusVerificationFailedException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PodReturnedErrorResponseException;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.PrecedingCommandFailedUncertainlyException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.RileyLinkInterruptedException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.RileyLinkTimeoutException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.exception.RileyLinkUnexpectedException;
@@ -102,6 +107,7 @@ public class AapsOmnipodManager {
private final OmnipodAlertUtil omnipodAlertUtil;
private final NSUpload nsUpload;
private final ProfileFunction profileFunction;
+ private final Context context;
private boolean basalBeepsEnabled;
private boolean bolusBeepsEnabled;
@@ -113,6 +119,9 @@ public class AapsOmnipodManager {
private boolean notificationUncertainTbrSoundEnabled;
private boolean notificationUncertainSmbSoundEnabled;
private boolean notificationUncertainBolusSoundEnabled;
+ private boolean automaticallyAcknowledgeAlertsEnabled;
+ private boolean testBeepButtonEnabled;
+ private boolean rileylinkStatsButtonEnabled;
@Inject
public AapsOmnipodManager(OmnipodRileyLinkCommunicationManager communicationService,
@@ -127,8 +136,9 @@ public class AapsOmnipodManager {
DatabaseHelperInterface databaseHelper,
OmnipodAlertUtil omnipodAlertUtil,
NSUpload nsUpload,
- ProfileFunction profileFunction
- ) {
+ ProfileFunction profileFunction,
+ Context context) {
+
this.podStateManager = podStateManager;
this.aapsOmnipodUtil = aapsOmnipodUtil;
this.aapsLogger = aapsLogger;
@@ -141,8 +151,9 @@ public class AapsOmnipodManager {
this.omnipodAlertUtil = omnipodAlertUtil;
this.nsUpload = nsUpload;
this.profileFunction = profileFunction;
+ this.context = context;
- delegate = new OmnipodManager(aapsLogger, sp, communicationService, podStateManager);
+ delegate = new OmnipodManager(aapsLogger, communicationService, podStateManager);
reloadSettings();
}
@@ -151,13 +162,15 @@ public class AapsOmnipodManager {
basalBeepsEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.BASAL_BEEPS_ENABLED, true);
bolusBeepsEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.BOLUS_BEEPS_ENABLED, true);
smbBeepsEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.SMB_BEEPS_ENABLED, true);
- tbrBeepsEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.TBR_BEEPS_ENABLED, true);
+ tbrBeepsEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.TBR_BEEPS_ENABLED, false);
suspendDeliveryButtonEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.SUSPEND_DELIVERY_BUTTON_ENABLED, false);
pulseLogButtonEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.PULSE_LOG_BUTTON_ENABLED, false);
+ rileylinkStatsButtonEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.RILEYLINK_STATS_BUTTON_ENABLED, false);
timeChangeEventEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.TIME_CHANGE_EVENT_ENABLED, true);
notificationUncertainTbrSoundEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.NOTIFICATION_UNCERTAIN_TBR_SOUND_ENABLED, true);
notificationUncertainSmbSoundEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.NOTIFICATION_UNCERTAIN_SMB_SOUND_ENABLED, true);
notificationUncertainBolusSoundEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.NOTIFICATION_UNCERTAIN_BOLUS_SOUND_ENABLED, true);
+ automaticallyAcknowledgeAlertsEnabled = sp.getBoolean(OmnipodStorageKeys.Preferences.AUTOMATICALLY_ACKNOWLEDGE_ALERTS_ENABLED, false);
}
public PumpEnactResult initializePod() {
@@ -230,6 +243,20 @@ public class AapsOmnipodManager {
return new PumpEnactResult(injector).success(true).enacted(false);
}
+ public PumpEnactResult playTestBeep(BeepConfigType beepType) {
+ try {
+ executeCommand(() -> delegate.playTestBeep(beepType));
+ } catch (Exception ex) {
+ String errorMessage = translateException(ex);
+ addFailureToHistory(PodHistoryEntryType.PLAY_TEST_BEEP, errorMessage);
+ return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
+ }
+
+ addSuccessToHistory(PodHistoryEntryType.PLAY_TEST_BEEP, beepType);
+ return new PumpEnactResult(injector).success(true).enacted(false);
+ }
+
+
public PumpEnactResult getPodStatus() {
StatusResponse statusResponse;
@@ -280,24 +307,22 @@ public class AapsOmnipodManager {
String errorMessage = translateException(ex.getCause());
addFailureToHistory(historyEntryType, errorMessage);
return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
- } catch (DeliveryStatusVerificationFailedException ex) {
+ } catch (PrecedingCommandFailedUncertainlyException ex) {
if (showNotifications) {
- String note;
- if (ex.getExpectedStatus() == DeliveryStatus.SUSPENDED) {
- // Happened when suspending delivery before setting the new profile
- note = getStringResource(R.string.omnipod_error_set_basal_failed_delivery_might_be_suspended);
- } else {
- // Happened when setting the new profile (after suspending delivery)
- note = getStringResource(R.string.omnipod_error_set_basal_might_have_failed_delivery_might_be_suspended);
- }
- showNotification(Notification.FAILED_UDPATE_PROFILE, note, Notification.URGENT, R.raw.boluserror);
+ showNotification(Notification.FAILED_UDPATE_PROFILE, getStringResource(R.string.omnipod_error_set_basal_failed_delivery_might_be_suspended), Notification.URGENT, R.raw.boluserror);
}
String errorMessage = translateException(ex.getCause());
addFailureToHistory(historyEntryType, errorMessage);
return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
} catch (Exception ex) {
if (showNotifications) {
- showNotification(Notification.FAILED_UDPATE_PROFILE, getStringResource(R.string.omnipod_error_set_basal_failed), Notification.URGENT, R.raw.boluserror);
+ String note;
+ if (OmnipodManager.isCertainFailure(ex)) {
+ note = getStringResource(R.string.omnipod_error_set_basal_failed);
+ } else {
+ note = getStringResource(R.string.omnipod_error_set_basal_might_have_failed_delivery_might_be_suspended);
+ }
+ showNotification(Notification.FAILED_UDPATE_PROFILE, note, Notification.URGENT, R.raw.boluserror);
}
String errorMessage = translateException(ex);
addFailureToHistory(historyEntryType, errorMessage);
@@ -357,7 +382,7 @@ public class AapsOmnipodManager {
if (detailedBolusInfo.isSMB) {
showNotification(getStringResource(R.string.omnipod_error_bolus_failed_uncertain_smb, detailedBolusInfo.insulin), Notification.URGENT, isNotificationUncertainSmbSoundEnabled() ? R.raw.boluserror : null);
} else {
- showNotification(getStringResource(R.string.omnipod_error_bolus_failed_uncertain), Notification.URGENT, isNotificationUncertainBolusSoundEnabled() ? R.raw.boluserror : null);
+ showErrorDialog(getStringResource(R.string.omnipod_error_bolus_failed_uncertain), isNotificationUncertainBolusSoundEnabled() ? R.raw.boluserror : null);
}
}
@@ -454,13 +479,19 @@ public class AapsOmnipodManager {
String errorMessage = translateException(ex.getCause());
addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage);
return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
- } catch (DeliveryStatusVerificationFailedException ex) {
+ } catch (PrecedingCommandFailedUncertainlyException ex) {
String errorMessage = translateException(ex.getCause());
+ addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage);
- String note;
- if (ex.getExpectedStatus() == DeliveryStatus.TEMP_BASAL_RUNNING) {
- // Happened after cancelling the old TBR, when attempting to set new TBR
- note = getStringResource(R.string.omnipod_error_set_temp_basal_failed_old_tbr_cancelled_new_might_have_failed);
+ showNotification(getStringResource(R.string.omnipod_error_set_temp_basal_failed_old_tbr_might_be_cancelled), Notification.URGENT, isNotificationUncertainTbrSoundEnabled() ? R.raw.boluserror : null);
+
+ return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
+ } catch (Exception ex) {
+ String errorMessage = translateException(ex);
+ long pumpId = addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage);
+
+ if (!OmnipodManager.isCertainFailure(ex)) {
+ showNotification(getStringResource(R.string.omnipod_error_set_temp_basal_failed_old_tbr_cancelled_new_might_have_failed), Notification.URGENT, isNotificationUncertainTbrSoundEnabled() ? R.raw.boluserror : null);
// Assume that setting the temp basal succeeded here, because in case it didn't succeed,
// The next StatusResponse that we receive will allow us to recover from the wrong state
@@ -468,19 +499,10 @@ public class AapsOmnipodManager {
// If we would assume that the TBR didn't succeed, we couldn't properly recover upon the next StatusResponse,
// as we could only see that the Pod is running a TBR, but we don't know the rate and duration as
// the Pod doesn't provide this information
- long pumpId = addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage);
- addTempBasalTreatment(System.currentTimeMillis(), pumpId, tempBasalPair);
- } else {
- // Happened when attempting to cancel the old TBR
- note = getStringResource(R.string.omnipod_error_set_temp_basal_failed_old_tbr_might_be_cancelled);
- addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage);
- }
- showNotification(note, Notification.URGENT, isNotificationUncertainTbrSoundEnabled() ? R.raw.boluserror : null);
- return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
- } catch (Exception ex) {
- String errorMessage = translateException(ex);
- addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage);
+ addTempBasalTreatment(System.currentTimeMillis(), pumpId, tempBasalPair);
+ }
+
return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
}
@@ -559,7 +581,7 @@ public class AapsOmnipodManager {
String errorMessage = translateException(ex.getCause());
addFailureToHistory(PodHistoryEntryType.SET_TIME, errorMessage);
return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
- } catch (DeliveryStatusVerificationFailedException ex) {
+ } catch (PrecedingCommandFailedUncertainlyException ex) {
if (showNotifications) {
showNotification(getStringResource(R.string.omnipod_error_set_time_failed_delivery_might_be_suspended), Notification.URGENT, R.raw.boluserror);
}
@@ -567,6 +589,9 @@ public class AapsOmnipodManager {
addFailureToHistory(PodHistoryEntryType.SET_TIME, errorMessage);
return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
} catch (Exception ex) {
+ if (showNotifications) {
+ showNotification(getStringResource(R.string.omnipod_error_set_time_failed_delivery_might_be_suspended), Notification.URGENT, R.raw.boluserror);
+ }
String errorMessage = translateException(ex);
addFailureToHistory(PodHistoryEntryType.SET_TIME, errorMessage);
return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage);
@@ -613,6 +638,14 @@ public class AapsOmnipodManager {
return pulseLogButtonEnabled;
}
+ public boolean isTestBeepButtonEnabled() {
+ return testBeepButtonEnabled;
+ }
+
+ public boolean isRileylinkStatsButtonEnabled() {
+ return rileylinkStatsButtonEnabled;
+ }
+
public boolean isTimeChangeEventEnabled() {
return timeChangeEventEnabled;
}
@@ -629,6 +662,10 @@ public class AapsOmnipodManager {
return notificationUncertainBolusSoundEnabled;
}
+ public boolean isAutomaticallyAcknowledgeAlertsEnabled() {
+ return automaticallyAcknowledgeAlertsEnabled;
+ }
+
public void addBolusToHistory(DetailedBolusInfo originalDetailedBolusInfo) {
DetailedBolusInfo detailedBolusInfo = originalDetailedBolusInfo.copy();
@@ -706,6 +743,10 @@ public class AapsOmnipodManager {
activePlugin.getActiveTreatments().addToHistoryTempBasal(temporaryBasal);
}
+ public long addTbrSuccessToHistory(long requestTime, TempBasalPair tempBasalPair) {
+ return addSuccessToHistory(requestTime, PodHistoryEntryType.SET_TEMPORARY_BASAL, tempBasalPair);
+ }
+
private void addTempBasalTreatment(long time, long pumpId, TempBasalPair tempBasalPair) {
TemporaryBasal tempStart = new TemporaryBasal(injector) //
.date(time) //
@@ -795,6 +836,8 @@ public class AapsOmnipodManager {
} else if (ex instanceof IllegalPodProgressException || ex instanceof IllegalActivationProgressException ||
ex instanceof IllegalDeliveryStatusException) {
comment = getStringResource(R.string.omnipod_error_invalid_progress_state);
+ } else if (ex instanceof PodProgressStatusVerificationFailedException) {
+ comment = getStringResource(R.string.omnipod_error_failed_to_verify_activation_progress);
} else if (ex instanceof IllegalVersionResponseTypeException) {
comment = getStringResource(R.string.omnipod_error_invalid_response);
} else if (ex instanceof IllegalResponseException) {
@@ -844,6 +887,15 @@ public class AapsOmnipodManager {
rxBus.send(event);
}
+ private void showErrorDialog(String message, Integer sound) {
+ Intent intent = new Intent(context, ErrorHelperActivity.class);
+ intent.putExtra("soundid", sound);
+ intent.putExtra("status", message);
+ intent.putExtra("title", resourceHelper.gs(R.string.error));
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
private void showPodFaultNotification(FaultEventCode faultEventCode) {
showPodFaultNotification(faultEventCode, R.raw.boluserror);
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsPodStateManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsPodStateManager.java
index 158c4472ad..6ebaa1d3b9 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsPodStateManager.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsPodStateManager.java
@@ -7,7 +7,10 @@ import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.omnipod.definition.OmnipodStorageKeys;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager;
+import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodActiveAlertsChanged;
+import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodFaultEventChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodTbrChanged;
+import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodUncertainTbrRecovered;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
@Singleton
@@ -32,7 +35,19 @@ public class AapsPodStateManager extends PodStateManager {
sp.putString(OmnipodStorageKeys.Preferences.POD_STATE, podState);
}
+ @Override protected void onUncertainTbrRecovered() {
+ rxBus.send(new EventOmnipodUncertainTbrRecovered());
+ }
+
@Override protected void onTbrChanged() {
rxBus.send(new EventOmnipodTbrChanged());
}
+
+ @Override protected void onActiveAlertsChanged() {
+ rxBus.send(new EventOmnipodActiveAlertsChanged());
+ }
+
+ @Override protected void onFaultEventChanged() {
+ rxBus.send(new EventOmnipodFaultEventChanged());
+ }
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/queue/command/CommandPlayTestBeep.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/queue/command/CommandPlayTestBeep.java
new file mode 100644
index 0000000000..94ff4996c0
--- /dev/null
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/queue/command/CommandPlayTestBeep.java
@@ -0,0 +1,16 @@
+package info.nightscout.androidaps.plugins.pump.omnipod.queue.command;
+
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.BeepConfigType;
+
+public class CommandPlayTestBeep extends OmnipodCustomCommand {
+ private BeepConfigType beepType;
+
+ public CommandPlayTestBeep(BeepConfigType beepType) {
+ super(OmnipodCustomCommandType.PLAY_TEST_BEEP);
+ this.beepType = beepType;
+ }
+
+ public BeepConfigType getBeepType() {
+ return beepType;
+ }
+}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/queue/command/OmnipodCustomCommandType.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/queue/command/OmnipodCustomCommandType.java
index e6df62c47b..f5c787be26 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/queue/command/OmnipodCustomCommandType.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/queue/command/OmnipodCustomCommandType.java
@@ -8,7 +8,9 @@ public enum OmnipodCustomCommandType {
RESUME_DELIVERY("RESUME DELIVERY"),
DEACTIVATE_POD("DEACTIVATE POD"),
HANDLE_TIME_CHANGE("HANDLE TIME CHANGE"),
- UPDATE_ALERT_CONFIGURATION("UPDATE ALERT CONFIGURATION");
+ UPDATE_ALERT_CONFIGURATION("UPDATE ALERT CONFIGURATION"),
+ PLAY_TEST_BEEP("PLAY TEST BEEP")
+ ;
private final String description;
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt
index 0aec406de1..32260d1fc9 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt
@@ -19,7 +19,6 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice
-import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin
import info.nightscout.androidaps.plugins.pump.omnipod.R
@@ -30,7 +29,11 @@ import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateMa
import info.nightscout.androidaps.plugins.pump.omnipod.driver.util.TimeUtil
import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodPumpValuesChanged
import info.nightscout.androidaps.plugins.pump.omnipod.manager.AapsOmnipodManager
-import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.*
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandAcknowledgeAlerts
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandGetPodStatus
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandHandleTimeChange
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandResumeDelivery
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandSuspendDelivery
import info.nightscout.androidaps.plugins.pump.omnipod.util.AapsOmnipodUtil
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodAlertUtil
import info.nightscout.androidaps.queue.Callback
@@ -119,14 +122,6 @@ class OmnipodOverviewFragment : DaggerFragment() {
DisplayResultDialogCallback(resourceHelper.gs(R.string.omnipod_error_failed_to_refresh_status), false))
}
- omnipod_overview_button_rileylink_stats.setOnClickListener {
- if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() == true) {
- startActivity(Intent(context, RileyLinkStatusActivity::class.java))
- } else {
- displayNotConfiguredDialog()
- }
- }
-
omnipod_overview_button_acknowledge_active_alerts.setOnClickListener {
disablePodActionButtons()
commandQueue.customCommand(CommandAcknowledgeAlerts(),
@@ -147,12 +142,6 @@ class OmnipodOverviewFragment : DaggerFragment() {
DisplayResultDialogCallback(resourceHelper.gs(R.string.omnipod_error_failed_to_set_time), true)
.messageOnSuccess(resourceHelper.gs(R.string.omnipod_confirmation_time_on_pod_updated)))
}
-
- omnipod_overview_button_pulse_log.setOnClickListener {
- disablePodActionButtons()
- commandQueue.customCommand(CommandReadPulseLog(),
- DisplayResultDialogCallback(resourceHelper.gs(R.string.omnipod_error_failed_to_read_pulse_log), false))
- }
}
override fun onResume() {
@@ -275,7 +264,7 @@ class OmnipodOverviewFragment : DaggerFragment() {
})
}
- if (podStateManager.isFaulted) {
+ if (podStateManager.isPodFaulted) {
val faultEventCode = podStateManager.faultEventCode
errors.add(resourceHelper.gs(R.string.omnipod_pod_status_pod_fault_description, faultEventCode.value, faultEventCode.name))
}
@@ -361,11 +350,17 @@ class OmnipodOverviewFragment : DaggerFragment() {
}
} else {
if (podStateManager.podProgressStatus.isRunning) {
- if (podStateManager.isSuspended) {
+ var status = if (podStateManager.isSuspended) {
resourceHelper.gs(R.string.omnipod_pod_status_suspended)
} else {
resourceHelper.gs(R.string.omnipod_pod_status_running)
}
+
+ if (!podStateManager.isBasalCertain) {
+ status += " (" + resourceHelper.gs(R.string.omnipod_uncertain) + ")"
+ }
+
+ status
} else if (podStateManager.podProgressStatus == PodProgressStatus.FAULT_EVENT_OCCURRED) {
resourceHelper.gs(R.string.omnipod_pod_status_pod_fault)
} else if (podStateManager.podProgressStatus == PodProgressStatus.INACTIVE) {
@@ -375,7 +370,7 @@ class OmnipodOverviewFragment : DaggerFragment() {
}
}
- val podStatusColor = if (!podStateManager.isPodActivationCompleted || podStateManager.isPodDead || podStateManager.isSuspended) {
+ val podStatusColor = if (!podStateManager.isPodActivationCompleted || podStateManager.isPodDead || podStateManager.isSuspended || (podStateManager.isPodRunning && !podStateManager.isBasalCertain)) {
Color.RED
} else {
Color.WHITE
@@ -406,18 +401,36 @@ class OmnipodOverviewFragment : DaggerFragment() {
private fun updateTempBasal() {
if (podStateManager.isPodActivationCompleted && podStateManager.isTempBasalRunning) {
- val now = DateTime.now()
+ if (!podStateManager.hasTempBasal()) {
+ omnipod_overview_temp_basal.text = "???"
+ omnipod_overview_temp_basal.setTextColor(Color.RED)
+ } else {
+ val now = DateTime.now()
- val startTime = podStateManager.tempBasalStartTime
- val amount = podStateManager.tempBasalAmount
- val duration = podStateManager.tempBasalDuration
+ val startTime = podStateManager.tempBasalStartTime
+ val amount = podStateManager.tempBasalAmount
+ val duration = podStateManager.tempBasalDuration
- val minutesRunning = Duration(startTime, now).standardMinutes
+ val minutesRunning = Duration(startTime, now).standardMinutes
- var text: String
+ var text: String
+ val textColor: Int
+ text = resourceHelper.gs(R.string.omnipod_overview_temp_basal_value, amount, dateUtil.timeString(startTime.millis), minutesRunning, duration.standardMinutes)
+ if (podStateManager.isTempBasalCertain) {
+ textColor = Color.WHITE
+ } else {
+ textColor = Color.RED
+ text += " (" + resourceHelper.gs(R.string.omnipod_uncertain) + ")"
+ }
+
+ omnipod_overview_temp_basal.text = text
+ omnipod_overview_temp_basal.setTextColor(textColor)
+ }
+ } else {
+ var text = PLACEHOLDER
val textColor: Int
- text = resourceHelper.gs(R.string.omnipod_overview_temp_basal_value, amount, dateUtil.timeString(startTime.millis), minutesRunning, duration.standardMinutes)
- if (podStateManager.isTempBasalCertain) {
+
+ if (!podStateManager.isPodActivationCompleted || podStateManager.isTempBasalCertain) {
textColor = Color.WHITE
} else {
textColor = Color.RED
@@ -426,9 +439,6 @@ class OmnipodOverviewFragment : DaggerFragment() {
omnipod_overview_temp_basal.text = text
omnipod_overview_temp_basal.setTextColor(textColor)
- } else {
- omnipod_overview_temp_basal.text = PLACEHOLDER
- omnipod_overview_temp_basal.setTextColor(Color.WHITE)
}
}
@@ -447,7 +457,6 @@ class OmnipodOverviewFragment : DaggerFragment() {
updateAcknowledgeAlertsButton()
updateSuspendDeliveryButton()
updateSetTimeButton()
- updatePulseLogButton()
}
private fun disablePodActionButtons() {
@@ -456,7 +465,6 @@ class OmnipodOverviewFragment : DaggerFragment() {
omnipod_overview_button_suspend_delivery.isEnabled = false
omnipod_overview_button_set_time.isEnabled = false
omnipod_overview_button_refresh_status.isEnabled = false
- omnipod_overview_button_pulse_log.isEnabled = false
}
private fun updateRefreshStatusButton() {
@@ -474,7 +482,7 @@ class OmnipodOverviewFragment : DaggerFragment() {
}
private fun updateAcknowledgeAlertsButton() {
- if (podStateManager.isPodRunning && (podStateManager.hasActiveAlerts() || commandQueue.isCustomCommandInQueue(CommandAcknowledgeAlerts::class.java))) {
+ if (!omnipodManager.isAutomaticallyAcknowledgeAlertsEnabled && podStateManager.isPodRunning && (podStateManager.hasActiveAlerts() || commandQueue.isCustomCommandInQueue(CommandAcknowledgeAlerts::class.java))) {
omnipod_overview_button_acknowledge_active_alerts.visibility = View.VISIBLE
omnipod_overview_button_acknowledge_active_alerts.isEnabled = rileyLinkServiceData.rileyLinkServiceState.isReady && isQueueEmpty()
} else {
@@ -501,15 +509,6 @@ class OmnipodOverviewFragment : DaggerFragment() {
}
}
- private fun updatePulseLogButton() {
- if (omnipodManager.isPulseLogButtonEnabled) {
- omnipod_overview_button_pulse_log.visibility = View.VISIBLE
- omnipod_overview_button_pulse_log.isEnabled = podStateManager.isPodActivationCompleted && rileyLinkServiceData.rileyLinkServiceState.isReady && isQueueEmpty()
- } else {
- omnipod_overview_button_pulse_log.visibility = View.GONE
- }
- }
-
private fun displayNotConfiguredDialog() {
context?.let {
UIRunnable(Runnable {
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodHistoryActivity.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodHistoryActivity.java
index ff8319a557..74aded32fb 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodHistoryActivity.java
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodHistoryActivity.java
@@ -35,6 +35,7 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.utils.ProfileUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.R;
import info.nightscout.androidaps.plugins.pump.omnipod.definition.PodHistoryEntryType;
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.BeepConfigType;
import info.nightscout.androidaps.plugins.pump.omnipod.util.AapsOmnipodUtil;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
@@ -272,6 +273,12 @@ public class PodHistoryActivity extends NoSplashAppCompatActivity {
}
break;
+ case PLAY_TEST_BEEP: {
+ if (historyEntry.getData() != null) {
+ valueView.setText(historyEntry.getData());
+ }
+ }
+ break;
case GET_POD_STATUS:
case GET_POD_INFO:
case SET_TIME:
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodManagementActivity.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodManagementActivity.kt
index fa1de1ef5c..058a033d85 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodManagementActivity.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/PodManagementActivity.kt
@@ -1,25 +1,35 @@
package info.nightscout.androidaps.plugins.pump.omnipod.ui
+import android.content.Context
import android.content.Intent
import android.os.Bundle
import dagger.android.HasAndroidInjector
+import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange
+import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData
+import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin
import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.ActivationProgress
+import info.nightscout.androidaps.plugins.pump.omnipod.driver.definition.BeepConfigType
import info.nightscout.androidaps.plugins.pump.omnipod.driver.manager.PodStateManager
import info.nightscout.androidaps.plugins.pump.omnipod.event.EventOmnipodPumpValuesChanged
import info.nightscout.androidaps.plugins.pump.omnipod.manager.AapsOmnipodManager
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandPlayTestBeep
+import info.nightscout.androidaps.plugins.pump.omnipod.queue.command.CommandReadPulseLog
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.activation.PodActivationWizardActivity
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.deactivation.PodDeactivationWizardActivity
+import info.nightscout.androidaps.queue.Callback
+import info.nightscout.androidaps.queue.events.EventQueueChanged
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.extensions.plusAssign
import info.nightscout.androidaps.utils.extensions.toVisibility
import info.nightscout.androidaps.utils.resources.ResourceHelper
+import info.nightscout.androidaps.utils.ui.UIRunnable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.omnipod_pod_management.*
@@ -38,6 +48,8 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
@Inject lateinit var injector: HasAndroidInjector
@Inject lateinit var rileyLinkServiceData: RileyLinkServiceData
@Inject lateinit var aapsOmnipodManager: AapsOmnipodManager
+ @Inject lateinit var context: Context
+ @Inject lateinit var omnipodPumpPlugin: OmnipodPumpPlugin
private var disposables: CompositeDisposable = CompositeDisposable()
@@ -55,11 +67,45 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
omnipod_pod_management_button_discard_pod.setOnClickListener {
OKDialog.showConfirmation(this,
- resourceHelper.gs(R.string.omnipod_pod_management_discard_pod_state_confirmation), Thread {
+ resourceHelper.gs(R.string.omnipod_pod_management_discard_pod_confirmation), Thread {
aapsOmnipodManager.discardPodState()
})
}
+ omnipod_pod_management_button_rileylink_stats.setOnClickListener {
+ if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() == true) {
+ startActivity(Intent(context, RileyLinkStatusActivity::class.java))
+ } else {
+ displayNotConfiguredDialog()
+ }
+ }
+
+ omnipod_pod_management_button_play_test_beep.setOnClickListener {
+ omnipod_pod_management_button_play_test_beep.isEnabled = false
+ omnipod_pod_management_button_play_test_beep.setText(R.string.omnipod_pod_management_button_playing_test_beep)
+
+ commandQueue.customCommand(CommandPlayTestBeep(BeepConfigType.BEEEP), object : Callback() {
+ override fun run() {
+ if (!result.success) {
+ displayErrorDialog(resourceHelper.gs(R.string.omnipod_warning), resourceHelper.gs(R.string.omnipod_two_strings_concatenated_by_colon, resourceHelper.gs(R.string.omnipod_error_failed_to_play_test_beep), result.comment), false)
+ }
+ }
+ })
+ }
+
+ omnipod_pod_management_button_pulse_log.setOnClickListener {
+ omnipod_pod_management_button_pulse_log.isEnabled = false
+ omnipod_pod_management_button_pulse_log.setText(R.string.omnipod_pod_management_button_reading_pulse_log)
+
+ commandQueue.customCommand(CommandReadPulseLog(), object : Callback() {
+ override fun run() {
+ if (!result.success) {
+ displayErrorDialog(resourceHelper.gs(R.string.omnipod_warning), resourceHelper.gs(R.string.omnipod_two_strings_concatenated_by_colon, resourceHelper.gs(R.string.omnipod_error_failed_to_read_pulse_log), result.comment), false)
+ }
+ }
+ })
+ }
+
omnipod_pod_management_button_pod_history.setOnClickListener {
startActivity(Intent(this, PodHistoryActivity::class.java))
}
@@ -75,6 +121,10 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
.toObservable(EventOmnipodPumpValuesChanged::class.java)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ refreshButtons() }, { fabricPrivacy.logException(it) })
+ disposables += rxBus
+ .toObservable(EventQueueChanged::class.java)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ refreshButtons() }, { fabricPrivacy.logException(it) })
refreshButtons()
}
@@ -88,24 +138,82 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
// Only show the discard button to reset a cached Pod address before the Pod has actually been initialized
// Otherwise, users should use the Deactivate Pod Wizard. In case proper deactivation fails,
// they will get an option to discard the Pod state there
- // TODO maybe rename this button and the confirmation dialog text (see onCreate)
val discardButtonEnabled = podStateManager.hasPodState() && !podStateManager.isPodInitialized
omnipod_pod_management_button_discard_pod.visibility = discardButtonEnabled.toVisibility()
+
+ val pulseLogButtonEnabled = aapsOmnipodManager.isPulseLogButtonEnabled
+ omnipod_pod_management_button_pulse_log.visibility = pulseLogButtonEnabled.toVisibility()
+
+ omnipod_pod_management_button_rileylink_stats.visibility = aapsOmnipodManager.isRileylinkStatsButtonEnabled.toVisibility()
omnipod_pod_management_waiting_for_rl_layout.visibility = (!rileyLinkServiceData.rileyLinkServiceState.isReady).toVisibility()
if (rileyLinkServiceData.rileyLinkServiceState.isReady) {
omnipod_pod_management_button_activate_pod.isEnabled = !podStateManager.isPodActivationCompleted
omnipod_pod_management_button_deactivate_pod.isEnabled = podStateManager.activationProgress.isAtLeast(ActivationProgress.PAIRING_COMPLETED)
+
+ if (podStateManager.isPodInitialized && podStateManager.activationProgress.isAtLeast(ActivationProgress.PAIRING_COMPLETED)) {
+ if (commandQueue.isCustomCommandInQueue(CommandPlayTestBeep::class.java)) {
+ omnipod_pod_management_button_play_test_beep.isEnabled = false
+ omnipod_pod_management_button_play_test_beep.setText(R.string.omnipod_pod_management_button_playing_test_beep)
+ } else {
+ omnipod_pod_management_button_play_test_beep.isEnabled = true
+ omnipod_pod_management_button_play_test_beep.setText(R.string.omnipod_pod_management_button_play_test_beep)
+ }
+ } else {
+ omnipod_pod_management_button_play_test_beep.isEnabled = false
+ omnipod_pod_management_button_play_test_beep.setText(R.string.omnipod_pod_management_button_play_test_beep)
+ }
+
if (discardButtonEnabled) {
omnipod_pod_management_button_discard_pod.isEnabled = true
}
+ if (pulseLogButtonEnabled) {
+ if (podStateManager.isPodActivationCompleted) {
+ if (commandQueue.isCustomCommandInQueue(CommandReadPulseLog::class.java)) {
+ omnipod_pod_management_button_pulse_log.isEnabled = false
+ omnipod_pod_management_button_pulse_log.setText(R.string.omnipod_pod_management_button_reading_pulse_log)
+ } else {
+ omnipod_pod_management_button_pulse_log.isEnabled = true
+ omnipod_pod_management_button_pulse_log.setText(R.string.omnipod_pod_management_button_read_pulse_log)
+ }
+ } else {
+ omnipod_pod_management_button_pulse_log.isEnabled = false
+ omnipod_pod_management_button_pulse_log.setText(R.string.omnipod_pod_management_button_read_pulse_log)
+ }
+ }
} else {
+ omnipod_pod_management_button_play_test_beep.setText(R.string.omnipod_pod_management_button_play_test_beep)
omnipod_pod_management_button_activate_pod.isEnabled = false
omnipod_pod_management_button_deactivate_pod.isEnabled = false
+ omnipod_pod_management_button_play_test_beep.isEnabled = false
+
if (discardButtonEnabled) {
omnipod_pod_management_button_discard_pod.isEnabled = false
}
+ if (pulseLogButtonEnabled) {
+ omnipod_pod_management_button_pulse_log.isEnabled = false
+ omnipod_pod_management_button_pulse_log.setText(R.string.omnipod_pod_management_button_read_pulse_log)
+ }
}
}
+ private fun displayErrorDialog(title: String, message: String, withSound: Boolean) {
+ context.let {
+ val i = Intent(it, ErrorHelperActivity::class.java)
+ i.putExtra("soundid", if (withSound) R.raw.boluserror else 0)
+ i.putExtra("status", message)
+ i.putExtra("title", title)
+ i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ it.startActivity(i)
+ }
+ }
+
+ private fun displayNotConfiguredDialog() {
+ context?.let {
+ UIRunnable(Runnable {
+ OKDialog.show(it, resourceHelper.gs(R.string.omnipod_warning),
+ resourceHelper.gs(R.string.omnipod_error_operation_not_possible_no_configuration), null)
+ }).run()
+ }
+ }
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/PodActivationWizardActivity.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/PodActivationWizardActivity.kt
index eccc00eb94..b5f4ee3114 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/PodActivationWizardActivity.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/PodActivationWizardActivity.kt
@@ -10,6 +10,7 @@ import javax.inject.Inject
class PodActivationWizardActivity : OmnipodWizardActivityBase() {
companion object {
+
const val KEY_START_DESTINATION = "startDestination"
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/AttachPodInfoFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/AttachPodInfoFragment.kt
index 2bad054984..8fc2d30b65 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/AttachPodInfoFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/AttachPodInfoFragment.kt
@@ -11,6 +11,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.fragment
import kotlinx.android.synthetic.main.omnipod_wizard_nav_buttons.*
class AttachPodInfoFragment : InfoFragmentBase() {
+
@StringRes
override fun getTitleId(): Int = R.string.omnipod_pod_activation_wizard_attach_pod_title
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/FillPodInfoFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/FillPodInfoFragment.kt
index 425ff1e7ea..f7a1053785 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/FillPodInfoFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/FillPodInfoFragment.kt
@@ -6,6 +6,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.fragment.InfoFragmentBase
class FillPodInfoFragment : InfoFragmentBase() {
+
@StringRes
override fun getTitleId(): Int = R.string.omnipod_pod_activation_wizard_fill_pod_title
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InitializePodActionFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InitializePodActionFragment.kt
index bc10c3daf1..82af74414f 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InitializePodActionFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InitializePodActionFragment.kt
@@ -11,6 +11,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.activation.view
import javax.inject.Inject
class InitializePodActionFragment : PodActivationActionFragmentBase() {
+
@Inject
@OmnipodPluginQualifier
lateinit var viewModelFactory: ViewModelProvider.Factory
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InsertCannulaActionFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InsertCannulaActionFragment.kt
index 009318c60d..76a470ee3a 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InsertCannulaActionFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/InsertCannulaActionFragment.kt
@@ -11,6 +11,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.activation.view
import javax.inject.Inject
class InsertCannulaActionFragment : PodActivationActionFragmentBase() {
+
@Inject
@OmnipodPluginQualifier
lateinit var viewModelFactory: ViewModelProvider.Factory
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivatedInfoFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivatedInfoFragment.kt
index 455a8063a3..d0c807a4e3 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivatedInfoFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivatedInfoFragment.kt
@@ -6,6 +6,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.fragment.InfoFragmentBase
class PodActivatedInfoFragment : InfoFragmentBase() {
+
@StringRes
override fun getTitleId(): Int = R.string.omnipod_pod_activation_wizard_pod_activated_title
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivationActionFragmentBase.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivationActionFragmentBase.kt
index 54df2de98e..40c8e9fbc9 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivationActionFragmentBase.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/fragment/PodActivationActionFragmentBase.kt
@@ -11,6 +11,7 @@ import kotlinx.android.synthetic.main.omnipod_wizard_action_page_fragment.*
import javax.inject.Inject
abstract class PodActivationActionFragmentBase : ActionFragmentBase() {
+
@Inject
protected lateinit var podStateManager: PodStateManager
@@ -26,7 +27,7 @@ abstract class PodActivationActionFragmentBase : ActionFragmentBase() {
}
override fun onActionFailure() {
- if (podStateManager.isPodActivationTimeExceeded && podStateManager.activationProgress.isAtLeast(ActivationProgress.PAIRING_COMPLETED)) {
+ if ((podStateManager.isPodActivationTimeExceeded && podStateManager.activationProgress.isAtLeast(ActivationProgress.PAIRING_COMPLETED)) || podStateManager.isPodFaulted) {
omnipod_wizard_button_retry.visibility = View.GONE
omnipod_wizard_button_deactivate_pod.visibility = View.VISIBLE
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InitializePodActionViewModel.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InitializePodActionViewModel.kt
index 429b1170d2..674ca9f8a7 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InitializePodActionViewModel.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InitializePodActionViewModel.kt
@@ -6,5 +6,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.viewmode
import javax.inject.Inject
class InitializePodActionViewModel @Inject constructor(private val aapsOmnipodManager: AapsOmnipodManager) : ActionViewModelBase() {
+
override fun doExecuteAction(): PumpEnactResult = aapsOmnipodManager.initializePod()
}
\ No newline at end of file
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InsertCannulaActionViewModel.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InsertCannulaActionViewModel.kt
index fe042a4a03..1b1bd126dc 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InsertCannulaActionViewModel.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/activation/viewmodel/InsertCannulaActionViewModel.kt
@@ -7,5 +7,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.viewmode
import javax.inject.Inject
class InsertCannulaActionViewModel @Inject constructor(private val aapsOmnipodManager: AapsOmnipodManager, private val profileFunction: ProfileFunction) : ActionViewModelBase() {
+
override fun doExecuteAction(): PumpEnactResult = aapsOmnipodManager.insertCannula(profileFunction.getProfile())
}
\ No newline at end of file
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/activity/OmnipodWizardActivityBase.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/activity/OmnipodWizardActivityBase.kt
index 9f0f878b04..0621cd02d5 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/activity/OmnipodWizardActivityBase.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/activity/OmnipodWizardActivityBase.kt
@@ -7,6 +7,7 @@ import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
import info.nightscout.androidaps.plugins.pump.omnipod.R
abstract class OmnipodWizardActivityBase : NoSplashAppCompatActivity() {
+
override fun onBackPressed() {
exitActivityAfterConfirmation()
}
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/ActionFragmentBase.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/ActionFragmentBase.kt
index 1b0d8e41f6..a8167c4568 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/ActionFragmentBase.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/ActionFragmentBase.kt
@@ -12,6 +12,7 @@ import kotlinx.android.synthetic.main.omnipod_wizard_action_page_fragment.*
import kotlinx.android.synthetic.main.omnipod_wizard_nav_buttons.*
abstract class ActionFragmentBase : WizardFragmentBase() {
+
protected lateinit var viewModel: ActionViewModelBase
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/WizardFragmentBase.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/WizardFragmentBase.kt
index cd6f135f08..b2a002470e 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/WizardFragmentBase.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/common/fragment/WizardFragmentBase.kt
@@ -19,6 +19,7 @@ import kotlinx.android.synthetic.main.omnipod_wizard_progress_indication.*
import kotlin.math.roundToInt
abstract class WizardFragmentBase : DaggerFragment() {
+
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/PodDeactivationWizardActivity.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/PodDeactivationWizardActivity.kt
index 892d85a97e..dafba7fb4d 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/PodDeactivationWizardActivity.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/PodDeactivationWizardActivity.kt
@@ -5,6 +5,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.activity.OmnipodWizardActivityBase
class PodDeactivationWizardActivity : OmnipodWizardActivityBase() {
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodActionFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodActionFragment.kt
index 595bda103e..59843bc180 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodActionFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodActionFragment.kt
@@ -18,6 +18,7 @@ import kotlinx.android.synthetic.main.omnipod_wizard_action_page_fragment.*
import javax.inject.Inject
class DeactivatePodActionFragment : ActionFragmentBase() {
+
@Inject
@OmnipodPluginQualifier
lateinit var viewModelFactory: ViewModelProvider.Factory
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodInfoFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodInfoFragment.kt
index 5fefcfc549..8a24e2767b 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodInfoFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/DeactivatePodInfoFragment.kt
@@ -6,6 +6,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.fragment.InfoFragmentBase
class DeactivatePodInfoFragment : InfoFragmentBase() {
+
@StringRes
override fun getTitleId(): Int = R.string.omnipod_pod_deactivation_wizard_deactivate_pod_title
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDeactivatedInfoFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDeactivatedInfoFragment.kt
index 3b1c80cbb1..240efe4735 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDeactivatedInfoFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDeactivatedInfoFragment.kt
@@ -6,6 +6,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.fragment.InfoFragmentBase
class PodDeactivatedInfoFragment : InfoFragmentBase() {
+
@StringRes
override fun getTitleId(): Int = R.string.omnipod_pod_deactivation_wizard_pod_deactivated_title
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDiscardedInfoFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDiscardedInfoFragment.kt
index 7b53f4abc4..ebbfa0b3fd 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDiscardedInfoFragment.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/fragment/PodDiscardedInfoFragment.kt
@@ -6,6 +6,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.R
import info.nightscout.androidaps.plugins.pump.omnipod.ui.wizard.common.fragment.InfoFragmentBase
class PodDiscardedInfoFragment : InfoFragmentBase() {
+
@StringRes
override fun getTitleId(): Int = R.string.omnipod_pod_deactivation_wizard_pod_discarded_title
diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/viewmodel/DeactivatePodActionViewModel.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/viewmodel/DeactivatePodActionViewModel.kt
index 80296603f2..9e0b75f2e3 100644
--- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/viewmodel/DeactivatePodActionViewModel.kt
+++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/wizard/deactivation/viewmodel/DeactivatePodActionViewModel.kt
@@ -10,6 +10,7 @@ import io.reactivex.subjects.SingleSubject
import javax.inject.Inject
class DeactivatePodActionViewModel @Inject constructor(private val aapsOmnipodManager: AapsOmnipodManager, private val commandQueueProvider: CommandQueueProvider) : ActionViewModelBase() {
+
override fun doExecuteAction(): PumpEnactResult {
val singleSubject = SingleSubject.create()
commandQueueProvider.customCommand(CommandDeactivatePod(), object : Callback() {
diff --git a/omnipod/src/main/res/drawable/ic_acknowledge_alerts.xml b/omnipod/src/main/res/drawable/ic_acknowledge_alerts.xml
new file mode 100644
index 0000000000..9aa0dc8d80
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_acknowledge_alerts.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_actions_temptarget.xml b/omnipod/src/main/res/drawable/ic_actions_temptarget.xml
deleted file mode 100644
index 28aed597c8..0000000000
--- a/omnipod/src/main/res/drawable/ic_actions_temptarget.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/omnipod/src/main/res/drawable/ic_activate_pod.xml b/omnipod/src/main/res/drawable/ic_activate_pod.xml
new file mode 100644
index 0000000000..3a9f39141b
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_activate_pod.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_cp_aaps_offline.xml b/omnipod/src/main/res/drawable/ic_cp_aaps_offline.xml
deleted file mode 100644
index ab562c35a6..0000000000
--- a/omnipod/src/main/res/drawable/ic_cp_aaps_offline.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
diff --git a/omnipod/src/main/res/drawable/ic_cp_pump_canula.xml b/omnipod/src/main/res/drawable/ic_cp_pump_canula.xml
deleted file mode 100644
index f302f9770c..0000000000
--- a/omnipod/src/main/res/drawable/ic_cp_pump_canula.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/omnipod/src/main/res/drawable/ic_deactivate_pod.xml b/omnipod/src/main/res/drawable/ic_deactivate_pod.xml
new file mode 100644
index 0000000000..7eef8975c0
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_deactivate_pod.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_toast_delete_confirm.xml b/omnipod/src/main/res/drawable/ic_discard_pod.xml
similarity index 86%
rename from omnipod/src/main/res/drawable/ic_toast_delete_confirm.xml
rename to omnipod/src/main/res/drawable/ic_discard_pod.xml
index e5be03e8ec..9bff377c93 100644
--- a/omnipod/src/main/res/drawable/ic_toast_delete_confirm.xml
+++ b/omnipod/src/main/res/drawable/ic_discard_pod.xml
@@ -1,10 +1,9 @@
\ No newline at end of file
diff --git a/omnipod/src/main/res/drawable/ic_local_activate.xml b/omnipod/src/main/res/drawable/ic_local_activate.xml
deleted file mode 100644
index c171fe367e..0000000000
--- a/omnipod/src/main/res/drawable/ic_local_activate.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
diff --git a/omnipod/src/main/res/drawable/ic_loop_disabled.xml b/omnipod/src/main/res/drawable/ic_loop_disabled.xml
deleted file mode 100644
index 81dabea9d6..0000000000
--- a/omnipod/src/main/res/drawable/ic_loop_disabled.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
diff --git a/omnipod/src/main/res/drawable/ic_play_test_beep.xml b/omnipod/src/main/res/drawable/ic_play_test_beep.xml
new file mode 100644
index 0000000000..bca912f844
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_play_test_beep.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_pod_history.xml b/omnipod/src/main/res/drawable/ic_pod_history.xml
new file mode 100644
index 0000000000..07846055da
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_pod_history.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_pod_management.xml b/omnipod/src/main/res/drawable/ic_pod_management.xml
new file mode 100644
index 0000000000..55ed07f4fc
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_pod_management.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_cp_bolus_correction.xml b/omnipod/src/main/res/drawable/ic_pulse_log.xml
similarity index 95%
rename from omnipod/src/main/res/drawable/ic_cp_bolus_correction.xml
rename to omnipod/src/main/res/drawable/ic_pulse_log.xml
index 49d6332c8e..3114b7f4fc 100644
--- a/omnipod/src/main/res/drawable/ic_cp_bolus_correction.xml
+++ b/omnipod/src/main/res/drawable/ic_pulse_log.xml
@@ -5,8 +5,8 @@
android:viewportHeight="24">
+ android:fillColor="#A14FFF" />
+ android:fillColor="#FFBC4F" />
diff --git a/omnipod/src/main/res/drawable/ic_refresh_pod_status.xml b/omnipod/src/main/res/drawable/ic_refresh_pod_status.xml
new file mode 100644
index 0000000000..ea35939c1a
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_refresh_pod_status.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_resume_delivery.xml b/omnipod/src/main/res/drawable/ic_resume_delivery.xml
new file mode 100644
index 0000000000..effffa5470
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_resume_delivery.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_rl_stats.xml b/omnipod/src/main/res/drawable/ic_rl_stats.xml
new file mode 100644
index 0000000000..81b3952eb4
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_rl_stats.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/omnipod/src/main/res/drawable/ic_access_alarm.xml b/omnipod/src/main/res/drawable/ic_set_time.xml
similarity index 93%
rename from omnipod/src/main/res/drawable/ic_access_alarm.xml
rename to omnipod/src/main/res/drawable/ic_set_time.xml
index 48a463f81b..3548756add 100644
--- a/omnipod/src/main/res/drawable/ic_access_alarm.xml
+++ b/omnipod/src/main/res/drawable/ic_set_time.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
diff --git a/omnipod/src/main/res/drawable/ic_toast_check.xml b/omnipod/src/main/res/drawable/ic_success.xml
similarity index 100%
rename from omnipod/src/main/res/drawable/ic_toast_check.xml
rename to omnipod/src/main/res/drawable/ic_success.xml
diff --git a/omnipod/src/main/res/drawable/ic_suspend_delivery.xml b/omnipod/src/main/res/drawable/ic_suspend_delivery.xml
new file mode 100644
index 0000000000..fb0a216bd6
--- /dev/null
+++ b/omnipod/src/main/res/drawable/ic_suspend_delivery.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/omnipod/src/main/res/layout/omnipod_overview.xml b/omnipod/src/main/res/layout/omnipod_overview.xml
index ff36031400..b14c3304c9 100644
--- a/omnipod/src/main/res/layout/omnipod_overview.xml
+++ b/omnipod/src/main/res/layout/omnipod_overview.xml
@@ -37,7 +37,6 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
-
-
-
-
-
@@ -752,7 +747,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
- android:drawableTop="@drawable/ic_actions_refill"
+ android:drawableTop="@drawable/ic_refresh_pod_status"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:text="@string/omnipod_overview_button_refresh" />
@@ -763,7 +758,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
- android:drawableTop="@drawable/ic_danarhistory"
+ android:drawableTop="@drawable/ic_pod_management"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:text="@string/omnipod_overview_button_pod_management" />
@@ -774,41 +769,18 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
- android:drawableTop="@drawable/ic_cp_aaps_offline"
+ android:drawableTop="@drawable/ic_acknowledge_alerts"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:text="@string/omnipod_overview_button_acknowledge_active_alerts" />
-
-
-
-
@@ -75,7 +75,7 @@
android:layout_marginTop="20dp"
android:layout_marginRight="40dp"
android:layout_weight="0.5"
- android:drawableTop="@drawable/ic_actions_temptarget"
+ android:drawableTop="@drawable/ic_deactivate_pod"
android:text="@string/omnipod_pod_management_button_deactivate_pod"
android:textAllCaps="false" />
@@ -88,10 +88,37 @@
android:layout_marginTop="20dp"
android:layout_marginRight="40dp"
android:layout_weight="0.5"
- android:drawableTop="@drawable/ic_toast_delete_confirm"
+ android:drawableTop="@drawable/ic_discard_pod"
android:text="@string/omnipod_pod_management_button_discard_pod"
android:textAllCaps="false" />
+
+
+
+
+
+
diff --git a/omnipod/src/main/res/layout/omnipod_wizard_action_page_fragment.xml b/omnipod/src/main/res/layout/omnipod_wizard_action_page_fragment.xml
index aa6b68a941..5f7d246f14 100644
--- a/omnipod/src/main/res/layout/omnipod_wizard_action_page_fragment.xml
+++ b/omnipod/src/main/res/layout/omnipod_wizard_action_page_fragment.xml
@@ -29,7 +29,7 @@
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/omnipod_wizard_vertical_spacing"
android:layout_marginBottom="@dimen/omnipod_wizard_vertical_spacing"
- app:srcCompat="@drawable/ic_toast_check"
+ app:srcCompat="@drawable/ic_success"
android:visibility="gone" />
Часове преди изключване
Малко инсулин в резервоарБрой единици
+ Сигнал при неясни TBR известия, разрешен
+ Сигнал при неясни SMB известия, разрешен
+ Сигнал при неясни болус известия, разрешенRileyLinkДругоИзвестияЗвук за потвърждение
+ ИзвестияНяма активен под
+ Настройка в прогрес (активиране на под)Настройка в прогрес (въвеждане на канюла)ИзпълняваПрекратеноГрешка в подВремето за активация изтечеНеактивен
- Грешка на под: %1$s %2$sКрай на напомняне за сдвояванеКрай на напомнянето за настройка
@@ -36,23 +40,70 @@
Минимален инсулин в резервоараНепозната аларма
+ История на подОписаниеИзточникДатаТип:
+ %1$.2fЕ
+ %1$.2f Е, Вх=%2$.1f гр
+ Количество: %1$.2f U, Продължителност: %2$d минВниманиеГрешен RileyLink адрес.Забранено действие.\n\n Първо трябва да конфигурурате Omnipod , преди да използвате тази операция,.Няма активен под
+ Непредвидена грешка. Моля, докладвайте! (%1$s: %2$s).
+ Неуспешна комуникация: проверката на цялостта на съобщението е неуспешна
+ Неуспешна комуникация: получиен невалиден пакет от под
+ Съобщението е неуспешно: под е в грешно състояние
+ Неуспешна комуникация: получени грешен отговор от под
+ Неуспешна комуникация: получи съобщение с невалиден номер на последователност от Pod
+ Неуспешна комуникация: получено съобщение с невалиден адрес от Pod
+ Неуспешна комуникация: неуспешно декодиране на съобщение от Pod
+ Комуникацията е неуспешна: ресинхронизирането е неуспешно
+ Комуникацията е неуспешна: ресинхронизирането е неуспешно
+ Комуникацията е неуспешна: не достатъчно данни получени от Pod
+ Грешка на Pod (%1$03d %2$s). Моля, деактивирайте вашия Pod и стартирайте нов
+ Комуникацията е неуспешна: Pod върна отговор с грешка
+ Няма отговор от RileyLink
+ RileyLink прекъснат
+ Няма отговор от PodНеуспешно задаване на базален профил. Доставката може да бъде спряна! Моля, ръчно опреснете състоянието на Pod от раздел Omnipod и възобновете доставката, ако е необходимо.Неуспешно задаване на базален профил. Доставката може да бъде спряна! Моля, ръчно опреснете състоянието на Pod от раздел Omnipod и възобновете доставката, ако е необходимо.Неуспешно задаване на базален профил. Доставката е спряна! Моля, ръчно подновяване на доставката от раздела Omnipod.
+ Неуспешно задаване на базален профил.
+ Отменянето на временния базал може да е неуспешно. Моля, ръчно опреснете статуса на Pod от раздел Omnipod.Задаването на временен базал е неуспешно. Ако преди това е изпълнявал временен базал, може да е бил отменен. Моля, ръчно опреснете статуса на Pod от раздела Omnipod.Задаването на временен базал е неуспешно. Ако преди това е изпълнявал временен базал, може да е бил отменен. Моля, ръчно опреснете статуса на Pod от раздела Omnipod.
+ Продължителността трябва да бъде по-голяма от нула и кратно на %1$s минути.Неуспешно задаване на базален профил. Доставката може да бъде спряна! Моля, ръчно опреснете състоянието на Pod от раздел Omnipod и възобновете доставката, ако е необходимо.Неуспешно задаване на базален профил. Доставката е спряна! Моля, ръчно подновяване на доставката от раздела Omnipod.
+ Неуспешно задаване на базален профил: получен празен профил. Уверете се, че сте активирали базалния профил.
+ Не е активен базален профил. Уверете се, че сте активирали базалния профил.
+ Неизвестна команда: %1$s
+ Неуспешно прочитане на Pulse Log
+ Неуспешно опресняване на състояние
+ Неуспешно спиране на аларми
+ Неуспешно спиране на болус
+ Неуспешно задаване на време
+ Неуспешно подновяване на доставкатана инсулин
+ Неуспешно променяне на времето на капсулата. Трябва ръчно да синхронизирате времето в раздела Omnipod.
+ Не може да се провери дали болуса е успешен. Моля, уверете се ръчно, че Вашата Pod се активира чрез слушане на кликвания. Ако сте сигурни, че болус не е успял, вие трябва ръчно да изтриете хрешния запис от леченията, дори ако щракнете върху \'Отказ от болус\' сега!
+ Не може да се провери дали SMB болус(%1$.2f Е) е успешен. Ако сте сигурни, че не е успял, трябва ръчно да изтриете запис SMB от леченията.
+ Болус неуспешен.
+ Неуспешно инициализиране на Pod
+ Неуспешно вмъкване на канюла
+ Времето за активиране на капсулата е превишено. Капсулата вече не може да бъде активирана.
+ Неуспешно проверяване на прогреса на активиране. Моля, опитайте отново.
+ Потвърждение
+ Време и/или промяна на часовата зона на помпата.
+ Конфигурацията на аларма е обновена в Pod.
+ Времето на Pod е актуализирано.
+ Цялата доставка на инсулин е спряна.
+ Активните аларми са потърдени.
+ Доставката на инсулин е подновена.Деактивирай подПремахни под
@@ -70,18 +121,87 @@
Спиране на доставката на инсулинПодновяване на доставкатаНепознат запис
+ Инициализация на Pod
+ Вмъкване на канюла
+ Вземи логаПоставете фалшив временен базал, защото Pod е спряноАнулират фалшив временен базал, който е създаден, защото Pod е спряно
+ Управление на Pod
+ Изчакване на RileyLink връзка…
+ Активирай Pod
+ Деактивирай Pod
+ Премахни Pod
+ История в Pod
+ Ако натиснете OK, състоянието на Pod ще бъде нулирано и няма да можете да общувате с него повече. Правете това, само ако вече не можете да се свързвате с него. Ако все още можете да общувате с Pod, моля, използвайте опцията Деактивирай Pod!
+ ОткажиКрайСледващ
+ Повтори
+ Деактивирай Pod
+ Премахни Pod
+ Все още не сте изпълнили всички стъпки. Сигурни ли сте, че искате да излезете?
+ Изход
+ Напълнете Pod
+ \nНапълнете с достатъчно инсулин за 3 дни.\n\nИзчакайте два сигнала от Pod по време на процеса на зареждане. Те показват, че е вмъкнат минималният размер от 85U. Уверете се, че сте изпразнил напълно спринцовката, дори след като сте чули двата сигнала.\n\nСлед пълнене на Pod, моля натиснете Следващ.\n\nЗабележка: не вадете капачката на капсулата на Podв този момент.
+ Инициализация на Pod
+ Опитвам се да се сдвоя с Pod.\n\nКогато всички елементи са проверени, можете да натиснете Следващ.\n\nЗабележка: задръжте Pod много близо до RileyLink в този момент.
+ Прикрепете Pod
+ \nПодгответе мястото за инфузия. Отстранете капачката на Pod и лепенката и прикрепете капсулата към мястото за инфузия.\n\nАко канюла стърчи, моля натиснете Отказ и изхвърлете вашия Pod.\n\Натиснете Следваща да се вмъкне канюлата и да започне базалната доставка.
+ Когато натиснете OK, ще бъде вмъкната канюлата. Уверете се, че сте залепили Poda към мястото за инфузия.
+ Вмъкване на канюла
+ Опитвам се да определя първоначалния базален график и да вмъкна канюлата.\n\nКогато всички елементи са проверени, можете да натиснете Следващ.
+ Pod активиран
+ \Pod е активен.\n\nВашият базален график е програмиран и канюлата вмъкната.\n\nМоля, проверете дали канюлата е поставена правилно или заменете Pod, ако чувствате, че не е.
+ Деактивирай Pod
+ \nНатиснете Следващ, за да деактивирате Pod.\n\nЗабележка: Това ще спре всички доставки на инсулин и деактивира Pod.
+ Деактивиране на Pod
+ Деактивиране на Pod.\n\nКогато деактивирането завърши успешно, можете да натиснете Следващ.
+ Pod деактивиран
+ Pod изключен.\n\nмоля, извадете Pod от тялото си и го изхвърлете.
+ Pod неактивен
+ Състоянието на Pod е некоректнов. Инсулиновата доставка не е била спряна, тъй като Pod не е бил правилно деактивиран!\n\nМоля, премахнете Pod от тялото си и го рециклирайте.
+ Ако деактивирате Pod, няма да можете да общувате повече с него. Трябва да направите това само когато всички комуникации с Pod упорито се провалят. Сигурни ли сте, че желаете да го направите?
+ Изхвърли Pod
+ Задаване на часа
+ Спиране
+ Статистика на RL
+ Pulse лог
+ Опресни
+ Подновяване на доставката
+ Управление на Pod
+ Потвърди аларми
+ Статус на под
+ Общо доставени
+ %1$.2fЕ
+ Адрес на под
+ Под изтича
+ Последна връзка
+ Последен болус
+ Временна базална стойност
+ Базова базална стойност
+ Резервоар
+ Активни аларми
+ Версия на фърмуера
+ Време на Pod
+ %1$.2fЕ/я @%2$s (%3$d/%4$d минути)
+ %1$.2f Е остават
+ Над 50 Е
+ Грешки
+ Използването на помпа Omnipod, изисква RileyLink устройство (с фърмуер минимум 2.0).Нулирай RileyLink конфигурациятанеизвестно
+ Pulse лог
+ Pulse лога (копиран в клипборда)
+ Да
+ Не
+ ОК
+ ОтказПреди малкопреди по-малко от минута
diff --git a/omnipod/src/main/res/values-cs-rCZ/strings.xml b/omnipod/src/main/res/values-cs-rCZ/strings.xml
index 5f3af808cc..68e7de2152 100644
--- a/omnipod/src/main/res/values-cs-rCZ/strings.xml
+++ b/omnipod/src/main/res/values-cs-rCZ/strings.xml
@@ -14,19 +14,25 @@
Hodiny před vypnutímUpozornění na nízký stav zásobníku povolenoPočet jednotek
+ Zvuk notifikace pro nejistý dočasný bazál povolen
+ Zvuk notifikace pro nejistý SMB povolen
+ Zvuk notifikace pro nejistý bolus povolen
+ Automaticky potvrzovat výstrahy PoduRileyLinkJinéVarováníPotvrzovací pípnutí
+ OznámeníŽádný aktivní Pod
+ Probíhá instalace (čeká se na aktivaci Podu)Instalace probíhá (čeká se na vložení kanyly)BěžíPozastavenoChyba PoduByl překročen čas aktivaceNeaktivní
- Chyba Podu: %1$s %2$s
+ Chyba Podu: %1$03d %2$sUpomínka dokončení párováníUpomínka dokončení nastavení
@@ -36,16 +42,71 @@
Nízký stav zásobníkuNeznámá výstraha
+ Historie PoduPopisZdrojDatumTyp:
+ %1$.2f U
+ %1$.2f U, SACH=%2$.1f g
+ Rychlost: %1$.2f U, doba trvání: %2$d minutVarováníChybná adresa RileyLinku.Operace není možná.\n\nNejdříve je nutné nakonfigurovat Omnipod, než bude možné tuto funkci použít.Žádný aktivní Pod
+ Došlo k neočekávané chybě. Prosíme o její nahlášeníní! (%1$s: %2$s).
+ Komunikace selhala: nezdařilo se ověření integrity zprávy
+ Komunikace selhala: z podu byly přijaty neplatné pakety
+ Komunikace selhala: Pod se nachází v chybném stavu
+ Komunikace selhala: byla přijata neplatná odezva z Podu
+ Komunikace selhala: od Podu byla přijata zpráva s neplatným pořadovým číslem
+ Komunikace selhala: od Podu byla přijata zpráva s neplatnou adresou
+ Komunikace selhala: nepodařilo se dekódovat zprávu z Podu
+ Komunikace selhala: opakovaná synchronizace hodnoty Nonce se nezdařila
+ Komunikace selhala: hodnota Nonce nebyla synchronizována
+ Komunikace selhala: nedostatek dat přijatých z Podu
+ Byla zjištěna chyba Podu (%1$03d %2$s). Deaktivujte Pod a spusťte nový
+ Komunikace selhala: Pod vrátil chybovou odezvu
+ Žádná odpověď od RileyLinku
+ RileyLink komunikace přerušena
+ Žádná odezva z Podu
+ Nastavení bazálního profilu se nezdařilo. Výdej může být pozastaven! Prosím ručně obnovte stav Podu na záložce Omnipod a obnovte výdej.
+ Nastavení bazálního profilu se možná nezdařilo. Výdej může být pozastaven! Prosím ručně obnovte stav Podu na záložce Omnipod a obnovte výdej pokud je to potřeba.
+ Nastavení bazální profilu se nezdařilo. Výdej je pozastaven! Ručně obnovte výdej z karty Omnipod.
+ Nastavení bazálního profilu selhalo.
+ Zrušení dočasného bazálu se možná nezdařilo. Aktualizujte prosím stav Podu z karty Omnipod.
+ Nastavení dočasného bazátu selhalo. Pokud byl dočasný bazální již dříve spuštěn, mohl být zrušen. Aktualizujte prosím stav Podu z karty Omnipod.
+ Nastavení dočasného bazálu mohlo být neúspěšné. Pokud již dočasný bazál dříve běžel, byl zrušen. Aktualizujte prosím ručně stav Podu na záložce Omnipod.
+ Doba trvání TBR musí být větší než nula, a musí být násobkem %1$s minut.
+ Nastavení času se možná nezdařilo. Výdej může být pozastaven! Prosím ručně obnovte stav Podu na záložce Omnipod a obnovte výdej pokud je to potřeba.
+ Nastavení času se nezdařilo. Výdej je pozastaven! Ručně obnovte výdej z karty Omnipod.
+ Nepodařilo se nastavit bazální profil: byl přijat prázdný profil. Nezapomeňte aktivovat váš bazální profil.
+ Žádný bazální profil není aktivní. Ujistěte se, že jste aktivovali váš bazální profil.
+ Neznámý vlastní příkaz: %1$s
+ Nezdařilo se čtení protokolu pulzů
+ Nebylo možné aktualizovat stav
+ Nezdařilo se potvrdit výstrahy
+ Nepodařilo se pozastavit výdej
+ Nepodařilo se nastavit čas
+ Nepodařilo se obnovit výdej
+ Nezdařilo se automaticky změnit čas na Podu. Měli byste ručně synchronizovat čas na kartě Omnipod.
+ Nelze ověřit, zda bolus proběhl úspěšně. Ověřte prosím manuálně, zda je podáván bolus, nasloucháním kliků z Podu. Pokud jste si jisti, že bolus nebyl úspěšný, byste měli ručně odstranit položku bolusu z ošetření, i když klepnete na tlačítko \'Zrušit bolus\' nyní!
+ Nelze ověřit, zda byl bolus SMB (%1$.2f U) úspěšně vydán. Pokud jste si jisti, že bolus nebyl vydán, měli byste ručně odstranit položku SMB z Ošetření.
+ Podání bolusu nebylo úspěšné.
+ Nepodařilo se inicializovat Pod
+ Nepodařilo se vložit kanylu
+ Byl překročen čas aktivace Podu. Tento Pod již nelze aktivovat.
+ Ověření procesu aktivace se nezdařilo. Zkuste to znovu.
+ Pod pozastavený
+ Potvrzení
+ Čas a/nebo časová zóna změněna na Podu.
+ Nastavení výstrahy bylo v Podu aktualizováno.
+ Čas na Podu byl aktualizován.
+ Všechny dodávky inzulínu byly pozastaveny.
+ Aktivní výstrahy byly potvrzeny.
+ Podávání inzulínu bylo obnoveno.Deaktivovat PodVyřadit Pod
@@ -63,18 +124,87 @@
Pozastavit dodávání inzulínuObnovit dodávání inzulínuNeznámá položka
+ Inicializovat Pod
+ Vložit kanylu
+ Číst protokol pulsůNastavit falešný dočasný bazál, protože Pod je pozastavenZrušit falešný dočasný bazál který byl vytvořen, protože Pod byl pozastaven
+ Správa Podu
+ Čekám na připojení RileyLink…
+ Aktivovat Pod
+ Deaktivovat Pod
+ Vyřadit Pod
+ Historie Podu
+ Pokud zahodíte Pod, již s ním nebudete moci komunikovat. Měli byste to udělat pouze tehdy, pokud veškerá komunikace s Podem trvale selhává. Pokud stále můžete komunikovat s Podem, použijte možnost Deaktivovat Pod.\n\nPokud si přejete pokračovat, ujistěte se prosím, že odstraníte Pod z těla!
+ ZrušitKonecDalší
+ Opakovat
+ Deaktivovat Pod
+ Vyřadit Pod
+ Dosud jste nedokončili všechny kroky. Jste si jisti, že chcete ukončit práci?
+ Konec
+ Naplnit Pod
+ Naplňte nový Pod dostatkem inzulínu na 3 dny.\n\nSledujte dvě pípnutí z Podu během procesu plnění. Tyto ukazují, že minimální množství 85U bylo naplněno. Ujistěte se, že stříkačka je zcela vyprázdněná a to i po vyslechnutí dvou pípnutí.\n\nPo naplnění Podu, prosím, stiskněte Další.\n\nPoznámka: prozatím nesundavejte kryt jehly.\nPoznámka:prosím umístěte RileyLink ve svislé pozici blízko Podu.
+ Inicializovat Pod
+ Snažíte se spárovat novýPod a naplnit ho.\n\nKdyž byl úspěšně dokončen inicializační proces, můžete stisknout tlačítko Další.\n\nPoznámka: položte RileyLink ve vzpřímené poloze a umístěte ho pár centimetrů od Podu.
+ Nasaďte Pod
+ Připravte infuzní místo. Odstraňte krytku jehly a náplasti a nalepte Pod.\n\nPokud se kanyla odlepí, stiskněte Zrušit a zahoďte Pod.\n\nStiskněte Další pro vložení kanyly a spuštění bazálů.
+ Když stisknete OK, kanyla se vloží. Ujistěte se, že jste připojili Pod k infuznímu místu.
+ Vložit kanylu
+ Snažím se nastavit počáteční základní bazál a vložit kanylu.\n\nPo úspěšném vložení kanyly můžete stisknout tlačítko Další.
+ Pod aktivován
+ Pod je nyní aktivní.\n\nVáš bazál byl naprogramován a kanyla byla vložena.\n\nOvěřte, prosím, že kanyla byla vložena správně a případně vyměňte Pod.
+ Deaktivovat Pod
+ Stiskněte Další pro deaktivaci Podu.\n\nPoznámka: Zastavíte veškerý výdej inzulínu a deaktivujete Pod.
+ Deaktivace Podu
+ Deaktivace Podu.\n\nPo úspěšném dokončení deaktivace můžete stisknout Další.
+ Pod deaktivován
+ Pod deaktivován.\n\nOdstraňte Pod z těla a znehodnoťte jej.
+ Pod vyřazen
+ Stav Podu byl vyřazen. Doručení inzulinu nebylo pozastaveno, protože Pod nebyl řádně deaktivován!\n\nOdstraňte Podod z vašeho těla a recyklujte ho.
+ Pokud tento Pod vyřadíte, nebudete s ním již moci komunikovat. Tuto operaci byste měli provést pouze v případě, že veškerá komunikace s tímto Pod trvale selhává. Opravdu chcete vyřadit Pod?
+ Vyřadit Pod
+ Nastavení času
+ Pozastavit
+ Statistika RL
+ Protokol pulzů
+ Obnovit
+ Obnovit podávání inzulínu
+ Správa Podu
+ Potvrdit výstrahy
+ Stav Podu
+ Celkem vydáno
+ %1$.2f U
+ Adresa Podu
+ Pod expiruje
+ Poslední spojení
+ Poslední bolus
+ Dočasná bazální dávka
+ Základní hodnota bazálu
+ Zásobník
+ Výstrahy aktivního Podu
+ Verze firmwaru
+ Čas na Podu
+ %1$.2fU/h @%2$s (%3$d/%4$d minut)
+ Zbývá %1$.2f U
+ Zbývá více než 50 U
+ Chyby
+ Integrace pumpy pro Omnipod, vyžaduje zařízení RileyLink (s firmwarem alespoň 2.0).Resetovat konfiguraci RileyLinkuneznámé
+ Protokol pulzů
+ Protokol pulzů (zkopírováno do schránky)
+ Ano
+ Ne
+ OK
+ Zrušitpřed chvílíPřed méně než minutou
@@ -98,4 +228,10 @@
%1$d dnů%1$d dnů
+
+ Výstraha Podu: %1$s
+ Výstrahy Podu: %1$s
+ Výstrahy Podu: %1$s
+ Výstrahy Podu: %1$s
+
diff --git a/omnipod/src/main/res/values-de-rDE/strings.xml b/omnipod/src/main/res/values-de-rDE/strings.xml
index 5f57a04541..db0e214d93 100644
--- a/omnipod/src/main/res/values-de-rDE/strings.xml
+++ b/omnipod/src/main/res/values-de-rDE/strings.xml
@@ -17,6 +17,7 @@
Ton für unsichere TBR-Benachrichtigungen aktiviertTon für unsichere SMB-Benachrichtigungen aktiviertTon für unsichere Bolus-Benachrichtigungen aktiviert
+ Pod-Alarme automatisch bestätigenRileyLinkAndereAlarme
@@ -31,7 +32,7 @@
Pod-FehlerAktivierungszeit überschrittenInaktiv
- Pod-Fehler: %1$s %2$s
+ Pod-Fehler: %1$03d %2$sErinnerung Kopplung beendetErinnerung Setup beendet
@@ -96,6 +97,8 @@
Pod konnte nicht initalisiert werden.Kanüle konnte nicht eingeführt werden.Die Aktivierungszeit des Pods wurde überschritten. Dieser Pod kann nicht mehr aktiviert werden.
+ Überprüfen des Aktivierungsfortschritts gescheitert. Bitte erneut versuchen.
+ Pod unterbrochenBestätigungZeit und/oder Zeitzone auf dem Pod geändert.
@@ -104,7 +107,6 @@
Insulinabgabe komplett ausgesetzt.Aktive Warnungen wurden bestätigt.Insulinabgabe wieder aufgenommen.
- Pod unterbrochenPod deaktivierenPod ablegen
@@ -220,4 +222,8 @@
%1$d Tag%1$d Tage
+
+ Pod-Alarm: %1$s
+ Pod-Alarme: %1$s
+
diff --git a/omnipod/src/main/res/values-fr-rFR/strings.xml b/omnipod/src/main/res/values-fr-rFR/strings.xml
index bc4cf85f17..1bf2e5fe57 100644
--- a/omnipod/src/main/res/values-fr-rFR/strings.xml
+++ b/omnipod/src/main/res/values-fr-rFR/strings.xml
@@ -14,10 +14,15 @@
Heures avant arrêtAlerte Réservoir bas activéeNombre d\'unités
+ Son pour les notifications DBT incertains activé
+ Son pour les notifications SMB incertains activé
+ Son pour les notifications bolus incertains activé
+ Accepter automatiquement les alertes PodRileyLinkAutresAlertesBips de confirmation
+ NotificationsPas de Pod actifConfiguration en cours (en attente d\'activation du Pod)
@@ -27,7 +32,7 @@
Erreur PodDélai d\'activation dépasséInactif
- Défaut du Pod : %1$s %2$s
+ Défaut Pod : %1$03d %2$sRappel fin d\'appairageRappel fin de configuration
@@ -73,6 +78,7 @@
L\'annulation de la basale temporaire peut avoir échouée. Veuillez actualiser manuellement l\'état du Pod depuis l\'onglet Omnipod.Le paramétrage de la basal temp a échoué. Si une basal temp était en cours d\'exécution, elle a peut-être été annulée. Veuillez actualiser manuellement l\'état du Pod à partir de l\'onglet Omnipod.Le paramétrage de la basal temp a peut-être échoué. Si une basal temp était en cours d\'exécution, elle a été annulée. Veuillez actualiser manuellement l\'état du Pod à partir de l\'onglet Omnipod.
+ La durée du DBT doit être supérieure à zéro et un multiple de %1$s minutes.Le paramétrage de l\'heure a peut-être échoué. L\'injection peut être suspendue ! Actualisez manuellement l\'état du Pod à partir de l\'onglet Omnipod et reprenez l\'injection si nécessaire.Le paramétrage de l\'heure a échoué. L\'injection est suspendue ! Veuillez poursuivre manuellement l\'injection à partir de l\'onglet Omnipod.Impossible de définir le profil Basal : profil vide reçu. Vérifiez que votre profil de basal est activé.
@@ -91,6 +97,8 @@
Impossible d’initialiser le PodImpossible d\'insérer la canuleLa durée d\'activation du Pod a été dépassée. Ce Pod ne peut plus être activé.
+ Échec de la vérification de l\'activation. Veuillez réessayer.
+ Pod suspenduConfirmationHeure et/ou fuseau horaire changé sur le Pod.
@@ -99,7 +107,6 @@
Toutes les injections d\'insuline ont été suspendues.Les alertes actives ont été acceptées.L\'injection de l\'insuline a été reprise.
- Pod suspenduDésactiver PodSupprimer le Pod
@@ -215,4 +222,8 @@
%1$d jour%1$d jours
+
+ Alerte Pod : %1$s
+ Alertes Pod : %1$s
+
diff --git a/omnipod/src/main/res/values-it-rIT/strings.xml b/omnipod/src/main/res/values-it-rIT/strings.xml
index bf04a135ce..1be3afd140 100644
--- a/omnipod/src/main/res/values-it-rIT/strings.xml
+++ b/omnipod/src/main/res/values-it-rIT/strings.xml
@@ -14,10 +14,15 @@
Ore prima dell\'arrestoAvviso livello serbatoio basso abilitatoNumero di unità
+ Suono notifiche TBR incerto abilitato
+ Suono notifiche SMB incerto abilitato
+ Suono notifiche bolo incerto abilitato
+ Conferma automaticamente avvisi podRileyLinkAltroAvvisiBeep di conferma
+ NotificheNessun pod attivoConfigurazione in corso (attesa attivazione pod)
@@ -27,7 +32,7 @@
Guasto podTempo di attivazione superatoInattivo
- Guasto pod: %1$s %2$s
+ Guasto pod: %1$03d %2$sFine promemoria associazioneFine promemoria configurazione
@@ -73,6 +78,7 @@
La cancellazione della basale temporanea potrebbe essere fallita. Aggiorna manualmente lo stato del pod dalla scheda Omnipod.Impostazione basale temporanea fallita. Se una basale temporanea era precedentemente in esecuzione, potrebbe essere stata cancellata. Aggiorna manualmente lo stato del pod dalla scheda Omnipod.Impostazione basale temporanea fallita. Se una basale temporanea era precedentemente in esecuzione, è stata cancellata. Aggiorna manualmente lo stato del pod dalla scheda Omnipod.
+ La durata del TBR deve essere maggiore di zero e un multiplo di %1$s minuti.L\'Impostazione dell\'ora potrebbe essere fallita. L\'erogazione potrebbe essere sospesa! Aggiorna manualmente lo stato del pod dalla scheda Omnipod e riprendi l\'erogazione se necessario.Impostazione ora fallita. L\'erogazione è sospesa! Riprendi manualmente l\'erogazione dalla scheda Omnipod.Impossibile impostare il profilo basale: ricevuto un profilo vuoto. Assicurati di attivare il tuo profilo basale.
@@ -80,6 +86,7 @@
Comando personalizzato sconosciuto: %1$sImpossibile leggere il log impulsiImpossibile aggiornare lo stato
+ Impossibile confermare gli avvisiImpossibile sospendere l\'erogazioneImpossibile impostare l\'oraImpossibile riprendere l\'erogazione
@@ -90,13 +97,16 @@
Inizializzazione pod fallitaInserimento cannula fallitoIl tempo di attivazione del pod è stato superato. Questo pod non può più essere attivato.
+ Impossibile verificare l\'avanzamento dell\'attivazione. Riprova.
+ Pod sospesoConfermaOra e/o fuso orario cambiati nel pod.
+ La configurazione degli avvisi è stata aggiornata nel pod.L\'ora nel pod è stata aggiornata.Tutta l\'erogazione di insulina è stata sospesa.
+ Gli avvisi attivi sono stati confermati.L\'erogazione di insulina è ripresa.
- Pod sospesoDisattiva podScarta pod
@@ -126,6 +136,7 @@
Disattiva podScarta podStorico pod
+ Se scarti il pod, non sarai più in grado di comunicare con esso. Dovresti farlo solo quando tutte le comunicazioni col pod falliscono persistentemente. Se puoi ancora comunicare col pod, usa l\'opzione Disattiva pod.\n\nSe desideri procedere, assicurati di rimuovere il pod dal tuo corpo!AnnullaFine
@@ -141,6 +152,8 @@
Inizializza podTentativo di associazione nuovo pod e caricamento.\n\nQuando il processo di inizializzazione è stato completato con successo, puoi premere Avanti.\n\nNota: colloca il RileyLink in posizione verticale e il pod a pochi centimetri di distanza.Collega pod
+ Prepara il sito di infusione. Rimuovi la protezione dell\'ago del pod e il supporto adesivo e collega il pod al sito di infusione.\n\nSe la cannula fuoriesce premi Annulla e scarta il pod.\n\nPremi Avanti per inserire la cannula e iniziare l\'erogazione della basale.
+ Quando premi OK, la cannula verrà inserita. Assicurati di aver collegato il pod al sito di infusione.Inserisci cannulaTentativo di impostare il piano basale iniziale e inserire la cannula.\n\nQuando la cannula è stata inserita con successo, puoi premere Avanti.Pod attivato
@@ -153,6 +166,8 @@
Pod disattivatoIl tuo pod è stato disattivato.\n\nRimuovi il pod dal tuo corpo e gettalo.Pod scartato
+ Lo stato del pod è stato scartato. L\'erogazione di insulina non è stata sospesa perché il pod non è stato correttamente disattivato!\n\nRimuovi il pod dal tuo corpo e smaltiscilo.
+ Se scarti il pod, non sarai più in grado di comunicare con esso. Dovresti farlo solo quando tutte le comunicazioni col pod falliscono persistentemente. Se sicuro di voler scartare il pod?Scarta podImposta ora
@@ -207,4 +222,8 @@
%1$d giorno%1$d giorni
+
+ Avviso pod: %1$s
+ Avvisi pod: %1$s
+
diff --git a/omnipod/src/main/res/values-iw-rIL/strings.xml b/omnipod/src/main/res/values-iw-rIL/strings.xml
index 67511ccc70..c11c97ae99 100644
--- a/omnipod/src/main/res/values-iw-rIL/strings.xml
+++ b/omnipod/src/main/res/values-iw-rIL/strings.xml
@@ -3,17 +3,235 @@
+ צפצופי בולוס מופעלים
+ צפצופי בזאלי מופעלים
+ צפצופי SMB מופעלים
+ צפצופי בזאלי זמני מופעלים
+ כפתור השהיית הזרקה מופעל
+ כפתור יומן פעימות מופעל
+ זיהוי אזור זמן ושעון קיץ מופעל
+ תזכורת לתפוגה מופעלת
+ שעות לפני כיבוי
+ התראת מכל נמוך מופעלת
+ מספר יחידות
+ צליל של התראת בזאלי זמני לא ברור מאופשר
+ צליל של התראת SMB לא ברור מאופשר
+ צליל של התראת בולוס לא ברור מאופשר
+ קבל התראות מהפוד אוטומטית
+ ריילילינק
+ אחר
+ התראות
+ צפצופי אישור
+ התראות
+ אין פוד פעיל
+ התקנה בביצוע (בהמתנה להפעלת הפוד)
+ התקנה בביצוע (בהמתנה להכנסת הפרפרית)
+ פועל
+ מושהה
+ תקלה בפוד
+ חריגת זמן הפעלה
+ לא פעיל
+ תקלת פוד: %1$03d %2$s
+ תזכורת לסיום זיווג
+ תזכורת לסיום התקנה
+ תוקף הפוד יפוג בקרוב
+ תוקף הפוד יפוג בקרוב
+ כיבוי בלתי נמנע
+ מכל נמוך
+ התראה לא ידועה
+ היסטוריית הפוד
+ תיאור
+ מקור
+ תאריך
+ סוג:
+ %1$.2f יח\'
+ %1$.2f יח\', פחמ\'= %2$.1f גר\'
+ קצב: %1$.2f יח\', משך: %2$d דק\'
+ אזהרה
+ כתובת ריילילינק לא חוקית.
+ הפעולה אינה אפשרית.\n\nיש להגדיר קודם את אומניפוד על מנת לבצע פעולה זו.
+ אין פוד פעיל
+ אירעה שגיאה לא צפויה. נא לדווח! (%1$s: %2$s).
+ התקשורת נכשלה: אימות תקינות ההודעה נכשל
+ התקשורת נכשלה: התקבלה חבילת נתונים לא חוקית מהפוד
+ התקשורת נכשלה: הפוד במצב לא נכון
+ התקשורת נכשלה: התקבלה תגובה לא חוקית מהפוד
+ התקשורת נכשלה: התקבלה הודעה עם רצף מספרים לא חוקי מהפוד
+ התקשורת נכשלה: התקבלה הודעה עם כתובת לא חוקית מהפוד
+ התקשורת נכשלה: פענוח הודעה מהפוד נכשלה
+ התקשורת נכשלה: נכשל סינכרון מחדש של nonce
+ התקשורת נכשלה: nonce לא מסונכרן
+ התקשורת נכשלה: לא התקבלו מספיק נתונים מהפוד
+ נמצאה תקלת פוד (%1$03d %2$s) נא להשבית את הפוד ולהחליפו בחדש
+ התקשורת נכשלה: הפוד החזיר תגובת שגיאה
+ אין תגובה מריילילינק
+ רילילינק הופרע
+ אין תגובה מהפוד
+ הגדרת הפרופיל הבזאלי נכשלה. הזרקת האינסולין עלולה להעצר! נא לרענן ידנית את סטטוס הפוד בלשונית Omnipod ולחדש את ההזרקה במידת הצורך.
+ ייתכן שהגדרת הפרופיל הבזאלי נכשלה. הזרקת האינסולין עלולה להעצר! נא לרענן ידנית את סטטוס הפוד בלשונית Omnipod ולחדש את ההזרקה במידת הצורך.
+ הגדרת הפרופיל בזאלי נכשלה. ההזרקה מושהית! נא לחדש את ההזרקה ידנית בלשונית Omnipod.
+ הגדרת פרופיל בזאלי נכשלה.
+ ייתכן שביטול הבזאלי הזמני נכשל. נא לרענן באופן ידני את סטטוס הפוד מהלשונית Omnipod.
+ הגדרת בזאלי זמני נכשלה. אם בזאלי זמני הוחל קודם לכן, ייתכן שהוא בוטל. נא לרענן באופן ידני את סטטוס הפוד מהלשונית Omnipod.
+ הגדרת בזאלי זמני נכשלה. אם בזאלי זמני הוחל קודם לכן, הוא בוטל. נא לרענן באופן ידני את סטטוס הפוד מהלשונית Omnipod.
+ משך של בזאלי זמני חייב להיות גדול מאפס וכפולה של %1$s דקות.
+ ייתכן שהגדרת השעה נכשלה. הזרקת האינסולין עלולה להעצר! נא לרענן ידנית את סטטוס הפוד בלשונית Omnipod ולחדש את ההזרקה במידת הצורך.
+ הגדרת השעה נכשלה. הזרקת האינסולין עלולה להעצר! נא לרענן ידנית את סטטוס הפוד בלשונית Omnipod ולחדש את ההזרקה במידת הצורך.
+ כשל בהגדרת הפרופיל הבזאלי: התקבל פרופיל ריק. נא להפעיל את הפרופיל שלכם.
+ אין פרופיל בזאלי פעיל. נא להפעיל את הפרופיל הבזאלי שלכם.
+ פקודה מותאמת אישית לא ידועה: %1$s
+ קריאת יומן פעימות נכשלה
+ נסיון עדכון סטטוס נכשל
+ לא ניתן להכיר בהתראות
+ השעיית ההזרקה נכשלה
+ הגדרת הזמן נכשלה
+ חידוש ההזרקה נכשל
+ לא ניתן לשנות את זמן הפוד באופן אוטומטי. יש לסנכרן באופן ידני את הזמן בלשונית Omnipod.
+ לא ניתן לאמת שהבולוס הצליח. נא לאמת את מתן האינסולין ע\"י הקשבה לקליקים. אם אתם בטוחים שהבולוס נכשל, עליכם למחוק את רשומת הבולוס מהטיפולים, גם אם לחצתם עכשיו על \'ביטול בולוס\'.
+ לא ניתן לאמת שבולוס SMB (%1$.2f יח\') הצליח. אם אתם בטוחים שהבולוס נכשל, עליכם למחוק את רשומת ה-SMB מהטיפולים.
+ הבולוס נכשל.
+ אתחול הפוד נכשל
+ הכנסת הצינורית נכשלה
+ זמן ההפעלה של הפוד חורג. לא ניתן להפעיל את פוד זה יותר.
+ אימות התקדמות ההפעלה נכשל. אנא נסו שנית.
+ הפוד מושהה
+ אימות
+ שעה ו/או אזור הזמן השתנו בפוד.
+ הגדרת ההתראות בפוד עודכנה.
+ שעון הפוד עודכן.
+ כל הזרקת אינסולין הושהתה.
+ התראות פעילות אושרו.
+ מתן האינסולין חודש.
+ השבת פוד
+ השלכת הפוד
+ הגדרת בולוס
+ ביטול בולוס
+ הגדרת בזאלי זמני
+ ביטול בזאלי זמני (פנימית על ידי הדרייבר)
+ ביטול בזאלי זמני
+ הגדרת לו\"ז בזאלי
+ קבלת סטטוס הפוד
+ קבלת מידע על הפוד
+ הגדרת שעה
+ הגדרת התראות
+ קבלת ההתראות
+ השהה הזרקה
+ חידוש הזרקה
+ רשומה לא ידועה
+ אתחול פוד
+ הכנסת צינורית
+ קרא יומן פעימות
+ הגדר בזאלי זמני מזויף כי הפוד מושהה
+ בטל בזאלי זמני מזויף שנוצר מפני שהפוד הושהה
+ ניהול פוד
+ ממתין לחיבור לריילילינק…
+ הפעלת פוד
+ השבתת פוד
+ השלכת פוד
+ היסטוריית הפוד
+ אם תזרקו את פוד, לא תוכלו לתקשר איתו יותר. כדאי לעשות את זה רק כאשר כל התקשורת עם הניצן תמיד נכשלת. אם אתם עדיין יכולים לתקשר עם הניצן, אנא השתמשו באפשרות השבתה.\n\n אם ברצונכם להמשיך, אנא הקפידו להסיר את הפוד מהגוף!
+ ביטול
+ סיום
+ הבא
+ נסה שנית
+ השבת פוד
+ השלכת הפוד
+ עוד לא סיימתם את כל הצעדים. אתם בטוחים שברצונכם לצאת?
+ יציאה
+ מילוי פוד
+ מלאו פוד חדש עם מספיק אינסולין לשלושה ימים.\n\nהקשיבו לשני צפצופים מהפוד במהלך המילוי. הם מציינים שהכמות המינימלית של 85 יח\' הוכנסה. הקפידו לרוקן לחלוטין את מזרק המילוי, גם לאחר שמיעת שני הצפצופים.\n\nלאחר מילוי הפוד, יש ללחוץ הבא.\n\nהערה: עוד לא להסיר את מכסה המחט.\n הערה: נא למקם את הריילילינק במצב עומד ובמרחק סנטימטרים בודדים מהפוד.
+ אתחול פוד
+ מנסה לזווג הפוד החדש ולאתחלו.\n\nכאשר תהליך האתחול יושלם, ניתן ללחוץ על הבא.\n\nשימו לב: נא למקם את הריילילנק במצב אנכי ולמקם את הפוד כמה סנטימטרים ממנו.
+ הצמד פוד
+ הכינו את אתר העירוי. הסירו את מכסה המחט של הפוד ואת כיסוי הדבק והדביקו את הפוד לאתר העירוי.\n\nאם הצינורית בולטת, לחצו על ביטול והיפטרו מהפוד.\n\nלחצו הבא כדי להכניס את הצינורית ולהתחיל מתן בזאלי.
+ בלחיצה על OK הצינורית תוכנס. יש לוודא שהפוד הוצמד לאתר העירוי.
+ הכנסת צינורית
+ מנסה להגדיר לו\"ז בזאלי התחלתי ולהכניס את הצינורית.\n\nכאשר הצינורית תוכנס בהצלחה, ניתן יהיה ללחוץ הבא.
+ הפוד הופעל
+ הפוד החדש פעיל כעת.\n\nהלו\"ז הבזאלי הוגדר והצינורית הוכנסה.\n\nאנא ודאו כי הצינורית הוכנסה כהלכה, אם לדעתכם היא לא, יש להחליף את הפוד.
+ השבת פוד
+ לחצו הבא כדי להשבית את הפוד.\n\nהערה: פעולה זו תשהה כל הזרקת אינסולין ותשבית את הפוד.
+ בתהליך כיבוי הפוד
+ משבית את הפוד.\n\nכאשר ההשבתה תושלם, תוכלו ללחוץ על הבא.
+ הפוד הושבת
+ הפוד שלכם כבר לא פעיל.\n\nכעת יש להסיר את הפוד ולמחזרו.
+ פוד נזרק
+ מצב הפוד נמחק. הזרקת האינסולין לא הושהתה כי הפוד לא הושבת כהלכה!\n\nנא להסיר את הפוד מהגוף ולמחזרו.
+ אם תזרקו את הפוד, לא תוכלו לתקשר איתו יותר. כדאי לעשות את זה רק כאשר כל תקשורת עם הפוד תמיד נכשלת. אתם בטוחים שברצונכם לזנוח את הפוד?
+ השלכת הפוד
+ הגדרת שעה
+ השהיה
+ סטטיסטיקות ריילילינק
+ יומן פעימות
+ רענן
+ חידוש הזרקה
+ ניהול הפוד
+ קבל התראות
+ סטטוס הפוד
+ סה\"כ שהוזרק
+ %1$.2f יח\'
+ כתובת הפוד
+ תפוגת הפוד
+ חיבור אחרון
+ בולוס אחרון
+ בזאלי זמני
+ בזאלי בסיסי
+ מכל
+ התראות פוד פעילות
+ גרסת קושחה
+ זמן פעילות הפוד
+ %1$.2f יח\'\ש\' @ %2$s (%3$d\%4$d דק\')
+ %1$.2f יח\' נותרו
+ נותרו יותר מ-50 יח\'
+ שגיאות
+ חיבור משאבת Omnipod, דרוש התקן ריילילינק (עם גרסת קושחה 2.0 לפחות).
+ אתחול קונפיגורציית ריילילינק
+ לא בטוח
+ יומן פעימות
+ יומן פעימות (מועתק ללוח ההעתקה)
+ כן
+ לא
+ אישור
+ ביטול
+ לפני כמה רגעים
+ לפני פחות מדקה
+ %1$s ו-%2$s
+ לפני %1$s
+
+ %1$d דקה
+ %1$d דקות
+ %1$d דקות
+ %1$d דקות
+
+
+ %1$d שעה
+ %1$d שעות
+ %1$d שעות
+ %1$d שעות
+
+
+ %1$d יום
+ %1$d ימים
+ %1$d ימים
+ %1$d ימים
+
+
+ התראת פוד: %1$s
+ התראות פוד: %1$s
+ התראות פוד: %1$s
+ התראות פוד: %1$s
+
diff --git a/omnipod/src/main/res/values-lt-rLT/strings.xml b/omnipod/src/main/res/values-lt-rLT/strings.xml
index e8bbf1b9f9..2ff2746fa0 100644
--- a/omnipod/src/main/res/values-lt-rLT/strings.xml
+++ b/omnipod/src/main/res/values-lt-rLT/strings.xml
@@ -26,7 +26,6 @@
Pod klaidaViršytas aktyvinimo laikasNeaktyvus
- Pod klaida: %1$s %2$sPriminimas apie suporavimo pabaigąPriminimas apie sąrankos pabaigą
diff --git a/omnipod/src/main/res/values-nl-rNL/strings.xml b/omnipod/src/main/res/values-nl-rNL/strings.xml
index 5192b4052e..9db3f5e4e3 100644
--- a/omnipod/src/main/res/values-nl-rNL/strings.xml
+++ b/omnipod/src/main/res/values-nl-rNL/strings.xml
@@ -31,7 +31,6 @@
Pod foutActivatietijd overschredenInactief
- Pod fout: %1$s %2$sHerrinering om Pod initialisatie af te rondenHerinnering setup afronden
@@ -104,7 +103,6 @@
Alle insulinetoediening is onderbroken.Actieve meldingen zijn bevestigd.Insulinetoediening is hervat.
- Pod onderbrokenDeactiveer PodPod verwerpen
diff --git a/omnipod/src/main/res/values-no-rNO/strings.xml b/omnipod/src/main/res/values-no-rNO/strings.xml
index fea3eaa15e..d5b31a9679 100644
--- a/omnipod/src/main/res/values-no-rNO/strings.xml
+++ b/omnipod/src/main/res/values-no-rNO/strings.xml
@@ -14,10 +14,15 @@
Timer før nedstengingVarsel om lavt reservoar aktivertAntall enheter
+ Lydvarsel for usikre TBR er aktivert
+ Lydvarsel for usikre SMB er aktivert
+ Lydvarsel for usikre bolus er aktivert
+ Godkjenn automatisk Pod varslerRileyLinkAnnenVarslerBekreftelse pip
+ VarslerIngen aktiv PodOppsett pågår (venter på Pod aktivering)
@@ -27,7 +32,7 @@
Pod feilAktiveringstiden er overskredetInaktiv
- Pod feil: %1$s %2$s
+ Pod feil: %1$03d %2$sFullfør paringspåminnelsePåminnelse om å sluttføre oppsett
@@ -73,6 +78,7 @@
Mislyktes trolig med å kansellere temp basal. Vennligst oppdater Pod status manuelt fra Omnipod menyen.Endring av midlertidig basal var mislykket. En tidligere midlertidig basal kan ha blitt kansellert. Oppdater statusen på Pod manuelt fra Omnipod fanen.Endring av midlertidig basal kan ha vært mislykket. En tidligere midlertidig basal kan ha blitt kansellert. Oppdater statusen på Pod manuelt fra Omnipod fanen.
+ TBR varighet må være større enn null og et multiplum av %1$s minutter.Innstilling av tid kan ha mislyktes. Insulinlevering kan være kansellert! Oppdater statusen manuelt fra fanen Omnipod og gjenoppta levering hvis nødvendig.Endring av tid mislyktes. Insulinlevering er sperret! Velg gjenoppta levering manuelt fra Omnipod-fanen.Feilet i å lagre basal profil: mottok en tom profil. Kontroller at du har aktivert profilen.
@@ -91,6 +97,8 @@
Feilet i å initialisere PodFeilet ved innsetting av kanylePod\'ens aktiveringstid er overskredet. Denne Pod kan ikke lenger aktiveres.
+ Klarte ikke å verifisere fremdrift i aktiveringen. Prøv på nytt.
+ Pod er pausetBekreftelseTid og/eller tidssone endret på Pod.
@@ -99,7 +107,6 @@
All insulintilførsel har blitt pauset.Aktive varsler har blitt bekreftet.Insulintilførselen er gjenopptatt.
- Pod er pausetDeaktiviser PodForkast Pod
@@ -215,4 +222,8 @@
%1$d dag%1$d dager
+
+ Pod varsel: %1$s
+ Pod varsler: %1$s
+
diff --git a/omnipod/src/main/res/values-pt-rPT/strings.xml b/omnipod/src/main/res/values-pt-rPT/strings.xml
index 7f823bfa43..230d07897f 100644
--- a/omnipod/src/main/res/values-pt-rPT/strings.xml
+++ b/omnipod/src/main/res/values-pt-rPT/strings.xml
@@ -13,7 +13,6 @@
SuspensoFalha no PodInactivo
- Falha no Pod: %1$s %2$sLembrete Concluir EmparelhamentoLembrete Terminar Configuração
diff --git a/omnipod/src/main/res/values-ro-rRO/strings.xml b/omnipod/src/main/res/values-ro-rRO/strings.xml
index 61d75eff3d..86f9de98c5 100644
--- a/omnipod/src/main/res/values-ro-rRO/strings.xml
+++ b/omnipod/src/main/res/values-ro-rRO/strings.xml
@@ -26,7 +26,6 @@
Defecțiune PodTimp de activare depăşitInactiv
- Pod defect: %1$s %2$sNotificare Finalizare împerechereFinalizare memento setare
diff --git a/omnipod/src/main/res/values-ru-rRU/strings.xml b/omnipod/src/main/res/values-ru-rRU/strings.xml
index 143cd7c577..32e5ab5cfe 100644
--- a/omnipod/src/main/res/values-ru-rRU/strings.xml
+++ b/omnipod/src/main/res/values-ru-rRU/strings.xml
@@ -14,10 +14,15 @@
Часов до выключенияПредупреждение о низком уровне в резервуаре включеноК-во единиц
+ Звук для неопределенных TBR уведомлений включен
+ Звук для неопределенных SMB уведомлений включен
+ Звук для неопределенных уведомлений болюса включен
+ Автоматически подтверждать оповещения PodRileyLinkДругоеОповещенияЗвуковые сигналы подтверждения
+ УведомленияАктивная помпа не выбранаВыполняется настройка (ожидание активации Pod)
@@ -27,7 +32,7 @@
Сбой ПодаПревышено время активацииНеактивирован
- Ошибка Пода: %1$s %2$s
+ Ошибка Pod: %1$03d %2$sНапоминание о завершении сопряженияНапоминание о завершении настройки
@@ -73,6 +78,7 @@
Возможно, отмена временного базала завершилась неудачно. Обновите вручную состояние Pod на вкладке Omnipod.Не удалось задать временный базал. Если ранее был запущен временный базал, он мог быть отменен. Обновите вручную состояние Pod на вкладке Omnipod.Не удалось задать временный базал. Если ранее был запущен временный базал, он мог быть отменен. Обновите вручную состояние Pod на вкладке Omnipod.
+ Продолжительность TBR должна быть больше нуля и кратной %1$s минутам.Возможно, не удалось задать время. Подача инсулина может быть приостановлена! Обновите вручную состояние Pod на вкладке Omnipod и при необходимости возобновите подачу.Не удалось задать время. Подача инсулина приостановлена! Вручную возобновите подачу с вкладки Omnipod.Не удалось задать базальный профиль: получен пустой профиль. Активируйте профиль базала.
@@ -91,6 +97,8 @@
Не удалось инициализировать PodНе удалось установить канюлюПревышено время активации Pod. Этот Pod больше не может быть активирован.
+ Не удалось проверить ход активации. Повторите попытку.
+ Omnipod остановленПодтверждениеВремя и/или часовой пояс изменены на Pod.
@@ -99,7 +107,6 @@
Все подачи инсулина приостановлены.Подтверждены активные оповещения.Подача инсулина возобновлена.
- Omnipod остановленДеактивировать PodВыбросить помпу
diff --git a/omnipod/src/main/res/values-sk-rSK/strings.xml b/omnipod/src/main/res/values-sk-rSK/strings.xml
index 8d5c126575..42b8560748 100644
--- a/omnipod/src/main/res/values-sk-rSK/strings.xml
+++ b/omnipod/src/main/res/values-sk-rSK/strings.xml
@@ -14,19 +14,23 @@
Hodiny pred vypnutímUpozornenie na nízký stav zásobníka povolenéPočet jednotiek
+ Zvuk upozornenia pre neistý dočasný bazál povolený
+ Zvuk upozornenia pre neistý SMB povolený
+ Zvuk upozornenia pre neistý bolus povolenýRileyLinkInéVýstrahyPotvrdzujúce pípnutie
+ UpozorneniaŽiadny aktívny Pod
+ Prebieha inštalácia (čaká sa na aktiváciu Podu)Inštalácia prebieha (čaká sa na vloženie kanyly)V prevádzkePozastavenéChyba PoduBol prekročený čas aktivácieNeaktívny
- Chyba Podu: %1$s %2$sPripomienka ukončenia párovaniaPripomienka ukončenia nastavenia
@@ -36,22 +40,55 @@
Nízka hladina zásobníkaNeznáma výstraha
+ História PoduPopisZdrojDátumTyp:
+ %1$.2f JI
+ %1$.2f JI, SACH=%2$.1f g
+ Rýchlosť: %1$.2f JI, Doba trvania: %2$d minútUpozornenieNeplatná adresa RileyLinku.Operácia nie je možná.\n\nNajskôr je nutné nakonfigurovať Omnipod, kým bude možné túto funkciu použiť.Žiadny aktívny Pod
+ Došlo k neočakávanej chybe. Prosíme o jej nahlásenie! (%1$s: %2$s).
+ Komunikácia zlyhala: overenie integrity správy zlyhalo
+ Komunikácia zlyhala: boli prijaté neplatné pakety z Podu
+ Komunikácia zlyhala: Pod je v chybnom stave
+ Komunikácia zlyhala: bola prijatá neplatná odozva z Podu
+ Komunikácia zlyhala: bola prijatá správa s neplatným poradovým číslom z Podu
+ Komunikácia zlyhala: bola prijatá správa s neplatnou adresou z Podu
+ Komunikácia zlyhala: nepodarilo se dekódovať správu z Podu
+ Komunikácia zlyhala: opakovaná synchronizácia Nonce hodnoty zlyhala
+ Komunikácia zlyhala: hodnota Nonce nebola synchronizovaná
+ Komunikácia zlyhala: nedostatok dát prijatých z Podu
+ Bola zistená chyba Podu (%1$03d %2$s). Deaktivujte Pod a spustite nový
+ Komunikácia zlyhala: Pod vrátil chybovú odozvu
+ Žiadna odpoveď od RileyLinku
+ RileyLink prerušený
+ Žiadna odpoveď z PoduNastavenie bazálneho profilu zlyhalo. Podávanie môže byť pozastavené! Manuálne obnovte stav Podu zo záložky Omnipod a pokračujte v podávaní, ak je to potrebné.Nastavenie bazálneho profilu zlyhalo. Podávanie môže byť pozastavené! Manuálne obnovte stav Podu zo záložky Omnipod a pokračujte v podávaní, ak je to potrebné.Nastavenie bazálneho profilu zlyhalo. Podávanie je pozastavené! Manuálne obnovte podávanie zo záložky Omnipod.
+ Nastavenie bazálneho profilu zlyhalo.
+ Zrušenie dočasného bazalu mohlo zlyhať. Manuálne obnovte stav Podu zo záložky Omnipod.Nastavenie dočasného bazálu zlyhalo. Ak bol predtým spustený dočasný bazál, mohol byť zrušený. Manuálne obnovte stav Podu zo záložky Omnipod.Nastavenie dočasného bazálu zlyhalo. Ak bol predtým spustený dočasný bazál, mohol byť zrušený. Manuálne obnovte stav Podu zo záložky Omnipod.
+ Doba trvania TBR musí byť väčšia ako nula, a musí byť násobkom %1$s minút.Nastavenie času, pravdepodobne zlyhalo. Podávanie môže byť pozastavené! Manuálne obnovte stav Podu zo záložky Omnipod a pokračujte v podávaní, ak je to potrebné.Nastavenie času zlyhalo. Podávanie je pozastavené! Manuálne obnovte podávanie zo záložky Omnipod.
+ Nepodarilo sa nastaviť bazálny profil: bol prijatý prázdny profil. Uistite sa, že ste aktivovali svoj bazálny profil.
+ Žiadny bazálny profil nie je aktívny. Uistite sa, že ste aktivovali svoj bazálny profil.
+ Neznámy vlastný príkaz: %1$s
+ Zlyhalo načítanie Pulse Log
+ Nepodarilo sa obnoviť stav
+ Nepodarilo sa potvrdiť výstrahy
+ Nepodarilo sa pozastaviť podávanie inzulínu
+ Nepodarilo sa nastaviť čas
+ Podávanie inzulínu sa nepodarilo spustiť
+ Nepodarilo sa overiť priebeh aktivácie. Skúste to znova.Deaktivovať Pod
diff --git a/omnipod/src/main/res/values/strings.xml b/omnipod/src/main/res/values/strings.xml
index 8d8f940e62..417b852805 100644
--- a/omnipod/src/main/res/values/strings.xml
+++ b/omnipod/src/main/res/values/strings.xml
@@ -10,11 +10,13 @@
AAPS.Omnipod.tbr_beeps_enabledAAPS.Omnipod.suspend_delivery_button_enabledAAPS.Omnipod.pulse_log_button_enabled
+ AAPS.Omnipod.rileylink_stats_button_enabledAAPS.Omnipod.time_change_enabledAAPS.Omnipod.expiration_reminder_enabledAAPS.Omnipod.expiration_reminder_hours_before_shutdownAAPS.Omnipod.low_reservoir_alert_enabledAAPS.Omnipod.low_reservoir_alert_units
+ AAPS.Omnipod.automatically_acknowledge_alerts_enabledAAPS.Omnipod.notification_uncertain_tbr_sound_enabledAAPS.Omnipod.notification_uncertain_smb_sound_enabledAAPS.Omnipod.notification_uncertain_bolus_sound_enabled
@@ -38,8 +40,9 @@
Basal beeps enabledSMB beeps enabledTBR beeps enabled
- Suspend Delivery button enabled
- Pulse Log button enabled
+ Show Suspend Delivery button in Omnipod tab
+ Show Pulse Log button in Pod Management menu
+ Show RileyLink Stats button in Pod Management menuDST/Time zone detection enabledExpiration reminder enabledHours before shutdown
@@ -48,6 +51,7 @@
Sound for uncertain TBR notifications enabledSound for uncertain SMB notifications enabledSound for uncertain bolus notifications enabled
+ Automatically acknowledge Pod alertsRileyLinkOtherAlerts
@@ -63,7 +67,7 @@
Pod faultActivation time exceededInactive
- Pod fault: %1$s %2$s
+ Pod fault: %1$03d %2$sFinish pairing reminder
@@ -120,6 +124,7 @@
Unknown custom command: %1$sFailed to read Pulse LogFailed to refresh status
+ Failed to refresh status on startupFailed to acknowledge alertsFailed to suspend deliveryFailed to set time
@@ -131,6 +136,10 @@
Failed to initialize the PodFailed to insert cannulaThe Pod\'s activation time has been exceeded. This Pod can no longer be activated.
+ Failed to verify activation progress. Please retry.
+ Pod suspended
+ Failed to play test beep
+ A temporary basal is running on the Pod, but AAPS is unaware of this temporary basal. Please cancel your temporary basal manually.Confirmation
@@ -140,7 +149,6 @@
All insulin delivery has been suspended.Active alerts have been acknowledged.Insulin delivery has been resumed.
- Pod suspendedDeactivate Pod
@@ -164,6 +172,8 @@
Read pulse logSet fake temporary basal because the Pod is suspendedCancel fake temporary basal that was created because the Pod was suspended
+ Beep config
+ Play test beepPod management
@@ -172,7 +182,12 @@
Deactivate PodDiscard PodPod history
- If you discard the Pod, you will not be able to communicate with it anymore. You should only do this when all communication with the Pod persistently fails. If you can still communicate with the Pod, please use the Deactivate Pod option.\n\nIf you wish to proceed, please make sure to remove the Pod from your body!
+ RileyLink stats
+ Read pulse log
+ Reading pulse log…
+ If you discard the Pod, you will not be able to communicate with it anymore. You should only do this when all communication with the Pod persistently fails. If you can still communicate with the Pod, please use the Deactivate Pod option.\n\nIf you wish to proceed, please make sure to remove the Pod from your body!
+ Play test beep
+ Playing test beep…Cancel
@@ -212,8 +227,6 @@
Set timeSuspend
- RL stats
- Pulse logRefreshResume deliveryPod mgmt
@@ -264,5 +277,9 @@
%1$d day%1$d days
+
+ Pod alert: %1$s
+ Pod alerts: %1$s
+
\ No newline at end of file
diff --git a/omnipod/src/main/res/xml/pref_omnipod.xml b/omnipod/src/main/res/xml/pref_omnipod.xml
index 30367f2c7c..8b59e41416 100644
--- a/omnipod/src/main/res/xml/pref_omnipod.xml
+++ b/omnipod/src/main/res/xml/pref_omnipod.xml
@@ -32,7 +32,7 @@
android:title="@string/omnipod_config_smb_beeps_enabled" />
@@ -72,6 +72,11 @@
validate:minNumber="5"
validate:testType="numericRange" />
+
+
@@ -105,6 +110,11 @@
android:key="@string/key_omnipod_pulse_log_button_enabled"
android:title="@string/omnipod_config_pulse_log_button_enabled" />
+
+
());
diff --git a/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/AlertSetTest.java b/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/AlertSetTest.java
new file mode 100644
index 0000000000..ab5c8cc304
--- /dev/null
+++ b/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/AlertSetTest.java
@@ -0,0 +1,22 @@
+package info.nightscout.androidaps.plugins.pump.omnipod.driver.definition;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+public class AlertSetTest {
+ @Test
+ public void testEquality() {
+ AlertSet set1 = new AlertSet(Arrays.asList(AlertSlot.SLOT0, AlertSlot.SLOT1));
+ AlertSet set2 = new AlertSet(Arrays.asList(AlertSlot.SLOT0, AlertSlot.SLOT1));
+ AlertSet set3 = new AlertSet(Collections.singletonList(AlertSlot.SLOT1));
+
+ assertEquals(set1, set2);
+ assertNotEquals(set1, set3);
+ assertNotEquals(set2, set3);
+ }
+}
\ No newline at end of file
diff --git a/rileylink/src/main/res/values-iw-rIL/strings.xml b/rileylink/src/main/res/values-iw-rIL/strings.xml
index eb781f84f2..60935cdf4d 100644
--- a/rileylink/src/main/res/values-iw-rIL/strings.xml
+++ b/rileylink/src/main/res/values-iw-rIL/strings.xml
@@ -1,8 +1,65 @@
+ סריקה
+ עצור
+ נבחר
+ סריקת ריילילינק
+ אפשר
+ לא
+ סורק
+ הסריקה הושלמה
+ שגיאת סריקה: %1$d
+ אף פעם
+ הגדרות
+ היסטוריה
+ מצב ריילילינק
+ סטטוס המשאבה
+ הגדרות ריילילינק
+ ריילילינק
+ כתובת מוגדרת
+ מכשיר מחובר
+ מצב החיבור
+ שגיאת חיבור
+ מכשיר
+ סוג מכשיר
+ דגם המכשיר
+ תדירות השימוש לאחרונה
+ קשר אחרון עם המכשיר
+ קושחת ריילילינק
+ מאתחל בלוטות\'…
+ שגיאת בלוטות\'
+ בלוטות\' מוכן
+ לא התחיל
+ מאתחל ריילילינק…
+ שגיאת ריילילינק
+ כוונון הריילילינק והמשאבה
+ בעיה בהיקשרות למשאבה
+ מחובר
+ ריילילינק מוכן
+ ההתקן אינו ריילילינק
+ ריילילינק לא נגיש
+ בלוטות\' כבוי
+ אין מתאם בלוטות\'
+ כוונון נכשל
+ המשאבה לא זמינה
+ הפוד לא זמין
+ משאבת Medtronic
+ Omnipod
+
+ %1$d יום
+ %1$d ימים
+ %1$d ימים
+ %1$d ימים
+
+
+ %1$d שעה
+ %1$d שעות
+ %1$d שעות
+ %1$d שעות
+
diff --git a/wear/src/main/AndroidManifest.xml b/wear/src/main/AndroidManifest.xml
index 4d197c5bd8..e665a92809 100644
--- a/wear/src/main/AndroidManifest.xml
+++ b/wear/src/main/AndroidManifest.xml
@@ -6,7 +6,7 @@
-
+
-
@@ -52,7 +51,6 @@
-
@@ -71,7 +69,6 @@
-
@@ -90,7 +87,6 @@
-
@@ -109,7 +105,6 @@
-
@@ -128,7 +123,6 @@
-
@@ -147,7 +141,6 @@
-
@@ -165,7 +158,27 @@
+
+
+
+
+
+
+
+
+
+
@@ -178,57 +191,57 @@
+ android:pathPrefix="/nightscout_watch_data"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_data_resend"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_cancel_bolus"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_confirmactionstring"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_initiateactionstring"
+ android:scheme="wear" />
+ android:pathPrefix="/openwearsettings"
+ android:scheme="wear" />
+ android:pathPrefix="/sendstatustowear"
+ android:scheme="wear" />
+ android:pathPrefix="/sendpreferencestowear"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_basal"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_bolusprogress"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_actionconfirmationrequest"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_changeconfirmationrequest"
+ android:scheme="wear" />
+ android:pathPrefix="/nightscout_watch_cancelnotificationrequest"
+ android:scheme="wear" />
@@ -237,16 +250,16 @@
android:icon="@drawable/ic_aaps_full"
android:label="Full Status"
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
-
-
-
+
+
+
-
-
+
+
+ android:value="LARGE_IMAGE" />
+ android:value="0" />
+ android:value="LARGE_IMAGE" />
+ android:value="0" />
+ android:value="LARGE_IMAGE" />
+ android:value="0" />
-
+
-
+ android:label="@string/menu_settings" />
-
+ android:label="@string/menu_wizard" />
-
+ android:label="@string/menu_prime_fill" />
-
+ android:label="@string/menu_status" />
-
+ android:label="@string/action_bolus" />
-
+ android:label="@string/status_cpp" />
-
+ android:label="@string/action_confirm"
+ android:launchMode="singleInstance" />
-
+ android:label="@string/menu_prime_fill" />
-
+ android:label="@string/action_carbs" />
+ android:label="@string/menu_tempt" />
+
+
+
+
+
+
+
diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/configurationActivities/DigitalStyleConfigAct.java b/wear/src/main/java/info/nightscout/androidaps/interaction/configurationActivities/DigitalStyleConfigAct.java
new file mode 100644
index 0000000000..e86c7a80d7
--- /dev/null
+++ b/wear/src/main/java/info/nightscout/androidaps/interaction/configurationActivities/DigitalStyleConfigAct.java
@@ -0,0 +1,39 @@
+package info.nightscout.androidaps.interaction.configurationActivities;
+
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+
+import info.nightscout.androidaps.R;
+import preference.WearPreferenceActivity;
+
+public class DigitalStyleConfigAct extends WearPreferenceActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setTitle("watchface");
+ addPreferencesFromResource(R.xml.watch_face_digitalstyle_configuration);
+ ViewGroup view = (ViewGroup) getWindow().getDecorView();
+ removeBackgroundRecursively(view);
+ view.setBackground(getResources().getDrawable(R.drawable.settings_background));
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ finish();
+ }
+
+ void removeBackgroundRecursively(View parent) {
+ if (parent instanceof ViewGroup) {
+ ViewGroup group = (ViewGroup) parent;
+ for (int i = 0; i < group.getChildCount(); i++) {
+ removeBackgroundRecursively(group.getChildAt(i));
+ }
+ }
+ parent.setBackground(null);
+ }
+
+
+}
diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java
index 51faedeb4b..b0cb2c952e 100644
--- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java
+++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java
@@ -11,6 +11,7 @@ import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.PowerManager;
+import android.os.Vibrator;
import android.preference.PreferenceManager;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.support.wearable.view.WatchViewStub;
@@ -50,7 +51,7 @@ import lecho.lib.hellocharts.view.LineChartView;
public abstract class BaseWatchFace extends WatchFace implements SharedPreferences.OnSharedPreferenceChangeListener {
public final static IntentFilter INTENT_FILTER;
public static final long[] vibratePattern = {0,400,300,400,300,400};
- public TextView mTime, mSgv, mDirection, mTimestamp, mUploaderBattery, mRigBattery, mDelta, mAvgDelta, mStatus, mBasalRate, mIOB1, mIOB2, mCOB1, mCOB2, mBgi, mLoop, mDay, mMonth, isAAPSv2, mHighLight, mLowLight;
+ public TextView mTime, mHour, mMinute,mSgv, mDirection, mTimestamp, mUploaderBattery, mRigBattery, mDelta, mAvgDelta, mStatus, mBasalRate, mIOB1, mIOB2, mCOB1, mCOB2, mBgi, mLoop, mDay, mDayName, mMonth, isAAPSv2, mHighLight, mLowLight;
public ImageView mGlucoseDial, mDeltaGauge, mHourHand, mMinuteHand;
public RelativeLayout mRelativeLayout;
public LinearLayout mLinearLayout, mLinearLayout2, mDate, mChartTap, mMainMenuTap;
@@ -126,7 +127,10 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
@Override
public void onLayoutInflated(WatchViewStub stub) {
mTime = (TextView) stub.findViewById(R.id.watch_time);
+ mHour = (TextView) stub.findViewById(R.id.hour);
+ mMinute = (TextView) stub.findViewById(R.id.minute);
mDay = (TextView) stub.findViewById(R.id.day);
+ mDayName= (TextView) stub.findViewById(R.id.dayname);
mMonth = (TextView) stub.findViewById(R.id.month);
mDate = (LinearLayout) stub.findViewById(R.id.date_time);
mLoop = (TextView) stub.findViewById(R.id.loop);
@@ -230,6 +234,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
setDataFields();
setColor();
missedReadingAlert();
+ checkVibrateHourly(oldTime,newTime);
mRelativeLayout.measure(specW, specH);
if (forceSquareCanvas) {
@@ -241,6 +246,16 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
}
}
+ private void checkVibrateHourly(WatchFaceTime oldTime, WatchFaceTime newTime){
+ Boolean hourlyVibratePref = sharedPrefs.getBoolean("vibrate_Hourly", false);
+ if (hourlyVibratePref && layoutSet && newTime.hasHourChanged(oldTime)) {
+ Log.i("hourlyVibratePref", "true --> " + newTime.toString());
+ Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
+ long[] vibrationPattern = {0, 150, 125, 100};
+ vibrator.vibrate(vibrationPattern, -1);
+ }
+ }
+
public class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
@@ -468,8 +483,18 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
sHour = sdfHour.format(now);
sMinute = sdfMinute.format(now);
+ if (mHour != null && mMinute != null ) {
+ mHour.setText(sHour);
+ mMinute.setText(sMinute);
+ }
+
if (mDate != null && mDay != null && mMonth != null) {
if (sharedPrefs.getBoolean("show_date", false)) {
+ if (mDayName != null ) {
+ SimpleDateFormat sdfDayName = new SimpleDateFormat("E");
+ mDayName.setText(sdfDayName.format(now));
+ }
+
SimpleDateFormat sdfDay = new SimpleDateFormat("dd");
SimpleDateFormat sdfMonth = new SimpleDateFormat("MMM");
mDay.setText(sdfDay.format(now));
diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyle.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyle.java
new file mode 100644
index 0000000000..75043f8c94
--- /dev/null
+++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyle.java
@@ -0,0 +1,171 @@
+package info.nightscout.androidaps.watchfaces;
+
+import android.content.Intent;
+import android.content.res.ColorStateList;
+import android.support.wearable.watchface.WatchFaceStyle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.core.content.ContextCompat;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import info.nightscout.androidaps.R;
+import info.nightscout.androidaps.interaction.menus.MainMenuActivity;
+
+public class DigitalStyle extends BaseWatchFace {
+ private static final long TIME_TAP_THRESHOLD = 800;
+ private long chartTapTime = 0;
+ private long sgvTapTime = 0;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
+ layoutView = inflater.inflate(R.layout.activity_digitalstyle, null);
+ performViewSetup();
+ }
+
+
+ @Override
+ protected void onTapCommand(int tapType, int x, int y, long eventTime) {
+ //tapType = TAP_TYPE_TAP;
+ Log.d("onTapCommand: DeviceWidth x DeviceHeight /// x , y, TapType >> ", Integer.toString(getWidth()) + " x " + Integer.toString(getHeight()) + " /// " + Integer.toString(x) + " , " + Integer.toString(y) + " , " + Integer.toString(tapType));
+
+ if (tapType == TAP_TYPE_TAP) {
+ if (eventTime - sgvTapTime < TIME_TAP_THRESHOLD) {
+ Intent intent = new Intent(this, MainMenuActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ }
+ sgvTapTime = eventTime;
+ }
+ }
+
+
+ @Override
+ protected WatchFaceStyle getWatchFaceStyle() {
+ return new WatchFaceStyle.Builder(this)
+ .setAcceptsTapEvents(true)
+ .setHideNotificationIndicator(false)
+ .setShowUnreadCountIndicator(true)
+ .build();
+ }
+
+ protected void setColorDark() {
+ if (rawData.sgvLevel == 1) {
+ mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
+ mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
+ } else if (rawData.sgvLevel == 0) {
+ mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
+ mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
+ } else if (rawData.sgvLevel == -1) {
+ mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
+ mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
+ }
+
+ if (ageLevel == 1) {
+ mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
+ } else {
+ mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
+ }
+
+ if (rawData.batteryLevel == 1) {
+ mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
+ } else {
+ mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
+ }
+
+
+ if (chart != null) {
+ highColor = ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor);
+ lowColor = ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor);
+ midColor = ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor);
+ gridColor = ContextCompat.getColor(getApplicationContext(), R.color.dark_gridColor);
+ basalBackgroundColor = ContextCompat.getColor(getApplicationContext(), R.color.basal_dark);
+ basalCenterColor = ContextCompat.getColor(getApplicationContext(), R.color.basal_light);
+ pointSize = 1;
+ setupCharts();
+ setWatchfaceStyle();
+ }
+ }
+
+ private void setWatchfaceStyle(){
+ /* frame styles*/
+ LinearLayout mShapesElements = layoutView.findViewById(R.id.shapes_elements);
+ if (mShapesElements != null) {
+ String displayFormatType = (mShapesElements.getContentDescription().toString().startsWith("round") ? "round" : "rect");
+ String displayStyle=sharedPrefs.getString("digitalstyle_frameStyle", "full");
+ String displayFrameColor=sharedPrefs.getString("digitalstyle_frameColor", "red");
+ String displayFrameColorSaturation=sharedPrefs.getString("digitalstyle_frameColorSaturation", "500");
+ String displayFrameColorOpacity=sharedPrefs.getString("digitalstyle_frameColorOpacity", "1");
+
+ // Load image with shapes
+ String styleDrawableName = "digitalstyle_bg_" + displayStyle + "_" + displayFormatType;
+ try {
+ mShapesElements.setBackground(getResources().getDrawable(getResources().getIdentifier(styleDrawableName, "drawable", getApplicationContext().getPackageName())));
+ } catch (Exception e) {
+ Log.e("digitalstyle_frameStyle", "RESOURCE NOT FOUND >> " + styleDrawableName);
+ }
+
+ // set background-tint-color
+ if (displayFrameColor.equalsIgnoreCase("multicolor") || displayStyle.equalsIgnoreCase("none")) {
+ mShapesElements.setBackgroundTintList(null);
+ } else {
+ String strColorName =(( displayFrameColor.equals("white") || displayFrameColor.equals("black") )?displayFrameColor:displayFrameColor+"_"+displayFrameColorSaturation);
+ Log.v("digitalstyle_strColorName",strColorName);
+ try {
+ ColorStateList colorStateList = ContextCompat.getColorStateList(getApplicationContext(), getResources().getIdentifier(strColorName, "color", getApplicationContext().getPackageName()));
+ mShapesElements.setBackgroundTintList(colorStateList);
+ } catch (Exception e) {
+ mShapesElements.setBackgroundTintList(null);
+ Log.e("digitalstyle_colorName", "COLOR NOT FOUND >> " + strColorName);
+ }
+ }
+
+ // set opacity of shapes
+ mShapesElements.setAlpha(Float.parseFloat(displayFrameColorOpacity));
+
+ }
+
+ /* optimize font-size --> when date is off then increase font-size of time */
+ Boolean isShowDate = sharedPrefs.getBoolean("show_date", false);
+ if (!isShowDate) {
+ layoutView.findViewById(R.id.date_time).setVisibility(View.GONE);
+ mHour.setTextSize(62);
+ mMinute.setTextSize(40);
+ mHour.setLetterSpacing((float) -0.066);
+ mMinute.setLetterSpacing((float) -0.066);
+ } else {
+ layoutView.findViewById(R.id.date_time).setVisibility(View.VISIBLE);
+ mHour.setTextSize(40);
+ mMinute.setTextSize(26);
+ mHour.setLetterSpacing((float) 0);
+ mMinute.setLetterSpacing((float) 0);
+
+ /* display week number */
+ Boolean isShowWeekNumber = sharedPrefs.getBoolean("show_weeknumber", false);
+ Log.i("---------------------------------","weeknumber refresh ");
+ TextView mWeekNumber= layoutView.findViewById(R.id.weeknumber);
+ if (isShowWeekNumber) {
+ mWeekNumber.setVisibility(View.VISIBLE);
+ mWeekNumber.setText("(" + (new SimpleDateFormat("ww")).format(new Date()) + ")");
+ } else {
+ mWeekNumber.setVisibility(View.GONE);
+ mWeekNumber.setText("");
+ }
+ }
+
+
+ }
+
+ protected void setColorLowRes() {
+ setColorDark();
+ }
+ protected void setColorBright() { setColorDark(); /* getCurrentWatchMode() == WatchMode.AMBIENT or WatchMode.INTERACTIVE */}
+
+}
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_full_rect.png b/wear/src/main/res/drawable/digitalstyle_bg_full_rect.png
new file mode 100644
index 0000000000..e917a354b8
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_full_rect.png differ
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_full_round.png b/wear/src/main/res/drawable/digitalstyle_bg_full_round.png
new file mode 100644
index 0000000000..98fbbb1701
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_full_round.png differ
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_minimal_rect.png b/wear/src/main/res/drawable/digitalstyle_bg_minimal_rect.png
new file mode 100644
index 0000000000..261f6ab723
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_minimal_rect.png differ
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_minimal_round.png b/wear/src/main/res/drawable/digitalstyle_bg_minimal_round.png
new file mode 100644
index 0000000000..261f6ab723
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_minimal_round.png differ
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_none_rect.png b/wear/src/main/res/drawable/digitalstyle_bg_none_rect.png
new file mode 100644
index 0000000000..209a438645
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_none_rect.png differ
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_none_round.png b/wear/src/main/res/drawable/digitalstyle_bg_none_round.png
new file mode 100644
index 0000000000..209a438645
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_none_round.png differ
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_shape_rect.png b/wear/src/main/res/drawable/digitalstyle_bg_shape_rect.png
new file mode 100644
index 0000000000..a0acd812f6
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_shape_rect.png differ
diff --git a/wear/src/main/res/drawable/digitalstyle_bg_shape_round.png b/wear/src/main/res/drawable/digitalstyle_bg_shape_round.png
new file mode 100644
index 0000000000..e8cfa435b7
Binary files /dev/null and b/wear/src/main/res/drawable/digitalstyle_bg_shape_round.png differ
diff --git a/wear/src/main/res/drawable/watchface_digitalstyle.png b/wear/src/main/res/drawable/watchface_digitalstyle.png
new file mode 100644
index 0000000000..e5fc1b4438
Binary files /dev/null and b/wear/src/main/res/drawable/watchface_digitalstyle.png differ
diff --git a/wear/src/main/res/font/roboto_condensed_bold.ttf b/wear/src/main/res/font/roboto_condensed_bold.ttf
new file mode 100644
index 0000000000..8c7a08be0b
Binary files /dev/null and b/wear/src/main/res/font/roboto_condensed_bold.ttf differ
diff --git a/wear/src/main/res/font/roboto_condensed_light.ttf b/wear/src/main/res/font/roboto_condensed_light.ttf
new file mode 100644
index 0000000000..67e84089e8
Binary files /dev/null and b/wear/src/main/res/font/roboto_condensed_light.ttf differ
diff --git a/wear/src/main/res/font/roboto_condensed_regular.ttf b/wear/src/main/res/font/roboto_condensed_regular.ttf
new file mode 100644
index 0000000000..533e3999cd
Binary files /dev/null and b/wear/src/main/res/font/roboto_condensed_regular.ttf differ
diff --git a/wear/src/main/res/font/roboto_slab_light.ttf b/wear/src/main/res/font/roboto_slab_light.ttf
new file mode 100644
index 0000000000..ccb99cd02b
Binary files /dev/null and b/wear/src/main/res/font/roboto_slab_light.ttf differ
diff --git a/wear/src/main/res/layout/activity_digitalstyle.xml b/wear/src/main/res/layout/activity_digitalstyle.xml
new file mode 100644
index 0000000000..5fd23a86b7
--- /dev/null
+++ b/wear/src/main/res/layout/activity_digitalstyle.xml
@@ -0,0 +1,13 @@
+
+
+
\ No newline at end of file
diff --git a/wear/src/main/res/layout/rect_activity_digitalstyle.xml b/wear/src/main/res/layout/rect_activity_digitalstyle.xml
new file mode 100644
index 0000000000..8d22bc8e3d
--- /dev/null
+++ b/wear/src/main/res/layout/rect_activity_digitalstyle.xml
@@ -0,0 +1,555 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wear/src/main/res/layout/round_activity_digitalstyle.xml b/wear/src/main/res/layout/round_activity_digitalstyle.xml
new file mode 100644
index 0000000000..02a638d6ab
--- /dev/null
+++ b/wear/src/main/res/layout/round_activity_digitalstyle.xml
@@ -0,0 +1,555 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wear/src/main/res/values-cs-rCZ/strings.xml b/wear/src/main/res/values-cs-rCZ/strings.xml
index 5426e6b367..231621586b 100644
--- a/wear/src/main/res/values-cs-rCZ/strings.xml
+++ b/wear/src/main/res/values-cs-rCZ/strings.xml
@@ -7,6 +7,10 @@
AAPS(VelkýGraf)AAPS(BezGrafu)APS(Kruh)
+ AAPSv2
+ AAPS (Cockpit)
+ AAPS (Steampunk)
+ AAPS (DigitalStyle)Žádná data!Stará data!Od %1$s
@@ -90,4 +94,36 @@
SacharidyIOBžádný stav
+ červená
+ růžová
+ fialová
+ tmavě fialová
+ indigo
+ modrá
+ světle modrá
+ tyrkysová
+ šedozelená
+ zelená
+ světle zelená
+ limetková
+ žlutá
+ jantarová
+ oranžová
+ tmavě oranžová
+ hnědá
+ šedá
+ modrošedá
+ bílá
+ černá
+ multicolor
+ Vibrovat každou hodinu
+ Zobrazit číslo týdne
+ Váš styl:
+ bez stylu
+ minimalistický styl
+ tvar stylu
+ úplný styl
+ Vaše barva:
+ Vaše nasycení barvy:
+ Průhlednost barvy:
diff --git a/wear/src/main/res/values-de-rDE/strings.xml b/wear/src/main/res/values-de-rDE/strings.xml
index 54a5d8d247..a752e32b58 100644
--- a/wear/src/main/res/values-de-rDE/strings.xml
+++ b/wear/src/main/res/values-de-rDE/strings.xml
@@ -90,4 +90,7 @@
KHIOBKein Status
+ dunkelviolett
+ indigoblau
+ bernstein
diff --git a/wear/src/main/res/values-fr-rFR/strings.xml b/wear/src/main/res/values-fr-rFR/strings.xml
index 62dc982168..3bd101d371 100644
--- a/wear/src/main/res/values-fr-rFR/strings.xml
+++ b/wear/src/main/res/values-fr-rFR/strings.xml
@@ -7,6 +7,10 @@
AAPS (GrandGraph)AAPS (SansGraph)AAPS (Cercle)
+ AAPSv2
+ AAPS (Cockpit)
+ AAPS (Steampunk)
+ AAPS (Digital)Pas de données !Données anciennes!Depuis %1$s
@@ -90,4 +94,36 @@
GAIAaucun statut
+ rouge
+ rose
+ violet
+ violet foncé
+ indigo
+ bleu
+ bleu clair
+ cyan
+ turquoise
+ vert
+ vert clair
+ vert citron
+ jaune
+ ambre
+ orange
+ orange foncé
+ marron
+ gris
+ gris bleu
+ white
+ noir
+ multicolor
+ Vibrer à l\'heure
+ Afficher numéro semaine
+ Style :
+ aucun
+ minimal
+ forme
+ complet
+ Couleur :
+ Saturation :
+ Opacité :
diff --git a/wear/src/main/res/values-it-rIT/strings.xml b/wear/src/main/res/values-it-rIT/strings.xml
index 5f5e73a928..4af7ef23e9 100644
--- a/wear/src/main/res/values-it-rIT/strings.xml
+++ b/wear/src/main/res/values-it-rIT/strings.xml
@@ -7,6 +7,10 @@
AAPS(BigChart)AAPS(NoChart)AAPS(Circle)
+ AAPSv2
+ AAPS(Cockpit)
+ AAPS(Steampunk)
+ AAPS(DigitalStyle)No dati!Dati vecchi!Da %1$s
@@ -90,4 +94,36 @@
CHOIOBno status
+ rosso
+ rosa
+ porpora
+ viola
+ indaco
+ blu
+ azzurro
+ ciano
+ verde acqua
+ verde
+ verde chiaro
+ lime
+ giallo
+ ambra
+ arancione
+ arancione scuro
+ marrone
+ grigio
+ grigio-azzurro
+ bianco
+ nero
+ multicolore
+ Vibra a ogni ora
+ Mostra numero settimana
+ Il tuo stile:
+ nessuno stile
+ stile minimale
+ stile shape
+ stile completo
+ Il tuo colore:
+ Saturazione del tuo colore:
+ Opacità del tuo colore:
diff --git a/wear/src/main/res/values-iw-rIL/strings.xml b/wear/src/main/res/values-iw-rIL/strings.xml
index 3ea04e700d..8d6abc30f0 100644
--- a/wear/src/main/res/values-iw-rIL/strings.xml
+++ b/wear/src/main/res/values-iw-rIL/strings.xml
@@ -1,2 +1,129 @@
-
+
+ AAPS
+ AAPS
+ AAPS
+ AAPS (גדול)
+ AAPS (תרשים גדול)
+ AAPS (ללא תרשים)
+ AAPS (עיגול)
+ AAPSv2
+ AAPS (קוקפיט)
+ AAPS (סטימפאנק)
+ AAPS (דיגיטלי)
+ אין נתונים!
+ נתונים ישנים!
+ מאז %1$s
+ סנכרנו עם AAPS!
+ לא התקבלו נתונים מאז %1$s! בדקו אם AAPS בטלפון שולח נתונים לשעון
+ נתוני AAPS מלפני %1$s! בדקו את החיישן, הגדרות xDrip, NS, AAPS או אחר!
+ רטט במתן בולוס
+ יחידות עבור פעולות
+ הצג תאריך
+ הצג אינסולין IOB
+ הצג COB
+ הצג דלתא
+ הצגת דלתא ממוצעת
+ הצג את סוללת הטלפון
+ הצג את סוללת ה-Rig
+ הצג קצב בזאלי
+ הצג סטטוס לולאה
+ הצג רמת סוכר
+ הצג חץ כיוון
+ הצג עבר
+ כהה
+ הדגש בזאלים
+ מחיצות מותאמות
+ מסגרת זמן התרשים
+ שעה
+ שעתיים
+ 3 שעות
+ 4 שעות
+ 5 שעות
+ עיצוב קלט
+ ברירת מחדל
+ ימני מהיר
+ שמאלי מהיר
+ מינימלי מודרני
+ מפורט (סטימפאנק)
+ נמוך
+ בינוני
+ גבוה
+ אוטומטי
+ מספרים גדולים
+ היסטוריית צלצולים
+ היסטוריה של טבעת אור
+ אנימציות
+ אשף בתפריט
+ מילוי בתפריט
+ מטרה יחידה
+ אחוז אשף
+ פעולת הקשה על סיבוך
+ יוניקוד בסיבוכים
+ גירסה:
+ מטרה זמנית
+ אשף
+ בולוס
+ פחמימות ממושכות
+ הגדרות
+ סטטוס
+ מילוי
+ ללא
+ ברירת מחדל
+ תפריט
+ משך
+ מטרה
+ נמוך
+ גבוה
+ פחמימות
+ אחוז
+ התחלה [min]
+ משך [h]
+ אינסולין
+ הגדרה מראש 1
+ הגדרה מראש 2
+ הגדרה מראש 3
+ כמות חופשית
+ אישור
+ היסט זמן
+ בולוס
+ משאבה
+ לולאה
+ CPP
+ סה\"כ מינון אינסולין יומי TDD
+ פחמימות
+ כמות אינסולין פעילה
+ אין סטטוס
+ אדום
+ ורוד
+ סגול
+ סגול עמוק
+ כחול אינדיגו
+ כחול
+ כחול בהיר
+ ציאן
+ כחול-ירקרק
+ ירוק
+ ירוק בהיר
+ ירוק ליים
+ צהוב
+ ענבר
+ כתום
+ כתום עמוק
+ חום
+ אפור
+ כחול-אפור
+ לבן
+ שחור
+ צבעוני
+ רטט אחת לשעה
+ הצג מס\' שבוע
+ הסגנון שלכם:
+ ללא סגנון
+ סגנון מינימלי
+ סגנון הצורה
+ סגנון מלא
+ הצבע שלך:
+ רווית הצבע שלך:
+ אטימות הצבע שלכם:
+
diff --git a/wear/src/main/res/values-no-rNO/strings.xml b/wear/src/main/res/values-no-rNO/strings.xml
index 9c65fa0d63..769ccb4d4c 100644
--- a/wear/src/main/res/values-no-rNO/strings.xml
+++ b/wear/src/main/res/values-no-rNO/strings.xml
@@ -7,6 +7,10 @@
AAPS (BigChart)AAPS (NoChart)AAPS (Circle)
+ AAPSv2
+ AAPS(Cockpit)
+ AAPS(Steampunk)
+ AAPS(DigitalStyle)Ingen data!Gamle data!Siden %1$s
@@ -90,4 +94,36 @@
KarboIOBingen status
+ rød
+ rosa
+ lilla
+ mørkelilla
+ indigo
+ blå
+ lyseblå
+ turkis
+ blågrønn
+ grønn
+ lysegrønn
+ gulgrønn
+ gul
+ rødbrun
+ oransje
+ mørkeoransje
+ brun
+ grå
+ blågrå
+ hvit
+ svart
+ flerfarget
+ Vibrer hver time
+ Vis ukenummer
+ Din stil:
+ ingen stil
+ minimal palette
+ definert palette
+ full palette
+ Dine farger:
+ Din fargemetning:
+ Din farge gjennomsiktighet:
diff --git a/wear/src/main/res/values-pl-rPL/strings.xml b/wear/src/main/res/values-pl-rPL/strings.xml
index 2b18e94ea1..6c4740daac 100644
--- a/wear/src/main/res/values-pl-rPL/strings.xml
+++ b/wear/src/main/res/values-pl-rPL/strings.xml
@@ -7,6 +7,10 @@
AAPS(DużyWykres)AAPS(BezWykresu)AAPS(Koło)
+ AAPSv2
+ AAPS(Kokpit)
+ AAPS(Steampunk)
+ AAPS(StylCyfrowy)Brak danych!Stare dane!Od %1$s
@@ -90,4 +94,36 @@
Węgl.IOBbrak statusu
+ czerwony
+ różowy
+ fioletowy
+ ciemnofioletowy
+ indygo
+ niebieski
+ jasnoniebieski
+ turkusowy
+ morski
+ zielony
+ jasnozielony
+ limonkowy
+ żółty
+ bursztynowy
+ pomarańczowy
+ ciemnopomarańczowy
+ brązowy
+ szary
+ niebiesko-szary
+ biały
+ czarny
+ wielokolorowy
+ Wibruj co godzinę
+ Pokaż numer tygodnia
+ Styl:
+ brak stylu
+ minimalistyczny
+ kształtny
+ pełny
+ Kolor:
+ Nasycenie koloru:
+ Nieprzezroczystość:
diff --git a/wear/src/main/res/values-pt-rPT/strings.xml b/wear/src/main/res/values-pt-rPT/strings.xml
index eca7633d9b..4367efdadf 100644
--- a/wear/src/main/res/values-pt-rPT/strings.xml
+++ b/wear/src/main/res/values-pt-rPT/strings.xml
@@ -7,6 +7,10 @@
AAPS(GrafGrande)AAPS(SemGraf)AAPS(Círculo)
+ AAPSv2
+ AAPS(Cockpit)
+ AAPS(Steampunk)
+ AAPS(DigitalStyle)Sem dados!Dados antigos!Desde %1$s
@@ -90,4 +94,36 @@
HidratosIOBsem estado
+ vermelho
+ rosa
+ roxo
+ roxo escuro
+ azul índigo
+ azul
+ azul claro
+ ciano
+ azul esverdeado
+ verde
+ verde claro
+ lima
+ amarelo
+ âmbar
+ laranja
+ laranja escuro
+ castanho
+ cinzento
+ cinza azul
+ branco
+ preto
+ multicolor
+ Vibrar por hora
+ Mostrar número da Semana
+ Seu estilo:
+ sem estilo
+ estilo minimalista
+ estilo de forma
+ estilo completo
+ Sua cor:
+ Sua saturação de cor:
+ Sua opacidade de cor:
diff --git a/wear/src/main/res/values-ru-rRU/strings.xml b/wear/src/main/res/values-ru-rRU/strings.xml
index 5a6e234188..ae1a770e9a 100644
--- a/wear/src/main/res/values-ru-rRU/strings.xml
+++ b/wear/src/main/res/values-ru-rRU/strings.xml
@@ -7,6 +7,10 @@
AAPS (Крупный график)AAPS (Без графика)AAPS (круглый)
+ AAPSv2
+ AAPS (кабина пилота)
+ AAPS (Стимпанк)
+ AAPS (DigitalStyle)Данные не поступают!Старые данные!Длится с: %1$s
@@ -90,4 +94,36 @@
УглеводыIOBстатус отсутствует
+ красный
+ розовый
+ фиолетовый
+ тёмно-фиолетовый
+ индиго
+ синий
+ голубой
+ бирюзовый
+ бирюзовый
+ зеленый
+ светло-зеленый
+ лайм
+ желтый
+ янтарный
+ оранжевый
+ темно-оранжевый
+ коричневый
+ серый
+ сине-серый
+ белый
+ black
+ полихром
+ Почасовая вибрация
+ Показывать номер недели
+ Ваш стиль:
+ без стиля
+ минималистский
+ стиль формы
+ полный стиль
+ Ваш цвет:
+ Ваша цветовая насыщенность:
+ Непрозрачность вашего цвета:
diff --git a/wear/src/main/res/values-sk-rSK/strings.xml b/wear/src/main/res/values-sk-rSK/strings.xml
index 5eb6efcba1..081cf9a8d5 100644
--- a/wear/src/main/res/values-sk-rSK/strings.xml
+++ b/wear/src/main/res/values-sk-rSK/strings.xml
@@ -7,6 +7,10 @@
AAPS(VeľkýGraf)AAPS(ŽiadnyGraf)AAPS(Kruh)
+ AAPSv2
+ AAPS(Cockpit)
+ AAPS (Steampunk)
+ AAPS(DigitalStyle)Žiadne dáta!Zastaralé dáta!Od %1$s
@@ -90,4 +94,31 @@
SacharidyIOBžiadny stav
+ červená
+ ružová
+ fialová
+ tmavofialová
+ indigová
+ modrá
+ svetlomodrá
+ azúrová
+ tyrkysová
+ zelená
+ svetlo zelená
+ limetková
+ žltá
+ jantárová
+ oranžová
+ tmavooranžová
+ hnedá
+ sivá
+ modrosivá
+ biela
+ čierna
+ viacfarebná
+ Vibrovať každú hodinu
+ Zobraziť číslo týždňa
+ Váš štýl:
+ žiadny štýl
+ minimálny štýl
diff --git a/wear/src/main/res/values-sv-rSE/strings.xml b/wear/src/main/res/values-sv-rSE/strings.xml
index b91ea80e46..5cae177b2b 100644
--- a/wear/src/main/res/values-sv-rSE/strings.xml
+++ b/wear/src/main/res/values-sv-rSE/strings.xml
@@ -7,6 +7,10 @@
AAPS (BigChart)AAPS (NoChart)AAPS (Circle)
+ AAPS v2
+ AAPS (Cockpit)
+ AAPS (Steampunk)
+ AAPS (DigitalStyle)Inga data!Gamla data!Sedan %1$s
@@ -90,4 +94,36 @@
KHIOBIngen Status
+ röd
+ rosa
+ lila
+ mörklila
+ indigo
+ blå
+ ljusblå
+ cyan
+ tegelbrun
+ grön
+ ljusgrön
+ lime
+ gul
+ bärnsten
+ orange
+ mörkorange
+ brun
+ grå
+ blågrå
+ vit
+ svart
+ flerfärgad
+ Vibrera varje timme
+ Visa veckonummer
+ Din stil:
+ ingen stil
+ minimal stil
+ formstil
+ full stil
+ Färg:
+ Färgmättnad:
+ Opacitet:
diff --git a/wear/src/main/res/values/colors.xml b/wear/src/main/res/values/colors.xml
index 59b097c24c..8a6c892c1a 100644
--- a/wear/src/main/res/values/colors.xml
+++ b/wear/src/main/res/values/colors.xml
@@ -39,37 +39,138 @@
@color/grey_500
+
+
+
+
+
+
+ #FFCDD2
+ #F44336#E53935
+ #D32F2F
+ #B71C1C#FF0000
-
+
+
+ #F8BBD0
+ #E91E63
+ #C2185B
+ #880E4F
+
+
+ #E1BEE7
+ #9C27B0
+ #7B1FA2
+ #4A148C
+
+
+ #D1C4E9
+ #673AB7
+ #512DA8
+ #311B92
+
+
+ #C5CAE9
+ #3F51B5
+ #303F9F
+ #1A237E
+ #BBDEFB#64B5F6
-
+ #2196F3
+ #1976D2
+ #0D47A1
+ #0000FF
+
+
+ #B3E5FC
+ #03A9F4
+ #0288D1
+ #01579B
+
+
+ #B2EBF2
+ #00BCD4
+ #0097A7
+ #006064
+
+
+ #B2DFDB
+ #009688
+ #00796B
+ #004D40
+
+
+ #C8E6C9
+ #4CAF50
+ #388E3C
+ #1B5E20
+
+
+ #DCEDC8
+ #8BC34A
+ #689F38
+ #33691E
+
+
+ #F0F4C3
+ #CDDC39
+ #AFB42B
+ #827717
+ #FFF9C4
+ #FFEB3B#FBC02D
+ #F57F17#FFFF00
-
-
+
+ #FFECB3
+ #FFC107
+ #FFA000
+ #FF6F00
+
+
+ #FFE0B2
+ #FF9800
+ #F57C00
+ #E65100
+
+
+ #FFCCBC
+ #FF5722
+ #E64A19
+ #BF360C
+
+
+ #D7CCC8
+ #795548
+ #5D4037
+ #3E2723
+
+
+
#FAFAFA
+ #F5F5F5#E0E0E0#9E9E9E
+ #9E9E9E
+ #616161
+ #212121#333333
-
-
- #0000FF
-
+
+ #CFD8DC
+ #607D8B
+ #455A64
+ #263238
-
+
#000000
-
-
-
#FFFFFF
-
\ No newline at end of file
diff --git a/wear/src/main/res/values/digitalstyle_arrays.xml b/wear/src/main/res/values/digitalstyle_arrays.xml
new file mode 100644
index 0000000000..25f16564fe
--- /dev/null
+++ b/wear/src/main/res/values/digitalstyle_arrays.xml
@@ -0,0 +1,98 @@
+
+
+
+ @string/digitalstyle_style_none
+ @string/digitalstyle_style_minimal
+ @string/digitalstyle_style_shape
+ @string/digitalstyle_style_full
+
+
+ none
+ minimal
+ shape
+ full
+
+
+
+ @string/color_name_red
+ @string/color_name_pink
+ @string/color_name_purple
+ @string/color_name_deeppurple
+ @string/color_name_indigo
+ @string/color_name_blue
+ @string/color_name_lightblue
+ @string/color_name_cyan
+ @string/color_name_teal
+ @string/color_name_green
+ @string/color_name_lightgreen
+ @string/color_name_lime
+ @string/color_name_yellow
+ @string/color_name_amber
+ @string/color_name_orange
+ @string/color_name_deeporange
+ @string/color_name_brown
+ @string/color_name_gray
+ @string/color_name_bluegray
+ @string/color_name_white
+ @string/color_name_multicolor
+
+
+ red
+ pink
+ purple
+ deeppurple
+ indigo
+ blue
+ lightblue
+ cyan
+ teal
+ green
+ lightgreen
+ lime
+ yellow
+ amber
+ orange
+ deeporange
+ brown
+ gray
+ bluegray
+ white
+ multicolor
+
+
+
+
+ 100
+ 500
+ 700
+ 900
+
+
+
+
+ 10%
+ 20%
+ 30%
+ 40%
+ 50%
+ 60%
+ 70%
+ 80%
+ 90%
+ 100%
+
+
+ 0.1
+ 0.2
+ 0.3
+ 0.4
+ 0.5
+ 0.6
+ 0.7
+ 0.8
+ 0.9
+ 1
+
+
+
+
\ No newline at end of file
diff --git a/wear/src/main/res/values/strings.xml b/wear/src/main/res/values/strings.xml
index 9d3f1fa76b..220c3b7808 100644
--- a/wear/src/main/res/values/strings.xml
+++ b/wear/src/main/res/values/strings.xml
@@ -9,6 +9,11 @@
AAPS(BigChart)AAPS(NoChart)AAPS(Circle)
+ AAPSv2
+ AAPS(Cockpit)
+ AAPS(Steampunk)
+ AAPS(DigitalStyle)
+
No data!Old data!
@@ -102,4 +107,43 @@
no status
+ red
+ pink
+ purple
+ deep purple
+ indigo
+ blue
+ light blue
+ cyan
+ teal
+ green
+ light green
+ lime
+ yellow
+ amber
+ orange
+ deep orange
+ brown
+ gray
+ blue gray
+ white
+ black
+ multicolor
+
+
+ Vibrate hourly
+ Show Week number
+
+ Your style:
+ no style
+ minimal style
+ shape style
+ full style
+
+ Your color:
+ Your color saturation:
+ Your color opacity:
+
+
+
diff --git a/wear/src/main/res/xml/preferences.xml b/wear/src/main/res/xml/preferences.xml
index 3c114cb59c..c768e43e97 100644
--- a/wear/src/main/res/xml/preferences.xml
+++ b/wear/src/main/res/xml/preferences.xml
@@ -237,6 +237,13 @@
app:wear_iconOff="@drawable/settings_off"
app:wear_iconOn="@drawable/settings_on"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+