Merge pull request #1 from nightscout/dev

Dev
This commit is contained in:
Andreas 2020-11-03 12:36:03 +01:00 committed by GitHub
commit 41cbb845ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
388 changed files with 8799 additions and 5230 deletions

View file

@ -26,7 +26,7 @@ ext {
powermockVersion = "1.7.3"
dexmakerVersion = "1.2"
retrofit2Version = '2.9.0'
okhttp3Version = '4.7.2'
okhttp3Version = '4.9.0'
}
@ -247,15 +247,17 @@ dependencies {
implementation project(':danar')
implementation project(':rileylink')
implementation project(':medtronic')
implementation project(':omnipod')
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.google.android.gms:play-services-wearable:17.0.0'
implementation "com.google.android.gms:play-services-location:17.0.0"
implementation 'com.google.firebase:firebase-core:17.4.3'
implementation 'com.google.firebase:firebase-auth:19.3.1'
implementation 'com.google.firebase:firebase-database:19.3.1'
implementation 'com.google.android.gms:play-services-location:17.1.0'
implementation platform('com.google.firebase:firebase-bom:25.12.0')
implementation "com.google.firebase:firebase-analytics-ktx"
implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.google.firebase:firebase-database-ktx'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation "androidx.appcompat:appcompat:$appcompat_verison"
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
@ -263,11 +265,13 @@ dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.percentlayout:percentlayout:1.0.0'
implementation "androidx.preference:preference-ktx:1.1.1"
implementation "androidx.preference:preference-ktx:$preferencektx_version"
implementation "androidx.activity:activity-ktx:${activityVersion}"
implementation "androidx.fragment:fragment:${fragmentVersion}"
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0'
implementation "androidx.fragment:fragment-ktx:${fragmentktx_version}"
implementation "androidx.constraintlayout:constraintlayout:$constraintlayout_version"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
implementation "com.google.android.material:material:$material_version"
implementation "io.reactivex.rxjava2:rxandroid:${rxandroid_version}"
@ -276,14 +280,12 @@ dependencies {
implementation("com.github.tony19:logback-android-classic:1.1.1-6") {
exclude group: "com.google.android", module: "android"
}
implementation 'org.apache.commons:commons-lang3:3.10'
implementation "org.apache.commons:commons-lang3:$commonslang3_version"
implementation 'org.slf4j:slf4j-api:1.7.30'
// Graphview cannot be upgraded
implementation "com.jjoe64:graphview:4.0.1"
implementation "com.joanzapata.iconify:android-iconify-fontawesome:2.2.2"
implementation 'com.madgag.spongycastle:core:1.58.0.0'
// Omnipod wizard
implementation(name: "com.atech-software.android.library.wizardpager-1.1.4", ext: "aar")
implementation("com.google.android:flexbox:0.3.0") {
exclude group: "com.android.support"
}
@ -292,21 +294,21 @@ dependencies {
exclude group: "org.json", module: "json"
}
implementation "com.google.code.gson:gson:2.8.6"
implementation('com.google.guava:guava:29.0-jre') {
implementation('com.google.guava:guava:30.0-jre') {
exclude group: "com.google.code.findbugs", module: "jsr305"
}
implementation 'com.google.code.findbugs:jsr305:3.0.2'
implementation 'net.danlew:android.joda:2.10.6'
implementation 'org.mozilla:rhino:1.7.12'
implementation 'org.mozilla:rhino:1.7.13'
implementation 'com.github.DavidProdinger:weekdays-selector:1.1.0'
implementation 'com.github.kenglxn.QRGen:android:2.6.0'
implementation 'com.eatthepath:java-otp:0.2.0'
testImplementation "junit:junit:4.13"
testImplementation "junit:junit:$junit_version"
testImplementation 'org.json:json:20200518'
testImplementation "org.mockito:mockito-core:2.8.47"
testImplementation "org.powermock:powermock-api-mockito2:${powermockVersion}"
@ -356,11 +358,11 @@ dependencies {
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
//WorkManager
implementation 'androidx.work:work-runtime:2.3.4'
implementation 'androidx.work:work-runtime-ktx:2.3.4'
implementation 'androidx.work:work-rxjava2:2.3.4'
implementation "androidx.work:work-runtime:$work_version"
implementation "androidx.work:work-runtime-ktx:$work_version"
implementation "androidx.work:work-rxjava2:$work_version"
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:1.1.0'
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.0.0'
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}

View file

@ -110,7 +110,7 @@ function enable_smb(
return false;
}
var determine_basal = function determine_basal(glucose_status, currenttemp, iob_data, profile, autosens_data, meal_data, tempBasalFunctions, microBolusAllowed, reservoir_data, currentTime) {
var determine_basal = function determine_basal(glucose_status, currenttemp, iob_data, profile, autosens_data, meal_data, tempBasalFunctions, microBolusAllowed, reservoir_data, currentTime, isSaveCgmSource) {
var rT = {}; //short for requestedTemp
var deliverAt = new Date();
@ -143,7 +143,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
rT.reason = "If current system time "+systemTime+" is correct, then BG data is too old. The last BG data was read "+minAgo+"m ago at "+bgTime;
// if BG is too old/noisy, or is changing less than 1 mg/dL/5m for 45m, cancel any high temps and shorten any long zero temps
//cherry pick from oref upstream dev cb8e94990301277fb1016c778b4e9efa55a6edbc
} else if ( bg > 60 && glucose_status.delta == 0 && glucose_status.short_avgdelta > -1 && glucose_status.short_avgdelta < 1 && glucose_status.long_avgdelta > -1 && glucose_status.long_avgdelta < 1 ) {
} else if ( bg > 60 && glucose_status.delta == 0 && glucose_status.short_avgdelta > -1 && glucose_status.short_avgdelta < 1 && glucose_status.long_avgdelta > -1 && glucose_status.long_avgdelta < 1 && !isSaveCgmSource) {
if ( glucose_status.last_cal && glucose_status.last_cal < 3 ) {
rT.reason = "CGM was just calibrated";
} else {

View file

@ -45,6 +45,8 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.plugins.constraints.signatureVerifier.SignatureVerifierPlugin
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
import info.nightscout.androidaps.setupwizard.SetupWizardActivity
@ -87,10 +89,17 @@ class MainActivity : NoSplashAppCompatActivity() {
@Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var signatureVerifierPlugin: SignatureVerifierPlugin
@Inject lateinit var config: Config
@Inject lateinit var importExportPrefs: ImportExportPrefs
private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle
private var pluginPreferencesMenuItem: MenuItem? = null
val callForPrefFile = registerForActivityResult(PrefsFileContract()) {
it?.let {
importExportPrefs.importSharedPreferences(this, it)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Iconify.with(FontAwesomeModule())

View file

@ -175,7 +175,8 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
addPreferencesFromResourceIfEnabled(localInsightPlugin, rootKey, config.PUMPDRIVERS)
addPreferencesFromResourceIfEnabled(comboPlugin, rootKey, config.PUMPDRIVERS)
addPreferencesFromResourceIfEnabled(medtronicPumpPlugin, rootKey, config.PUMPDRIVERS)
addPreferencesFromResourceIfEnabled(virtualPumpPlugin, rootKey, !config.NSCLIENT)
addPreferencesFromResource(R.xml.pref_pump, rootKey, config.PUMPDRIVERS)
addPreferencesFromResourceIfEnabled(virtualPumpPlugin, rootKey)
addPreferencesFromResourceIfEnabled(insulinOrefFreePeakPlugin, rootKey)
addPreferencesFromResourceIfEnabled(nsClientPlugin, rootKey)
addPreferencesFromResourceIfEnabled(tidepoolPlugin, rootKey)
@ -251,6 +252,10 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
}
}
private fun addPreferencesFromResource(@XmlRes preferencesResId: Int, key: String?, enabled: Boolean) {
if (enabled) addPreferencesFromResource(preferencesResId, key)
}
@SuppressLint("RestrictedApi")
private fun addPreferencesFromResource(@XmlRes preferencesResId: Int, key: String?) {
val xmlRoot = preferenceManager.inflateFromResource(context,

View file

@ -9,6 +9,8 @@ import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.plugins.configBuilder.PluginStore
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract
import info.nightscout.androidaps.utils.locale.LocaleHelper
import info.nightscout.androidaps.utils.protection.ProtectionCheck
import javax.inject.Inject
@ -16,9 +18,16 @@ import javax.inject.Inject
class SingleFragmentActivity : DaggerAppCompatActivity() {
@Inject lateinit var pluginStore: PluginStore
@Inject lateinit var protectionCheck: ProtectionCheck
@Inject lateinit var importExportPrefs: ImportExportPrefs
private var plugin: PluginBase? = null
val callForPrefFile = registerForActivityResult(PrefsFileContract()) {
it?.let {
importExportPrefs.importSharedPreferences(this, it)
}
}
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_single_fragment)

View file

@ -10,6 +10,7 @@ import info.nightscout.androidaps.dana.di.DanaModule
import info.nightscout.androidaps.danar.di.DanaRModule
import info.nightscout.androidaps.danars.di.DanaRSModule
import info.nightscout.androidaps.plugins.pump.common.dagger.RileyLinkModule
import info.nightscout.androidaps.plugins.pump.omnipod.dagger.OmnipodModule
import javax.inject.Singleton
@Singleton
@ -29,6 +30,7 @@ import javax.inject.Singleton
WizardModule::class,
RileyLinkModule::class,
MedtronicModule::class,
OmnipodModule::class,
APSModule::class,
PreferencesModule::class,
OverviewModule::class,

View file

@ -26,4 +26,5 @@ abstract class CommandQueueModule {
@ContributesAndroidInjector abstract fun commandTempBasalAbsoluteInjector(): CommandTempBasalAbsolute
@ContributesAndroidInjector abstract fun commandTempBasalPercentInjector(): CommandTempBasalPercent
@ContributesAndroidInjector abstract fun commandSetUserSettingsInjector(): CommandSetUserSettings
@ContributesAndroidInjector abstract fun commandCustomCommandInjector(): CommandCustomCommand
}

View file

@ -36,6 +36,7 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyL
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightFragment
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicFragment
import info.nightscout.androidaps.plugins.pump.medtronic.dialog.RileyLinkStatusDeviceMedtronic
import info.nightscout.androidaps.plugins.pump.omnipod.ui.OmnipodOverviewFragment
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpFragment
import info.nightscout.androidaps.plugins.source.BGSourceFragment
import info.nightscout.androidaps.plugins.treatments.TreatmentsFragment
@ -67,6 +68,7 @@ abstract class FragmentsModule {
@ContributesAndroidInjector abstract fun contributesLoopFragment(): LoopFragment
@ContributesAndroidInjector abstract fun contributesMaintenanceFragment(): MaintenanceFragment
@ContributesAndroidInjector abstract fun contributesMedtronicFragment(): MedtronicFragment
@ContributesAndroidInjector abstract fun contributesOmnipodFragment(): OmnipodOverviewFragment
@ContributesAndroidInjector abstract fun contributesNSProfileFragment(): NSProfileFragment
@ContributesAndroidInjector abstract fun contributesNSClientFragment(): NSClientFragment
@ContributesAndroidInjector

View file

@ -31,6 +31,7 @@ import info.nightscout.androidaps.plugins.general.persistentNotification.Persist
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
import info.nightscout.androidaps.plugins.general.wear.WearPlugin
import info.nightscout.androidaps.plugins.general.xdripStatusline.StatusLinePlugin
import info.nightscout.androidaps.plugins.insulin.InsulinLyumjevPlugin
import info.nightscout.androidaps.plugins.insulin.InsulinOrefFreePeakPlugin
import info.nightscout.androidaps.plugins.insulin.InsulinOrefRapidActingPlugin
import info.nightscout.androidaps.plugins.insulin.InsulinOrefUltraRapidActingPlugin
@ -82,6 +83,12 @@ abstract class PluginsModule {
@IntKey(40)
abstract fun bindInsulinOrefUltraRapidActingPlugin(plugin: InsulinOrefUltraRapidActingPlugin): PluginBase
@Binds
@AllConfigs
@IntoMap
@IntKey(42)
abstract fun bindInsulinLyumjevPlugin(plugin: InsulinLyumjevPlugin): PluginBase
@Binds
@AllConfigs
@IntoMap

View file

@ -10,6 +10,7 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.Riley
import info.nightscout.androidaps.plugins.pump.insight.InsightAlertService
import info.nightscout.androidaps.plugins.pump.insight.connection_service.InsightConnectionService
import info.nightscout.androidaps.plugins.pump.medtronic.service.RileyLinkMedtronicService
import info.nightscout.androidaps.plugins.pump.omnipod.rileylink.service.RileyLinkOmnipodService
import info.nightscout.androidaps.services.AlarmSoundService
import info.nightscout.androidaps.services.DataService
import info.nightscout.androidaps.services.LocationService
@ -29,4 +30,5 @@ abstract class ServicesModule {
@ContributesAndroidInjector abstract fun contributesInsightConnectionService(): InsightConnectionService
@ContributesAndroidInjector abstract fun contributesRileyLinkService(): RileyLinkService
@ContributesAndroidInjector abstract fun contributesRileyLinkMedtronicService(): RileyLinkMedtronicService
@ContributesAndroidInjector abstract fun contributesRileyLinkOmnipodService(): RileyLinkOmnipodService
}

View file

@ -108,7 +108,7 @@ class WizardDialog : DaggerDialogFragment() {
if (profileFunction.getUnits() == Constants.MGDL)
treatments_wizard_bg_input.setParams(savedInstanceState?.getDouble("treatments_wizard_bg_input")
?: 0.0, 0.0, 500.0, 1.0, DecimalFormat("0.0"), false, ok, textWatcher)
?: 0.0, 0.0, 500.0, 1.0, DecimalFormat("0"), false, ok, textWatcher)
else
treatments_wizard_bg_input.setParams(savedInstanceState?.getDouble("treatments_wizard_bg_input")
?: 0.0, 0.0, 30.0, 0.1, DecimalFormat("0.0"), false, ok, textWatcher)

View file

@ -65,6 +65,7 @@ public class DetermineBasalAdapterSMBJS {
private boolean mMicrobolusAllowed;
private boolean mSMBAlwaysAllowed;
private long mCurrentTime;
private boolean mIsSaveCgmSource;
private String storedCurrentTemp = null;
private String storedIobData = null;
@ -108,6 +109,7 @@ public class DetermineBasalAdapterSMBJS {
aapsLogger.debug(LTag.APS, "MicroBolusAllowed: " + (storedMicroBolusAllowed = "" + mMicrobolusAllowed));
aapsLogger.debug(LTag.APS, "SMBAlwaysAllowed: " + (storedSMBAlwaysAllowed = "" + mSMBAlwaysAllowed));
aapsLogger.debug(LTag.APS, "CurrentTime: " + (storedCurrentTime = "" + mCurrentTime));
aapsLogger.debug(LTag.APS, "isSaveCgmSource: " + mIsSaveCgmSource);
DetermineBasalResultSMB determineBasalResultSMB = null;
@ -237,7 +239,8 @@ public class DetermineBasalAdapterSMBJS {
boolean tempTargetSet,
boolean microBolusAllowed,
boolean uamAllowed,
boolean advancedFiltering
boolean advancedFiltering,
boolean isSaveCgmSource
) throws JSONException {
String units = profile.getUnits();
@ -282,7 +285,7 @@ public class DetermineBasalAdapterSMBJS {
mProfile.put("A52_risk_enable", SMBDefaults.A52_risk_enable);
boolean smbEnabled = sp.getBoolean(resourceHelper.gs(R.string.key_use_smb), false);
mProfile.put("SMBInterval", sp.getInt("key_smbinterval", SMBDefaults.SMBInterval));
mProfile.put("SMBInterval", sp.getInt(R.string.key_smbinterval, SMBDefaults.SMBInterval));
mProfile.put("enableSMB_with_COB", smbEnabled && sp.getBoolean(R.string.key_enableSMB_with_COB, false));
mProfile.put("enableSMB_with_temptarget", smbEnabled && sp.getBoolean(R.string.key_enableSMB_with_temptarget, false));
mProfile.put("allowSMB_with_high_temptarget", smbEnabled && sp.getBoolean(R.string.key_allowSMB_with_high_temptarget, false));
@ -354,6 +357,7 @@ public class DetermineBasalAdapterSMBJS {
mCurrentTime = now;
mIsSaveCgmSource = isSaveCgmSource;
}
private Object makeParam(JSONObject jsonObject, Context rhino, Scriptable scope) {

View file

@ -270,7 +270,8 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
isTempTarget,
smbAllowed.value(),
uam.value(),
advancedFiltering.value()
advancedFiltering.value(),
activePlugin.getActiveBgSource().getClass().getSimpleName().equals("DexcomPlugin")
);
} catch (JSONException e) {
fabricPrivacy.logException(e);

View file

@ -1,6 +1,6 @@
package info.nightscout.androidaps.plugins.constraints.objectives
import android.app.Activity
import androidx.fragment.app.FragmentActivity
import com.google.common.base.Charsets
import com.google.common.hash.Hashing
import dagger.android.HasAndroidInjector
@ -116,7 +116,7 @@ class ObjectivesPlugin @Inject constructor(
sp.putBoolean(R.string.key_objectiveusescale, false)
}
fun completeObjectives(activity: Activity, request: String) {
fun completeObjectives(activity: FragmentActivity, request: String) {
val requestCode = sp.getString(R.string.key_objectives_request_code, "")
var url = sp.getString(R.string.key_nsclientinternal_url, "").toLowerCase(Locale.getDefault())
if (!url.endsWith("/")) url = "$url/"
@ -145,7 +145,7 @@ class ObjectivesPlugin @Inject constructor(
}
}
fun allPriorAccomplished(position: Int) : Boolean {
fun allPriorAccomplished(position: Int): Boolean {
var accomplished = true
for (i in 0 until position) {
accomplished = accomplished && objectives[i].isAccomplished

View file

@ -8,6 +8,7 @@ import android.widget.CheckBox;
import android.widget.TextView;
import androidx.annotation.StringRes;
import androidx.fragment.app.FragmentActivity;
import java.util.ArrayList;
import java.util.List;
@ -110,7 +111,7 @@ public abstract class Objective {
return true;
}
public void specialAction(Activity activity, String input) {
public void specialAction(FragmentActivity activity, String input) {
}
public abstract class Task {

View file

@ -48,7 +48,7 @@ public class Objective0 extends Objective {
tasks.add(new Task(R.string.virtualpump_uploadstatus_title) {
@Override
public boolean isCompleted() {
return sp.getBoolean("virtualpump_uploadstatus", false);
return sp.getBoolean(R.string.key_virtualpump_uploadstatus, false);
}
@Override

View file

@ -1,6 +1,6 @@
package info.nightscout.androidaps.plugins.constraints.objectives.objectives;
import android.app.Activity;
import androidx.fragment.app.FragmentActivity;
import java.util.List;
@ -54,7 +54,7 @@ public class Objective3 extends Objective {
}
@Override
public void specialAction(Activity activity, String input) {
public void specialAction(FragmentActivity activity, String input) {
objectivesPlugin.completeObjectives(activity, input);
}
}

View file

@ -37,17 +37,17 @@ import info.nightscout.androidaps.utils.sharedPreferences.SP;
@Singleton
public class SafetyPlugin extends PluginBase implements ConstraintsInterface {
private SP sp;
private RxBusWrapper rxBus;
private ConstraintChecker constraintChecker;
private OpenAPSAMAPlugin openAPSAMAPlugin;
private OpenAPSSMBPlugin openAPSSMBPlugin;
private SensitivityOref1Plugin sensitivityOref1Plugin;
private ActivePluginProvider activePlugin;
private HardLimits hardLimits;
private BuildHelper buildHelper;
private TreatmentsPlugin treatmentsPlugin;
private Config config;
private final SP sp;
private final RxBusWrapper rxBus;
private final ConstraintChecker constraintChecker;
private final OpenAPSAMAPlugin openAPSAMAPlugin;
private final OpenAPSSMBPlugin openAPSSMBPlugin;
private final SensitivityOref1Plugin sensitivityOref1Plugin;
private final ActivePluginProvider activePlugin;
private final HardLimits hardLimits;
private final BuildHelper buildHelper;
private final TreatmentsPlugin treatmentsPlugin;
private final Config config;
@Inject
public SafetyPlugin(

View file

@ -1,7 +1,7 @@
package info.nightscout.androidaps.plugins.general.maintenance
import android.Manifest
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import android.bluetooth.BluetoothAdapter
import android.content.Context
import android.content.Intent
@ -12,8 +12,10 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import info.nightscout.androidaps.BuildConfig
import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.activities.SingleFragmentActivity
import info.nightscout.androidaps.events.EventAppExit
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
@ -122,7 +124,7 @@ class ImportExportPrefs @Inject constructor(
private fun prefsEncryptionIsDisabled() =
buildHelper.isEngineeringMode() && !sp.getBoolean(resourceHelper.gs(R.string.key_maintenance_encrypt_exported_prefs), true)
private fun askForMasterPass(activity: Activity, @StringRes canceledMsg: Int, then: ((password: String) -> Unit)) {
private fun askForMasterPass(activity: FragmentActivity, @StringRes canceledMsg: Int, then: ((password: String) -> Unit)) {
passwordCheck.queryPassword(activity, R.string.master_password, R.string.key_master_password, { password ->
then(password)
}, {
@ -130,7 +132,7 @@ class ImportExportPrefs @Inject constructor(
})
}
private fun askForEncryptionPass(activity: Activity, @StringRes canceledMsg: Int, @StringRes passwordName: Int, @StringRes passwordExplanation: Int?,
private fun askForEncryptionPass(activity: FragmentActivity, @StringRes canceledMsg: Int, @StringRes passwordName: Int, @StringRes passwordExplanation: Int?,
@StringRes passwordWarning: Int?, then: ((password: String) -> Unit)) {
passwordCheck.queryAnyPassword(activity, passwordName, R.string.key_master_password, passwordExplanation, passwordWarning, { password ->
then(password)
@ -139,7 +141,7 @@ class ImportExportPrefs @Inject constructor(
})
}
private fun askForMasterPassIfNeeded(activity: Activity, @StringRes canceledMsg: Int, then: ((password: String) -> Unit)) {
private fun askForMasterPassIfNeeded(activity: FragmentActivity, @StringRes canceledMsg: Int, then: ((password: String) -> Unit)) {
if (prefsEncryptionIsDisabled()) {
then("")
} else {
@ -147,7 +149,7 @@ class ImportExportPrefs @Inject constructor(
}
}
private fun assureMasterPasswordSet(activity: Activity, @StringRes wrongPwdTitle: Int): Boolean {
private fun assureMasterPasswordSet(activity: FragmentActivity, @StringRes wrongPwdTitle: Int): Boolean {
if (!sp.contains(R.string.key_master_password) || (sp.getString(R.string.key_master_password, "") == "")) {
WarningDialog.showWarning(activity,
resourceHelper.gs(wrongPwdTitle),
@ -163,23 +165,22 @@ class ImportExportPrefs @Inject constructor(
return true
}
private fun askToConfirmExport(activity: Activity, fileToExport: File, then: ((password: String) -> Unit)) {
private fun askToConfirmExport(activity: FragmentActivity, fileToExport: File, then: ((password: String) -> Unit)) {
if (!prefsEncryptionIsDisabled() && !assureMasterPasswordSet(activity, R.string.nav_export)) return
TwoMessagesAlertDialog.showAlert(activity, resourceHelper.gs(R.string.nav_export),
resourceHelper.gs(R.string.export_to) + " " + fileToExport + " ?",
resourceHelper.gs(R.string.export_to) + " " + fileToExport.name + " ?",
resourceHelper.gs(R.string.password_preferences_encrypt_prompt), {
askForMasterPassIfNeeded(activity, R.string.preferences_export_canceled, then)
}, null, R.drawable.ic_header_export)
}
private fun askToConfirmImport(activity: Activity, fileToImport: PrefsFile, then: ((password: String) -> Unit)) {
private fun askToConfirmImport(activity: FragmentActivity, fileToImport: PrefsFile, then: ((password: String) -> Unit)) {
if (fileToImport.handler == PrefsFormatsHandler.ENCRYPTED) {
if (!assureMasterPasswordSet(activity, R.string.nav_import)) return
TwoMessagesAlertDialog.showAlert(activity, resourceHelper.gs(R.string.nav_import),
resourceHelper.gs(R.string.import_from) + " " + fileToImport.file + " ?",
resourceHelper.gs(R.string.import_from) + " " + fileToImport.name + " ?",
resourceHelper.gs(R.string.password_preferences_decrypt_prompt), {
askForMasterPass(activity, R.string.preferences_import_canceled, then)
}, null, R.drawable.ic_header_import)
@ -191,7 +192,7 @@ class ImportExportPrefs @Inject constructor(
}
}
private fun promptForDecryptionPasswordIfNeeded(activity: Activity, prefs: Prefs, importOk: Boolean,
private fun promptForDecryptionPasswordIfNeeded(activity: FragmentActivity, prefs: Prefs, importOk: Boolean,
format: PrefsFormat, importFile: PrefsFile, then: ((prefs: Prefs, importOk: Boolean) -> Unit)) {
// current master password was not the one used for decryption, so we prompt for old password...
@ -213,7 +214,7 @@ class ImportExportPrefs @Inject constructor(
}
}
private fun exportSharedPreferences(activity: Activity) {
private fun exportSharedPreferences(activity: FragmentActivity) {
prefFileList.ensureExportDirExists()
val legacyFile = prefFileList.legacyFile()
@ -262,14 +263,12 @@ class ImportExportPrefs @Inject constructor(
}
fun importSharedPreferences(activity: FragmentActivity) {
val callForPrefFile = activity.registerForActivityResult(PrefsFileContract()) {
it?.let {
importSharedPreferences(activity, it)
}
}
try {
callForPrefFile.launch(null)
if (activity is SingleFragmentActivity)
activity.callForPrefFile.launch(null)
if (activity is MainActivity)
activity.callForPrefFile.launch(null)
} catch (e: IllegalArgumentException) {
// this exception happens on some early implementations of ActivityResult contracts
// when registered and called for the second time
@ -278,12 +277,12 @@ class ImportExportPrefs @Inject constructor(
}
}
private fun importSharedPreferences(activity: Activity, importFile: PrefsFile) {
public fun importSharedPreferences(activity: FragmentActivity, importFile: PrefsFile) {
askToConfirmImport(activity, importFile) { password ->
val format: PrefsFormat = when (importFile.handler) {
PrefsFormatsHandler.CLASSIC -> classicPrefsFormat
PrefsFormatsHandler.CLASSIC -> classicPrefsFormat
PrefsFormatsHandler.ENCRYPTED -> encryptedPrefsFormat
}
@ -345,7 +344,7 @@ class ImportExportPrefs @Inject constructor(
show(context, resourceHelper.gs(R.string.setting_imported), resourceHelper.gs(R.string.restartingapp), Runnable {
log.debug(TAG, "Exiting")
rxBus.send(EventAppExit())
if (context is Activity) {
if (context is AppCompatActivity) {
context.finish()
}
System.runFinalization()

View file

@ -1,20 +1,18 @@
package info.nightscout.androidaps.plugins.general.maintenance
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Environment
import android.os.Parcelable
import androidx.activity.result.contract.ActivityResultContract
import androidx.fragment.app.FragmentActivity
import info.nightscout.androidaps.BuildConfig
import info.nightscout.androidaps.R
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
import info.nightscout.androidaps.plugins.general.maintenance.activities.PrefImportListActivity
import info.nightscout.androidaps.plugins.general.maintenance.formats.*
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
import info.nightscout.androidaps.utils.storage.Storage
import kotlinx.android.parcel.Parcelize
import kotlinx.android.parcel.RawValue
@ -34,6 +32,7 @@ enum class PrefsImportDir {
@Parcelize
data class PrefsFile(
val name: String,
val file: File,
val baseDir: File,
val dirKind: PrefsImportDir,
@ -46,13 +45,14 @@ data class PrefsFile(
class PrefsFileContract : ActivityResultContract<Void, PrefsFile>() {
companion object {
const val OUTPUT_PARAM = "prefs_file"
}
override fun parseResult(resultCode: Int, intent: Intent?): PrefsFile? {
return when (resultCode) {
Activity.RESULT_OK -> intent?.getParcelableExtra(OUTPUT_PARAM)
else -> null
FragmentActivity.RESULT_OK -> intent?.getParcelableExtra(OUTPUT_PARAM)
else -> null
}
}
@ -74,6 +74,7 @@ class PrefFileListProvider @Inject constructor(
) {
companion object {
private val path = File(Environment.getExternalStorageDirectory().toString())
private val aapsPath = File(path, "AAPS" + File.separator + "preferences")
private const val IMPORT_AGE_NOT_YET_OLD_DAYS = 60
@ -96,7 +97,7 @@ class PrefFileListProvider @Inject constructor(
val detectedOld = !detectedNew && classicPrefsFormat.isPreferencesFile(it, contents)
if (detectedNew || detectedOld) {
val formatHandler = if (detectedNew) PrefsFormatsHandler.ENCRYPTED else PrefsFormatsHandler.CLASSIC
prefFiles.add(PrefsFile(it, path, PrefsImportDir.ROOT_DIR, formatHandler, metadataFor(loadMetadata, formatHandler, contents)))
prefFiles.add(PrefsFile(it.name, it, path, PrefsImportDir.ROOT_DIR, formatHandler, metadataFor(loadMetadata, formatHandler, contents)))
}
}
@ -104,7 +105,7 @@ class PrefFileListProvider @Inject constructor(
aapsPath.walk().filter { it.isFile && it.name.endsWith(".json") }.forEach {
val contents = storage.getFileContents(it)
if (encryptedPrefsFormat.isPreferencesFile(it, contents)) {
prefFiles.add(PrefsFile(it, aapsPath, PrefsImportDir.AAPS_DIR, PrefsFormatsHandler.ENCRYPTED, metadataFor(loadMetadata, PrefsFormatsHandler.ENCRYPTED, contents)))
prefFiles.add(PrefsFile(it.name, it, aapsPath, PrefsImportDir.AAPS_DIR, PrefsFormatsHandler.ENCRYPTED, metadataFor(loadMetadata, PrefsFormatsHandler.ENCRYPTED, contents)))
}
}

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.general.maintenance.activities
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
@ -9,6 +8,7 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import dagger.android.support.DaggerAppCompatActivity
@ -63,7 +63,7 @@ class PrefImportListActivity : DaggerAppCompatActivity() {
val i = Intent()
i.putExtra(PrefsFileContract.OUTPUT_PARAM, prefFile)
setResult(Activity.RESULT_OK, i)
setResult(FragmentActivity.RESULT_OK, i)
finish()
}
}

View file

@ -22,7 +22,7 @@ class ClassicPrefsFormat @Inject constructor(
override fun isPreferencesFile(file: File, preloadedContents: String?): Boolean {
val contents = preloadedContents ?: storage.getFileContents(file)
return contents.contains("units::" + Constants.MGDL) || contents.contains("units::" + Constants.MMOL)
return contents.contains("units::" + Constants.MGDL) || contents.contains("units::" + Constants.MMOL) || contents.contains("language::") || contents.contains("I_understand::")
}
override fun savePreferences(file: File, prefs: Prefs, masterPassword: String?) {

View file

@ -10,6 +10,7 @@ import android.os.IBinder;
import android.text.Spanned;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SwitchPreference;
import org.jetbrains.annotations.NotNull;
@ -190,7 +191,21 @@ public class NSClientPlugin extends PluginBase {
super.preprocessPreferences(preferenceFragment);
if (config.getNSCLIENT()) {
preferenceFragment.findPreference(resourceHelper.gs(R.string.key_statuslights_overview_advanced));
SwitchPreference key_ns_uploadlocalprofile = preferenceFragment.findPreference(resourceHelper.gs(R.string.key_ns_uploadlocalprofile));
if (key_ns_uploadlocalprofile != null) key_ns_uploadlocalprofile.setVisible(false);
SwitchPreference key_ns_autobackfill = preferenceFragment.findPreference(resourceHelper.gs(R.string.key_ns_autobackfill));
if (key_ns_autobackfill != null) key_ns_autobackfill.setVisible(false);
SwitchPreference key_ns_create_announcements_from_errors = preferenceFragment.findPreference(resourceHelper.gs(R.string.key_ns_create_announcements_from_errors));
if (key_ns_create_announcements_from_errors != null) key_ns_create_announcements_from_errors.setVisible(false);
SwitchPreference key_ns_create_announcements_from_carbs_req = preferenceFragment.findPreference(resourceHelper.gs(R.string.key_ns_create_announcements_from_carbs_req));
if (key_ns_create_announcements_from_carbs_req != null) key_ns_create_announcements_from_carbs_req.setVisible(false);
SwitchPreference key_ns_upload_only = preferenceFragment.findPreference(resourceHelper.gs(R.string.key_ns_upload_only));
if (key_ns_upload_only != null) {
key_ns_upload_only.setVisible(false);
key_ns_upload_only.setEnabled(false);
}
SwitchPreference key_ns_sync_use_absolute = preferenceFragment.findPreference(resourceHelper.gs(R.string.key_ns_sync_use_absolute));
if (key_ns_sync_use_absolute != null) key_ns_sync_use_absolute.setVisible(false);
}
}

View file

@ -185,7 +185,7 @@ private val allowedKeys = """
tidepool_only_while_charging
tidepool_only_while_unmetered
virtualpump
virtualpump_uploadstatus
key_virtualpump_uploadstatus
virtualpump_type
wearplugin
wearcontrol

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.general.openhumans
import android.app.Activity
import android.app.Dialog
import android.content.Intent
import android.net.Uri
@ -11,6 +10,7 @@ import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.browser.customtabs.CustomTabsIntent
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentActivity
import dagger.android.support.DaggerDialogFragment
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
@ -26,7 +26,7 @@ class OpenHumansLoginActivity : NoSplashAppCompatActivity() {
val button = findViewById<Button>(R.id.button)
val checkbox = findViewById<CheckBox>(R.id.checkbox)
button.setOnClickListener { _ ->
button.setOnClickListener {
if (checkbox.isChecked) {
CustomTabsIntent.Builder().build().launchUrl(this, Uri.parse(OpenHumansUploader.AUTH_URL))
} else {
@ -55,7 +55,7 @@ class OpenHumansLoginActivity : NoSplashAppCompatActivity() {
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return AlertDialog.Builder(activity!!)
return AlertDialog.Builder(requireActivity())
.setTitle(R.string.completing_login)
.setMessage(R.string.please_wait)
.create()
@ -65,10 +65,10 @@ class OpenHumansLoginActivity : NoSplashAppCompatActivity() {
super.onCreate(savedInstanceState)
disposable = openHumansUploader.login(arguments?.getString("authToken")!!).subscribeOn(Schedulers.io()).subscribe({
dismiss()
SetupDoneDialog().show(fragmentManager!!, "SetupDoneDialog")
SetupDoneDialog().show(parentFragmentManager, "SetupDoneDialog")
}, {
dismiss()
ErrorDialog(it.message).show(fragmentManager!!, "ErrorDialog")
ErrorDialog(it.message).show(parentFragmentManager, "ErrorDialog")
})
}
@ -96,7 +96,7 @@ class OpenHumansLoginActivity : NoSplashAppCompatActivity() {
val message = arguments?.getString("message")
val shownMessage = if (message == null) getString(R.string.there_was_an_error)
else "${getString(R.string.there_was_an_error)}\n\n$message"
return AlertDialog.Builder(activity!!)
return AlertDialog.Builder(requireActivity())
.setTitle(R.string.error)
.setMessage(shownMessage)
.setPositiveButton(R.string.close, null)
@ -122,14 +122,14 @@ class OpenHumansLoginActivity : NoSplashAppCompatActivity() {
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return AlertDialog.Builder(activity!!)
return AlertDialog.Builder(requireActivity())
.setTitle(R.string.successfully_logged_in)
.setMessage(R.string.setup_will_continue_in_background)
.setCancelable(false)
.setPositiveButton(R.string.close) { _, _ ->
activity!!.run {
setResult(Activity.RESULT_OK)
activity!!.finish()
requireActivity().run {
setResult(FragmentActivity.RESULT_OK)
requireActivity().finish()
}
}
.create()

View file

@ -4,6 +4,7 @@ import com.jjoe64.graphview.DefaultLabelFormatter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
/**
* Created by mike on 09.06.2016.
@ -20,10 +21,22 @@ public class TimeAsXAxisLabelFormatter extends DefaultLabelFormatter {
public String formatLabel(double value, boolean isValueX) {
if (isValueX) {
// format as date
DateFormat dateFormat = new SimpleDateFormat(mFormat);
DateFormat dateFormat = new SimpleDateFormat(mFormat, Locale.getDefault());
return dateFormat.format((long) value);
} else {
return super.formatLabel(value, isValueX);
try {
// unknown reason for crashing on this
// Fatal Exception: java.lang.NullPointerException
// Attempt to invoke virtual method 'double com.jjoe64.graphview.Viewport.getMaxY(boolean)' on a null object reference
// com.jjoe64.graphview.DefaultLabelFormatter.formatLabel (DefaultLabelFormatter.java:89)
// info.nightscout.androidaps.plugins.general.overview.graphExtensions.TimeAsXAxisLabelFormatter.formatLabel (TimeAsXAxisLabelFormatter.java:26)
// com.jjoe64.graphview.GridLabelRenderer.drawVerticalSteps (GridLabelRenderer.java:1057)
// com.jjoe64.graphview.GridLabelRenderer.draw (GridLabelRenderer.java:866)
// com.jjoe64.graphview.GraphView.onDraw (GraphView.java:296)
return super.formatLabel(value, isValueX);
} catch (Exception ignored) {
return "";
}
}
}
}

View file

@ -578,12 +578,13 @@ class SmsCommunicatorPlugin @Inject constructor(
})
} else if (splitted[1].endsWith("%")) {
var tempBasalPct = SafeParse.stringToInt(StringUtils.removeEnd(splitted[1], "%"))
var durationStep = activePlugin.activePump.model().tbrSettings.durationStep
var duration = 30
if (splitted.size > 2) duration = SafeParse.stringToInt(splitted[2])
val profile = profileFunction.getProfile()
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
else if (tempBasalPct == 0 && splitted[1] != "0%") sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
else if (duration == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongTbrDuration, durationStep)))
else {
tempBasalPct = constraintChecker.applyBasalPercentConstraints(Constraint(tempBasalPct), profile).value()
val passCode = generatePasscode()
@ -610,12 +611,13 @@ class SmsCommunicatorPlugin @Inject constructor(
}
} else {
var tempBasal = SafeParse.stringToDouble(splitted[1])
var durationStep = activePlugin.activePump.model().tbrSettings.durationStep
var duration = 30
if (splitted.size > 2) duration = SafeParse.stringToInt(splitted[2])
val profile = profileFunction.getProfile()
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
else if (tempBasal == 0.0 && splitted[1] != "0") sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
else if (duration == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongTbrDuration, durationStep)))
else {
tempBasal = constraintChecker.applyBasalConstraints(Constraint(tempBasal), profile).value()
val passCode = generatePasscode()
@ -1002,7 +1004,7 @@ class SmsCommunicatorPlugin @Inject constructor(
private fun areMoreNumbers(allowednumbers: String?): Boolean {
return allowednumbers?.let {
var countNumbers = 0
val knownNumbers = HashSet<String>()
val substrings = it.split(";").toTypedArray()
for (number in substrings) {
var cleaned = number.replace(Regex("\\s+"), "")
@ -1010,9 +1012,9 @@ class SmsCommunicatorPlugin @Inject constructor(
cleaned = cleaned.replace("+", "")
cleaned = cleaned.replace("-", "")
if (!cleaned.matches(Regex("[0-9]+"))) continue
countNumbers++
knownNumbers.add(cleaned)
}
countNumbers > 1
knownNumbers.size > 1
} ?: false
}
}

View file

@ -1,11 +1,15 @@
package info.nightscout.androidaps.plugins.general.smsCommunicator.activities
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.res.Resources
import android.graphics.Color
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.View
import android.view.WindowManager
import com.google.common.primitives.Ints.min
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
import info.nightscout.androidaps.R
@ -15,8 +19,8 @@ import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicato
import info.nightscout.androidaps.plugins.general.smsCommunicator.otp.OneTimePassword
import info.nightscout.androidaps.plugins.general.smsCommunicator.otp.OneTimePasswordValidationResult
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.activity_smscommunicator_otp.*
import net.glxn.qrgen.android.QRCode
@ -31,6 +35,7 @@ class SmsCommunicatorOtpActivity : NoSplashAppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_smscommunicator_otp)
smscommunicator_otp_verify_edit.addTextChangedListener(object : TextWatcher {
@ -64,9 +69,23 @@ class SmsCommunicatorOtpActivity : NoSplashAppCompatActivity() {
Runnable {
otp.ensureKey(true)
updateGui()
ToastUtils.showToastInUiThread(this, R.string.smscommunicator_otp_reset_successful)
ToastUtils.Long.infoToast(this, resourceHelper.gs(R.string.smscommunicator_otp_reset_successful))
})
}
smscommunicator_otp_provisioning.setOnLongClickListener {
OKDialog.showConfirmation(this,
resourceHelper.gs(R.string.smscommunicator_otp_export_title),
resourceHelper.gs(R.string.smscommunicator_otp_export_prompt),
Runnable {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("OTP Secret", otp.provisioningSecret())
clipboard.primaryClip = clip
ToastUtils.Long.infoToast(this, resourceHelper.gs(R.string.smscommunicator_otp_export_successful))
})
true
}
}
@Synchronized

View file

@ -121,4 +121,10 @@ class OneTimePassword @Inject constructor(
fun provisioningURI(): String? =
key?.let { "otpauth://totp/AndroidAPS:" + URLEncoder.encode(name(), "utf-8").replace("+", "%20") + "?secret=" + BaseEncoding.base32().encode(it.encoded).replace("=", "") + "&issuer=AndroidAPS" }
/**
* Return secret used to provision Authenticator apps, in Base32 format
*/
fun provisioningSecret(): String? =
key?.let { BaseEncoding.base32().encode(it.encoded).replace("=", "") }
}

View file

@ -3,9 +3,7 @@ package info.nightscout.androidaps.plugins.general.tidepool.elements
import com.google.gson.annotations.Expose
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.db.ProfileSwitch
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.general.tidepool.comm.TidepoolUploader
import info.nightscout.androidaps.utils.InstanceId
import java.util.*
import kotlin.collections.ArrayList

View file

@ -2,10 +2,8 @@ package info.nightscout.androidaps.plugins.general.tidepool.messages
import com.google.gson.annotations.Expose
import info.nightscout.androidaps.BuildConfig
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.general.tidepool.comm.TidepoolUploader
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.InstanceId
import info.nightscout.androidaps.utils.T
import java.util.*

View file

@ -0,0 +1,35 @@
package info.nightscout.androidaps.plugins.insulin
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.interfaces.InsulinInterface
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.utils.resources.ResourceHelper
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class InsulinLyumjevPlugin @Inject constructor(
injector: HasAndroidInjector,
resourceHelper: ResourceHelper,
profileFunction: ProfileFunction,
rxBus: RxBusWrapper, aapsLogger: AAPSLogger
) : InsulinOrefBasePlugin(injector, resourceHelper, profileFunction, rxBus, aapsLogger) {
override fun getId(): Int = InsulinInterface.OREF_LYUMJEV
override fun getFriendlyName(): String = resourceHelper.gs(R.string.lyumjev)
override fun commentStandardText(): String = resourceHelper.gs(R.string.lyumjev)
override val peak = 45
init {
pluginDescription
.pluginName(R.string.lyumjev)
.description(R.string.description_insulin_lyumjev)
}
}

View file

@ -41,5 +41,6 @@ class InsulinOrefRapidActingPlugin @Inject constructor(
.pluginName(R.string.rapid_acting_oref)
.description(R.string.description_insulin_rapid)
.setDefault()
.enableByDefault(true)
}
}

View file

@ -34,6 +34,5 @@ class InsulinOrefUltraRapidActingPlugin @Inject constructor(
pluginDescription
.pluginName(R.string.ultrarapid_oref)
.description(R.string.description_insulin_ultra_rapid)
.enableByDefault(true)
}
}

View file

@ -1,6 +1,6 @@
package info.nightscout.androidaps.plugins.profile.local
import android.app.Activity
import androidx.fragment.app.FragmentActivity
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
@ -93,7 +93,7 @@ class LocalProfilePlugin @Inject constructor(
}
@Synchronized
fun storeSettings(activity: Activity? = null) {
fun storeSettings(activity: FragmentActivity? = null) {
for (i in 0 until numOfProfiles) {
profiles[i].run {
val localProfileNumbered = Constants.LOCAL_PROFILE + "_" + i + "_"

View file

@ -12,6 +12,7 @@ import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import javax.inject.Inject;
@ -98,7 +99,7 @@ public class ComboFragment extends DaggerFragment implements View.OnClickListene
}
private void runOnUiThread(Runnable action) {
Activity activity = getActivity();
FragmentActivity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(action);
}

View file

@ -29,6 +29,7 @@ import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TDD;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventInitializationChanged;
import info.nightscout.androidaps.events.EventRefreshOverview;
import info.nightscout.androidaps.interfaces.CommandQueueProvider;
@ -36,6 +37,7 @@ import info.nightscout.androidaps.interfaces.Constraint;
import info.nightscout.androidaps.interfaces.ConstraintsInterface;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.interfaces.ProfileFunction;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.PumpPluginBase;
@ -43,9 +45,9 @@ import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.common.ManufacturerType;
import info.nightscout.androidaps.interfaces.ProfileFunction;
import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction;
import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType;
import info.nightscout.androidaps.queue.commands.CustomCommand;
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress;
@ -64,7 +66,6 @@ import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.history.PumpH
import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.history.PumpHistoryRequest;
import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.history.Tdd;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.InstanceId;
@ -1395,7 +1396,10 @@ public class ComboPlugin extends PumpPluginBase implements PumpInterface, Constr
@Override
public void executeCustomAction(CustomActionType customActionType) {
}
@Nullable @Override public PumpEnactResult executeCustomCommand(CustomCommand customCommand) {
return null;
}
@Override

View file

@ -12,6 +12,7 @@ import android.os.IBinder;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
@ -56,6 +57,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.queue.commands.CustomCommand;
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;
@ -1171,7 +1173,10 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
@Override
public void executeCustomAction(CustomActionType customActionType) {
}
@Nullable @Override public PumpEnactResult executeCustomCommand(CustomCommand customCommand) {
return null;
}
private void readHistory() {

View file

@ -1,6 +1,7 @@
package info.nightscout.androidaps.plugins.pump.mdi;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
@ -27,6 +28,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.queue.commands.CustomCommand;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.utils.DateUtil;
@ -281,7 +283,10 @@ public class MDIPlugin extends PumpPluginBase implements PumpInterface {
@Override
public void executeCustomAction(CustomActionType customActionType) {
}
@Nullable @Override public PumpEnactResult executeCustomCommand(CustomCommand customCommand) {
return null;
}
@Override

View file

@ -1,6 +1,8 @@
package info.nightscout.androidaps.plugins.pump.virtual
import android.os.SystemClock
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Config
import info.nightscout.androidaps.R
@ -16,9 +18,9 @@ import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.common.ManufacturerType
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction
import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType
import info.nightscout.androidaps.queue.commands.CustomCommand
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
@ -59,7 +61,6 @@ class VirtualPumpPlugin @Inject constructor(
.pluginName(R.string.virtualpump)
.shortName(R.string.virtualpump_shortname)
.preferencesId(R.xml.pref_virtualpump)
.neverVisible(config.NSCLIENT)
.description(R.string.description_pump_virtual)
.setDefault(),
injector, aapsLogger, resourceHelper, commandQueue
@ -120,6 +121,13 @@ class VirtualPumpPlugin @Inject constructor(
super.onStop()
}
override fun preprocessPreferences(preferenceFragment: PreferenceFragmentCompat) {
super.preprocessPreferences(preferenceFragment)
val uploadStatus = preferenceFragment.findPreference(resourceHelper.gs(R.string.key_virtualpump_uploadstatus)) as SwitchPreference?
?: return
uploadStatus.isVisible = !config.NSCLIENT
}
override fun isFakingTempsByExtendedBoluses(): Boolean {
return config.NSCLIENT && getFakingStatus()
}
@ -133,6 +141,11 @@ class VirtualPumpPlugin @Inject constructor(
}
override fun executeCustomAction(customActionType: CustomActionType) {}
override fun executeCustomCommand(customCommand: CustomCommand?): PumpEnactResult? {
return null
}
override fun isInitialized(): Boolean {
return true
}
@ -327,7 +340,7 @@ class VirtualPumpPlugin @Inject constructor(
override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject {
val now = System.currentTimeMillis()
if (!sp.getBoolean("virtualpump_uploadstatus", false)) {
if (!sp.getBoolean(R.string.key_virtualpump_uploadstatus, false)) {
return JSONObject()
}
val pump = JSONObject()

View file

@ -62,6 +62,7 @@ class BGSourceFragment : DaggerFragment() {
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ updateGUI() }) { fabricPrivacy.logException(it) }
)
updateGUI()
}
@Synchronized

View file

@ -20,16 +20,16 @@ import info.nightscout.androidaps.events.EventProfileNeedsUpdate
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.Constraint
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.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.queue.commands.CustomCommand
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.queue.commands.Command
import info.nightscout.androidaps.queue.commands.*
import info.nightscout.androidaps.queue.commands.Command.CommandType
import info.nightscout.androidaps.utils.FabricPrivacy
@ -260,7 +260,7 @@ class CommandQueue @Inject constructor(
} else {
add(CommandBolus(injector, detailedBolusInfo, callback, type))
if (type == CommandType.BOLUS) { // Bring up bolus progress dialog (start here, so the dialog is shown when the bolus is requested,
// not when the Bolus command is starting. The command closes the dialog upon completion).
// not when the Bolus command is starting. The command closes the dialog upon completion).
showBolusProgressDialog(detailedBolusInfo.insulin, detailedBolusInfo.context)
// Notify Wear about upcoming bolus
rxBus.send(EventBolusRequested(detailedBolusInfo.insulin))
@ -485,6 +485,55 @@ class CommandQueue @Inject constructor(
return true
}
override fun customCommand(customCommand: CustomCommand, callback: Callback?): Boolean {
if (isCustomCommandInQueue(customCommand.javaClass)) {
callback?.result(executingNowError())?.run()
return false
}
// remove all unfinished
removeAllCustomCommands(customCommand.javaClass)
// add new command to queue
add(CommandCustomCommand(injector, customCommand, callback))
notifyAboutNewCommand()
return true
}
@Synchronized
override fun isCustomCommandInQueue(customCommandType: Class<out CustomCommand>): Boolean {
if(isCustomCommandRunning(customCommandType)) {
return true
}
synchronized(queue) {
for (i in queue.indices) {
val command = queue[i]
if (command is CommandCustomCommand && customCommandType.isInstance(command.customCommand)) {
return true
}
}
}
return false
}
override fun isCustomCommandRunning(customCommandType: Class<out CustomCommand>): Boolean {
val performing = this.performing
if (performing is CommandCustomCommand && customCommandType.isInstance(performing.customCommand)) {
return true
}
return false
}
@Synchronized
private fun removeAllCustomCommands(targetType: Class<out CustomCommand>) {
synchronized(queue) {
for (i in queue.indices.reversed()) {
val command = queue[i]
if (command is CustomCommand && targetType.isInstance(command.commandType)) {
queue.removeAt(i)
}
}
}
}
override fun spannedStatus(): Spanned {
var s = ""
var line = 0

View file

@ -0,0 +1,26 @@
package info.nightscout.androidaps.queue.commands
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.queue.Callback
import javax.inject.Inject
class CommandCustomCommand(
injector: HasAndroidInjector,
val customCommand: CustomCommand,
callback: Callback?
) : Command(injector, CommandType.CUSTOM_COMMAND, callback) {
@Inject lateinit var activePlugin: ActivePluginProvider
override fun execute() {
val result = activePlugin.activePump.executeCustomCommand(customCommand)
aapsLogger.debug(LTag.PUMPQUEUE, "Result success: ${result?.success} enacted: ${result?.enacted}")
callback?.result(result)?.run()
}
override fun status(): String {
return customCommand.statusDescription
}
}

View file

@ -2,8 +2,6 @@ package info.nightscout.androidaps.queue.commands
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin
import info.nightscout.androidaps.queue.Callback
import javax.inject.Inject
@ -14,17 +12,12 @@ class CommandStartPump(
) : Command(injector, CommandType.START_PUMP, callback) {
@Inject lateinit var activePlugin: ActivePluginProvider
@Inject lateinit var profileFunction: ProfileFunction
override fun execute() {
val pump = activePlugin.activePump
if (pump is LocalInsightPlugin) {
val result = pump.startPump()
callback?.result(result)?.run()
} else if (pump.pumpDescription.pumpType == PumpType.Insulet_Omnipod) {
// When using CommandQueue.setProfile, it refuses to set the profile is the same as the current profile
// However we need to set the current profile to resume delivery in case the Pod is suspended
pump.setNewBasalProfile(profileFunction.getProfile())
}
}

View file

@ -16,10 +16,10 @@ import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.ProfileFunction
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.plugins.constraints.objectives.ObjectivesFragment
import info.nightscout.androidaps.plugins.constraints.objectives.ObjectivesPlugin
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
@ -30,12 +30,14 @@ import info.nightscout.androidaps.plugins.profile.local.LocalProfileFragment
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
import info.nightscout.androidaps.plugins.profile.ns.NSProfileFragment
import info.nightscout.androidaps.plugins.profile.ns.NSProfilePlugin
import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin
import info.nightscout.androidaps.setupwizard.elements.*
import info.nightscout.androidaps.setupwizard.events.EventSWUpdate
import info.nightscout.androidaps.utils.AndroidPermission
import info.nightscout.androidaps.utils.CryptoUtil
import info.nightscout.androidaps.utils.locale.LocaleHelper.update
import info.nightscout.androidaps.utils.extensions.isRunningTest
import info.nightscout.androidaps.utils.locale.LocaleHelper.update
import info.nightscout.androidaps.utils.protection.ProtectionCheck
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
@ -313,11 +315,44 @@ class SWDefinition @Inject constructor(
}, null)
})
.visibility(SWValidator { (activePlugin.activePump as PluginBase).preferencesId > 0 }))
.add(SWInfotext(injector)
.label(R.string.setupwizard_pump_pump_not_initialized)
.visibility(SWValidator { !isPumpInitialized() }))
.add( // Omnipod only
SWInfotext(injector)
.label(R.string.setupwizard_pump_waiting_for_riley_link_connection)
.visibility(SWValidator {
val activePump = activePlugin.activePump
activePump is OmnipodPumpPlugin && !activePump.isRileyLinkReady
}))
.add( // Omnipod only
SWEventListener(injector, EventRileyLinkDeviceStatusChange::class.java)
.label(R.string.setupwizard_pump_riley_link_status)
.visibility(SWValidator {
activePlugin.activePump is OmnipodPumpPlugin
}))
.add(SWButton(injector)
.text(R.string.readstatus)
.action(Runnable { commandQueue.readStatus("Clicked connect to pump", null) }))
.add(SWEventListener(injector, EventPumpStatusChanged::class.java))
.validator(SWValidator { activePlugin.activePump.isInitialized })
.action(Runnable { commandQueue.readStatus("Clicked connect to pump", null) })
.visibility(SWValidator {
// Hide for Omnipod, because as we don't require a Pod to be paired in the setup wizard,
// Getting the status might not be possible
activePlugin.activePump !is OmnipodPumpPlugin
}))
.add(SWEventListener(injector, EventPumpStatusChanged::class.java)
.visibility(SWValidator { activePlugin.activePump !is OmnipodPumpPlugin }))
.validator(SWValidator {
isPumpInitialized()
})
private fun isPumpInitialized(): Boolean {
val activePump = activePlugin.activePump
// For Omnipod, consider the pump initialized when a RL has been configured successfully
// Users will be prompted to activate a Pod after completing the setup wizard.
return activePump.isInitialized || (activePump is OmnipodPumpPlugin && activePump.isRileyLinkReady)
}
private val screenAps = SWScreen(injector, R.string.configbuilder_aps)
.skippable(false)
.add(SWInfotext(injector)

View file

@ -11,7 +11,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
class SWEventListener constructor(
injector:HasAndroidInjector,
injector: HasAndroidInjector,
clazz: Class<out EventStatus>
) : SWItem(injector, Type.LISTENER) {
@ -19,6 +19,7 @@ class SWEventListener constructor(
private var textLabel = 0
private var status = ""
private var textView: TextView? = null
private var visibilityValidator: SWValidator? = null
// TODO: Adrian how to clear disposable in this case?
init {
@ -43,6 +44,11 @@ class SWEventListener constructor(
return this
}
fun visibility(visibilityValidator: SWValidator): SWEventListener {
this.visibilityValidator = visibilityValidator
return this
}
@SuppressLint("SetTextI18n")
override fun generateDialog(layout: LinearLayout) {
val context = layout.context
@ -51,4 +57,8 @@ class SWEventListener constructor(
textView?.text = (if (textLabel != 0) resourceHelper.gs(textLabel) else "") + " " + status
layout.addView(textView)
}
override fun processVisibility() {
if (visibilityValidator != null && !visibilityValidator!!.isValid) textView?.visibility = View.GONE else textView?.visibility = View.VISIBLE
}
}

View file

@ -16,13 +16,14 @@ import info.nightscout.androidaps.events.EventPumpStatusChanged
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientStatus
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange
import info.nightscout.androidaps.setupwizard.elements.SWItem
import info.nightscout.androidaps.setupwizard.events.EventSWUpdate
import info.nightscout.androidaps.utils.AndroidPermission
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.locale.LocaleHelper.update
import info.nightscout.androidaps.utils.alertDialogs.OKDialog.show
import info.nightscout.androidaps.utils.alertDialogs.OKDialog.showConfirmation
import info.nightscout.androidaps.utils.locale.LocaleHelper.update
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
import io.reactivex.android.schedulers.AndroidSchedulers
@ -81,6 +82,11 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ updateButtons() }) { fabricPrivacy.logException(it) }
)
disposable.add(rxBus
.toObservable(EventRileyLinkDeviceStatusChange::class.java)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ updateButtons() }) { fabricPrivacy.logException(it) }
)
disposable.add(rxBus
.toObservable(EventNSClientStatus::class.java)
.observeOn(AndroidSchedulers.mainThread())
@ -104,6 +110,7 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
updateButtons()
}) { fabricPrivacy.logException(it) }
)
updateButtons()
}
private fun generateLayout() {
@ -172,7 +179,7 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
finish()
}
@Suppress("UNUSED_PARAMETER","SameParameterValue")
@Suppress("UNUSED_PARAMETER", "SameParameterValue")
private fun nextPage(view: View?): Int {
var page = currentWizardPage + 1
while (page < screens.size) {
@ -182,7 +189,7 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
return min(currentWizardPage, screens.size - 1)
}
@Suppress("UNUSED_PARAMETER","SameParameterValue")
@Suppress("UNUSED_PARAMETER", "SameParameterValue")
private fun previousPage(view: View?): Int {
var page = currentWizardPage - 1
while (page >= 0) {

View file

@ -2,7 +2,6 @@ package info.nightscout.androidaps.utils
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
@ -13,6 +12,7 @@ import android.os.PowerManager
import android.provider.Settings
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.interfaces.PluginType
@ -46,7 +46,7 @@ class AndroidPermission @Inject constructor(
private var permission_battery_optimization_failed = false
@SuppressLint("BatteryLife")
private fun askForPermission(activity: Activity, permission: Array<String>, requestCode: Int) {
private fun askForPermission(activity: FragmentActivity, permission: Array<String>, requestCode: Int) {
var test = false
var testBattery = false
for (s in permission) {
@ -73,7 +73,7 @@ class AndroidPermission @Inject constructor(
}
}
fun askForPermission(activity: Activity, permission: String, requestCode: Int) {
fun askForPermission(activity: FragmentActivity, permission: String, requestCode: Int) {
val permissions = arrayOf(permission)
askForPermission(activity, permissions, requestCode)
}
@ -91,7 +91,7 @@ class AndroidPermission @Inject constructor(
}
@Synchronized
fun notifyForSMSPermissions(activity: Activity, smsCommunicatorPlugin: SmsCommunicatorPlugin) {
fun notifyForSMSPermissions(activity: FragmentActivity, smsCommunicatorPlugin: SmsCommunicatorPlugin) {
if (smsCommunicatorPlugin.isEnabled(PluginType.GENERAL)) {
if (permissionNotGranted(activity, Manifest.permission.RECEIVE_SMS)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_SMS, resourceHelper.gs(R.string.smscommunicator_missingsmspermission), Notification.URGENT)
@ -114,7 +114,7 @@ class AndroidPermission @Inject constructor(
}
@Synchronized
fun notifyForBatteryOptimizationPermission(activity: Activity) {
fun notifyForBatteryOptimizationPermission(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_BATTERY, String.format(resourceHelper.gs(R.string.needwhitelisting), resourceHelper.gs(R.string.app_name)), Notification.URGENT)
notification.action(R.string.request, Runnable { askForPermission(activity, arrayOf(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS), CASE_BATTERY) })
@ -122,7 +122,7 @@ class AndroidPermission @Inject constructor(
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_BATTERY))
}
@Synchronized fun notifyForStoragePermission(activity: Activity) {
@Synchronized fun notifyForStoragePermission(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_STORAGE, resourceHelper.gs(R.string.needstoragepermission), Notification.URGENT)
notification.action(R.string.request, Runnable {
@ -133,7 +133,7 @@ class AndroidPermission @Inject constructor(
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_STORAGE))
}
@Synchronized fun notifyForLocationPermissions(activity: Activity) {
@Synchronized fun notifyForLocationPermissions(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.ACCESS_FINE_LOCATION)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_LOCATION, resourceHelper.gs(R.string.needlocationpermission), Notification.URGENT)
notification.action(R.string.request, Runnable { askForPermission(activity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), CASE_LOCATION) })
@ -141,7 +141,7 @@ class AndroidPermission @Inject constructor(
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_LOCATION))
}
@Synchronized fun notifyForSystemWindowPermissions(activity: Activity) {
@Synchronized fun notifyForSystemWindowPermissions(activity: FragmentActivity) {
// Check if Android Q or higher
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
if (!Settings.canDrawOverlays(activity)) {

View file

@ -66,7 +66,7 @@ object PrefImportSummaryDialog {
rowLayout.setOnClickListener {
val msg = "[${context.getString(metaKey.label)}] ${metaEntry.info}"
when (metaEntry.status) {
PrefsStatus.WARN -> ToastUtils.Long.warnToast(context, msg)
PrefsStatus.WARN -> ToastUtils.Long.warnToast(context, msg)
PrefsStatus.ERROR -> ToastUtils.Long.errorToast(context, msg)
else -> ToastUtils.Long.infoToast(context, msg)
}
@ -132,6 +132,9 @@ object PrefImportSummaryDialog {
}
val dialog = builder.show()
val textView = dialog.findViewById<View>(android.R.id.message) as TextView?
textView?.textSize = 12f
textView?.setPadding(10,0,0,0)
dialog.setCanceledOnTouchOutside(false)
}

View file

@ -25,7 +25,7 @@ class BuildHelper @Inject constructor(private val config: Config) {
if (!config.APS) true else engineeringMode || !devBranch
fun isEngineeringMode(): Boolean =
if (!config.APS) true else engineeringMode || !devBranch
engineeringMode
fun isDev(): Boolean = devBranch
}

View file

@ -31,7 +31,7 @@
android:layout_weight="1"
android:text="@string/exit"
android:onClick="exitPressed"
android:textAppearance="@android:style/TextAppearance.Material.Medium"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textStyle="bold" />
</LinearLayout>

View file

@ -36,7 +36,7 @@
android:id="@+id/automation_action_image"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_action_orange_48dp" />
app:srcCompat="@drawable/ic_action_orange_48dp" />
<TextView
android:id="@+id/automation_viewActionTitle"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/action"
android:src="@drawable/ic_action_orange_48dp" />
app:srcCompat="@drawable/ic_action_orange_48dp" />
<TextView
android:id="@+id/automation_actionTitle"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/please_choose_an_action_type"
android:src="@drawable/ic_action_orange_48dp" />
app:srcCompat="@drawable/ic_action_orange_48dp" />
<TextView
android:id="@+id/actions_care_title"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/please_choose_a_trigger_type"
android:src="@drawable/ic_trigger_green_48dp" />
app:srcCompat="@drawable/ic_trigger_green_48dp" />
<TextView
android:id="@+id/actions_care_title"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/triggers"
android:src="@drawable/ic_trigger_green_48dp" />
app:srcCompat="@drawable/ic_trigger_green_48dp" />
<TextView
android:id="@+id/automation_actionTitle"

View file

@ -26,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/automation"
android:src="@drawable/ic_action_orange_48dp" />
app:srcCompat="@drawable/ic_action_orange_48dp" />
<TextView
android:layout_width="match_parent"
@ -69,7 +69,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_trigger_green_48dp" />
app:srcCompat="@drawable/ic_trigger_green_48dp" />
<TextView
android:layout_width="wrap_content"
@ -132,7 +132,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_action_orange_48dp" />
app:srcCompat="@drawable/ic_action_orange_48dp" />
<TextView
android:layout_width="wrap_content"

View file

@ -42,7 +42,7 @@
android:layout_alignParentEnd="true"
android:contentDescription="@string/reorder_label"
android:orientation="horizontal"
android:src="@drawable/ic_reorder_gray_24dp" />
app:srcCompat="@drawable/ic_reorder_gray_24dp" />
<LinearLayout
android:id="@+id/iconLayout"

View file

@ -40,7 +40,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_flat" />
card_view:srcCompat="@drawable/ic_flat" />
<TextView
android:id="@+id/ns_sign"

View file

@ -52,7 +52,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:background="?android:selectableItemBackgroundBorderless"
android:background="?attr/selectableItemBackgroundBorderless"
app:srcCompat="@drawable/ic_settings" />
<CheckBox

View file

@ -12,7 +12,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/event_time_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />

View file

@ -1,30 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="10dp">
android:layout_height="wrap_content">
<TableLayout
android:id="@+id/summary_table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:stretchColumns="2" />
<androidx.core.widget.NestedScrollView
android:id="@+id/scroll_content_frame"
android:layout_width="match_parent"
android:layout_height="210dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="10dp">
<Button
android:id="@+id/summary_details_btn"
style="?android:attr/buttonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="3dp"
android:text="@string/check_preferences_details_btn"
android:textColor="@color/colorTreatmentButton"
android:visibility="gone" />
<TableLayout
android:id="@+id/summary_table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:stretchColumns="2" />
</LinearLayout>
<Button
android:id="@+id/summary_details_btn"
style="?android:attr/buttonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="bottom"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="3dp"
android:text="@string/check_preferences_details_btn"
android:textColor="@color/colorTreatmentButton"
android:visibility="gone" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp">
android:padding="10dp">
<TextView
android:id="@+id/password_prompt_title"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -26,7 +27,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/overview_calibration"
android:src="@drawable/ic_calibration" />
app:srcCompat="@drawable/ic_calibration" />
<TextView
android:id="@+id/actions_care_title"
@ -63,7 +64,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/treatments_wizard_bg_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/carbs"
android:src="@drawable/ic_cp_bolus_carbs" />
app:srcCompat="@drawable/ic_cp_bolus_carbs" />
<TextView
android:layout_width="match_parent"
@ -86,7 +87,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/time_offset"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
@ -119,7 +120,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_duration_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -152,7 +153,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/overview_carbs_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -26,7 +27,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/careportal_profileswitch"
android:src="@drawable/ic_actions_profileswitch" />
app:srcCompat="@drawable/ic_actions_profileswitch" />
<TextView
android:id="@+id/actions_care_title"
@ -91,7 +92,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/treatments_wizard_bg_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -126,7 +127,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_duration_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/virtualpump_extendedbolus_label"
android:src="@drawable/ic_actions_startextbolus" />
app:srcCompat="@drawable/ic_actions_startextbolus" />
<TextView
android:layout_width="match_parent"
@ -58,7 +59,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/overview_insulin_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -91,7 +92,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_duration_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/primefill"
android:src="@drawable/ic_cp_pump_canula" />
app:srcCompat="@drawable/ic_cp_pump_canula" />
<TextView
android:layout_width="match_parent"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/overview_insulin_label"
android:src="@drawable/ic_bolus" />
app:srcCompat="@drawable/ic_bolus" />
<TextView
android:layout_width="match_parent"
@ -81,7 +82,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/time"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -114,7 +115,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/overview_insulin_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/careportal_profileswitch"
android:src="@drawable/ic_actions_profileswitch" />
app:srcCompat="@drawable/ic_actions_profileswitch" />
<TextView
android:layout_width="match_parent"
@ -59,7 +60,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_duration_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
@ -92,7 +93,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_profile_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<Spinner
@ -117,7 +118,7 @@
android:width="120dp"
android:padding="10dp"
android:text=""
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<Button
@ -151,7 +152,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_percentage_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -184,7 +185,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_timeshift_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/tempbasal_label"
android:src="@drawable/ic_cp_basal_start" />
app:srcCompat="@drawable/ic_cp_basal_start" />
<TextView
android:layout_width="match_parent"
@ -59,7 +60,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/basal_rate"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -93,7 +94,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/basal_rate"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -126,7 +127,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_duration_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/careportal_temporarytarget"
android:src="@drawable/ic_actions_temptarget" />
app:srcCompat="@drawable/ic_actions_temptarget" />
<TextView
android:layout_width="match_parent"
@ -59,7 +60,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/reason"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<Spinner
@ -82,7 +83,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/target_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -117,7 +118,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_duration_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/overview_treatment_label"
android:src="@drawable/ic_bolus" />
app:srcCompat="@drawable/ic_bolus" />
<TextView
android:layout_width="match_parent"
@ -73,7 +74,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/overview_insulin_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -106,7 +107,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/overview_carbs_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:contentDescription="@string/boluswizard"
android:src="@drawable/ic_calculator" />
app:srcCompat="@drawable/ic_calculator" />
<TextView
android:layout_width="match_parent"
@ -62,7 +63,7 @@
android:layout_weight="1"
android:padding="10dp"
android:text="@string/treatments_wizard_bg_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -92,7 +93,7 @@
android:layout_weight="1"
android:padding="10dp"
android:text="@string/treatments_wizard_carbs_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -123,7 +124,7 @@
android:layout_weight="1"
android:padding="10dp"
android:text="@string/treatments_wizard_correction_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -153,7 +154,7 @@
android:layout_weight="1"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_carbtime_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
@ -186,7 +187,7 @@
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_profile_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<Spinner
@ -252,7 +253,7 @@
android:labelFor="@+id/treatment_wizard_notes"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_notes_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<EditText
@ -289,7 +290,7 @@
android:layout_height="wrap_content"
android:contentDescription="@string/show_calculation"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_visibility" />
app:srcCompat="@drawable/ic_visibility" />
<Button
android:id="@+id/cancel"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/carbs"
android:src="@drawable/ic_calculator" />
app:srcCompat="@drawable/ic_calculator" />
<TextView
android:layout_width="match_parent"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
@ -10,7 +11,7 @@
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="4dp"
android:src="@drawable/ic_toast_check" />
app:srcCompat="@drawable/ic_toast_check" />
<ImageView
android:id="@+id/summary_icon"
@ -19,7 +20,7 @@
android:layout_marginTop="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp"
android:src="@drawable/ic_meta_format"
app:srcCompat="@drawable/ic_meta_format"
android:tint="#ffffff" />
<TextView

View file

@ -1,4 +1,5 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -63,7 +64,7 @@
android:layout_gravity="center_vertical"
android:layout_marginStart="15dp"
android:contentDescription="@string/addnew"
android:src="@drawable/ic_add" />
app:srcCompat="@drawable/ic_add" />
<ImageView
android:id="@+id/localprofile_profile_clone"
@ -72,7 +73,7 @@
android:layout_gravity="center_vertical"
android:layout_marginStart="15dp"
android:contentDescription="@string/clone_label"
android:src="@drawable/ic_clone" />
app:srcCompat="@drawable/ic_clone" />
<ImageView
android:id="@+id/localprofile_profile_remove"
@ -83,7 +84,7 @@
android:contentDescription="@string/remove_label"
android:scaleX="1"
android:scaleY="1"
android:src="@drawable/ic_remove" />
app:srcCompat="@drawable/ic_remove" />
</LinearLayout>

View file

@ -28,7 +28,7 @@
android:layout_marginTop="4dp"
android:layout_marginEnd="6dp"
android:layout_marginBottom="1dp"
android:src="@drawable/ic_meta_format"
card_view:srcCompat="@drawable/ic_meta_format"
android:tint="@color/importListFileName" />
<TextView
@ -89,7 +89,7 @@
android:layout_marginTop="1dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="1dp"
android:src="@drawable/ic_meta_name"
card_view:srcCompat="@drawable/ic_meta_name"
android:tint="@color/importListAdditionalInfo" />
<TextView
@ -121,7 +121,7 @@
android:layout_marginTop="1dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="1dp"
android:src="@drawable/ic_meta_date"
card_view:srcCompat="@drawable/ic_meta_date"
android:tint="@color/importListAdditionalInfo" />
<TextView

View file

@ -13,7 +13,7 @@
android:width="120dp"
android:padding="10dp"
android:text="@string/careportal_newnstreatment_notes_label"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<EditText

View file

@ -18,7 +18,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_buttontext"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<EditText
android:id="@+id/overview_editquickwizard_button_edit"
@ -31,7 +31,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_carbs"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<EditText
android:id="@+id/overview_editquickwizard_carbs_edit"
@ -44,7 +44,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_valid"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<LinearLayout
android:layout_width="match_parent"
@ -70,7 +70,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_usebg"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/overview_editquickwizard_usebg_spinner"
@ -82,7 +82,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_usebolusiob"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/overview_editquickwizard_usebolusiob_spinner"
@ -94,7 +94,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_usebasaliob"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/overview_editquickwizard_usebasaliob_spinner"
@ -106,7 +106,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_usecob"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/overview_editquickwizard_usecob_spinner"
@ -118,7 +118,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_usetrend"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/overview_editquickwizard_usetrend_spinner"
@ -130,7 +130,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_usesuperbolus"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/overview_editquickwizard_usesuperbolus_spinner"
@ -142,7 +142,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overview_editquickwizard_usetemptarget"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/overview_editquickwizard_usetemptarget_spinner"

View file

@ -50,7 +50,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingTop="18dp"
android:src="@drawable/ic_flat" />
app:srcCompat="@drawable/ic_flat" />
<TextView
android:id="@+id/overview_deltashort"

View file

@ -28,7 +28,7 @@
app:layout_constraintStart_toEndOf="@+id/overview_bg"
app:layout_constraintTop_toTopOf="@+id/overview_bg"
android:paddingTop="18dp"
android:src="@drawable/ic_flat" />
app:srcCompat="@drawable/ic_flat" />
<LinearLayout
android:id="@+id/overview_deltas_llayout"
@ -121,7 +121,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="-4dp"
android:src="@drawable/ic_loop_closed" />
app:srcCompat="@drawable/ic_loop_closed" />
<TextView
android:id="@+id/overview_apsmode_text"
@ -150,7 +150,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_bolus" />
app:srcCompat="@drawable/ic_bolus" />
<TextView
android:id="@+id/overview_iob"
@ -208,7 +208,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_cp_basal_no_tbr" />
app:srcCompat="@drawable/ic_cp_basal_no_tbr" />
<TextView
android:id="@+id/overview_basebasal"
@ -236,7 +236,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_actions_startextbolus" />
app:srcCompat="@drawable/ic_actions_startextbolus" />
<TextView
android:id="@+id/overview_extendedbolus"
@ -265,7 +265,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_swap_vert_black_48dp_green" />
app:srcCompat="@drawable/ic_swap_vert_black_48dp_green" />
<TextView
android:id="@+id/overview_sensitivity"

View file

@ -46,7 +46,7 @@
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="Sample button text"
android:textAppearance="@android:style/TextAppearance.Material.Medium"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textStyle="normal|bold"
android:textColor="@color/cardObjectiveText" />
@ -56,7 +56,7 @@
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="36g"
android:textAppearance="@android:style/TextAppearance.Material.Medium"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/cardObjectiveText"
android:textStyle="normal|bold" />
@ -75,7 +75,7 @@
android:paddingLeft="10dp"
android:paddingRight="5dp"
android:text="@string/overview_editquickwizard_valid"
android:textAppearance="@android:style/TextAppearance.Material.Medium" />
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<TextView
android:id="@+id/overview_quickwizard_item_from"
@ -84,7 +84,7 @@
android:layout_gravity="center_vertical"
android:paddingRight="10dp"
android:text="07:45"
android:textAppearance="@android:style/TextAppearance.Material.Medium"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textStyle="normal|bold" />
<TextView
@ -99,7 +99,7 @@
android:layout_gravity="center_vertical"
android:paddingLeft="10dp"
android:text="11:45"
android:textAppearance="@android:style/TextAppearance.Material.Medium"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textStyle="normal|bold" />
</LinearLayout>

View file

@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/overview_statuslights"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_marginBottom="3dp"
android:background="?android:attr/colorControlHighlight"
android:background="?attr/colorControlHighlight"
android:orientation="horizontal"
android:paddingTop="4dp"
android:paddingBottom="4dp">
@ -18,7 +19,7 @@
android:scaleType="centerInside"
android:scaleX="2"
android:scaleY="2"
android:src="@drawable/ic_cp_age_canula" />
app:srcCompat="@drawable/ic_cp_age_canula" />
<TextView
android:id="@+id/careportal_canulaage"
@ -37,7 +38,7 @@
android:scaleType="centerInside"
android:scaleX="1.8"
android:scaleY="1.8"
android:src="@drawable/ic_cp_age_insulin" />
app:srcCompat="@drawable/ic_cp_age_insulin" />
<TextView
android:id="@+id/careportal_insulinage"
@ -63,7 +64,7 @@
android:scaleType="centerInside"
android:scaleX="2"
android:scaleY="2"
android:src="@drawable/ic_cp_age_sensor" />
app:srcCompat="@drawable/ic_cp_age_sensor" />
<TextView
android:id="@+id/careportal_sensorage"
@ -82,7 +83,7 @@
android:scaleType="centerInside"
android:scaleX="2"
android:scaleY="2"
android:src="@drawable/ic_cp_age_battery" />
app:srcCompat="@drawable/ic_cp_age_battery" />
<TextView
android:id="@+id/careportal_pbage"

View file

@ -1,4 +1,5 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
@ -37,7 +38,7 @@
android:layout_height="35dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:src="@drawable/ic_add" />
app:srcCompat="@drawable/ic_add" />
<ImageView
android:id="@+id/timelistedit_remove"
@ -45,5 +46,5 @@
android:layout_height="35dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:src="@drawable/ic_remove" />
app:srcCompat="@drawable/ic_remove" />
</LinearLayout>

View file

@ -1,4 +1,5 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
@ -37,7 +38,7 @@
android:layout_height="35dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:src="@drawable/ic_add" />
app:srcCompat="@drawable/ic_add" />
<ImageView
android:id="@+id/timelistedit_remove"
@ -45,5 +46,5 @@
android:layout_height="35dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:src="@drawable/ic_remove" />
app:srcCompat="@drawable/ic_remove" />
</LinearLayout>

View file

@ -655,7 +655,7 @@
<string name="apssetup">Konfigureer APS plugin</string>
<string name="sensitivitysetup">Konfigureer Sensitiwiteits plugin</string>
<string name="setupwizard_sensitivity_description">Sensitiwiteit plugin vir sensitiwiteit opsporing en KAB berekening. Vir meer inligting besoek:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="setupwizard_sensitivity_url">https://github.com/MilosKozak/AndroidAPS/wiki/Sensitivity-detection-and-COB</string>
<string name="diawarning">Onthou asseblief: dat nuwe insulien profiele vereis DIA van minstens 5h. DIA 5 6h op nuwe profiel is gelyk aan DIA 3h op ou insulien profiele.</string>
<string name="bgsourcesetup">Konfigureer BG bron</string>
<string name="setupwizard_profile_description">Kies asseblief bron van profiel. As Pasiënt \'n kind is gebruik NS profiel. As niemand jou volg op Nightscout sal jy waarskynlik plaaslike profiel kies. Onthou asseblief dat jy net die bron kies van profiel. Om dit te gebruik moet jy dit aktiveer deur uitvoering \"Profiel skakelaar\"</string>

View file

@ -21,6 +21,7 @@
<string name="description_food">Показва въведените в Nightscout храни</string>
<string name="description_insulin_rapid">Действие на инсулините Humalog и NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Действие на инсулин Fiasp</string>
<string name="description_insulin_lyumjev">Действие на инсулин Lyumjev</string>
<string name="description_insulin_free_peak">Позволява да зададете сами пика на инсулиновата активност (не използвайте, ако сте нови потребители)</string>
<string name="description_loop">Включва или изключва затворения кръг (loop).</string>
<string name="description_ns_client">Синхронизира локалните данни с Nightscout</string>
@ -535,6 +536,7 @@
<string name="free_peak_oref">Със свободен пик по Oref</string>
<string name="rapid_acting_oref">Бързодействащ по Oref</string>
<string name="ultrarapid_oref">Ултра бързодействащ по Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="dia_too_short">DIA от %1$f е твърде кратка - използвай %2$f вместо това!</string>
<string name="activate_profile">Активирай профила</string>
<string name="invalid">НЕВАЛИДНО</string>
@ -797,6 +799,8 @@
<string name="bgsourcesetup">Конфигуриране на източник на КЗ</string>
<string name="setupwizard_profile_description">Моля изберете вид профил. Ако пациентът е дете, трябва да използвате NS профил. Ако никой освен Вас не ви проследява в Nightscout вероятно ще предпочетете Локален профил. Моля, не забравяйте, че тук само избирате източника на профил. За да го използвате трябва да го активирате с натискане на \"Смяна на профила\"</string>
<string name="setupwizard_aps_description">Изберете един от наличните алгоритми. Те са подредени от най-стария до най-новия. По-новите алгоритми са обикновено по-мощни и по-агресивни. Така ако сте новак в APS системите може да започнете с AMA. Не забравяйте да прочетете документацията на OpenAPS и да го конфигурирате преди употреба.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Изчакване на RileyLink връзка…\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Заб:</b> Можете да продължите след като помпата се инициализира.\n</string>
<string name="startobjective">Започнете първа цел</string>
<string name="permission">Разрешение</string>
<string name="askforpermission">Питане за разрешение</string>
@ -1213,4 +1217,5 @@
<string name="only_upload_if_charging">Качване само при зареждане</string>
<string name="worker_state">Статус: %s</string>
<string name="uploaded_data">Качени данни</string>
<string name="the_following_data_will_be_uploaded_to_your_open_humans_account">Следните данни ще бъдат качвани във вашия Open Humans акаунт: Глюкозни стойности, болуси, въглехидрати, удължени болуси, профилни смени, общи дневни дози, временни базали, временни цели, предпочитания, версия на AAPS, модел на телефона и размери на екрана. Тайна или лична информация, като например вашия адрес на Nightscout или API, няма да бъдат качени.</string>
</resources>

View file

@ -21,6 +21,7 @@
<string name="description_food">Zobrazení jídel definovaných v NS</string>
<string name="description_insulin_rapid">Předvolba pro Novorapid</string>
<string name="description_insulin_ultra_rapid">Předvolba pro Fiasp</string>
<string name="description_insulin_lyumjev">Předvolba pro Lyumjev</string>
<string name="description_insulin_free_peak">Možnost definice vrcholu účinnosti inzulínu pro pokročilé uživatele</string>
<string name="description_loop">Povolení nebo zakázání smyčky.</string>
<string name="description_ns_client">Synchronizace dat s NS</string>
@ -535,6 +536,7 @@
<string name="free_peak_oref">Volitelný vrchol - Oref</string>
<string name="rapid_acting_oref">Rychle působící - Oref</string>
<string name="ultrarapid_oref">Ultra rychlý - Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="dia_too_short">DIA %1$f je příliš krátké - použito %2$f !</string>
<string name="activate_profile">Aktivovat profil</string>
<string name="invalid">NEPLATNÝ</string>
@ -797,6 +799,8 @@
<string name="bgsourcesetup">Konfigurace zdroje glykémií</string>
<string name="setupwizard_profile_description">Vyberte zdroj profilů. Pokud jde o dítě, využijte nejspíše NS profil. Pokud Vás nikdo přes NS nesleduje, budete patrně preferovat Místní profil. Uvědomte si, že nastavujete pouze zdroj profilů. Na to aby se opravdu profil začal používat, je třeba provést aktivaci profilu použitím \"Přepnutí profilu\"</string>
<string name="setupwizard_aps_description">Vyberte jeden z algoritmů. Jsou setříděné od nejstaršího po nejnovější. Novější je obvykle lepší a agresivnější, ale vyžaduje přesnější nastavení. Proto pokud se smyčkou začínáte, měli byste nejdříve vybrat jen AMA a ne ten poslední. Nezapomeňte si přečíst dokumentaci k OpenAPS a provést nastavení, než ho začnete používat.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Čekám na připojení RileyLink.... \n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Poznámka:</b> Po inicializaci pumpy můžete pokračovat v nastavení.\n</string>
<string name="startobjective">Spusťte první cíl</string>
<string name="permission">Povolení</string>
<string name="askforpermission">Získat povolení</string>
@ -986,6 +990,7 @@
<string name="storage">omezení vnitřního úložiště</string>
<string name="diskfull">Uvolněte alespoň %1$d MB z vnitřního úložiště! Smyčka zakázána!</string>
<string name="wrongformat">Chybný formát</string>
<string name="wrongTbrDuration">Trvání dočasného bazálu musí být násobkem %1$d minut a musí být větší než 0.</string>
<string name="sms_wrongcode">Nesprávný kód. Příkaz zrušen.</string>
<string name="notconfigured">Není nakonfigurováno</string>
<string name="profileswitchcreated">Přepnutí profilu vytvořeno</string>
@ -1214,4 +1219,5 @@
<string name="worker_state">Stav procesu: %s</string>
<string name="uploaded_data">Odeslaná data</string>
<string name="the_following_data_will_be_uploaded_to_your_open_humans_account">Následující data budou nahrána do vašeho účtu Open Humans: hodnoty glykémie, bolusy, sacharidy, události péče (kromě poznámek), rozložené bolusy, přepnutí profilu, celkové denní dávky, dočasné bazály, nastavení, verze aplikace, model zařízení a rozměry obrazovky. Tajné nebo soukromé informace, jako je URL nebo API heslo vašeho Nightscoutu, nahrány nebudou.</string>
<string name="setupwizard_pump_riley_link_status">Status RileyLink:</string>
</resources>

View file

@ -21,6 +21,7 @@
<string name="description_food">Zeigt die Essensvorlagen aus Nightscout an</string>
<string name="description_insulin_rapid">Insulinprofil für Humalog und NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Insulinprofil für Fiasp</string>
<string name="description_insulin_lyumjev">Insulin-Voreinstellung für Lyumjev</string>
<string name="description_insulin_free_peak">Erlaubt dir, das Wirkmaximum der Insulinaktivität zu definieren, und sollte nur von erfahrenen Anwendern genutzt werden</string>
<string name="description_loop">Aktiviere oder deaktiviere die Anwendung, die den Loop ausführt.</string>
<string name="description_ns_client">Synchronisiert deine Daten mit Nightscout</string>
@ -535,6 +536,7 @@
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="dia_too_short">DIA von %1$f ist zu kurz - AAPS nutzt stattdessen %2$f!</string>
<string name="activate_profile">Aktiviere Profil</string>
<string name="invalid">Ungültig</string>
@ -797,6 +799,8 @@
<string name="bgsourcesetup">BZ-Quelle konfigurieren</string>
<string name="setupwizard_profile_description">Wähle eine Profilquelle aus. Verwende für ein Kind das NS-Profil. Wenn Dir niemand auf Nightscout folgt, wirst Du wahrscheinlich das lokale Profil bevorzugen. Beachte, dass hier nur die Profilquelle festgelegt wird. Damit das Profil verwendet werden kann, muss es mit einem \"Profil-Wechsel\" aktiviert werden.</string>
<string name="setupwizard_aps_description">Wähle einen der verfügbaren Algorithmen aus. Sie sind vom Ältesten zum Neuesten sortiert. Neuere Algorithmen sind meist stärker und aggressiver. Wenn du ein Anfänger bist, solltest du nicht mit dem Neuesten sondern mit AMA starten. Vergiss nicht, die OpenAPS-Dokumentation zu lesen und die entsprechenden Einstellungen vor der Benutzung vorzunehmen.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Warte auf Verbindung mit RileyLink…\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Hinweis:</b> Du kannst das Setup fortsetzen, sobald die Pumpe initialisiert wurde.\n</string>
<string name="startobjective">Starte deine erste Zielsetzung</string>
<string name="permission">Berechtigung</string>
<string name="askforpermission">Nach Berechtigung fragen</string>
@ -819,7 +823,7 @@
<string name="high_temptarget_raises_sensitivity_summary"><![CDATA[Erhöhe die Sensitivität für temporäre Ziele >= 100.]]></string>
<string name="low_temptarget_lowers_sensitivity_title">Niedrige temporäre Ziele senken die Sensitivität</string>
<string name="low_temptarget_lowers_sensitivity_summary"><![CDATA[Senke die Sensitivität für temporäre Ziele < 100.]]></string>
<string name="resistance_lowers_target_title">Resistenz senkt Zielwert</string>
<string name="resistance_lowers_target_title">Resistenz senkt den Zielwert</string>
<string name="resistance_lowers_target_summary">Wenn Resistenz festgestellt wird, senke den Glukose-Zielwert</string>
<string name="sensitivity_raises_target_title">Empfindlichkeit erhöht den Zielwert</string>
<string name="sensitivity_raises_target_summary">Wenn eine höhere Empfindlichkeit festgestellt wird, wird der Glukose-Zielwert erhöht.</string>
@ -987,6 +991,7 @@ Unerwartetes Verhalten.</string>
<string name="storage">interne Speicherbegrenzung</string>
<string name="diskfull">Mindestens %1$d MB freier interer Speicher benötigt! Loop abgeschaltet!</string>
<string name="wrongformat">Falsches Format</string>
<string name="wrongTbrDuration">Die TBR-Dauer muss ein Vielfaches von %1$d Minuten und größer als 0 sein.</string>
<string name="sms_wrongcode">Falscher Code. Befehl wurde abgebrochen.</string>
<string name="notconfigured">Nicht konfiguriert</string>
<string name="profileswitchcreated">Profilwechsel wurde erstellt</string>
@ -1152,11 +1157,14 @@ Unerwartetes Verhalten.</string>
<string name="smscommunicator_otp_reset_title">Authentifikatorschlüssel zurücksetzen</string>
<string name="smscommunicator_otp_reset_prompt">Willst Du wirklich den Authentifikatorschlüssel zurücksetzen? Dies wird alle momentan genutzten Authentifikatoren ungültig machen und Du musst sie neu einrichten.</string>
<string name="smscommunicator_otp_reset_successful">Neuer Authentifizierungsschlüssel generiert! Bitte verwende den aktualisierten QR-Code für die Bereitstellung von Authentifikatoren.</string>
<string name="smscommunicator_otp_export_title">OTP-Secret exportieren</string>
<string name="smscommunicator_otp_export_prompt">Willst Du wirklich das OTP Secret in die Zwischenablage kopieren?\n\nDas ist nur erforderlich, wenn Deine Authentifizierungs-App Probleme mit dem Scannen des QR-Codes hat. Du kannst es auch manuell eingeben oder einen Hardware-OTP-Token mit einer bestimmten App verwenden.</string>
<string name="smscommunicator_otp_export_successful">OTP Secret (im Base32 Format) exportiert und in die Zwischenablage kopiert. Setze es von dort in Deine Authentifizierungs-App ein.</string>
<string name="smscommunicator_otp_step1_install_header">1. Authentifikator installieren</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Scanne den Code zum Einrichten von AndroidAPS OTP-Codes</string>
<string name="smscommunicator_otp_step3_test_header">3. Teste das Einmal-Passwort</string>
<string name="smscommunicator_otp_reset_header">Authentifikators zurücksetzen</string>
<string name="smscommunicator_otp_install_info">Installiere auf jedem Folloer-Phone eine Authenticator-App, die RFC 6238 TOTP-Token unterstützt. Beliebte kostenlose Apps sind:\n Authy\n Google Authenticator\n LastPass Authenticator\n FreeOTP Authenticator</string>
<string name="smscommunicator_otp_install_info">Installiere auf jedem Follower-Phone eine Authenticator-App, die RFC 6238 TOTP-Token unterstützt. Beliebte kostenlose Apps sind:\n Authy\n Google Authenticator\n LastPass Authenticator\n FreeOTP Authenticator</string>
<string name="smscommunicator_otp_provisioning_warning">Diesen Code NICHT ONLINE TEILEN!\nVerwende ihn nur zur Einrichtung der Authenticator App auf den Follower-Phones.</string>
<string name="smscommunicator_otp_reset_warning">Wenn Du den Authentifikator zurücksetzt werden alle bestehenden Authentifikatoren ungültig. Du musst sie dann neu einrichten!</string>
<string name="onconnect">Beim Verbinden</string>
@ -1193,7 +1201,7 @@ Unerwartetes Verhalten.</string>
<string name="your_phone_is_upload_data">Dein Telefon lädt nun Daten zu Open Human hoch.</string>
<string name="setup_failed">Einrichtung fehlgeschlagen</string>
<string name="there_was_an_error">Es gab einen Fehler. Bitte logge Dich erneut ein, um fortzufahren. Entschuldigung &amp; Danke!</string>
<string name="open_humans_terms">Dies ist ein Open-Source-Tool, das Deine Daten nach Open Humans kopiert. Wir behalten uns keine Rechte vor, Deine Daten ohne Deine ausdrückliche Genehmigung an Dritte weiterzugeben. Die Daten, die das Projekt und die Anwendung erhalten, werden über eine zufällige Benutzer-ID identifiziert und nur dann sicher auf ein Open Humans-Konto übertragen, wenn Du diesem Vorgang zugestimmt habst. Du kannst das Hochladen beenden und Deine hochgeladenen Daten jederzeit über www.openhumans.org löschen.</string>
<string name="open_humans_terms">Dies ist ein Open-Source-Tool, das Deine Daten zu Open Humans hochlädt. Wir behalten uns keine Rechte vor, Deine Daten ohne Deine ausdrückliche Genehmigung an Dritte weiterzugeben. Die Daten, die das Projekt und die Anwendung erhalten, werden über eine zufällige Benutzer-ID identifiziert und nur nach Deiner Zustimmung sicher auf ein Open Humans-Konto übertragen. Du kannst das Hochladen beenden und Deine hochgeladenen Daten jederzeit über www.openhumans.org löschen.</string>
<string name="i_understand_and_agree">Verstanden und akzeptiert. </string>
<string name="login">Login</string>
<string name="logout">Logout</string>
@ -1215,4 +1223,5 @@ Unerwartetes Verhalten.</string>
<string name="worker_state">Worker State: %s</string>
<string name="uploaded_data">Daten hochgeladen</string>
<string name="the_following_data_will_be_uploaded_to_your_open_humans_account">Die folgenden Daten werden auf Dein Open Humans-Konto hochgeladen: Glukosewerte, Boli, Kohlenhydrate, Careportal-Ereignisse (außer Notizen), erweiterte Boli, Profilwechsel, Gesamttagesdosen, temporäre Basalwerte, Temporäre Ziele, Einstellungen, Anwendungsversion, Gerätemodell und Bildschirmabmessungen. Vertrauliche oder private Informationen wie z.B. Deine Nightscout-URL oder Dein API-Secret werden nicht hochgeladen.</string>
<string name="setupwizard_pump_riley_link_status">RileyLink Status:</string>
</resources>

View file

@ -21,6 +21,7 @@
<string name="description_food">Affiche les aliments définis par défaut dans Nightscout</string>
<string name="description_insulin_rapid">Réglages pour les insulines Humalog et NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Réglages pour l\'insuline Fiasp</string>
<string name="description_insulin_lyumjev">Réglages pour l\'insuline Lyumjev</string>
<string name="description_insulin_free_peak">Permet de définir le pic de lactivité de linsuline et ne doit être utilisé que par les utilisateurs avancés</string>
<string name="description_loop">Activer ou désactiver la mise en œuvre déclenchant la Boucle.</string>
<string name="description_ns_client">Synchronise vos données avec Nightscout</string>
@ -228,13 +229,13 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="smscommunicator">Communicateur SMS</string>
<string name="smscommunicator_allowednumbers">Numéros de tél autorisés</string>
<string name="smscommunicator_allowednumbers_summary">+XXXXXXXXXX;+YYYYYYYYYY</string>
<string name="smscommunicator_bolusreplywithcode">Renvoyer le code %2$s pour injecter le bolus %1$.2fU</string>
<string name="smscommunicator_mealbolusreplywithcode">Pour injecter le bolus repas de %1$.2fU renvoyer le code %2$s</string>
<string name="smscommunicator_temptargetwithcode">Pour définir la Cible Temp %1$s renvoyer le code %2$s</string>
<string name="smscommunicator_temptargetcancel">Pour annuler la Cible Temp renvoyer le code %1$s</string>
<string name="smscommunicator_stopsmswithcode">Pour désactiver les commandes à distance SMS renvoyer le code %1$s.\n\nGardez à l\'esprit que vous ne pourrez le réactiver que directement à partir de l\'application AAPS du smartphone maître.</string>
<string name="smscommunicator_bolusreplywithcode">Pour injecter le bolus de %1$.2f U, renvoyez le code %2$s</string>
<string name="smscommunicator_mealbolusreplywithcode">Pour injecter le bolus repas de %1$.2f U, renvoyez le code %2$s</string>
<string name="smscommunicator_temptargetwithcode">Pour définir la cible temp %1$s, renvoyez le code %2$s</string>
<string name="smscommunicator_temptargetcancel">Pour annuler la cible temp, renvoyez le code %1$s</string>
<string name="smscommunicator_stopsmswithcode">Pour désactiver les commandes à distance SMS, renvoyez le code %1$s.\n\nGardez à l\'esprit que vous ne pourrez le réactiver que directement à partir de l\'application AAPS du smartphone maître.</string>
<string name="smscommunicator_stoppedsms">Service de commande à distance SMS arrêté. Pour le réactiver, utilisez AAPS sur le smartphone maître.</string>
<string name="smscommunicator_calibrationreplywithcode">Renvoyer le code %2$s pour envoyer la calibration %1$.2f</string>
<string name="smscommunicator_calibrationreplywithcode">Pour envoyer la calibration %1$.2f, renvoyez le code %2$s</string>
<string name="smscommunicator_bolusfailed">Échec du Bolus</string>
<string name="smscommunicator_remotebolusmindistance_summary">Nombre minimum de minutes qu\'il doit y avoir entre un bolus distant et le suivant</string>
<string name="smscommunicator_remotebolusmindistance">Combien de minutes doit-il y avoir, au minimum, entre un bolus et le suivant</string>
@ -259,22 +260,22 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="smscommunicator_loopisenabled">La Boucle est activée</string>
<string name="valuelimitedto">%1$.2f limité à %2$.2f</string>
<string name="valueoutofrange">La valeur %1$s est en dehors des limites</string>
<string name="smscommunicator_pumpconnectwithcode">Pour connecter la pompe, répondre avec le code %1$s</string>
<string name="smscommunicator_pumpconnectwithcode">Pour connecter la pompe, renvoyez le code %1$s</string>
<string name="smscommunicator_pumpconnectfail">Echec de la connexion pompe</string>
<string name="smscommunicator_pumpdisconnectwithcode">Pour déconnecter la pompe pendant %1d minutes, répondre avec le code %2$s</string>
<string name="smscommunicator_pumpdisconnectwithcode">Pour déconnecter la pompe pendant %1d min, renvoyez le code %2$s</string>
<string name="smscommunicator_pumpdisconnected">Pompe déconnectée</string>
<string name="smscommunicator_reconnect">Pompe reconnectée</string>
<string name="smscommunicator_remotecommandnotallowed">La commande à distance n\'est pas autorisée</string>
<string name="smscommunicator_remotebolusnotallowed">Bolus à distance non disponible. Réessayez plus tard.</string>
<string name="smscommunicator_basalreplywithcode">Pour démarrer la basal de %1$.2f U/h pendant %2$d min, renvoyer le code %3$s</string>
<string name="smscommunicator_profilereplywithcode">Pour changer le profil vers %1$s %2$d%%, renvoyer le code %3$s</string>
<string name="smscommunicator_extendedreplywithcode">Pour démarrer le bolus étendu de %1$.2f U/h pendant %2$d min, renvoyer le code %3$s</string>
<string name="smscommunicator_carbsreplywithcode">Pour entrer %1$dg à %2$s renvoyer le code %3$s</string>
<string name="smscommunicator_basalpctreplywithcode">Pour démarrer la Basal %1$d%% pendant %2$d min, renvoyer le code %3$s</string>
<string name="smscommunicator_suspendreplywithcode">Envoyer le code %2$s pour suspendre la Boucle pour %1$d minutes</string>
<string name="smscommunicator_loopresumereplywithcode">Pour reprendre la veuillez répondre avec le code %1$s</string>
<string name="smscommunicator_loopenablereplywithcode">Pour activer la boucle veuillez répondre avec le code %1$s</string>
<string name="smscommunicator_loopdisablereplywithcode">Pour désactiver la boucle veuillez répondre avec le code %1$s</string>
<string name="smscommunicator_basalreplywithcode">Pour démarrer la basal de %1$.2f U/h pendant %2$d min, renvoyez le code %3$s</string>
<string name="smscommunicator_profilereplywithcode">Pour changer le profil vers %1$s %2$d%%, renvoyez le code %3$s</string>
<string name="smscommunicator_extendedreplywithcode">Pour démarrer le bolus étendu de %1$.2f U/h pendant %2$d min, renvoyez le code %3$s</string>
<string name="smscommunicator_carbsreplywithcode">Pour entrer %1$dg à %2$s, renvoyez le code %3$s</string>
<string name="smscommunicator_basalpctreplywithcode">Pour démarrer la Basal %1$d%% pendant %2$d min, renvoyez le code %3$s</string>
<string name="smscommunicator_suspendreplywithcode">Pour suspendre la boucle pendant %1$d min, renvoyez le code %2$s</string>
<string name="smscommunicator_loopresumereplywithcode">Pour reprendre la boucle, renvoyez le code %1$s</string>
<string name="smscommunicator_loopenablereplywithcode">Pour activer la boucle, renvoyez le code %1$s</string>
<string name="smscommunicator_loopdisablereplywithcode">Pour désactiver la boucle, renvoyez le code %1$s</string>
<string name="smscommunicator_tempbasalset">Démarrage réussi pour %1$.2fU/h de basal temporaire pour %2$d min</string>
<string name="smscommunicator_extendedset">Le Bolus étendu %1$.2fU pendant %2$d min a commencé avec succès</string>
<string name="smscommunicator_carbsset">%1$d g de glucides entrés avec succès</string>
@ -282,15 +283,15 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="smscommunicator_tempbasalset_percent">Démarrage réussi pour %1$d%% de Basal temporaire pour %2$d min</string>
<string name="smscommunicator_tempbasalfailed">Le démarrage du basal temporaire a échoué</string>
<string name="smscommunicator_extendedfailed">Le départ du Bolus étendu a échoué</string>
<string name="smscommunicator_basalstopreplywithcode">Envoyer le code %1$s pour arrêter la Basal temporaire</string>
<string name="smscommunicator_extendedstopreplywithcode">Pour arrêter le Bolus étendu, renvoyer le code %1$s</string>
<string name="smscommunicator_basalstopreplywithcode">Pour arrêter la basal temp, renvoyez le code %1$s</string>
<string name="smscommunicator_extendedstopreplywithcode">Pour arrêter le bolus étendu, renvoyez le code %1$s</string>
<string name="smscommunicator_tempbasalcanceled">Basal temporaire annulé</string>
<string name="smscommunicator_extendedcanceled">Bolus étendu annulé</string>
<string name="smscommunicator_tempbasalcancelfailed">Echec de l\'annulation du basal temporaire</string>
<string name="smscommunicator_extendedcancelfailed">Échec de l\'annulation du Bolus étendu</string>
<string name="smscommunicator_unknowncommand">Commande inconnue ou mauvaise réponse</string>
<string name="quickwizard">Assistant Rapide</string>
<string name="quickwizardsettings">Paramètres de l\'Assistant Rapide</string>
<string name="quickwizardsettings">Assistant Rapide</string>
<string name="overview_editquickwizard_buttontext">Texte du bouton :</string>
<string name="overview_editquickwizard_carbs">Glucides:</string>
<string name="overview_editquickwizard_valid">Valide:</string>
@ -306,7 +307,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="primefill">Amorcer/Remplir</string>
<string name="fillwarning">Veuillez à ce que la quantité corresponde aux caractéristiques de votre cathéter !</string>
<string name="othersettings_title">Autres</string>
<string name="fillbolus_title">Quantité d\'insuline par défaut pour Amorcer/Remplir</string>
<string name="fillbolus_title">Insuline par défaut pour Amorcer/Remplir</string>
<string name="button1">Bouton 1</string>
<string name="button2">Bouton 2</string>
<string name="button3">Bouton 3</string>
@ -475,7 +476,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="xdripstatus">Barre d\'état pour xDrip (Montre)</string>
<string name="xdripstatus_shortname">xds</string>
<string name="wear_showbgi_title">Afficher lImpact Glycémie</string>
<string name="wear_showbgi_summary">Ajouter lIG sur la vue générale</string>
<string name="wear_showbgi_summary">Ajouter lIGly sur la vue générale</string>
<string name="ns_noupload">Pas de téléchargement vers NS</string>
<string name="ns_noupload_summary">Toutes les données envoyées à NS sont abandonnées. AAPS est connecté à NS mais aucun changement nest fait dans NS</string>
<string name="overview_extendedbolus_cancel_button">Annuler Bolus étendu</string>
@ -536,6 +537,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="free_peak_oref">Profil d\'insuline ajustable Oref</string>
<string name="rapid_acting_oref">Insuline à Action Rapide Oref </string>
<string name="ultrarapid_oref">Insuline Ultra Rapide Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="dia_too_short">Durée dAction pour %1$f trop courte - utiliser %2$f à la place !</string>
<string name="activate_profile">Activer le profil</string>
<string name="invalid">INVALIDE</string>
@ -798,6 +800,8 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="bgsourcesetup">Configurez la source des glycémies</string>
<string name="setupwizard_profile_description">Sélectionnez la source du profil. Si le patient est un enfant vous devriez utiliser un profil NS. Si personne ne vous suit sur Nightscout, vous préférerez probablement un profil local. N\'oubliez pas que vous êtes simplement en train de sélectionner la source du profil. Afin de pouvoir l\'utiliser vous devrez l\'activer via \"Changement de Profil\"</string>
<string name="setupwizard_aps_description">Sélectionnez un des algorithmes disponibles. Ils sont organisés du plus ancien au plus récent. Les algorithmes les plus récents sont habituellement plus puissants et plus agressifs. De ce fait, si vous êtes un nouvel utilisateur, vous devriez probablement démarrer avec AMA au lieu de choisir un algorithme plus récent. N\'oubliez pas de lire la documentation OpenAPS et en faire la configuration avant utilisation.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">En attente de connexion RileyLink...\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Remarque :</b> Vous pouvez continuer l\'installation une fois que la pompe a été initialisée.\n</string>
<string name="startobjective">Démarrez votre premier objectif</string>
<string name="permission">Autorisation</string>
<string name="askforpermission">Demande d\'autorisation</string>
@ -820,7 +824,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="high_temptarget_raises_sensitivity_summary"><![CDATA[Augmente la Sensibilité pour les cibles temporaires >= 100]]></string>
<string name="low_temptarget_lowers_sensitivity_title">Cible temp. basse abaisse la sensibilité</string>
<string name="low_temptarget_lowers_sensitivity_summary"><![CDATA[Diminue la Sensibilité pour les cibles temporaires < 100]]></string>
<string name="resistance_lowers_target_title">La résistance diminue la cible</string>
<string name="resistance_lowers_target_title">Résistance diminue la cible</string>
<string name="resistance_lowers_target_summary">Quand une résistance est détectée, baisse de la glycémie cible</string>
<string name="sensitivity_raises_target_title">Sensibilité augmente la cible</string>
<string name="sensitivity_raises_target_summary">Quand une sensibilité est détectée, augmentation de la glycémie cible</string>
@ -987,6 +991,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="storage">stockage interne limité</string>
<string name="diskfull">Boucle désactivée ! Libérez au moins %1$d Mo du stockage interne !</string>
<string name="wrongformat">Format incorrect</string>
<string name="wrongTbrDuration">La durée du DBT doit être un multiple de %1$d minutes et supérieure à 0.</string>
<string name="sms_wrongcode">Code incorrect. Commande annulée.</string>
<string name="notconfigured">Non configuré</string>
<string name="profileswitchcreated">Changement de profil effectué</string>
@ -1171,14 +1176,14 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="statuslights_copy_ns">Copier les paramètres depuis NS</string>
<string name="copyexistingvalues">Copier les paramètres NS (s\'ils existent)?</string>
<string name="classic_description">Thème d\'origine</string>
<string name="buttonson_description">Les boutons sont toujours affichés en bas de l\'écran</string>
<string name="buttonson_description">Boutons toujours en bas</string>
<string name="largedisplay_description">Grand écran</string>
<string name="skin">Thème</string>
<string name="comapareprofile">Comparer les profils</string>
<string name="nav_profilehelper">Assistant Profil</string>
<string name="motoldefaultprofile">Profil par défaut</string>
<string name="currentprofile">Profil actuel</string>
<string name="availableprofile">Profil disponible</string>
<string name="availableprofile">Profils disponibles</string>
<string name="profiletype">Type de profil</string>
<string name="formatwithtdd">Âge: %1$.0f DTI: %2$.0f U</string>
<string name="formatwittddandpct">Âge: %1$.0f DTI: %2$.0f U %3$d%%</string>
@ -1215,4 +1220,5 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="worker_state">État du travail : %s</string>
<string name="uploaded_data">Données transférées</string>
<string name="the_following_data_will_be_uploaded_to_your_open_humans_account">Les données suivantes seront téléchargées sur votre compte Open Humans : glycémie, bolus, glucides, événements Careportal (sauf les notes), bolus étendus, changements de profil, doses quotidiennes totales, basales temporaires, cibles temporaires, préférences, version de l\'application, modèle de l\'appareil et dimensions de l\'écran. Les informations secrètes ou privées telles que votre URL Nightscout ou votre API secret ne seront pas téléchargés.</string>
<string name="setupwizard_pump_riley_link_status">État du RileyLink :</string>
</resources>

View file

@ -21,6 +21,7 @@
<string name="description_food">Visualizza i preset dei cibi definiti in Nightscout</string>
<string name="description_insulin_rapid">Preset per insulina Humalog e NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Preset per insulina Fiasp</string>
<string name="description_insulin_lyumjev">Preset per insulina Lyumjev</string>
<string name="description_insulin_free_peak">Ti consente di definire il picco di attività dell\'insulina e deve essere utilizzato solo dagli utenti avanzati</string>
<string name="description_loop">Attiva o disattiva l\'implementazione per la gestione del loop.</string>
<string name="description_ns_client">Sincronizza i tuoi dati con Nightscout</string>
@ -535,6 +536,7 @@
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="dia_too_short">DIA di %1$f troppo breve - utilizzo %2$f.</string>
<string name="activate_profile">Attiva profilo</string>
<string name="invalid">NON VALIDO</string>
@ -797,6 +799,8 @@
<string name="bgsourcesetup">Configura sorgente BG</string>
<string name="setupwizard_profile_description">Seleziona il tipo di profilo. Se il paziente è un bambino dovresti utilizzare il profilo di NS. Se non c\'è nessuno a seguirti su Nightscout probabilmente preferirai il profilo locale. Ricorda che stai solo selezionando la sorgente del profilo. Per utilizzarlo devi attivarlo tramite l\'esecuzione del comando \"Cambio profilo\"</string>
<string name="setupwizard_aps_description">Seleziona uno degli algoritmi disponibili. Sono ordinati dal più vecchio al più recente. L\'algoritmo più recente è solitamente più potente e più aggressivo. Pertanto, se sei un nuovo utente, probabilmente dovresti iniziare con AMA e non con l\'ultimo. Non dimenticare di leggere la documentazione di OpenAPS e di configurarlo prima dell\'uso.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Attesa connessione RileyLink…\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Nota:</b> Puoi continuare la configurazione una volta che il micro è stato inizializzato.\n</string>
<string name="startobjective">Avvia il tuo primo obiettivo</string>
<string name="permission">Autorizzazione</string>
<string name="askforpermission">Chiedi l\'autorizzazione</string>
@ -986,6 +990,7 @@
<string name="storage">vincolo di archiviazione interna</string>
<string name="diskfull">Libera almeno %1$d MB dalla memoria interna! Loop disabilitato!</string>
<string name="wrongformat">Formato errato</string>
<string name="wrongTbrDuration">La durata del TBR deve essere un multiplo di %1$d minuti e maggiore di 0.</string>
<string name="sms_wrongcode">Codice errato. Comando cancellato.</string>
<string name="notconfigured">Non configurato</string>
<string name="profileswitchcreated">Cambio profilo creato</string>
@ -1214,4 +1219,5 @@
<string name="worker_state">Worker State: %s</string>
<string name="uploaded_data">Dati caricati</string>
<string name="the_following_data_will_be_uploaded_to_your_open_humans_account">I seguenti dati verranno caricati sul tuo account Open Humans: valori glicemia, boli, carboidrati, eventi portale (eccetto note), boli estesi, cambi profilo, dosi giornaliere totali (TDD), basali temporanee, target temporanei, preferenze, versione dell\'applicazione, modello del dispositivo e dimensioni dello schermo. Informazioni segrete o private come l\'URL di Nightscout o l\'API secret non verranno caricate.</string>
<string name="setupwizard_pump_riley_link_status">Stato RileyLink:</string>
</resources>

View file

@ -21,6 +21,7 @@
<string name="description_food">Rodyti maisto ruošinius iš Nightscout</string>
<string name="description_insulin_rapid">Nustatymai Humalog ir NovoRapid / NovoLog insulinams</string>
<string name="description_insulin_ultra_rapid">Nustatymai Fiasp insulinui</string>
<string name="description_insulin_lyumjev">Nustatymai Lyumjev insulinui</string>
<string name="description_insulin_free_peak">Leidžia pasirinkti insulino veikimo piką ir turėtų būti naudojama tik patyrusių vartotojų</string>
<string name="description_loop">Aktyvuoja arba deaktyvuoja Ciklo paleidimą.</string>
<string name="description_ns_client">Sinchronizuoja duomenis su Nightscout</string>
@ -535,6 +536,7 @@
<string name="free_peak_oref">Oref be piko</string>
<string name="rapid_acting_oref">Greito veikimo Oref</string>
<string name="ultrarapid_oref">Staigaus veikimo Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="dia_too_short">IVT %1$f per trumpa - bus naudojama %2$f!</string>
<string name="activate_profile">Aktyvuoti profilį</string>
<string name="invalid">KLAIDA</string>
@ -797,6 +799,8 @@
<string name="bgsourcesetup">Sukonfigūruoti KG šaltinį</string>
<string name="setupwizard_profile_description">Prašome pasirinkti profilį. Jei pacientas yra vaikas, turite naudoti NS profilį. Jei niekas neseka jūsų Nightscout platformoje, tada geriau pasirinkti Vietinį profilį. Atminkite, kad čia Jūs tik pasirenkate profilio šaltinį. Norėdami jį aktyvuoti, turite atlikti Profilio keitimą</string>
<string name="setupwizard_aps_description">Pasirinkite vieną iš esamų algoritmų. Jie yra išdėstyti nuo seniausio iki naujausio. Naujesni algoritmai yra galingesni ir agresyvesni. Taigi jei esate naujas vartotojas, geriau pradėti nuo AMA, o ne naujesnio. Nepamirškite perskaityti dokumentaciją ir sukonfigūruoti jį prieš naudojant.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Laukiama RileyLink ryšio...\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b> Pastaba:</b> sąranką galite tęsti, kai tik inicijuojama pompa.\n</string>
<string name="startobjective">Pradėti jūsų pirmąjį tikslą</string>
<string name="permission">Leidimas</string>
<string name="askforpermission">Prašyti leidimo</string>
@ -1213,4 +1217,5 @@
<string name="only_upload_if_charging">Įkelti tik akumuliatoriaus įkrovimo metu</string>
<string name="worker_state">Darbinė Būklė: %s</string>
<string name="uploaded_data">Įkelti duomenis</string>
<string name="the_following_data_will_be_uploaded_to_your_open_humans_account">Į 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.</string>
</resources>

View file

@ -21,6 +21,7 @@
<string name="description_food">Toon de instellingen voor Voeding in Nightscout</string>
<string name="description_insulin_rapid">Insuline instelling voor Humalog en NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Insuline instelling voor Fiasp</string>
<string name="description_insulin_lyumjev">Insuline instelling voor Lyumjev</string>
<string name="description_insulin_free_peak">Hiermee kan je de piek van de insulineactiviteit definiëren en deze mag alleen worden gebruikt door gevorderde gebruikers</string>
<string name="description_loop">Activeer of deactiveer de implementatie die de Loop triggert.</string>
<string name="description_ns_client">Synchroniseert je data met Nightscout</string>
@ -156,6 +157,7 @@
<string name="overview_tempbasal_button">Tijdelijk basaal</string>
<string name="overview_extendedbolus_button">Vertraagde bolus</string>
<string name="configbuilder_nightscoutversion_label">Nightscout versie:</string>
<string name="missing_carbs">Er ontbreekt %1$d g</string>
<string name="exported">Instellingen geëxporteerd</string>
<string name="export_to">Exporteer instellingen naar</string>
<string name="import_from">Importeer instellingen van</string>
@ -171,6 +173,11 @@
<string name="password_preferences_decrypt_prompt">Je wordt gevraagd om een masterwachtwoord. Daarmee worden geïmporteerde instellingen ontsleuteld.</string>
<string name="preferences_export_canceled">Exporteren geannuleerd! Instellingen zijn NIET geëxporteerd!</string>
<string name="preferences_import_canceled">Importeren geannuleerd! Instellingen zijn NIET geïmporteerd!</string>
<string name="preferences_import_impossible">Kan voorkeuren niet importeren!</string>
<string name="goto_main_try_again">Ga terug naar het hoofdscherm en probeer opnieuw.</string>
<string name="old_master_password">Oud hoofdwachtwoord</string>
<string name="different_password_used">Dit bestand is geëxporteerd en gecodeerd met een ander hoofdwachtwoord. Geef het oude hoofdwachtwoord op om het bestand te kunnen decoderen.</string>
<string name="master_password_will_be_replaced">Als gevolg van het importeren, zal het huidige hoofdwachtwoord worden vervangen door het oude hoofdwachtwoord!</string>
<string name="preferences_import_list_title">Kies bestand om te importeren</string>
<string name="check_preferences_before_import">Controleer instellingen voor het importeren:</string>
<string name="check_preferences_cannot_import">Instellingen kunnen niet worden geïmporteerd!</string>
@ -232,6 +239,10 @@
<string name="smscommunicator_remotebolusmindistance_summary">Minimum aantal minuten dat moet verstrijken tussen de ene bolus op afstand en de volgende</string>
<string name="smscommunicator_remotebolusmindistance">Hoeveel minuten er ten minste moeten verstrijken tussen de ene bolus en de volgende</string>
<string name="smscommunicator_remotebolusmindistance_caveat">Voor de veiligheid moet je ten minste 2 telefoonnummers toevoegen om deze instelling te kunnen bijwerken.</string>
<string name="bolusdelivered">Bolus van %1$.2f E succesvol toegediend</string>
<string name="bolusrequested">%1$.2f E toedienen</string>
<string name="smscommunicator_bolusdelivered">Bolus van %1$.2f E succesvol toegediend</string>
<string name="smscommunicator_mealbolusdelivered">Maaltijdbolus van %1$.2f E succesvol toegediend</string>
<string name="smscommunicator_mealbolusdelivered_tt">Streefdoel %1$s gedurende %2$d minuten</string>
<string name="smscommunicator_tt_set">Streefdoel %1$s gedurende %2$d minuten succesvol ingesteld</string>
<string name="smscommunicator_tt_canceled">Tijdelijk streefdoel is geannuleerd</string>
@ -255,7 +266,9 @@
<string name="smscommunicator_reconnect">Pomp opnieuw verbonden</string>
<string name="smscommunicator_remotecommandnotallowed">Commando\'s op afstand zijn niet toegestaan</string>
<string name="smscommunicator_remotebolusnotallowed">Bolus op afstand niet beschikbaar. Probeer het later opnieuw.</string>
<string name="smscommunicator_basalreplywithcode">Om een basaal van %1$.2f E/uur voor %2$d min te starten, antwoord met code %3$s</string>
<string name="smscommunicator_profilereplywithcode">Om naar profiel %1$s %2$d%% te wisselen antwoord met code %3$s</string>
<string name="smscommunicator_extendedreplywithcode">Om een vertraagde bolus van %1$.2f E voor %2$d min te starten, antwoord met code %3$s</string>
<string name="smscommunicator_carbsreplywithcode">Antwoord met code %3$s om %1$dg in te voeren op %2$s</string>
<string name="smscommunicator_basalpctreplywithcode">Om een basaal van %1$d%% voor %2$d min te starten antwoord met code %3$s</string>
<string name="smscommunicator_suspendreplywithcode">Om de loop te onderbreken voor %1$d minuten antwoord met de code %2$s</string>
@ -264,6 +277,7 @@
<string name="smscommunicator_loopdisablereplywithcode">Om loop uit te schakelen antwoord met code %1$s</string>
<string name="smscommunicator_tempbasalset">Tijdelijk basaal %1$.2fE/u voor %2$d minuten succesvol gestart</string>
<string name="smscommunicator_extendedset">Vertraagde bolus %1$.2fE voor %2$d minuten succesvol gestart</string>
<string name="smscommunicator_carbsset">Koolhydraten %1$d g succesvol ingevoerd</string>
<string name="smscommunicator_carbsfailed">Invoeren van %1$dg koolhydraten is mislukt</string>
<string name="smscommunicator_tempbasalset_percent">Tijdelijk basaal van %1$d%% voor %2$d minuten succesvol gestart</string>
<string name="smscommunicator_tempbasalfailed">Start tijdelijk basaal mislukt</string>
@ -522,6 +536,7 @@
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Snel-werkende Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="dia_too_short">DIA van %1$f te kort - %2$f wordt inplaats gebruikt!</string>
<string name="activate_profile">Activeer profiel</string>
<string name="invalid">Ongeldig</string>
@ -549,6 +564,7 @@
<string name="pump_unreachable">Pomp niet beschikbaar</string>
<string name="missed_bg_readings">Geen BG metingen</string>
<string name="raise_notifications_as_android_notifications">Gebruik systeem notificaties voor waarschuwingen en notificaties</string>
<string name="gradually_increase_notification_volume">Volume van notificaties en meldingen geleidelijk verhogen</string>
<string name="localalertsettings_title">Lokaal gegenereerde waarschuwingen</string>
<string name="enable_missed_bg_readings_alert">Alarm als er geen BG gegevens ontvangen zijn</string>
<string name="enable_pump_unreachable_alert">Waarschuwing bij niet bereikbare pomp</string>
@ -637,6 +653,7 @@
<string name="enablesmbwithtemptarget">Gebruik SMB met tijdelijke streefdoelen</string>
<string name="enablesmbwithtemptarget_summary">Gebruik SMB bij een actief tijdelijk streefdoel (eet binnenkort, activiteit)</string>
<string name="enablesmbwithhightemptarget">Gebruik SMB met een hoog tijdelijk streefdoel</string>
<string name="enablesmbwithhightemptarget_summary">Schakel SMB in wanneer er een hoog tijdelijk doel actief is (uitvoeren boven 100 mg/dl of 5,5 mmol/l)</string>
<string name="overview_insulin_label">Insuline</string>
<string name="overview_carbs_label">Koolhydraten</string>
<string name="overview_buttons_selection">Knoppen</string>
@ -670,6 +687,7 @@
<string name="do_not_bolus_record_only">Geen bolus toedienen enkel in behandelingen zetten</string>
<string name="category">Categorie</string>
<string name="subcategory">Subcategorie</string>
<string name="bolusrecordedonly">Bolus wordt alleen geregistreerd (niet toegediend door pomp)</string>
<string name="ns_autobackfill_summary">Automatische onbekende BGs aanvullen van NS</string>
<string name="loop_smbsetbypump_label">SMB op de pomp ingesteld</string>
<string name="overview_show_activity">Activiteit</string>
@ -781,11 +799,14 @@
<string name="bgsourcesetup">BG bron configureren</string>
<string name="setupwizard_profile_description">Kies een bron van het profiel. Als de patiënt een kind is, moet u het NS-profiel gebruiken. Als er niemand is die je volgt op Nightscout, zul je waarschijnlijk een lokaal profiel prefereren. Onthoud dat u alleen de profielbron selecteert. Om het te gebruiken, moet u het activeren door \"Profiel wisselen\" uit te voeren</string>
<string name="setupwizard_aps_description">Selecteer een van beschikbare algoritmen. Ze zijn gesorteerd van oudste naar nieuwste. Nieuwer algoritme is meestal krachtiger en agressiever. Dus als je een nieuwe looper bent, kun je waarschijnlijk beginnen met AMA en niet met de nieuwste. Vergeet niet de OpenAPS-documentatie te lezen en deze vóór gebruik te configureren.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Wachten op verbinding met RileyLink…\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Opmerking:</b> je kunt de setup voortzetten zodra de pomp geïnitialiseerd is.\n</string>
<string name="startobjective">Start je eerste Doel</string>
<string name="permission">Toestemming</string>
<string name="askforpermission">Vragen om toestemming</string>
<string name="needsystemwindowpermission">Toepassing vereist systeemvenstermachtiging voor meldingen</string>
<string name="needlocationpermission">App heeft locatie toestemming nodig voor Bluetooth scan en WiFi identificatie</string>
<string name="needstoragepermission">Applicatie heeft toestemming nodig om log bestanden op te slaan en instellingen te exporteren</string>
<string name="request">Verzoek</string>
<string name="insulinsourcesetup">Gevoeligheid plugin configureren</string>
<string name="exit">Afsluiten</string>
@ -841,6 +862,7 @@
<string name="code_compare">Worden dezelfde codes weergegeven op dit apparaat als op je pomp?</string>
<string name="insight_pairing">Insight koppelen</string>
<string name="insight_local">Accu-Chek Insight</string>
<string name="insight_delivered">%1$.2f E / %2$.2f E toegediend</string>
<string name="insight_alert_formatter">%1$s: %2$s</string>
<string name="tube_changed">Slang vervangen</string>
<string name="pump_time_updated">Pomp tijd bijgewerkt</string>
@ -898,6 +920,7 @@
<string name="short_status_extended">Vertraagd: %1$.2f / %2$.2f U gedurende %3$d min</string>
<string name="short_status_multiwave">Multiwave: %1$.2f / %2$.2f E gedurende %3$d min</string>
<string name="short_status_tdd">TDD: %1$.2f</string>
<string name="short_status_reservoir">Reservoir: %1$.2f E</string>
<string name="short_status_battery">Batt.: %1$d%%</string>
<string name="max_recovery_duration">Max. herstel duur [s]</string>
<string name="min_recovery_duration">Min. herstel duur [s]</string>
@ -967,6 +990,7 @@
<string name="storage">interne opslag bijna vol</string>
<string name="diskfull">Maak minstens %1$d MB vrij in interne opslag! Loop is uitgeschakeld!</string>
<string name="wrongformat">Verkeerde invoer</string>
<string name="wrongTbrDuration">Tijdelijk basaal duur moet een veelvoud van %1$d minuten en groter dan 0 zijn.</string>
<string name="sms_wrongcode">Verkeerde code. Opdracht geannuleerd.</string>
<string name="notconfigured">Niet ingesteld</string>
<string name="profileswitchcreated">Profiel wissel aangemaakt</string>
@ -1040,6 +1064,8 @@
<string name="sendsmsactionlabel">Stuur SMS: %1$s</string>
<string name="sendsmsactiondescription">SMS verzenden naar alle nummers</string>
<string name="sendsmsactiontext">Stuur SMS met tekst</string>
<string name="cobvsiob">COB vs IOB</string>
<string name="bolusconstraintappliedwarn">Bolusbeperking toegepast: %1$.2f E naar %2$.2f E</string>
<string name="slowabsorptiondetected"><![CDATA[<font color=\'%1$s\'>!!! Trage koolhydraat absorptie gedetecteerd: %2$d%% van de tijd. Controleer je berekening nogmaals. COB kan zijn overschat waardoor er misschien meer insuline wordt afgegeven!!!</font> zijn]]></string>
<string name="partialboluswizard">Voer dit deel van het bolus wizard resultaat uit [%]</string>
<string name="deliverpartofboluswizard">Bolus wizard voert de berekening uit maar alleen dit deel van berekende insuline wordt geleverd. Handig in combinatie met het SMB algoritme.</string>
@ -1075,6 +1101,7 @@
<string name="clone_label">Dupliceren</string>
<string name="saveorresetchangesfirst">Huidige wijzigingen eerst opslaan of ongedaan maken</string>
<string name="deletecurrentprofile">Huidige profiel verwijderen?</string>
<string name="copytolocalprofile">Nieuw lokaal profiel aanmaken van dit profiel?</string>
<string name="profilenamecontainsdot">Profielnaam bevat punten.\nDit wordt niet ondersteund door NS.\nProfiel is niet geüpload naar NS.</string>
<string name="low_mark_comment">Laagste waarde in bereik (alleen weergave)</string>
<string name="high_mark_comment">Hoogste waarde in bereik (alleen weergave)</string>
@ -1088,6 +1115,7 @@
<string name="nav_survey">Enquête</string>
<string name="invalidage">Ongeldige leeftijd invoer</string>
<string name="invalidweight">Ongeldige gewicht invoer</string>
<string name="invalidpct">Ongeldig % invoer</string>
<string name="tirformat"><![CDATA[<b>%1$s:</b> Laag: <b>%2$02d%%</b> In: <b>%3$02d%%</b> Hoog: <b>%4$02d%%</b>]]></string>
<string name="average">Gemiddelde</string>
<string name="tir">TIR</string>
@ -1114,15 +1142,23 @@
<string name="loop_tbrexecution_time_label">Tijdelijke basaal uitvoering tijd</string>
<string name="insight_alert_notification_channel">Insight pomp waarschuwingen</string>
<!-- SMS Communicator & OTP Authenticator -->
<string name="smscommunicator_code_from_authenticator_for" comment="This is continuation of sentence: To [ACTION] reply with code">van de Authenticator-app voor: %1$s gevolgd door PIN</string>
<string name="smscommunicator_otp_enabled">Authentificatie inschakelen</string>
<string name="smscommunicator_otp_enabled_summary">Authentificeer SMS commando\'s met behulp van One Time Passwords (OTPs, eenmalige wachtwoorden) gegenereerd door Google Authenticator of soortgelijke 2FA apps.</string>
<string name="smscommunicator_otp_pin">Extra verplichte PIN aan einde van token</string>
<string name="smscommunicator_otp_pin_summary">Extra cijfers die je moet onthouden, en aan het eind van elk gegenereerd eenmalig wachtwoord moet toevoegen.</string>
<string name="smscomunicator_tab_otp_label">Authentificatie instellingen</string>
<string name="smscommunicator_code_verify_label">Te controleren code:</string>
<string name="smscommunicator_code_verify_hint">OTP + PIN</string>
<string name="smscommunicator_code_verify_info">De verificatiecode bestaat uit 6 cijfers die worden afgebeeld door de Authenticator-app (bekend als OTP), gevolgd door 3 of meer cijfers van de verplichte PIN-code.</string>
<string name="smscommunicator_otp_verify_label">Te controleren OTP:</string>
<string name="smscommunicator_otp_reset_btn">Reset Authentificatie</string>
<string name="smscommunicator_otp_reset_title">Reset Authentificatie-sleutel</string>
<string name="smscommunicator_otp_reset_prompt">Weet je zeker dat je de Autentificatie-sleutel wilt resetten? Met deze actie maak je alle Authentificatie instellingen van verbonden telefoons ongeldig, en je zult ze opnieuw moeten instellen.</string>
<string name="smscommunicator_otp_reset_successful">Er is een nieuwe Authentificatie-sleutel gegenereerd! Gebruik de nieuwe QR-Code voor het instellen van geautoriseerde telefoons.</string>
<string name="smscommunicator_otp_export_title">OTP-secret wordt geëxporteerd</string>
<string name="smscommunicator_otp_export_prompt">Weet je zeker dat je het OTP-secret naar het klembord wilt kopiëren?\n\nJe hebt dit alleen nodig als je Authenticator-app problemen heeft met het scannen van QR-codes, als je het handmatig wilt invullen of als je een hardware OTP-token met een speciale app wilt configureren.</string>
<string name="smscommunicator_otp_export_successful">OTP-secret (in Base32-formaat) is geëxporteerd en gekopieerd naar het klembord. Plak het in de Authenticator-app of de app van de hardware OTP-token!</string>
<string name="smscommunicator_otp_step1_install_header">1. Installeer Authenticator app</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Scan code om AndroidAPS OTP codes in te stellen</string>
<string name="smscommunicator_otp_step3_test_header">3. Test eenmalig wachtwoord (One Time Password)</string>
@ -1145,5 +1181,46 @@
<string name="buttonson_description">Knoppen worden altijd weergegeven aan de onderkant van het scherm</string>
<string name="largedisplay_description">Groot scherm</string>
<string name="skin">Skin</string>
<string name="comapareprofile">Vergelijk profielen</string>
<string name="nav_profilehelper">Profiel hulp</string>
<string name="motoldefaultprofile">Basis profiel</string>
<string name="currentprofile">Huidig profiel</string>
<string name="availableprofile">Beschikbaar profiel</string>
<string name="profiletype">Profieltype</string>
<string name="formatwithtdd">Duur: %1$.0f TDD: %2$.0f E</string>
<string name="formatwittddandpct">Leeftijd: %1$.0f TDD: %2$.0f E %3$d%%</string>
<string name="formatwithweight">Leeftijd: %1$.0f gewicht: %2$.0f kg</string>
<string name="basalpctfromtdd_label">% van basaal</string>
<string name="dpvdefaultprofile">DPV Basis profiel</string>
<string name="open_humans">Open Humans</string>
<string name="finishing_open_humans_setup">Setup van Open Humans voltooien…</string>
<string name="this_may_take_a_while">Dit kan even duren. Zet de telefoon of plugin niet uit.</string>
<string name="setup_finished">Setup voltooid</string>
<string name="your_phone_will_upload_data">Je telefoon zal binnenkort data gaan uploaden naar Open Humans.</string>
<string name="your_phone_is_upload_data">Je telefoon is data aan het uploaden naar Open Humans.</string>
<string name="setup_failed">Setup mislukt</string>
<string name="there_was_an_error">Er is een fout opgetreden. Probeer opnieuw in te loggen. Sorry &amp; bedankt!</string>
<string name="open_humans_terms">Dit is een open source tool die je data uploadt naar Open Humans. Wij behouden geen rechten om je gegevens te delen met derden zonder jouw uitdrukkelijke toestemming. De gegevens die het project en de app ontvangen, worden geïdentificeerd aan de hand van een willekeurig gebruikers-ID en worden uitsluitend veilig verzonden naar een Open Humans account met jouw toestemming voor dat proces. Je kunt op elk gewenst moment stoppen met uploaden en je data verwijderen via www.openhumans.org.</string>
<string name="i_understand_and_agree">Ik begrijp het en ga akkoord.</string>
<string name="login">Inloggen</string>
<string name="logout">Uitloggen</string>
<string name="oh_logout_confirmation">Weet je zeker dat je uit wilt loggen en wilt stoppen met het doneren van gegevens aan de wetenschap?</string>
<string name="project_member_id">Projectlid-ID: %s</string>
<string name="queue_size">Grootte wachtrij: %d</string>
<string name="terms_of_use">Gebruiksvoorwaarden</string>
<string name="not_logged_in">Niet ingelogd</string>
<string name="you_need_to_accept_the_of_use_first">Je moet eerst instemmen met de voorwaarden.</string>
<string name="successfully_logged_in">Succesvol ingelogd</string>
<string name="setup_will_continue_in_background">De setup wordt nu op de achtergrond voltooid. Bedankt voor het uploaden van je gegevens.\n\nHoud deze plugin en je telefoon even ingeschakeld om de setup te voltooien.</string>
<string name="completing_login">Login voltooien…</string>
<string name="donate_your_data_to_science">Doneer je gegevens aan de wetenschap</string>
<string name="open_humans_short">OH</string>
<string name="you_have_been_signed_out_of_open_humans">Je bent uitgelogd van Open Humans</string>
<string name="click_here_to_sign_in_again_if_this_wasnt_on_purpose">Klik hier om opnieuw in te loggen als dit niet opzettelijk was.</string>
<string name="only_upload_if_connected_to_wifi">Alleen uploaden indien verbonden met WiFi</string>
<string name="only_upload_if_charging">Alleen uploaden tijdens opladen</string>
<string name="worker_state">Werkstatus: %s</string>
<string name="uploaded_data">Geüploade gegevens</string>
<string name="the_following_data_will_be_uploaded_to_your_open_humans_account">De volgende gegevens worden geüpload naar je Open Humans account: glucosewaarden, bolussen, koolhydraten, careportal-events (met uitzondering van notities), verlengde bolussen, profielwissels, totale dagelijkse doses, tijdelijke basaalstanden, tijdelijke doelen, voorkeuren, app-versie, apparaatmodel en schermafmetingen. Geheime of persoonlijke gegevens zoals je Nightscout-URL of API-secret worden niet geüpload.</string>
<string name="setupwizard_pump_riley_link_status">RileyLink Status:</string>
</resources>

View file

@ -1,2 +1,168 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="dia_whatmeansdia">Hva er riktig om DIA?</string>
<string name="dia_label_exam">Tema: Insulinvarighet (DIA)</string>
<string name="dia_minimumis3h">Minimumsverdien er 3 timer.</string>
<string name="dia_minimumis5h">Minimumsverdien er 5 timer.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">Betydningen er lik DIA verdien angitt i pumpen.</string>
<string name="dia_valuemustbedetermined">Du må bestemme din individuelle verdi (men ikke mindre enn 5 timer).</string>
<string name="hypott_label">Tema: Hypo Temp Target</string>
<string name="hypott_whenhypott">Hva er hovedgrunnen til å velge en hypo TT?</string>
<string name="hypott_goinglow">Forhindre at BS går lavt hvis du allerede har en null temp gående.</string>
<string name="hypott_preventoversmb">Forhindre at AAPS skal doserer for mye insulin etter en BS stigning forårsaket av hurtigvirkende karbohydrater gitt for å behandle et lavt BS.</string>
<string name="hypott_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html</string>
<string name="offlineprofile_whatprofile">Hvilken profiltype kan brukes og konfigureres offline?</string>
<string name="offlineprofile_label">Tema: Offline profil</string>
<string name="offlineprofile_nsprofile">NS profil kan brukes, men ikke konfigureres.</string>
<string name="offlineprofile_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile</string>
<string name="pumpdisconnect_label">Tema: koble fra pumpen</string>
<string name="pumpdisconnect_whattodo">Hva bør gjøres innen du kobler fra pumpen?</string>
<string name="pumpdisconnect_letknow">Trykk på \"Koble fra pumpen\" slik at AAPS vet at ingen insulin vil bli levert.</string>
<string name="pumpdisconnect_suspend">Trykk \"Pause loop\" så AAPS stopper å loope mens pumpen er frakoblet.</string>
<string name="pumpdisconnect_dontchnage">Endre ikke på noe i AAPS, koble bare fra pumpen.</string>
<string name="pumpdisconnect_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings</string>
<string name="objectives_label">Tema: AndroidAPS innstillinger</string>
<string name="objectives_howtosave">Hva er beste praksis for å ta backup av dine innstillinger?</string>
<string name="objectives_exportsettings">Eksportere dem lokalt fra Vedlikeholds menyen.</string>
<string name="objectives_storeelsewhere">Lagre den eksporterte filen til en annen plass som epost, Dropbox, Google Drive…</string>
<string name="objectives_doexportonstart">Eksporter dem rett etter installeringen av AAPS.</string>
<string name="objectives_doexportafterchange">Eksporter dem rett etter at du har gjort endringer i dine innstillinger.</string>
<string name="objectives_doexportafterobjective">Eksporter dem etter at du har fullført et nytt læringsmål.</string>
<string name="objectives_doexportafterfirtssettings">Eksporter dem etter at du har avsluttet dine første innstillinger.</string>
<string name="objectives_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/ExportImportSettings.html</string>
<string name="objectives_hint2">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me</string>
<string name="noisycgm_label">Emne: CGM-målingern med støy</string>
<string name="noisycgm_whattodo">Hva bør gjøres hvis CGM data har støy?</string>
<string name="nothing">Ingenting, AAPS vil håndtere det.</string>
<string name="noisycgm_pause">Deaktiver loop for å unngå overdosering.</string>
<string name="noisycgm_replacesensor">Bytt CGM sensor.</string>
<string name="noisycgm_turnoffphone">Slå av telefonen.</string>
<string name="noisycgm_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data</string>
<string name="noisycgm_checksmoothing">Kontroller at CGM appen din jevner ut BS målinger.</string>
<string name="exercise_label">Tema: Trening</string>
<string name="exercise_whattodo">Hvordan kan du hjelpe systemet med å håndtere trening?</string>
<string name="exercise_setactivitytt">Ved å bruke funksjonen for temp target/mål.</string>
<string name="exercise_switchprofilebelow100">Gjør et profilbytte til under 100%.</string>
<string name="exercise_switchprofileabove100">Gjør et profilbytte til over 100%.</string>
<string name="exercise_stoploop">Stopp loop.</string>
<string name="exercise_doitbeforestart">Angi et \"aktivitet\" temp mål før du begynner treningen.</string>
<string name="exercise_afterstart">Å angi et \"aktivitet\" temp mål etter at du har startet treningen fører til dårligere resultater enn om man startet før.</string>
<string name="exercise_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#active temp-target</string>
<string name="suspendloop_label">Tema: Stanset/pauset loop</string>
<string name="suspendloop_doigetinsulin">Får jag insulin når loop er stanset/pauset?</string>
<string name="suspendloop_yes">Ja, basal insulin vil fortsatt bli levert.</string>
<string name="suspendloop_no">Nei, levering av insulin er stanset.</string>
<string name="basaltest_label">Tema: Basal, ISF og IC testing</string>
<string name="basaltest_when">Når bør jeg validere basal, ISF og IC verdier?</string>
<string name="basaltest_beforeloop">Før jeg begynner å loope.</string>
<string name="basaltest_havingregularhypo">Om du ofte opplever lave BS verdier.</string>
<string name="basaltest_havingregularhyper">Om du ofte opplever høye BS verdier.</string>
<string name="basaltest_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings</string>
<string name="prerequisites_label">Tema: Forutsetninger før oppstart</string>
<string name="prerequisites_what">Hva trenger jeg?</string>
<string name="prerequisites_determinedcorrectprofile">Validert profil informasjon (basal, IC, ISF, DIA).</string>
<string name="prerequisites_computer">En datamaskin for å lage en APK.</string>
<string name="prerequisites_phone">En telefon som støttes.</string>
<string name="prerequisites_car">En bil.</string>
<string name="prerequisites_nightscout">Nightscout for å klare læringsmålene.</string>
<string name="prerequisites_tidepoolaccount">En Tidepool konto.</string>
<string name="prerequisites_googleaccount">En Google konto.</string>
<string name="prerequisites_githubaccount">En Github konto.</string>
<string name="prerequisites_beanandroiddeveloper">Erfaring med Android programmering.</string>
<string name="prerequisites_own670g">En MiniMed 670G pumpe.</string>
<string name="prerequisites_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html</string>
<string name="prerequisites_smartwatch">En smartklokke.</string>
<string name="prerequisites_supportedcgm">En CGM som støttes.</string>
<string name="update_label">Tema: Oppdatering av AndroidAPS</string>
<string name="whatistrue">Hva er sant?</string>
<string name="update_git">Du må ha Git installert.</string>
<string name="update_asap">Oppdater så snart den nye versjonen er publisert og du har nok tid til å gjøre det.</string>
<string name="update_keys">Du bør bruke de samme signeringsnøklene.</string>
<string name="update_neverupdate">Aldri oppdater hvis systemet fungerer bra.</string>
<string name="update_askfriend">Spør en venn om den nye APK filen.</string>
<string name="update_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch</string>
<string name="troubleshooting_label">Tema: Feilsøking</string>
<string name="troubleshooting_wheretoask">Hvor skal jeg lete etter hjelp?</string>
<string name="troubleshooting_fb">Bli medlem av AndroidAPS Facebook gruppen.</string>
<string name="troubleshooting_wiki">Les AndroidAPS dokumentasjonen.</string>
<string name="troubleshooting_gitter">Besøk AndroidAPS Gitter rommet.</string>
<string name="troubleshooting_googlesupport">Besøk AndroidAPS Google support</string>
<string name="troubleshooting_yourendo">Snakk med din diabeteslege.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/AndroidAPSUsers/</string>
<string name="troubleshooting_hint3">https://gitter.im/MilosKozak/AndroidAPS</string>
<string name="insulin_label">Tema: Insulin plugin</string>
<string name="insulin_ultrarapid">Hvilke typer insulin kan brukes sammen med insulinprofilen \"Ultra-Rapid-Oref\"?</string>
<string name="insulin_fiasp">Fiasp®</string>
<string name="insulin_novorapid">Novorapid®</string>
<string name="insulin_humalog">Humalog®</string>
<string name="insulin_actrapid">Actrapid®</string>
<string name="insulin_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin</string>
<string name="sensitivity_label">Tema: Sensitivitet plugin</string>
<string name="sensitivity_which">Hvilken sensitivitetsalgoritme har et konfigurerbart tidsintervall?</string>
<string name="sensitivity_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="sensitivityuam_which">Hvilken sensitivitets plugin må anvendes for å bruke UAM funksjonen?</string>
<string name="wrongcarbs_label">Tema: Feilaktig registrering av karbohydrater</string>
<string name="wrongcarbs_whattodo">Hva skal du gjøre hvis du har gjort en feilaktig registrering av karbohydrater?</string>
<string name="wrongcarbs_treatmentstab">I Behandlinger, slett den feilaktige registreringen og legg inn karbohydrater på nytt.</string>
<string name="wrongcarbs_addfakeinsulin">Legg inn falsk insulin ved å bruke prime/fyll funksjonen</string>
<string name="extendedcarbs_label">Tema: Mat med fett og protein</string>
<string name="extendedcarbs_handling">Hva skal du gjøre om maten inneholder store mengder fett og/eller proteiner?</string>
<string name="extendedcarbs_useextendedcarbs">Regn om fett og proteiner til karbohydrater og bruk eKarbo funksjonen.</string>
<string name="extendedcarbs_add">Regn om fett og proteiner til karbohydrater og legg det til bolus beregningen.</string>
<string name="extendedcarbs_useextendedbolus">Bruk forlenget bolus til å dekke inntaket av fett og proteiner.</string>
<string name="extendedcarbs_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html</string>
<string name="nsclient_label">Tema: Fjernovervåking</string>
<string name="nsclient_howcanyou">Hvordan kan du overvåke AAPS for ditt barn på avstand?</string>
<string name="nsclient_nightscout">Ved å bruke Nightscout.</string>
<string name="nsclient_dexcomfollow">Dexcom Follow app hvis du bruker Dexcom appen (bare for BS).</string>
<string name="nsclient_dexcomfollowxdrip">Dexcom Follow hvis du bruker xDrip appen.</string>
<string name="nsclient_xdripfollower">xDrip app kjører i følger-modus.</string>
<string name="nsclient_looponiphone">Loop app på iPhone.</string>
<string name="nsclient_spikeiphone">Spike app på iPhone.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html</string>
<string name="isf_label_exam">Tema: Insulin sensitivitetsfaktor (ISF)</string>
<string name="isf_increasingvalue">Høyere ISF verdier fører til mindre insulintilførsel når AAPS korrigerer for høyt BS.</string>
<string name="isf_decreasingvalue">Lavere ISF verdier fører til mindre insulintilførsel når AAPS korrigerer for høyt BS.</string>
<string name="isf_noeffect">Endring av ISF verdier har ingen effekt på mengden insulin som tilføres når AAPS korrigerer høyt BS.</string>
<string name="isf_preferences">Du må angi ISF i Innstillinger.</string>
<string name="isf_profile">Å endre ISF verdien i din profil er tilstrekkelig for å ta i bruk endringen.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u</string>
<string name="isf_hint2">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html</string>
<string name="ic_label_exam">Tema: Insulin-karbo (IK) forholdet</string>
<string name="ic_increasingvalue">Høyere IC forhold fører til at mindre insulin leveres for en gitt mengde karbohydrater.</string>
<string name="ic_decreasingvalue">Lavere IC forhold fører til at mindre insulin leveres for en gitt mengde karbohydrater.</string>
<string name="ic_noeffect">Hvis du har 0 COB, vil endring av IC forholdet føre til endring av insulinmengden som trengs for å korrigere ditt BS nivå.</string>
<string name="ic_different">IC vil være forskjellig hvis du regner en skive brød som 10g eller 12g.</string>
<string name="ic_meaning">IC betyr: Hvor mange brødenheter som dekkes av 1E insulin.</string>
<string name="ic_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u</string>
<string name="profileswitch_label">Tema: Profilbytte</string>
<string name="profileswitch_pctwillchange"> Når man angir 90% i profilbytte…</string>
<string name="profileswitch_basalhigher">Basal vil være 10% høyere.</string>
<string name="profileswitch_basallower">Basal vil være 10% lavere.</string>
<string name="profileswitch_ichigher">IC verdien vil være 10% høyere.</string>
<string name="profileswitch_iclower">IC verdien vil være 10% lavere.</string>
<string name="profileswitch_isfhigher">ISF verdien vil være 10% høyere.</string>
<string name="profileswitch_isflower">ISF verdien vil være 10% lavere.</string>
<string name="profileswitch_overall">Du vil få omtrent 10% mindre insulin totalt.</string>
<string name="profileswitch_targethigher">Mål BS vil bli 10% høyere.</string>
<string name="profileswitch_targetlower">Mål BS vil bli 10% lavere.</string>
<string name="profileswitch_targetbottom">Bare laveste BS grenseverdi vil bli 10% lavere.</string>
<string name="profileswitch_hint1" formatted="false">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#profile-switch</string>
<string name="profileswitchtime_iwant">Hvis du våkner 1t tidligere enn normalt, hvordan skal du varsle AAPS om endringen i døgnrytmen din?</string>
<string name="profileswitchtime_1">Gjøre et profilbytte med en tidsforskyvning på 1t</string>
<string name="profileswitchtime__1">Gjøre et profil bytte med en tidsforskyvning på -1t</string>
<string name="profileswitchtime_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift</string>
<string name="profileswitchtime_60">Gjør et profilbytte med en tidsforskyvning på 60</string>
<string name="profileswitchtime__60">Gjør et profilbytte med en tidsforskyvning på -60</string>
<string name="basalhelp_hint1">https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy</string>
<string name="basalhelp_label">Tema: Hjelp med basaldoser</string>
<string name="basalhelp_where">Hvor finner du hjelp for basaldoser m. m.</string>
<string name="basalhelp_diabetesteam">Ditt diabetesteam</string>
<string name="basalhelp_google">Google</string>
<string name="basalhelp_facebook">Facebook</string>
<string name="other_medication_label">Annen medisinering</string>
<string name="other_medication_text">AAPS senker basalen for å øke glukosemengden i blodet. Medisiner av typen SGLT2-hemmere (glifloziner) kan motvirke den forventede økningen i BS og som kan resultere i livsfarlig insulinmangel eller ketoacidose (DKA). \nVanlige merker i markedet: Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\n
Jeg lover herved å ALDRI ta slike medisiner samtidig som jeg bruker AAPS, eller jeg kommer til å ta en pause i looping så lenge jeg bruker slik medisin.</string>
</resources>

View file

@ -1,2 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="alert_r1_code">Påminnelses R1</string>
<string name="alert_r2_code">Påminnelse R2</string>
<string name="alert_r3_code">Påminnelse R3</string>
<string name="alert_r4_code">Påminnelse R4</string>
<string name="alert_r7_code">Påminnelse R7</string>
<string name="alert_w31_code">Advarsel W31</string>
<string name="alert_w32_code">Advarsel W32</string>
<string name="alert_w33_code">Advarsel W33</string>
<string name="alert_w34_code">Advarsel W34</string>
<string name="alert_w36_code">Advarsel W36</string>
<string name="alert_w38_code">8Advarsel W38</string>
<string name="alert_w39_code">Advarsel W39</string>
<string name="alert_m20_code">Vedlikehold M20</string>
<string name="alert_m21_code">Vedlikehold M21</string>
<string name="alert_m22_code">Vedlikehold M22</string>
<string name="alert_m23_code">Vedlikehold M23</string>
<string name="alert_m24_code">Vedlikehold M24</string>
<string name="alert_m25_code">Vedlikehold M25</string>
<string name="alert_m26_code">Vedlikehold M26</string>
<string name="alert_m27_code">Vedlikehold M27</string>
<string name="alert_m28_code">Vedlikehold M28</string>
<string name="alert_m29_code">Vedlikehold M29</string>
<string name="alert_m30_code">Vedlikehold M30</string>
<string name="alert_e6_code">Feil E6</string>
<string name="alert_e10_code">Feil E10</string>
<string name="alert_e13_code">Feil E13</string>
</resources>

View file

@ -1,2 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="alert_r7_description"><![CDATA[Mengde: <b>%1$d%%</b>\nVarighet: <b>%2$s t</b>]]></string>
<string name="alert_w31_description"><![CDATA[Ampullens innhold: <b>%1$s E</b>]]></string>
<string name="alert_w32_description">Bytt batteri.</string>
<string name="alert_w33_description">Angi tidspunkt/dato.</string>
<string name="alert_w34_description">Kontakt Accu-Chek kundestøtte.</string>
<string name="alert_w36_description"><![CDATA[Mengde: <b>%1$d%%</b><br/>\nVarighet: <b>%2$s t</b>]]></string>
<string name="alert_w38_description"><![CDATA[Angitt: <b>%1$s E</b><br/>Levert: <b>%2$s E</b>]]></string>
<string name="alert_m20_description">Sett inn ampulle.</string>
<string name="alert_m21_description">Bytt ampulle.</string>
<string name="alert_m22_description">Bytt batteri.</string>
<string name="alert_m23_description">Kontroller pumpestatus.</string>
<string name="alert_m24_description">Bytt infusjonssett.</string>
<string name="alert_m25_description">Kontakt Accu-Chek kundestøtte.</string>
<string name="alert_m26_description">Bytt ampulle.</string>
<string name="alert_m27_description">Restart nedlasting av data.</string>
<string name="alert_m28_description">Kontroller pumpestatus.</string>
<string name="alert_m29_description">Angi batteritype.</string>
<string name="alert_m30_description">Angi ampulle type.</string>
<string name="alert_e6_description">Bytt batteri og ampulle.</string>
<string name="alert_e10_description">Bytt ampulle.</string>
<string name="alert_e13_description">Bytt språk.</string>
</resources>

View file

@ -1,2 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="alert_r1_title">Tilfør bolus</string>
<string name="alert_r2_title">Manglende bolus</string>
<string name="alert_r3_title">Alarmklokke</string>
<string name="alert_r4_title">Bytt infusjonssett</string>
<string name="alert_r7_title">Midlertidig basaldose fullført</string>
<string name="alert_w31_title">Lavt ampulleinnhold</string>
<string name="alert_w32_title">Batteri lavt</string>
<string name="alert_w33_title">Ugyldig klokkeslett/dato</string>
<string name="alert_w34_title">Slutt på garanti</string>
<string name="alert_w36_title">Midlertidig basaldose avbrutt</string>
<string name="alert_w38_title">Bolus avbrutt</string>
<string name="alert_w39_title">Lånetidsadvarsel</string>
<string name="alert_m20_title">Ampulle ikke satt inn</string>
<string name="alert_m21_title">Ampulle tom</string>
<string name="alert_m22_title">Batteri tomt</string>
<string name="alert_m23_title">Automatisk av - pumpe stoppet</string>
<string name="alert_m24_title">Tilstopping</string>
<string name="alert_m25_title">Lånetid over - drift stoppes</string>
<string name="alert_m26_title">Bytte av ampulle ikke fullført</string>
<string name="alert_m27_title">Nedlasting av data mislyktes</string>
<string name="alert_m28_title">Tidsavbrudd for pausemodus</string>
<string name="alert_m29_title">Batteritype ikke angitt</string>
<string name="alert_m30_title">Ampulletype ikke angitt</string>
<string name="alert_e6_title">Mekanisk feil</string>
<string name="alert_e10_title">Tilbakespolingsfeil</string>
<string name="alert_e13_title">Språkfeil</string>
</resources>

View file

@ -1,2 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="connection_failed">Tilkobling mislyktes</string>
<string name="connection_lost">Mistet forbindelsen</string>
<string name="pairing_rejected">Sammenkobling avvist</string>
<string name="socket_creation_failed">Mislykket opprettelse av socket tilkobling</string>
<string name="timeout">Tidsavbrudd</string>
<string name="maximum_number_of_bolus_type_already_running">Maksimalt antall bolusdoser som allerede går</string>
<string name="no_active_tbr_to_cancel">Ingen aktiv midlertidig basaldose å kansellere</string>
<string name="no_active_tbr_to_change">Ingen aktiv midlertidig basaldose å endre</string>
<string name="no_such_bolus_to_cancel">Ingen slik bolus til å avbryte</string>
<string name="pump_already_in_that_state_exception">Pumpe allerede i den tilstanden</string>
<string name="run_mode_not_allowed">Kjør modus ikke tillatt</string>
</resources>

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