diff --git a/app/build.gradle b/app/build.gradle
index 19cd265928..6e82a083df 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -118,9 +118,9 @@ android {
// if you change minSdkVersion to less than 11, you need to change executeTask for wear
// OMNIPOD: Keep track of what commit from the main repository we're on, these fields aren't actually used anywhere
- buildConfigField "String", "DEV_VERSION", '"2.7-dev"'
- buildConfigField "String", "DEV_VERSION_COMMIT", '"c3dbd1ec2446647169bb8ee1e3067a96ff8af394"'
- buildConfigField "String", "DEV_VERSION_COMMIT_DATE", '"1.3.2020"' // 1st of March
+ buildConfigField "String", "DEV_VERSION", '"2.6.1-dev"'
+ buildConfigField "String", "DEV_VERSION_COMMIT", '"447c05f05f3bc707549cd776caf7221bfcc47d0a"'
+ buildConfigField "String", "DEV_VERSION_COMMIT_DATE", '"1.4.2020"' // 1st April
ndk {
moduleName "BleCommandUtil"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2b020f56db..2d66eef016 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -124,14 +125,6 @@
-
-
-
-
-
-
-
-
if (task.isSuccessful) {
log.debug("signInAnonymously:success")
- val user = auth.currentUser // TODO: do we need this, seems unused?
+ // val user = auth.currentUser // TODO: do we need this, seems unused?
val database = FirebaseDatabase.getInstance().reference
database.child("survey").child(r.id).setValue(r)
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt
index 3f629add06..ffb8db4b11 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt
@@ -30,8 +30,10 @@ class BolusProgressDialog : DialogFragment() {
companion object {
private val DEFAULT_STATE = MainApp.gs(R.string.waitingforpump)
+
@JvmField
var bolusEnded = false
+
@JvmField
var stopPressed = false
}
@@ -62,6 +64,9 @@ class BolusProgressDialog : DialogFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ savedInstanceState?.let {
+ amount = it.getDouble("amount")
+ }
overview_bolusprogress_title.text = String.format(MainApp.gs(R.string.overview_bolusprogress_goingtodeliver), amount)
overview_bolusprogress_stop.setOnClickListener {
if (L.isEnabled(L.UI)) log.debug("Stop bolus delivery button pressed")
@@ -136,6 +141,7 @@ class BolusProgressDialog : DialogFragment() {
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("state", state)
+ outState.putDouble("amount", amount)
}
private fun scheduleDismiss() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt
index 9503988dce..192f301bf6 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt
@@ -57,7 +57,7 @@ class CalibrationDialog : DialogFragmentWithDate() {
activity?.let { activity ->
OKDialog.showConfirmation(activity, MainApp.gs(R.string.overview_calibration), HtmlHelper.fromHtml(Joiner.on("
").join(actions)), Runnable {
log.debug("USER ENTRY: CALIBRATION $bg")
- XdripCalibrations.confirmAndSendCalibration(bg, context)
+ XdripCalibrations.sendIntent(bg)
})
}
} else
@@ -66,4 +66,4 @@ class CalibrationDialog : DialogFragmentWithDate() {
}
return true
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
index da4a091b1d..be9a48ad77 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
@@ -54,6 +54,8 @@ class CareDialog : DialogFragmentWithDate() {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("actions_care_bg", actions_care_bg.value)
savedInstanceState.putDouble("actions_care_duration", actions_care_duration.value)
+ savedInstanceState.putInt("event", event)
+ savedInstanceState.putInt("options", options.ordinal)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
@@ -65,6 +67,11 @@ class CareDialog : DialogFragmentWithDate() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ savedInstanceState?.let {
+ event = savedInstanceState.getInt("event", R.string.error)
+ options = EventType.values()[savedInstanceState.getInt("options", 0)]
+ }
+
actions_care_icon.setImageResource(when (options) {
EventType.BGCHECK -> R.drawable.icon_cp_bgcheck
EventType.SENSOR_INSERT -> R.drawable.icon_cp_cgm_insert
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt
index f594564a78..a258cbec8a 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt
@@ -78,9 +78,9 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
?: return false
val actions: LinkedList = LinkedList()
- val duration = overview_profileswitch_duration.value
+ val duration = overview_profileswitch_duration.value.toInt()
if (duration > 0)
- actions.add(MainApp.gs(R.string.duration) + ": " + MainApp.gs(R.string.format_hours, duration))
+ actions.add(MainApp.gs(R.string.duration) + ": " + MainApp.gs(R.string.format_mins, duration))
val profile = overview_profileswitch_profile.selectedItem.toString()
actions.add(MainApp.gs(R.string.profile) + ": " + profile)
val percent = overview_profileswitch_percentage.value.toInt()
@@ -98,7 +98,7 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
activity?.let { activity ->
OKDialog.showConfirmation(activity, MainApp.gs(R.string.careportal_profileswitch), HtmlHelper.fromHtml(Joiner.on("
").join(actions)), Runnable {
log.debug("USER ENTRY: PROFILE SWITCH $profile percent: $percent timeshift: $timeShift duration: $duration")
- ProfileFunctions.doProfileSwitch(profileStore, profile, duration.toInt(), percent, timeShift, eventTime)
+ ProfileFunctions.doProfileSwitch(profileStore, profile, duration, percent, timeShift, eventTime)
})
}
return true
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt
index e738b7f94c..63a053f29f 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt
@@ -44,11 +44,11 @@ class EditActionDialog : DialogFragmentWithDate() {
return true
}
- override fun onSaveInstanceState(bundle: Bundle) {
- super.onSaveInstanceState(bundle)
+ override fun onSaveInstanceState(savedInstanceState: Bundle) {
+ super.onSaveInstanceState(savedInstanceState)
action?.let {
- bundle.putInt("actionPosition", actionPosition)
- bundle.putString("action", it.toJSON())
+ savedInstanceState.putInt("actionPosition", actionPosition)
+ savedInstanceState.putString("action", it.toJSON())
}
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java
index 0bc15d1d45..ab6cae3e71 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java
@@ -396,7 +396,7 @@ public class NSUpload {
public static void uploadProfileStore(JSONObject profileStore) {
if (SP.getBoolean(R.string.key_ns_uploadlocalprofile, false)) {
- UploadQueue.add(new DbRequest("dbAdd", "profile", String.valueOf(profileStore)));
+ UploadQueue.add(new DbRequest("dbAdd", "profile", profileStore));
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.java
index e1c57cc7c2..565399dd59 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.java
@@ -274,7 +274,7 @@ public class NSClientService extends Service {
} else if (!nsEnabled) {
RxBus.INSTANCE.send(new EventNSClientNewLog("NSCLIENT", "disabled"));
RxBus.INSTANCE.send(new EventNSClientStatus("Disabled"));
- } else if (!nsURL.equals("")) {
+ } else if (!nsURL.equals("") && (MainApp.engineeringMode || nsURL.toLowerCase().startsWith("https://"))) {
try {
RxBus.INSTANCE.send(new EventNSClientStatus("Connecting ..."));
IO.Options opt = new IO.Options();
@@ -283,6 +283,9 @@ public class NSClientService extends Service {
mSocket = IO.socket(nsURL, opt);
mSocket.on(Socket.EVENT_CONNECT, onConnect);
mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
+ mSocket.on(Socket.EVENT_ERROR, onError);
+ mSocket.on(Socket.EVENT_CONNECT_ERROR, onError);
+ mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onError);
mSocket.on(Socket.EVENT_PING, onPing);
RxBus.INSTANCE.send(new EventNSClientNewLog("NSCLIENT", "do connect"));
mSocket.connect();
@@ -295,6 +298,9 @@ public class NSClientService extends Service {
RxBus.INSTANCE.send(new EventNSClientNewLog("NSCLIENT", "Wrong URL syntax"));
RxBus.INSTANCE.send(new EventNSClientStatus("Wrong URL syntax"));
}
+ } else if (nsURL.toLowerCase().startsWith("http://")) {
+ RxBus.INSTANCE.send(new EventNSClientNewLog("NSCLIENT", "NS URL not encrypted"));
+ RxBus.INSTANCE.send(new EventNSClientStatus("Not encrypted"));
} else {
RxBus.INSTANCE.send(new EventNSClientNewLog("NSCLIENT", "No NS URL specified"));
RxBus.INSTANCE.send(new EventNSClientStatus("Not configured"));
@@ -392,6 +398,17 @@ public class NSClientService extends Service {
nsDevice = SP.getString("careportal_enteredby", "");
}
+ private Emitter.Listener onError = new Emitter.Listener() {
+ @Override
+ public void call(final Object... args) {
+ String msg = "Unknown Error";
+ if (args.length > 0 && args[0] != null) {
+ msg = args[0].toString();
+ }
+ RxBus.INSTANCE.send(new EventNSClientNewLog("ERROR", msg));
+ }
+ };
+
private Emitter.Listener onPing = new Emitter.Listener() {
@Override
public void call(final Object... args) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java
index 0976755f06..a00317eff3 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java
@@ -221,8 +221,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
} else if (Config.NSCLIENT) {
view = inflater.inflate(R.layout.overview_fragment_nsclient, container, false);
shorttextmode = true;
- } else if (smallHeight || landscape) { // now testing the same layout for small displays as well
- view = inflater.inflate(R.layout.overview_fragment, container, false);
+ } else if (smallHeight || landscape) {
+ view = inflater.inflate(R.layout.overview_fragment_landscape, container, false);
} else {
view = inflater.inflate(R.layout.overview_fragment, container, false);
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatuslinePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatuslinePlugin.java
index b810624e87..dd51266ab9 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatuslinePlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatuslinePlugin.java
@@ -202,13 +202,13 @@ public class StatuslinePlugin extends PluginBase {
+ DecimalFormatter.to2Decimal(basalIob.basaliob) + ")";
}
- if (!mPrefs.getBoolean("xdripstatus_showbgi", false)) {
- return status;
+ // BGI
+ if (mPrefs.getBoolean("xdripstatus_showbgi", true)) {
+ double bgi = -(bolusIob.activity + basalIob.activity) * 5 * Profile.fromMgdlToUnits(profile.getIsfMgdl(), ProfileFunctions.getSystemUnits());
+ status += " " + ((bgi >= 0) ? "+" : "") + DecimalFormatter.to2Decimal(bgi);
}
- double bgi = -(bolusIob.activity + basalIob.activity) * 5 * Profile.fromMgdlToUnits(profile.getIsfMgdl(), ProfileFunctions.getSystemUnits());
-
- status += " " + ((bgi >= 0) ? "+" : "") + DecimalFormatter.to2Decimal(bgi);
+ /* COB */
status += " " + IobCobCalculatorPlugin.getPlugin().getCobInfo(false, "StatuslinePlugin").generateCOBString();
return status;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java
index 5c5a842d17..f66c0595cd 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java
@@ -655,16 +655,29 @@ public class ComboPlugin extends PluginBase implements PumpInterface, Constraint
* Creates a treatment record based on the request in DetailBolusInfo and the delivered bolus.
*/
private boolean addBolusToTreatments(DetailedBolusInfo detailedBolusInfo, Bolus lastPumpBolus) {
- DetailedBolusInfo dbi = detailedBolusInfo.copy();
- dbi.date = calculateFakeBolusDate(lastPumpBolus);
- dbi.pumpId = dbi.date;
- dbi.source = Source.PUMP;
- dbi.insulin = lastPumpBolus.amount;
+ DetailedBolusInfo bolusInfo = detailedBolusInfo.copy();
+ bolusInfo.date = calculateFakeBolusDate(lastPumpBolus);
+ bolusInfo.pumpId = bolusInfo.date;
+ bolusInfo.source = Source.PUMP;
+ bolusInfo.insulin = lastPumpBolus.amount;
try {
- TreatmentsPlugin.getPlugin().addToHistoryTreatment(dbi, true);
+ if (bolusInfo.carbs > 0 && bolusInfo.carbTime != 0) {
+ // split out a separate carbs record without a pumpId
+ DetailedBolusInfo carbInfo = new DetailedBolusInfo();
+ carbInfo.date = bolusInfo.date + bolusInfo.carbTime * 60L * 1000L;
+ carbInfo.carbs = bolusInfo.carbs;
+ carbInfo.source = Source.USER;
+ TreatmentsPlugin.getPlugin().addToHistoryTreatment(carbInfo, true);
+
+ // remove carbs from bolusInfo to not trigger any unwanted code paths in
+ // TreatmentsPlugin.addToHistoryTreatment() method
+ bolusInfo.carbTime = 0;
+ bolusInfo.carbs = 0;
+ }
+ TreatmentsPlugin.getPlugin().addToHistoryTreatment(bolusInfo, true);
} catch (Exception e) {
log.error("Adding treatment record failed", e);
- if (dbi.isSMB) {
+ if (bolusInfo.isSMB) {
Notification notification = new Notification(Notification.COMBO_PUMP_ALARM, MainApp.gs(R.string.combo_error_updating_treatment_record), Notification.URGENT);
RxBus.INSTANCE.send(new EventNewNotification(notification));
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/bolusInfo/DetailedBolusInfoStorage.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/bolusInfo/DetailedBolusInfoStorage.kt
index d7833a4fe4..884ba3a46b 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/bolusInfo/DetailedBolusInfoStorage.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/bolusInfo/DetailedBolusInfoStorage.kt
@@ -2,7 +2,6 @@ package info.nightscout.androidaps.plugins.pump.common.bolusInfo
import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.logging.L
-import info.nightscout.androidaps.plugins.pump.medtronic.data.MedtronicHistoryData
import info.nightscout.androidaps.utils.T
import org.slf4j.LoggerFactory
import java.util.*
@@ -20,10 +19,6 @@ object DetailedBolusInfoStorage {
@Synchronized
fun findDetailedBolusInfo(bolusTime: Long, bolus: Double): DetailedBolusInfo? {
-
- if (MedtronicHistoryData.doubleBolusDebug)
- log.debug("DoubleBolusDebug: findDetailedBolusInfo::bolusTime={}, bolus={}", bolusTime, bolus)
-
// Look for info with bolus
for (i in store.indices) {
val d = store[i]
@@ -31,11 +26,8 @@ object DetailedBolusInfoStorage {
log.debug("Existing bolus info: " + store[i])
if (bolusTime > d.date - T.mins(1).msecs() && bolusTime < d.date + T.mins(1).msecs() && abs(store[i].insulin - bolus) < 0.01) {
if (L.isEnabled(L.PUMP))
- log.debug("Using & removing bolus info: " + store[i])
+ log.debug("Using & removing bolus info: ${store[i]}")
store.removeAt(i)
- if (MedtronicHistoryData.doubleBolusDebug)
- log.debug("DoubleBolusDebug: findDetailedBolusInfo::selectedBolus[DetailedBolusInfo={}]", d)
-
return d
}
}
@@ -44,13 +36,24 @@ object DetailedBolusInfoStorage {
val d = store[i]
if (bolusTime > d.date - T.mins(1).msecs() && bolusTime < d.date + T.mins(1).msecs() && bolus <= store[i].insulin + 0.01) {
if (L.isEnabled(L.PUMP))
- log.debug("Using & removing bolus info: " + store[i])
+ log.debug("Using TIME-ONLY & removing bolus info: ${store[i]}")
store.removeAt(i)
- if (MedtronicHistoryData.doubleBolusDebug)
- log.debug("DoubleBolusDebug: findDetailedBolusInfo::selectedBolus[DetailedBolusInfo={}]", d)
return d
}
}
+ // If not found, use last record if amount is the same
+ if (store.size > 0) {
+ val d = store[store.size - 1]
+ if (abs(d.insulin - bolus) < 0.01) {
+ if (L.isEnabled(L.PUMP))
+ log.debug("Using LAST & removing bolus info: $d")
+ store.removeAt(store.size - 1)
+ return d
+ }
+ }
+ //Not found
+ if (L.isEnabled(L.PUMP))
+ log.debug("Bolus info not found")
return null
}
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java
index 26555898c0..4a543f27c5 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java
@@ -1,25 +1,26 @@
package info.nightscout.androidaps.plugins.pump.insight;
+import android.app.Notification;
+import android.app.PendingIntent;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
-import android.media.AudioAttributes;
-import android.media.AudioManager;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
import android.os.Binder;
-import android.os.Build;
-import android.os.Handler;
import android.os.IBinder;
-import android.os.Looper;
import android.os.Vibrator;
+import android.text.Html;
+
import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.lifecycle.MutableLiveData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.pump.insight.activities.InsightAlertActivity;
import info.nightscout.androidaps.plugins.pump.insight.app_layer.remote_control.ConfirmAlertMessage;
@@ -32,19 +33,21 @@ import info.nightscout.androidaps.plugins.pump.insight.descriptors.AlertType;
import info.nightscout.androidaps.plugins.pump.insight.descriptors.InsightState;
import info.nightscout.androidaps.plugins.pump.insight.exceptions.InsightException;
import info.nightscout.androidaps.plugins.pump.insight.exceptions.app_layer_errors.AppLayerErrorException;
+import info.nightscout.androidaps.plugins.pump.insight.utils.AlertUtilsKt;
import info.nightscout.androidaps.plugins.pump.insight.utils.ExceptionTranslator;
public class InsightAlertService extends Service implements InsightConnectionService.StateCallback {
+ private static final int NOTIFICATION_ID = 31345;
+
private static Logger log = LoggerFactory.getLogger(L.PUMPCOMM);
private LocalBinder localBinder = new LocalBinder();
private boolean connectionRequested;
private final Object $alertLock = new Object[0];
- private Alert alert;
+ private Alert alert = null;
+ private MutableLiveData alertLiveData = new MutableLiveData<>();
private Thread thread;
- private InsightAlertActivity alertActivity;
- private Ringtone ringtone;
private Vibrator vibrator;
private boolean vibrating;
private InsightConnectionService connectionService;
@@ -65,27 +68,6 @@ public class InsightAlertService extends Service implements InsightConnectionSer
}
};
- private void retrieveRingtone() {
- Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
- ringtone = RingtoneManager.getRingtone(this, uri);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- ringtone.setAudioAttributes(new AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
- .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
- .setLegacyStreamType(AudioManager.STREAM_RING).build());
- } else ringtone.setStreamType(AudioManager.STREAM_RING);
- }
-
- public Alert getAlert() {
- synchronized ($alertLock) {
- return alert;
- }
- }
-
- public void setAlertActivity(InsightAlertActivity alertActivity) {
- this.alertActivity = alertActivity;
- }
-
public void ignore(AlertType alertType) {
synchronized ($alertLock) {
if (alertType == null) {
@@ -98,6 +80,10 @@ public class InsightAlertService extends Service implements InsightConnectionSer
}
}
+ public MutableLiveData getAlertLiveData() {
+ return alertLiveData;
+ }
+
@Nullable
@Override
public IBinder onBind(Intent intent) {
@@ -108,6 +94,7 @@ public class InsightAlertService extends Service implements InsightConnectionSer
public void onCreate() {
vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
bindService(new Intent(this, InsightConnectionService.class), serviceConnection, BIND_AUTO_CREATE);
+ alertLiveData.setValue(null);
}
@Override
@@ -118,6 +105,12 @@ public class InsightAlertService extends Service implements InsightConnectionSer
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
+ if ("mute".equals(intent.getStringExtra("command"))) {
+ mute();
+ } else if ("confirm".equals(intent.getStringExtra("command"))) {
+ dismissNotification();
+ confirm();
+ }
return START_STICKY;
}
@@ -127,25 +120,47 @@ public class InsightAlertService extends Service implements InsightConnectionSer
thread = new Thread(this::queryActiveAlert);
thread.start();
- } else if (thread != null) thread.interrupt();
+ } else {
+ dismissNotification();
+ if (thread != null) thread.interrupt();
+ }
}
private void queryActiveAlert() {
while (!Thread.currentThread().isInterrupted()) {
try {
- Alert alert = connectionService.requestMessage(new GetActiveAlertMessage()).await().getAlert();
- if (Thread.currentThread().isInterrupted()) {
- connectionService.withdrawConnectionRequest(thread);
- break;
- }
synchronized ($alertLock) {
- if ((this.alert == null && alert != null)
+ Alert alert = connectionService.requestMessage(new GetActiveAlertMessage()).await().getAlert();
+ if (alert == null || (alert.getAlertType() == ignoreType && System.currentTimeMillis() - ignoreTimestamp < 10000)) {
+ if (connectionRequested) {
+ connectionService.withdrawConnectionRequest(this);
+ connectionRequested = false;
+ }
+ this.alertLiveData.postValue(null);
+ this.alert = null;
+ dismissNotification();
+ stopAlerting();
+ } else if (!alert.equals(this.alert)) {
+ if (!connectionRequested) {
+ connectionService.requestConnection(this);
+ connectionRequested = true;
+ }
+ showNotification(alert);
+ this.alertLiveData.postValue(alert);
+ this.alert = alert;
+ if (alert.getAlertStatus() == AlertStatus.SNOOZED) stopAlerting();
+ else alert();
+ }
+ /*if ((this.alert == null && alert != null)
|| (this.alert != null && alert == null)
|| (this.alert != null && alert != null && !this.alert.equals(alert))) {
if (this.alert != null && (alert == null || this.alert.getAlertId() != alert.getAlertId())) stopAlerting();
this.alert = alert;
- if (alertActivity != null && alert != null)
- new Handler(Looper.getMainLooper()).post(() -> alertActivity.update(alert));
+ if (alert != null)
+ new Handler(Looper.getMainLooper()).post(() -> {
+ //showNotification(alert);
+ //alertActivity.update(alert);
+ });
}
if (alert == null) {
stopAlerting();
@@ -153,8 +168,10 @@ public class InsightAlertService extends Service implements InsightConnectionSer
connectionService.withdrawConnectionRequest(this);
connectionRequested = false;
}
- if (alertActivity != null)
- new Handler(Looper.getMainLooper()).post(() -> alertActivity.finish());
+ new Handler(Looper.getMainLooper()).post(() -> {
+ //dismissNotification();
+ //alertActivity.finish();
+ });
} else if (!(alert.getAlertType() == ignoreType && System.currentTimeMillis() - ignoreTimestamp < 10000)) {
if (alert.getAlertStatus() == AlertStatus.ACTIVE) alert();
else stopAlerting();
@@ -162,12 +179,12 @@ public class InsightAlertService extends Service implements InsightConnectionSer
connectionService.requestConnection(this);
connectionRequested = true;
}
- if (alertActivity == null) {
+ /*if (alertActivity == null) {
Intent intent = new Intent(InsightAlertService.this, InsightAlertActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
new Handler(Looper.getMainLooper()).post(() -> startActivity(intent));
- }
- }
+ }*/
+ //}
}
} catch (InterruptedException ignored) {
connectionService.withdrawConnectionRequest(thread);
@@ -189,21 +206,18 @@ public class InsightAlertService extends Service implements InsightConnectionSer
connectionService.withdrawConnectionRequest(thread);
connectionRequested = false;
}
- if (alertActivity != null)
- new Handler(Looper.getMainLooper()).post(() -> alertActivity.finish());
stopAlerting();
+ alertLiveData.postValue(null);
+ this.alert = null;
+ dismissNotification();
thread = null;
}
private void alert() {
if (!vibrating) {
- vibrator.vibrate(new long[] {0, 1000, 1000}, 0);
+ vibrator.vibrate(new long[]{0, 1000, 1000}, 0);
vibrating = true;
}
- if (ringtone == null || !ringtone.isPlaying()) {
- retrieveRingtone();
- ringtone.play();
- }
}
private void stopAlerting() {
@@ -211,15 +225,21 @@ public class InsightAlertService extends Service implements InsightConnectionSer
vibrator.cancel();
vibrating = false;
}
- if (ringtone != null && ringtone.isPlaying()) ringtone.stop();
}
public void mute() {
new Thread(() -> {
try {
- SnoozeAlertMessage snoozeAlertMessage = new SnoozeAlertMessage();
- snoozeAlertMessage.setAlertID(alert.getAlertId());
- connectionService.requestMessage(snoozeAlertMessage).await();
+ synchronized ($alertLock) {
+ if (alert == null) return;
+ alert.setAlertStatus(AlertStatus.SNOOZED);
+ alertLiveData.postValue(alert);
+ stopAlerting();
+ showNotification(alert);
+ SnoozeAlertMessage snoozeAlertMessage = new SnoozeAlertMessage();
+ snoozeAlertMessage.setAlertID(alert.getAlertId());
+ connectionService.requestMessage(snoozeAlertMessage).await();
+ }
} catch (AppLayerErrorException e) {
log.info("Exception while muting alert: " + e.getClass().getCanonicalName() + " (" + e.getErrorCode() + ")");
ExceptionTranslator.makeToast(InsightAlertService.this, e);
@@ -236,9 +256,16 @@ public class InsightAlertService extends Service implements InsightConnectionSer
public void confirm() {
new Thread(() -> {
try {
- ConfirmAlertMessage confirmAlertMessage = new ConfirmAlertMessage();
- confirmAlertMessage.setAlertID(alert.getAlertId());
- connectionService.requestMessage(confirmAlertMessage).await();
+ synchronized ($alertLock) {
+ if (alert == null) return;
+ stopAlerting();
+ alertLiveData.postValue(null);
+ dismissNotification();
+ ConfirmAlertMessage confirmAlertMessage = new ConfirmAlertMessage();
+ confirmAlertMessage.setAlertID(alert.getAlertId());
+ connectionService.requestMessage(confirmAlertMessage).await();
+ this.alert = null;
+ }
} catch (AppLayerErrorException e) {
log.info("Exception while confirming alert: " + e.getClass().getCanonicalName() + " (" + e.getErrorCode() + ")");
ExceptionTranslator.makeToast(InsightAlertService.this, e);
@@ -252,6 +279,48 @@ public class InsightAlertService extends Service implements InsightConnectionSer
}).start();
}
+ private void showNotification(Alert alert) {
+ NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, LocalInsightPlugin.ALERT_CHANNEL_ID);
+
+ notificationBuilder.setPriority(NotificationCompat.PRIORITY_MAX);
+ notificationBuilder.setCategory(NotificationCompat.CATEGORY_ALARM);
+ notificationBuilder.setVibrate(new long[0]);
+ notificationBuilder.setShowWhen(false);
+ notificationBuilder.setOngoing(true);
+ notificationBuilder.setOnlyAlertOnce(true);
+ notificationBuilder.setAutoCancel(false);
+ notificationBuilder.setSmallIcon(AlertUtilsKt.getAlertIcon(alert.getAlertCategory()));
+
+ notificationBuilder.setContentTitle(AlertUtilsKt.getAlertCode(alert.getAlertType()) + " – " + AlertUtilsKt.getAlertTitle(alert.getAlertType()));
+ String description = AlertUtilsKt.getAlertDescription(alert);
+ if (description != null)
+ notificationBuilder.setContentText(Html.fromHtml(description).toString());
+
+ Intent fullScreenIntent = new Intent(this, InsightAlertActivity.class);
+ PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ notificationBuilder.setFullScreenIntent(fullScreenPendingIntent, true);
+
+ switch (alert.getAlertStatus()) {
+ case ACTIVE:
+ Intent muteIntent = new Intent(this, InsightAlertService.class).putExtra("command", "mute");
+ PendingIntent mutePendingIntent = PendingIntent.getService(this, 1, muteIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ notificationBuilder.addAction(0, MainApp.gs(R.string.mute_alert), mutePendingIntent);
+ case SNOOZED:
+ Intent confirmIntent = new Intent(this, InsightAlertService.class).putExtra("command", "confirm");
+ PendingIntent confirmPendingIntent = PendingIntent.getService(this, 2, confirmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ notificationBuilder.addAction(0, MainApp.gs(R.string.confirm), confirmPendingIntent);
+ }
+
+ Notification notification = notificationBuilder.build();
+ NotificationManagerCompat.from(this).notify(NOTIFICATION_ID, notification);
+ startForeground(NOTIFICATION_ID, notification);
+ }
+
+ private void dismissNotification() {
+ NotificationManagerCompat.from(this).cancel(NOTIFICATION_ID);
+ stopForeground(true);
+ }
+
public class LocalBinder extends Binder {
public InsightAlertService getService() {
return InsightAlertService.this;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java
index bae3e6da3c..9346e2ca3d 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java
@@ -1,9 +1,12 @@
package info.nightscout.androidaps.plugins.pump.insight;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
@@ -133,6 +136,8 @@ import info.nightscout.androidaps.utils.TimeChangeType;
public class LocalInsightPlugin extends PluginBase implements PumpInterface, ConstraintsInterface, InsightConnectionService.StateCallback {
+ public static final String ALERT_CHANNEL_ID = "AndroidAPS-InsightAlert";
+
private static LocalInsightPlugin instance = null;
private Logger log = LoggerFactory.getLogger(L.PUMP);
@@ -246,6 +251,16 @@ public class LocalInsightPlugin extends PluginBase implements PumpInterface, Con
super.onStart();
MainApp.instance().bindService(new Intent(MainApp.instance(), InsightConnectionService.class), serviceConnection, Context.BIND_AUTO_CREATE);
MainApp.instance().bindService(new Intent(MainApp.instance(), InsightAlertService.class), serviceConnection, Context.BIND_AUTO_CREATE);
+ createNotificationChannel();
+ }
+
+ private void createNotificationChannel() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ NotificationManager notificationManager = (NotificationManager) MainApp.instance().getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channel = new NotificationChannel(ALERT_CHANNEL_ID, MainApp.gs(R.string.insight_alert_notification_channel), NotificationManager.IMPORTANCE_HIGH);
+ channel.setSound(null, null);
+ notificationManager.createNotificationChannel(channel);
+ }
}
@Override
@@ -648,8 +663,9 @@ public class LocalInsightPlugin extends PluginBase implements PumpInterface, Con
cancelBolusMessage.setBolusID(bolusID);
connectionService.requestMessage(cancelBolusMessage).await();
bolusCancelled = true;
+ confirmAlert(AlertType.WARNING_38);
+ alertService.ignore(null);
}
- confirmAlert(AlertType.WARNING_38);
} catch (AppLayerErrorException e) {
log.info("Exception while canceling bolus: " + e.getClass().getCanonicalName() + " (" + e.getErrorCode() + ")");
} catch (InsightException e) {
@@ -938,6 +954,7 @@ public class LocalInsightPlugin extends PluginBase implements PumpInterface, Con
@Override
public JSONObject getJSONStatus(Profile profile, String profileName) {
long now = System.currentTimeMillis();
+ if (connectionService == null) return null;
if (System.currentTimeMillis() - connectionService.getLastConnected() > (60 * 60 * 1000)) {
return null;
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java
index 77be3ab03a..8ebd05801b 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java
@@ -12,19 +12,18 @@ import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
-import java.text.DecimalFormat;
-
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
import info.nightscout.androidaps.plugins.pump.insight.InsightAlertService;
import info.nightscout.androidaps.plugins.pump.insight.descriptors.Alert;
import info.nightscout.androidaps.plugins.pump.insight.descriptors.AlertStatus;
+import info.nightscout.androidaps.plugins.pump.insight.utils.AlertUtilsKt;
-public class InsightAlertActivity extends NoSplashAppCompatActivity {
+public class InsightAlertActivity extends AppCompatActivity {
- private Alert alert;
private InsightAlertService alertService;
private ImageView icon;
@@ -38,10 +37,10 @@ public class InsightAlertActivity extends NoSplashAppCompatActivity {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
alertService = ((InsightAlertService.LocalBinder) binder).getService();
- alertService.setAlertActivity(InsightAlertActivity.this);
- alert = alertService.getAlert();
- if (alert == null) finish();
- else update(alert);
+ alertService.getAlertLiveData().observe(InsightAlertActivity.this, alert -> {
+ if (alert == null) finish();
+ else update(alert);
+ });
}
@Override
@@ -70,174 +69,22 @@ public class InsightAlertActivity extends NoSplashAppCompatActivity {
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
- WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
- layoutParams.screenBrightness = 1.0F;
- getWindow().setAttributes(layoutParams);
}
@Override
protected void onDestroy() {
- alertService.setAlertActivity(null);
unbindService(serviceConnection);
super.onDestroy();
}
public void update(Alert alert) {
- this.alert = alert;
mute.setEnabled(true);
mute.setVisibility(alert.getAlertStatus() == AlertStatus.SNOOZED ? View.GONE : View.VISIBLE);
confirm.setEnabled(true);
- int icon = 0;
- int code = 0;
- int title = 0;
- String description = null;
- switch (alert.getAlertCategory()) {
- case ERROR:
- icon = R.drawable.ic_error;
- break;
- case MAINTENANCE:
- icon = R.drawable.ic_maintenance;
- break;
- case WARNING:
- icon = R.drawable.ic_warning;
- break;
- case REMINDER:
- icon = R.drawable.ic_reminder;
- break;
- }
- DecimalFormat decimalFormat = new DecimalFormat("##0.00");
- int hours = alert.getTBRDuration() / 60;
- int minutes = alert.getTBRDuration() - hours * 60;
- switch (alert.getAlertType()) {
- case REMINDER_01:
- code = R.string.alert_r1_code;
- title = R.string.alert_r1_title;
- break;
- case REMINDER_02:
- code = R.string.alert_r2_code;
- title = R.string.alert_r2_title;
- break;
- case REMINDER_03:
- code = R.string.alert_r3_code;
- title = R.string.alert_r3_title;
- break;
- case REMINDER_04:
- code = R.string.alert_r4_code;
- title = R.string.alert_r4_title;
- break;
- case REMINDER_07:
- code = R.string.alert_r7_code;
- title = R.string.alert_r7_title;
- description = getString(R.string.alert_r7_description, alert.getTBRAmount(), new DecimalFormat("#0").format(hours) + ":" + new DecimalFormat("00").format(minutes));
- break;
- case WARNING_31:
- code = R.string.alert_w31_code;
- title = R.string.alert_w31_title;
- description = getString(R.string.alert_w31_description, decimalFormat.format(alert.getCartridgeAmount()));
- break;
- case WARNING_32:
- code = R.string.alert_w32_code;
- title = R.string.alert_w32_title;
- description = getString(R.string.alert_w32_description);
- break;
- case WARNING_33:
- code = R.string.alert_w33_code;
- title = R.string.alert_w33_title;
- description = getString(R.string.alert_w33_description);
- break;
- case WARNING_34:
- code = R.string.alert_w34_code;
- title = R.string.alert_w34_title;
- description = getString(R.string.alert_w34_description);
- break;
- case WARNING_36:
- code = R.string.alert_w36_code;
- title = R.string.alert_w36_title;
- description = getString(R.string.alert_w36_description, alert.getTBRAmount(), new DecimalFormat("#0").format(hours) + ":" + new DecimalFormat("00").format(minutes));
- break;
- case WARNING_38:
- code = R.string.alert_w38_code;
- title = R.string.alert_w38_title;
- description = getString(R.string.alert_w38_description, decimalFormat.format(alert.getProgrammedBolusAmount()), decimalFormat.format(alert.getDeliveredBolusAmount()));
- break;
- case WARNING_39:
- code = R.string.alert_w39_code;
- title = R.string.alert_w39_title;
- break;
- case MAINTENANCE_20:
- code = R.string.alert_m20_code;
- title = R.string.alert_m20_title;
- description = getString(R.string.alert_m20_description);
- break;
- case MAINTENANCE_21:
- code = R.string.alert_m21_code;
- title = R.string.alert_m21_title;
- description = getString(R.string.alert_m21_description);
- break;
- case MAINTENANCE_22:
- code = R.string.alert_m22_code;
- title = R.string.alert_m22_title;
- description = getString(R.string.alert_m22_description);
- break;
- case MAINTENANCE_23:
- code = R.string.alert_m23_code;
- title = R.string.alert_m23_title;
- description = getString(R.string.alert_m23_description);
- break;
- case MAINTENANCE_24:
- code = R.string.alert_m24_code;
- title = R.string.alert_m24_title;
- description = getString(R.string.alert_m24_description);
- break;
- case MAINTENANCE_25:
- code = R.string.alert_m25_code;
- title = R.string.alert_m25_title;
- description = getString(R.string.alert_m25_description);
- break;
- case MAINTENANCE_26:
- code = R.string.alert_m26_code;
- title = R.string.alert_m26_title;
- description = getString(R.string.alert_m26_description);
- break;
- case MAINTENANCE_27:
- code = R.string.alert_m27_code;
- title = R.string.alert_m27_title;
- description = getString(R.string.alert_m27_description);
- break;
- case MAINTENANCE_28:
- code = R.string.alert_m28_code;
- title = R.string.alert_m28_title;
- description = getString(R.string.alert_m28_description);
- break;
- case MAINTENANCE_29:
- code = R.string.alert_m29_code;
- title = R.string.alert_m29_title;
- description = getString(R.string.alert_m29_description);
- break;
- case MAINTENANCE_30:
- code = R.string.alert_m30_code;
- title = R.string.alert_m30_title;
- description = getString(R.string.alert_m30_description);
- break;
- case ERROR_6:
- code = R.string.alert_e6_code;
- title = R.string.alert_e6_title;
- description = getString(R.string.alert_e6_description);
- break;
- case ERROR_10:
- code = R.string.alert_e10_code;
- title = R.string.alert_e10_title;
- description = getString(R.string.alert_e10_description);
- break;
- case ERROR_13:
- code = R.string.alert_e13_code;
- title = R.string.alert_e13_title;
- description = getString(R.string.alert_e13_description);
- break;
- }
- this.icon.setImageDrawable(ContextCompat.getDrawable(this, icon));
- this.errorCode.setText(code);
- this.errorTitle.setText(title);
+ this.icon.setImageDrawable(ContextCompat.getDrawable(this, AlertUtilsKt.getAlertIcon(alert.getAlertCategory())));
+ this.errorCode.setText(AlertUtilsKt.getAlertCode(alert.getAlertType()));
+ this.errorTitle.setText(AlertUtilsKt.getAlertTitle(alert.getAlertType()));
+ String description = AlertUtilsKt.getAlertDescription(alert);
if (description == null) this.errorDescription.setVisibility(View.GONE);
else {
this.errorDescription.setVisibility(View.VISIBLE);
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/descriptors/Alert.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/descriptors/Alert.java
index 8f6668c1ca..028fcb3b71 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/descriptors/Alert.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/descriptors/Alert.java
@@ -83,4 +83,24 @@ public class Alert {
public double getCartridgeAmount() {
return cartridgeAmount;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Alert alert = (Alert) o;
+
+ if (alertId != alert.alertId) return false;
+ if (tbrAmount != alert.tbrAmount) return false;
+ if (tbrDuration != alert.tbrDuration) return false;
+ if (Double.compare(alert.programmedBolusAmount, programmedBolusAmount) != 0)
+ return false;
+ if (Double.compare(alert.deliveredBolusAmount, deliveredBolusAmount) != 0)
+ return false;
+ if (Double.compare(alert.cartridgeAmount, cartridgeAmount) != 0) return false;
+ if (alertCategory != alert.alertCategory) return false;
+ if (alertType != alert.alertType) return false;
+ return alertStatus == alert.alertStatus;
+ }
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/utils/AlertUtils.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/utils/AlertUtils.kt
new file mode 100644
index 0000000000..7cafb950cc
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/insight/utils/AlertUtils.kt
@@ -0,0 +1,107 @@
+package info.nightscout.androidaps.plugins.pump.insight.utils
+
+import info.nightscout.androidaps.MainApp
+import info.nightscout.androidaps.R
+import info.nightscout.androidaps.plugins.pump.insight.descriptors.Alert
+import info.nightscout.androidaps.plugins.pump.insight.descriptors.AlertCategory
+import info.nightscout.androidaps.plugins.pump.insight.descriptors.AlertType
+import java.text.DecimalFormat
+
+fun getAlertCode(alertType: AlertType) = MainApp.gs(when (alertType) {
+ AlertType.REMINDER_01 -> R.string.alert_r1_code
+ AlertType.REMINDER_02 -> R.string.alert_r2_code
+ AlertType.REMINDER_03 -> R.string.alert_r3_code
+ AlertType.REMINDER_04 -> R.string.alert_r4_code
+ AlertType.REMINDER_07 -> R.string.alert_r7_code
+ AlertType.WARNING_31 -> R.string.alert_w31_code
+ AlertType.WARNING_32 -> R.string.alert_w32_code
+ AlertType.WARNING_33 -> R.string.alert_w33_code
+ AlertType.WARNING_34 -> R.string.alert_w34_code
+ AlertType.WARNING_36 -> R.string.alert_w36_code
+ AlertType.WARNING_38 -> R.string.alert_w38_code
+ AlertType.WARNING_39 -> R.string.alert_w39_code
+ AlertType.MAINTENANCE_20 -> R.string.alert_m20_code
+ AlertType.MAINTENANCE_21 -> R.string.alert_m21_code
+ AlertType.MAINTENANCE_22 -> R.string.alert_m22_code
+ AlertType.MAINTENANCE_23 -> R.string.alert_m23_code
+ AlertType.MAINTENANCE_24 -> R.string.alert_m24_code
+ AlertType.MAINTENANCE_25 -> R.string.alert_m25_code
+ AlertType.MAINTENANCE_26 -> R.string.alert_m26_code
+ AlertType.MAINTENANCE_27 -> R.string.alert_m27_code
+ AlertType.MAINTENANCE_28 -> R.string.alert_m28_code
+ AlertType.MAINTENANCE_29 -> R.string.alert_m29_code
+ AlertType.MAINTENANCE_30 -> R.string.alert_m30_code
+ AlertType.ERROR_6 -> R.string.alert_e6_code
+ AlertType.ERROR_10 -> R.string.alert_e10_code
+ AlertType.ERROR_13 -> R.string.alert_e13_code
+})
+
+fun getAlertTitle(alertType: AlertType) = MainApp.gs(when (alertType) {
+ AlertType.REMINDER_01 -> R.string.alert_r1_title
+ AlertType.REMINDER_02 -> R.string.alert_r2_title
+ AlertType.REMINDER_03 -> R.string.alert_r3_title
+ AlertType.REMINDER_04 -> R.string.alert_r4_title
+ AlertType.REMINDER_07 -> R.string.alert_r7_title
+ AlertType.WARNING_31 -> R.string.alert_w31_title
+ AlertType.WARNING_32 -> R.string.alert_w32_title
+ AlertType.WARNING_33 -> R.string.alert_w33_title
+ AlertType.WARNING_34 -> R.string.alert_w34_title
+ AlertType.WARNING_36 -> R.string.alert_w36_title
+ AlertType.WARNING_38 -> R.string.alert_w38_title
+ AlertType.WARNING_39 -> R.string.alert_w39_title
+ AlertType.MAINTENANCE_20 -> R.string.alert_m20_title
+ AlertType.MAINTENANCE_21 -> R.string.alert_m21_title
+ AlertType.MAINTENANCE_22 -> R.string.alert_m22_title
+ AlertType.MAINTENANCE_23 -> R.string.alert_m23_title
+ AlertType.MAINTENANCE_24 -> R.string.alert_m24_title
+ AlertType.MAINTENANCE_25 -> R.string.alert_m25_title
+ AlertType.MAINTENANCE_26 -> R.string.alert_m26_title
+ AlertType.MAINTENANCE_27 -> R.string.alert_m27_title
+ AlertType.MAINTENANCE_28 -> R.string.alert_m28_title
+ AlertType.MAINTENANCE_29 -> R.string.alert_m29_title
+ AlertType.MAINTENANCE_30 -> R.string.alert_m30_title
+ AlertType.ERROR_6 -> R.string.alert_e6_title
+ AlertType.ERROR_10 -> R.string.alert_e10_title
+ AlertType.ERROR_13 -> R.string.alert_e13_title
+})
+
+fun getAlertDescription(alert: Alert): String? {
+ val decimalFormat = DecimalFormat("##0.00")
+ val hours = alert.tbrDuration / 60
+ val minutes = alert.tbrDuration - hours * 60
+ return when (alert.alertType!!) {
+ AlertType.REMINDER_01 -> null
+ AlertType.REMINDER_02 -> null
+ AlertType.REMINDER_03 -> null
+ AlertType.REMINDER_04 -> null
+ AlertType.REMINDER_07 -> MainApp.gs(R.string.alert_r7_description, alert.tbrAmount, DecimalFormat("#0").format(hours.toLong()) + ":" + DecimalFormat("00").format(minutes.toLong()))
+ AlertType.WARNING_31 -> MainApp.gs(R.string.alert_w31_description, decimalFormat.format(alert.cartridgeAmount))
+ AlertType.WARNING_32 -> MainApp.gs(R.string.alert_w32_description)
+ AlertType.WARNING_33 -> MainApp.gs(R.string.alert_w33_description)
+ AlertType.WARNING_34 -> MainApp.gs(R.string.alert_w34_description)
+ AlertType.WARNING_36 -> MainApp.gs(R.string.alert_w36_description, alert.tbrAmount, DecimalFormat("#0").format(hours.toLong()) + ":" + DecimalFormat("00").format(minutes.toLong()))
+ AlertType.WARNING_38 -> MainApp.gs(R.string.alert_w38_description, decimalFormat.format(alert.programmedBolusAmount), decimalFormat.format(alert.deliveredBolusAmount))
+ AlertType.WARNING_39 -> null
+ AlertType.MAINTENANCE_20 -> MainApp.gs(R.string.alert_m20_description)
+ AlertType.MAINTENANCE_21 -> MainApp.gs(R.string.alert_m21_description)
+ AlertType.MAINTENANCE_22 -> MainApp.gs(R.string.alert_m22_description)
+ AlertType.MAINTENANCE_23 -> MainApp.gs(R.string.alert_m23_description)
+ AlertType.MAINTENANCE_24 -> MainApp.gs(R.string.alert_m24_description)
+ AlertType.MAINTENANCE_25 -> MainApp.gs(R.string.alert_m25_description)
+ AlertType.MAINTENANCE_26 -> MainApp.gs(R.string.alert_m26_description)
+ AlertType.MAINTENANCE_27 -> MainApp.gs(R.string.alert_m27_description)
+ AlertType.MAINTENANCE_28 -> MainApp.gs(R.string.alert_m28_description)
+ AlertType.MAINTENANCE_29 -> MainApp.gs(R.string.alert_m29_description)
+ AlertType.MAINTENANCE_30 -> MainApp.gs(R.string.alert_m30_description)
+ AlertType.ERROR_6 -> MainApp.gs(R.string.alert_e6_description)
+ AlertType.ERROR_10 -> MainApp.gs(R.string.alert_e10_description)
+ AlertType.ERROR_13 -> MainApp.gs(R.string.alert_e13_description)
+ }
+}
+
+fun getAlertIcon(alertCategory: AlertCategory) = when (alertCategory) {
+ AlertCategory.ERROR -> R.drawable.ic_error
+ AlertCategory.MAINTENANCE -> R.drawable.ic_maintenance
+ AlertCategory.WARNING -> R.drawable.ic_warning
+ AlertCategory.REMINDER -> R.drawable.ic_reminder
+}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentService.java b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentService.java
index 1331c8eedf..1b118da1d3 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentService.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentService.java
@@ -160,7 +160,7 @@ public class TreatmentService extends OrmLiteBaseService {
} catch (SQLException e) {
log.error("Unhandled exception", e);
}
- scheduleTreatmentChange(null);
+ scheduleTreatmentChange(null, true);
}
@@ -208,18 +208,30 @@ public class TreatmentService extends OrmLiteBaseService {
/**
* Schedule a foodChange Event.
*/
- public void scheduleTreatmentChange(@Nullable final Treatment treatment) {
- this.scheduleEvent(new EventReloadTreatmentData(new EventTreatmentChange(treatment)), treatmentEventWorker, new ICallback() {
- @Override
- public void setPost(ScheduledFuture> post) {
- scheduledTreatmentEventPost = post;
+ public void scheduleTreatmentChange(@Nullable final Treatment treatment, boolean runImmediately) {
+ if (runImmediately) {
+ if (L.isEnabled(L.DATATREATMENTS))
+ log.debug("Firing EventReloadTreatmentData");
+ RxBus.INSTANCE.send(new EventReloadTreatmentData(new EventTreatmentChange(treatment)));
+ if (DatabaseHelper.earliestDataChange != null) {
+ if (L.isEnabled(L.DATATREATMENTS))
+ log.debug("Firing EventNewHistoryData");
+ RxBus.INSTANCE.send(new EventNewHistoryData(DatabaseHelper.earliestDataChange));
}
+ DatabaseHelper.earliestDataChange = null;
+ } else {
+ this.scheduleEvent(new EventReloadTreatmentData(new EventTreatmentChange(treatment)), treatmentEventWorker, new ICallback() {
+ @Override
+ public void setPost(ScheduledFuture> post) {
+ scheduledTreatmentEventPost = post;
+ }
- @Override
- public ScheduledFuture> getPost() {
- return scheduledTreatmentEventPost;
- }
- });
+ @Override
+ public ScheduledFuture> getPost() {
+ return scheduledTreatmentEventPost;
+ }
+ });
+ }
}
public List getTreatmentData() {
@@ -294,7 +306,7 @@ public class TreatmentService extends OrmLiteBaseService {
getDao().create(existingTreatment);
DatabaseHelper.updateEarliestDataChange(oldDate);
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
return new UpdateReturn(sameSource, false); //updating a pump treatment with another one from the pump is not counted as clash
}
return new UpdateReturn(equalRePumpHistory, false);
@@ -318,14 +330,14 @@ public class TreatmentService extends OrmLiteBaseService {
getDao().create(existingTreatment);
DatabaseHelper.updateEarliestDataChange(oldDate);
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
return new UpdateReturn(equalRePumpHistory || sameSource, false);
}
getDao().create(treatment);
if (L.isEnabled(L.DATATREATMENTS))
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
DatabaseHelper.updateEarliestDataChange(treatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
return new UpdateReturn(true, true);
}
if (treatment.source == Source.NIGHTSCOUT) {
@@ -343,7 +355,7 @@ public class TreatmentService extends OrmLiteBaseService {
DatabaseHelper.updateEarliestDataChange(oldDate);
DatabaseHelper.updateEarliestDataChange(old.date);
}
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, false);
return new UpdateReturn(true, true);
}
if (L.isEnabled(L.DATATREATMENTS))
@@ -366,7 +378,7 @@ public class TreatmentService extends OrmLiteBaseService {
DatabaseHelper.updateEarliestDataChange(oldDate);
DatabaseHelper.updateEarliestDataChange(old.date);
}
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, false);
return new UpdateReturn(true, true);
}
if (L.isEnabled(L.DATATREATMENTS))
@@ -378,7 +390,7 @@ public class TreatmentService extends OrmLiteBaseService {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
DatabaseHelper.updateEarliestDataChange(treatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, false);
return new UpdateReturn(true, true);
}
if (treatment.source == Source.USER) {
@@ -386,7 +398,7 @@ public class TreatmentService extends OrmLiteBaseService {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
DatabaseHelper.updateEarliestDataChange(treatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
return new UpdateReturn(true, true);
}
} catch (SQLException e) {
@@ -414,7 +426,7 @@ public class TreatmentService extends OrmLiteBaseService {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
DatabaseHelper.updateEarliestDataChange(treatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
return new UpdateReturn(true, true);
} else {
@@ -428,7 +440,7 @@ public class TreatmentService extends OrmLiteBaseService {
}
getDao().update(existingTreatment);
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
return new UpdateReturn(true, false);
} else {
if (MedtronicHistoryData.doubleBolusDebug)
@@ -439,7 +451,7 @@ public class TreatmentService extends OrmLiteBaseService {
optionalTreatmentCopy(existingTreatment, treatment, fromNightScout);
getDao().create(existingTreatment);
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
return new UpdateReturn(true, false); //updating a pump treatment with another one from the pump is not counted as clash
}
}
@@ -626,9 +638,13 @@ public class TreatmentService extends OrmLiteBaseService {
if (stored != null) {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("Removing Treatment record from database: " + stored.toString());
- delete(stored);
+ try {
+ getDao().delete(stored);
+ } catch (SQLException e) {
+ log.error("Unhandled exception", e);
+ }
DatabaseHelper.updateEarliestDataChange(stored.date);
- scheduleTreatmentChange(null);
+ this.scheduleTreatmentChange(stored, false);
}
}
@@ -643,7 +659,7 @@ public class TreatmentService extends OrmLiteBaseService {
try {
getDao().delete(treatment);
DatabaseHelper.updateEarliestDataChange(treatment.date);
- this.scheduleTreatmentChange(treatment);
+ this.scheduleTreatmentChange(treatment, true);
} catch (SQLException e) {
log.error("Unhandled exception", e);
}
@@ -656,7 +672,7 @@ public class TreatmentService extends OrmLiteBaseService {
} catch (SQLException e) {
log.error("Unhandled exception", e);
}
- scheduleTreatmentChange(treatment);
+ scheduleTreatmentChange(treatment, true);
}
/**
diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.kt b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.kt
index 7ca4f962ae..40a9088497 100644
--- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.kt
+++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.kt
@@ -23,9 +23,6 @@ import org.slf4j.LoggerFactory
import kotlin.math.abs
class KeepAliveReceiver : BroadcastReceiver() {
- private var lastReadStatus: Long = 0
- private var lastRun: Long = 0
- private var lastIobUpload: Long = 0
override fun onReceive(context: Context, rIntent: Intent) {
if (L.isEnabled(L.CORE))
@@ -47,6 +44,10 @@ class KeepAliveReceiver : BroadcastReceiver() {
private val STATUS_UPDATE_FREQUENCY = T.mins(15).msecs()
private val IOB_UPDATE_FREQUENCY = T.mins(5).msecs()
+ private var lastReadStatus: Long = 0
+ private var lastRun: Long = 0
+ private var lastIobUpload: Long = 0
+
//called by MainApp at first app start
@JvmStatic
fun setAlarm(context: Context) {
diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/NetworkChangeReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/NetworkChangeReceiver.java
index 19cf12bc8a..a8bad9e676 100644
--- a/app/src/main/java/info/nightscout/androidaps/receivers/NetworkChangeReceiver.java
+++ b/app/src/main/java/info/nightscout/androidaps/receivers/NetworkChangeReceiver.java
@@ -24,8 +24,6 @@ public class NetworkChangeReceiver extends BroadcastReceiver {
private static EventNetworkChange lastEvent = null;
- public static final NetworkChangeReceiver instance = new NetworkChangeReceiver();
-
@Override
public void onReceive(final Context context, final Intent intent) {
EventNetworkChange event = grabNetworkStatus(context);
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.kt b/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.kt
index 1d22c380ca..830053bef0 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.kt
@@ -62,13 +62,11 @@ object OKDialog {
}
@JvmStatic
- @JvmOverloads
fun showConfirmation(activity: Activity, message: String, ok: Runnable?) {
showConfirmation(activity, MainApp.gs(R.string.confirmation), message, ok, null)
}
@JvmStatic
- @JvmOverloads
fun showConfirmation(activity: Activity, message: Spanned, ok: Runnable?) {
showConfirmation(activity, MainApp.gs(R.string.confirmation), message, ok, null)
}
diff --git a/app/src/main/res/layout/overview_fragment.xml b/app/src/main/res/layout/overview_fragment.xml
index 467c8c171a..35ddd5eed4 100644
--- a/app/src/main/res/layout/overview_fragment.xml
+++ b/app/src/main/res/layout/overview_fragment.xml
@@ -477,7 +477,8 @@
app:layout_constraintBottom_toTopOf="@id/overview_buttons_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/overview_toppart_scrollbar" />
+ app:layout_constraintTop_toBottomOf="@id/overview_toppart_scrollbar"
+ android:visibility="gone"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-af-rZA/objectives.xml b/app/src/main/res/values-af-rZA/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-af-rZA/objectives.xml
+++ b/app/src/main/res/values-af-rZA/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml
index a800677ac4..0497576890 100644
--- a/app/src/main/res/values-af-rZA/strings.xml
+++ b/app/src/main/res/values-af-rZA/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-bg-rBG/objectives.xml b/app/src/main/res/values-bg-rBG/objectives.xml
index d2e47ec386..633ff84c99 100644
--- a/app/src/main/res/values-bg-rBG/objectives.xml
+++ b/app/src/main/res/values-bg-rBG/objectives.xml
@@ -1,5 +1,4 @@
-
Назад
Старт
@@ -36,7 +35,7 @@
Отворете съдържанието на Цикъл плъгина.
Използвайте функцията за удължаване на периода на графиката, като задържите върху нея.
Въведи
- Ако сте били потребител на OpenAPS и НС има най-малко 3 месеца цикъл на данни, можете да изпращате по електронна поща objectives@androidaps.org с адрес на НС, за да поискате код за заобикаляне на останалите цели. Въведете кода, получен от разработчици
+ Ако имате поне 3 месеца опит с други системи, които биха може да получите код за пропускане на целите. Прочетете https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives за получаване на подробна информация.
Код приет!
Неправилен код
Докажете знанията си
@@ -47,6 +46,7 @@
Код (request code): %1$s
(отбележете всички правилни отговори)
https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-to-do-when-taking-a-shower-or-bath
+ Няма връзка с Интернет!
Не може да се вземе времето
Задачите не са изпълнени
diff --git a/app/src/main/res/values-cs-rCZ/exam.xml b/app/src/main/res/values-cs-rCZ/exam.xml
index a65151aee8..5c038e57a4 100644
--- a/app/src/main/res/values-cs-rCZ/exam.xml
+++ b/app/src/main/res/values-cs-rCZ/exam.xml
@@ -1,5 +1,4 @@
-
Co je pravda o DIA?
Téma: Doba trvání účinku inzulínu
diff --git a/app/src/main/res/values-cs-rCZ/objectives.xml b/app/src/main/res/values-cs-rCZ/objectives.xml
index 76597c063d..b47865c3ef 100644
--- a/app/src/main/res/values-cs-rCZ/objectives.xml
+++ b/app/src/main/res/values-cs-rCZ/objectives.xml
@@ -1,5 +1,4 @@
-
Zpět
Začátek
@@ -36,7 +35,7 @@
Zobrazte obsah modulu Smyčka
Přepněte režim zobrazení dlouhým stisknutím grafu glykémie
Zadat
- Pokud jste byli dříve uživateli OpenAPS a váš NS má alespoň 3 měsíce dat z používání smyčky, můžete poslat e-mail na adresu objectives@androidaps.org s adresou svého NS a požádat o kód, pomocí něhož budete moci obejít zbývající cíle. Zadejte kód získaný od vývojářů.
+ Pokud máte alespoň 3 měsíce zkušeností s uzavřenou smyčkou na jiných systémech, můžete získat kód, který vám umožní přeskočit cíle. Více informací najdete na https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Usage/Objectives.html#skip-objectives.
Kód přijat
Neplatný kód
Prokažte své znalosti
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index 23a29a18b6..d879db8f49 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -280,7 +280,7 @@
DanaR profil
DIA [h]
Celková doba aktivity inzulínu
- Chyba při nastavení dočasného bazálu
+ Chyba při nastavení bazálního pprofilu
Načíst
Nahrávám
E bolus
@@ -340,7 +340,7 @@
Spuštění dočasného bazálu selhalo
Spuštění prodlouženého bolusu selhalo
Na zastavení dočasného bazálu odpovězte SMS s kódem %1$s
- Na zastavení prodlouženého bolusu odpovězte SMS s kódem %1$s
+ Pro zastavení prodlouženého bolusu odpovězte SMS s kódem %1$s
Dočasný bazál zastaven
Prodloužený bolus zastaven
Rušení dočasného bazálu selhalo
@@ -1443,8 +1443,8 @@
Již nastaveno
Zpráva
Vymazat frontu? Všechna data ve frontě budou ztracena!
- Použití funkce rozloženého bolusu zastaví uzavřenou smyčku po dobu trvání rozloženého bolusu. Opravdu to chcete?
- Uzavřená smyčka je zastavena kvůli běžícímu rozloženému bolusu
+ Použití funkce prodlouženého bolusu zastaví uzavřenou smyčku po dobu trvání prodlouženého bolusu. Opravdu to chcete?
+ Uzavřená smyčka je zastavena kvůli běžícímu prodlouženému bolusu
EB
PhoneChecker
Možnosti grafu
@@ -1453,4 +1453,5 @@
Čas provedení SMB
Čas požadavku dočasného bazálu
Čas provedení dočasného bazálu
+ Upozornění pumpy Insight
diff --git a/app/src/main/res/values-de-rDE/objectives.xml b/app/src/main/res/values-de-rDE/objectives.xml
index c2a3fe603e..e094670b18 100644
--- a/app/src/main/res/values-de-rDE/objectives.xml
+++ b/app/src/main/res/values-de-rDE/objectives.xml
@@ -1,5 +1,4 @@
-
Zurück
Start
@@ -37,7 +36,7 @@ die Formel maxIOB = durchschnittlicher Essensbolus + 3 x höchste BasalrateZeige den Inhalt des Loop-Plugins an
Nutze die Skalierfunktion. Drücke dazu lange auf das BZ-Diagramm
OK
- Wenn Du früher bereits OpenAPS genutzt hast und auf Deiner Nightscout-Seite mindestens drei Monate Closed-Loop-Daten ersichtlich sind, kannst Du eine E-Mail an objectives@androidaps.org mit Deiner NS-URL und Deinem Anforderungscode senden, um die restlichen Ziele zu überspringen. Code eingeben, der von den Entwicklern übermittelt wurde:
+ Wenn Du mindestens 3 Monate Closed-Loop-Erfahrung mit einem anderen System hast, kannst Du evtl. einen Code zum Überspringen der Objektives erhalten. Weitere Details unter https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Usage/Objectives.html#objectives-ziele-uberspringen.
Code akzeptiert
Code ungültig
Prüfe Dein Wissen
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index 3ccf637260..324284d44f 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -1,5 +1,4 @@
-
@@ -686,7 +685,7 @@
g
min
h
- T
+ d
]]>
kJ
En
@@ -1455,4 +1454,5 @@ Unerwartetes Verhalten.
SMB Ausführungszeit
Temp. BR Anfragezeit
Temp. BR Ausführungszeit
+ Insight Pumpenalarme
diff --git a/app/src/main/res/values-el-rGR/objectives.xml b/app/src/main/res/values-el-rGR/objectives.xml
index 4a2ce25a1e..3bad200cdb 100644
--- a/app/src/main/res/values-el-rGR/objectives.xml
+++ b/app/src/main/res/values-el-rGR/objectives.xml
@@ -1,5 +1,4 @@
-
Πίσω
Έναρξη
diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml
index a314644f29..6c5050720e 100644
--- a/app/src/main/res/values-el-rGR/strings.xml
+++ b/app/src/main/res/values-el-rGR/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-es-rES/objectives.xml b/app/src/main/res/values-es-rES/objectives.xml
index 9f6a95c2b1..047ce04909 100644
--- a/app/src/main/res/values-es-rES/objectives.xml
+++ b/app/src/main/res/values-es-rES/objectives.xml
@@ -1,5 +1,4 @@
-
Atrás
Inicio
@@ -36,7 +35,6 @@
Mostrar contenido del plugin Loop
Usar función de escala mediante un gráfico BG pulsado largo
Intro
- Si fuiste usuario de OpenAPS y tu NS tiene al menos 3 meses de datos de lazo cerrado, puedes enviar un correo electrónico a objectives@androidaps.org con tu dirección web de NS y solicitar código para saltarse el resto de objetivos. Ingresa posteriormente el código obtenido de los desarrolladores
Código aceptado
Código no válido
Compruebe su conocimiento
diff --git a/app/src/main/res/values-fi-rFI/exam.xml b/app/src/main/res/values-fi-rFI/exam.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-fi-rFI/exam.xml
+++ b/app/src/main/res/values-fi-rFI/exam.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-fi-rFI/insight_alert_codes.xml b/app/src/main/res/values-fi-rFI/insight_alert_codes.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-fi-rFI/insight_alert_codes.xml
+++ b/app/src/main/res/values-fi-rFI/insight_alert_codes.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-fi-rFI/objectives.xml b/app/src/main/res/values-fi-rFI/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-fi-rFI/objectives.xml
+++ b/app/src/main/res/values-fi-rFI/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml
index df88c88e20..96062d70ad 100644
--- a/app/src/main/res/values-fi-rFI/strings.xml
+++ b/app/src/main/res/values-fi-rFI/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-fr-rFR/objectives.xml b/app/src/main/res/values-fr-rFR/objectives.xml
index 89af39e082..58f83d4a9c 100644
--- a/app/src/main/res/values-fr-rFR/objectives.xml
+++ b/app/src/main/res/values-fr-rFR/objectives.xml
@@ -1,5 +1,4 @@
-
Retour
Départ
@@ -36,7 +35,7 @@
Affichage du contenu du plugin Boucle
Modification de l\'échelle du graphique par un appui long sur la courbe de glycémie
Entrer
- Si vous étiez avant un utilisateur d\'OpenAPS et que votre NS a au moins 3 mois de données de bouclage, vous pouvez envoyer un e-mail à objectives@androidaps.org avec votre adresse NS et demander un code pour contourner le reste des objectifs. Entrez le code obtenu auprès des développeurs
+ Si vous avez au moins 3 mois d\'expérience de boucle fermée avec d\'autres systèmes, vous pourriez avoir droit à un code permettant d\'ignorer les objectifs. Voir https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Usage/Objectives.html#ignorer-les-objectifs pour plus de détails.
Code accepté
Code invalide
Prouver ses connaissances
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index 1ff963cf88..6f48c43122 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -42,10 +42,10 @@
Intégration pour les pompes Diabecare DANA RS
Intégration pompe pour les personnes qui font des injections quotidiennes multiples pour le traitement de leur diabète
Intégration pour les pompes qui n’ont pas encore de pilote (Boucle Ouverte)
- La Sensibilité est calculée de la même manière que Oref0, mais vous pouvez spécifier la periode concernée. L\'absorption minimale des glucides est calculée à partir des temps d’absorption max des glucides du menu préférences.
- Sensibilité est calculée à partir des données sur les dernières 24h et les glucides (non absorbés) ne sont plus pris en compte après l’heure spécifiée dans les préférences.
- Sensibilité est calculée à partir des données des dernières 8 heures et des glucides (si non absorbés) ne sont plus pris en compte après le temps spécifié dans les préférences. Plugin calcule également RNS (UAM).
- Sensibilité est calculée comme une moyenne pondérée des écarts. Les écarts les plus récents ont un poids plus élevé. L\'absorption minimale des glucides est calculée à partir des temps d’absorption des glucides max du menu préférences. Cet algorithme est le plus rapide pour s\'adapter aux changements de sensibilité.
+ La sensibilité est calculée de la même manière que Oref0, mais vous pouvez spécifier la période concernée. L\'absorption minimale des glucides est calculée à partir des temps d’absorption max des glucides du menu préférences.
+ La sensibilité est calculée à partir des données sur les dernières 24h et les glucides (si non absorbés) ne sont plus pris en compte après l’heure spécifiée dans les préférences.
+ La sensibilité est calculée à partir des données des dernières 8 heures et les glucides (si non absorbés) ne sont plus pris en compte après le temps spécifié dans les préférences. Le plugin calcule également les RNS (UAM).
+ La sensibilité est calculée comme une moyenne pondérée des écarts. Les écarts les plus récents ont un poids plus élevé. L\'absorption minimale des glucides est calculée à partir des temps d’absorption des glucides max du menu préférences. Cet algorithme est le plus rapide pour s\'adapter aux changements de sensibilité.
Recevoir les valeurs de glycémie de l’app Eversense patchée.
Recevoir les glycémies depuis Glimp.
Recevoir les glycémies depuis le 600SeriesAndroidUploder.
@@ -145,7 +145,7 @@
Valeur Basal [%]
Accepter nouveau basal temporaire :
Traitement
- Calculatrice
+ Assistant
Restriction appliquée !
Confirmation
Bolus
@@ -456,7 +456,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Valeur par défaut : 3 Ceci est un paramètre important de sécurité de l’OpenAPS. Ceci va limiter vos débits basal à 3 fois votre débit Basal maximum. Il est probable que vous n’aurez pas besoin de changer cela, mais vous devez être conscient de ce qui est discuté pour les limites de sécurité dans “3x max daily; 4x current”.
Valeur par défaut : 4 Ceci est l’autre moitié des paramètres de sécurité limitant l’OpenAPS, et l’autre moitié de “3x max daily, 4x current” des paramètres de sécurité. Quel que soit le basal maximum prédéfini dans votre pompe, il ne pourra pas être plus haut que ce nombre multiplié par le Basal actuel. Ceci est fait pour ne pas mettre l’utilisateur en danger en programmant des débits Basal maximum trop élevés avant de comprendre comment l’algorithme fonctionne. Encore une fois, la valeur par défaut est 4x, la plupart des gens n’auront jamais besoin d’ajuster ce paramètre, plutôt ils auront tendance à ajuster d’autres paramètres s’ils voient qu’ils atteignent ce paramètre de limite de sécurité.
Valeur par défaut: 1.2\nCeci est la limite du multiplicateur utilisé par Autosens (et bientôt Autotune) pour définir +20%% en limite maximale du ratio Autosens. En consequence, ceci dit va définir la valeur maximale du Basal pour Autosens, la valeur minimale de la Sensibilité à l\'Insuline (SI, ISF), et la valeur minimale de la cible glycémique.
- Valeur par défaut: 0.7\nL’autre aspect pour les limites de sécurité pour Autosens. Cette valeur va créer une limite qui définit jusqu\'à quelle valeur minimale Autosens va pouvoir ajuster le basal , et jusqu\'à quelles valeurs maximales Autosens pourra ajuster la Sensibilité à l\'Insuline (SI, ISF) et les cibles glycémiques.
+ Valeur par défaut: 0,7\nL\'autre volet des limites de sécurité de l\'autosens, c\'est de définir une limite basse sur l\'ajustement des débits de basal et une limite haute sur l\'ajustement de la SI et des cibles GLY effectués par l\'autosens.
Autosens ajuste aussi les cibles
Valeur par défaut : true\nCeci est utilisé pour autoriser Autosens à ajuster les cibles de glycémie en plus de SI et les basals.
Valeur par défaut : 2\nBolus snooze est activé apres votre bolus de repas, la boucle ne réagira pas avec des valeurs basses temporaire quand vous venez juste de manger. L’exemple ici et la valeur par défaut est 2 ; donc avec une Durée d\'Action (DIA) de 3 heures signifie que snooze bolus sera graduellement éliminé après 1,5 heures (3DIA/2).
@@ -543,7 +543,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
GA
Superbolus
Démarrage AAPS entré dans NS
- Sortie de l’application pour appliquer de nouveaux paramètres.
+ Sortir de l’application pour appliquer les nouveaux paramètres.
DanaRv2
Insuline
Quel type d\'insuline utilisez-vous ?
@@ -565,7 +565,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Firmware
Dernière connexion
État Bluetooth
- À propos de
+ À propos
Autorisation SMS manquante
Autorisation du téléphone manquante
état Xdrip (montre)
@@ -984,7 +984,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Paramétrage de la pompe invalide. Vérifiez la documentation et le menu QUICK INFO en utilisant le logiciel de configuration 360.
Personnalisé
Différence horaire importante
- La différence horaire importante:\nTime avec la pompe de plus d\'1,5 heure.\nMerci d\'ajuster manuellement l\'heure de la pompe et assurez-vous que la lecture de l\'historique de la pompe ne cause pas de dysfonctionnements.\nSi possible, effacez l\'historique de la pompe avant de modifier l\'heure ou désactivez la Boucle Fermée pour une DIA après la dernière entrée erronée de l\'historique et en tout état de cause au minimum une DIA à partir de maintenant.
+ Différence horaire importante:\nL\'heure de la pompe est en écart de plus d\'une heure et demi.\nMerci d\'ajuster manuellement l\'heure de la pompe et assurez-vous que la lecture de l\'historique de la pompe ne cause pas de dysfonctionnements.\nSi possible, effacez l\'historique de la pompe avant de modifier l\'heure ou désactivez la Boucle Fermée pour une DAI après la dernière entrée erronée de l\'historique et au minimum une DAI à partir de maintenant.
Réinitialiser AndroidAPS
Paramètres sauvegardés trouvés
ATTENTION : Si vous activez et connectez à une vraie pompe, AndroidAPS copiera les paramètres Basals du profil vers la pompe, écrasant le taux basal existant stocké sur la pompe. Assurez-vous d\'avoir correctement saisi et réglé les paramètres Basal dans AndroidAPS. Si vous ne savez pas ou si ne voulez pas écraser les paramètres Basal sur votre pompe, appuyez sur Annuler et reporter le passage à la pompe à une date ultérieure.
@@ -1425,10 +1425,10 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Âge invalide
Poids invalide
%1$s: ∑: %2$.2f Bol: %3$.2f Bas: %4$.2f]]>
- %1$s: Bas: %2$02d%% Médian: %3$02d%% Haut: %4$02d%%]]>
+ %1$s: Bas: %2$02d%% Cible: %3$02d%% Haut: %4$02d%%]]>
Moyenne
DTI
- TIR
+ Cible Gly
Moniteur d\'activité
Voulez-vous réinitialiser les stats d\'activité ?
Statistiques
@@ -1454,4 +1454,5 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Heure d\'exécution SMB
Heure de demande basal temp
Heure d\'exécution basal temp
+ Alertes Pompe Insight
diff --git a/app/src/main/res/values-ga-rIE/objectives.xml b/app/src/main/res/values-ga-rIE/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-ga-rIE/objectives.xml
+++ b/app/src/main/res/values-ga-rIE/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml
index d4b0807169..b3e84cab92 100644
--- a/app/src/main/res/values-ga-rIE/strings.xml
+++ b/app/src/main/res/values-ga-rIE/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-hr-rHR/objectives.xml b/app/src/main/res/values-hr-rHR/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-hr-rHR/objectives.xml
+++ b/app/src/main/res/values-hr-rHR/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml
index df88c88e20..96062d70ad 100644
--- a/app/src/main/res/values-hr-rHR/strings.xml
+++ b/app/src/main/res/values-hr-rHR/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-it-rIT/exam.xml b/app/src/main/res/values-it-rIT/exam.xml
index 4b9047c775..62abcc22bc 100644
--- a/app/src/main/res/values-it-rIT/exam.xml
+++ b/app/src/main/res/values-it-rIT/exam.xml
@@ -1,5 +1,4 @@
-
Cosa è vero riguardo DIA?
Argomento: Durata dell\'Azione dell\'Insulina
@@ -47,8 +46,8 @@
Fare un cambio profilo sotto il 100%.
Fare un cambio profilo sopra il 100%.
Stoppare il loop.
- Impostare un temp-target \"attività\" prima dell\'inizio dell\'esercizio fisico.
- L\'impostazione di un temp-target \"attività\" dopo l\'inizio dell\'esercizio fisico porta a risultati peggiori rispetto all\'avviarlo prima dell\'inizio dell\'esercizio.
+ Impostare un temp-target \"attività fisica\" prima dell\'inizio dell\'esercizio fisico.
+ L\'impostazione di un temp-target \"attività fisica\" dopo l\'inizio dell\'esercizio fisico porta a risultati peggiori rispetto all\'avviarlo prima dell\'inizio dell\'esercizio.
https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target
Argomento: Loop Disabilitato/Sospeso
Ricevo insulina quando il loop è disabilitato/sospeso?
diff --git a/app/src/main/res/values-it-rIT/insight_alert_titles.xml b/app/src/main/res/values-it-rIT/insight_alert_titles.xml
index d510f14df2..123334b48d 100644
--- a/app/src/main/res/values-it-rIT/insight_alert_titles.xml
+++ b/app/src/main/res/values-it-rIT/insight_alert_titles.xml
@@ -1,5 +1,4 @@
-
Eroga bolo
Bolo perso
@@ -10,8 +9,8 @@
Batteria quasi scarica
Ora/data non valida
Fine della garanzia
- TBR annullato
- Bolo annullato
+ TBR cancellato
+ Bolo cancellato
Avviso di prestito
Cartuccia non inserita
Cartuccia vuota
diff --git a/app/src/main/res/values-it-rIT/insight_exceptions.xml b/app/src/main/res/values-it-rIT/insight_exceptions.xml
index fa33f5f7f2..fc68ba559f 100644
--- a/app/src/main/res/values-it-rIT/insight_exceptions.xml
+++ b/app/src/main/res/values-it-rIT/insight_exceptions.xml
@@ -1,5 +1,4 @@
-
Connessione fallita
Connessione persa
@@ -7,9 +6,9 @@
Creazione socket fallita
Timeout
Numero massimo tipo di bolo già in esecuzione
- Nessun TBR attivo da annullare
+ Nessun TBR attivo da cancellare
Nessun TBR attivo da modificare
- Nessun bolo da annullare
+ Nessun bolo da cancellare
Micro già in questo stato
Modalità di esecuzione non consentita
diff --git a/app/src/main/res/values-it-rIT/objectives.xml b/app/src/main/res/values-it-rIT/objectives.xml
index d3cf5f110c..84a9152c3d 100644
--- a/app/src/main/res/values-it-rIT/objectives.xml
+++ b/app/src/main/res/values-it-rIT/objectives.xml
@@ -1,5 +1,4 @@
-
Indietro
Avvia
@@ -18,14 +17,14 @@
Regolazione del loop chiuso, aumentando max IOB al di sopra di 0 e abbassando gradualmente i target glicemici
Esegui l\'applicazione per alcuni giorni e almeno una notte senza allarmi di glicemia bassa, prima di abbassare il target glicemico
Adatta basali e rapporti se necessario, quindi attiva auto-sens
- 1 settimana di looping diurno con dichiarazione regolare dei carboidrati, eseguito con successo
+ 1 settimana di looping diurno con inserimento regolare dei carboidrati, eseguito con successo
Abilitazione funzioni aggiuntive per l\'uso diurno, ad esempio AMA (advanced meal assist - assistenza avanzata del pasto)
Abilitazione funzioni aggiuntive per l\'uso diurno, come SMB
È necessario leggere il wiki e aumentare maxIOB affinché le azioni di SMB funzionino adeguatamente! Un buon inizio è maxIOB = media bolo posto + 3 x max basale giornaliera
Glicemia disponibile in NS
Stato micro disponibile in NS
Attivazioni manuali
- Compiuto: %1$s
+ Completato: %1$s
Impara a controllare AndroidAPS
Esegui varie azioni in AndroidAPS
Imposta il profilo \"90%\" per 10 min (premi a lungo sul nome profilo nella sezione Panoramica)
@@ -36,7 +35,7 @@
Visualizza il contenuto del plugin Loop
Usa la funzione di ridimensionamento premendo a lungo sul grafico delle glicemie
Entra
- Se prima eri un utente OpenAPS e il tuo NS ha almeno 3 mesi di dati in loop, puoi inviare un\'e-mail a objectives@androidaps.org con il tuo indirizzo NS e richiedere il codice per ignorare il resto degli obiettivi. Inserisci il codice ottenuto dagli sviluppatori
+ Se hai almeno 3 mesi di esperienza in loop chiuso con altri sistemi potresti beneficiare di un codice per saltare gli obiettivi. Guarda https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives per i dettagli.
Codice accettato
Codice non valido
Dai prova della tua conoscenza
@@ -51,7 +50,7 @@
https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#config-builder
https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#the-homescreen
Non connesso a internet
- Impossibile recuperare l\'orario
+ Impossibile recuperare l\'ora
Requisiti obiettivo non soddisfatti
- %1$d giorno
diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml
index 952633064b..c344c3229e 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -1,5 +1,4 @@
-
@@ -14,7 +13,7 @@
Vuoi davvero resettare i database?
Esci
Usa boli estesi per >200%%
- Dispositivo DanaR Bluetooth
+ Dispositivo Bluetooth DanaR
Utilizza sempre valori basali assoluti
Per favore riavvia il tuo telefono oppure fai ripartire AndroidAPS dalle impostazioni di sistema \naltrimenti Android APS non farà il log (è importante monitorare e verificare che gli algoritmi stiano funzionando correttamente)!
Questo dispositivo non sembra supportare la whitelist dell\'ottimizzazione della batteria: potrebbero verificarsi problemi di prestazioni.
@@ -25,7 +24,7 @@
Visualizza l\'elenco dei cibi definiti in Nightscout
Preset per insulina Humalog e NovoRapid
Preset per insulina Fiasp
- Ti consente di definire il picco dell\'insulina e deve essere utilizzato solo dagli utenti avanzati
+ Ti consente di definire il picco di attività dell\'insulina e deve essere utilizzato solo dagli utenti avanzati
Attiva o disattiva l\'implementazione del loop.
Sincronizza i tuoi dati con Nightscout
Stato dell\'algoritmo nel 2016
@@ -42,7 +41,7 @@
Integrazione del microinfusore DANA Diabecare R con firmware aggiornato
Integrazione del microinfusore DANA Diabecare RS
Per le persone in terapia multi-iniettiva
- Per microinfusori che non hanno ancora alcun driver (Loop Aperto)
+ Per microinfusori che non hanno ancora alcun driver (Loop aperto)
La sensibilità è calcolata allo stesso modo di Oref0, ma puoi specificare l\'intervallo di tempo al passato. L\'assorbimento minimo dei carboidrati è calcolato da \'max tempo assorbimento pasto\' nelle preferenze.
La sensibilità è calcolata dai dati delle ultime 24h e i carboidrati (se non assorbiti) vengono tagliati fuori dopo il tempo specificato nelle preferenze.
La sensibilità è calcolata dai dati delle ultime 8h e i carboidrati (se non assorbiti) vengono tagliati fuori dopo il tempo specificato nelle preferenze. Il Plugin calcola anche UAM.
@@ -51,7 +50,7 @@
Ricevi valori glicemia da Glimp.
Ricevi valori glicemia da 600SeriesAndroidUploader.
Scarica dati glicemia da Nightscout
- Ricevi dati glicemia da xDrip.
+ Ricevi valori glicemia da xDrip.
Salva tutti i trattamenti che sono stati fatti
Monitora e controlla AndroidAPS usando il tuo smartwatch WearOS.
Mostra le informazioni del loop sulla watchface di xDrip+.
@@ -120,7 +119,7 @@
Trattamenti
Quale plugin dovrebbe essere utilizzato per la gestione del trattamento?
Profilo
- Quale profilo dovrebbe usare AndroidAPS?
+ Quale profilo AndroidAPS dovrebbe usare?
APS
Quale algoritmo APS dovrebbe apportare aggiustamenti terapeutici?
Generale
@@ -176,7 +175,7 @@
Annuncio
Nota
Domanda
- Esercizio
+ Esercizio fisico
Cambio posizione cannula
Inserimento sensore
Avvio Sensore
@@ -196,7 +195,7 @@
Sensore
CHO
Insulina
- Tempo CHO
+ Offset CHO
Frazione
Durata
Percentuale
@@ -248,7 +247,7 @@
OK
Percentuale
Assoluto
- Cancellare basale temporanea
+ Cancella basale temporanea
Comunicazioni SMS
In attesa del risultato
Numeri di telefono consentiti
@@ -265,7 +264,7 @@
Quanti minuti devono trascorrere, almeno, tra un bolo e il successivo
Per la tua sicurezza, per modificare questa preferenza hai bisogno di aggiungere almeno 2 numeri di telefono.
Bolo di %1$.2fU erogato con successo
- Sto per erogare %1$.2fU
+ A erogare %1$.2fU
Bolo di %1$.2fU erogato con successo
Bolo pasto di %1$.2fU erogato con successo
Target %1$s per %2$d minuti
@@ -344,8 +343,8 @@
Per stoppare il bolo esteso rispondi col codice %1$s
Basale temporanea cancellata
Bolo esteso cancellato
- Cancellazione basale temporanea fallita
- Cancellazione bolo esteso fallita
+ Basale temporanea: cancellazione fallita
+ Bolo esteso: cancellazione fallita
Comando sconosciuto o risposta errata
Calcolatore Rapido
Impostazioni Calcolatore Rapido
@@ -415,7 +414,7 @@
Elimina trattamenti nel futuro
Pasto a breve
Ipoglicemia
- Attività
+ Attività fisica
Rimuovi record
Statistiche DanaR
TDD cumulativo
@@ -619,7 +618,7 @@
BAS
EXT
Mantieni lo schermo acceso
- Evita che Android disattivi lo schermo. Consumerà molta energia quando non è collegato alla presa di corrente.
+ Evita che Android spenga lo schermo. Consumerà molta energia quando non è collegato alla presa di corrente.
Attivando la funzione Autosense, ricorda di inserire tutti i carboidrati assunti. Altrimenti le deviazioni di glicemia dovute ai carboidrati saranno identificate erroneamente come variazione di sensibilità !!
Sensibilità WeightedAverage
OK
@@ -639,8 +638,8 @@
Abilita SMB
Utilizza Super Micro Boli al posto della basale temporanea per un\'azione più veloce
Rilevazione dei pasti Non Annunciati
- IOB Curve Peak Time
- Peak Time [min]
+ Tempo picco Curva IOB
+ Tempo del picco [min]
Free-Peak Oref
Rapid-Acting Oref
Ultra-Rapid Oref
@@ -650,7 +649,7 @@
NON VALIDO
In attesa di associare il micro
Associazione OK
- Time out associazione micro
+ Time out associazione
Accoppiamento
Nessun dispositivo trovato finora
Serbatoio vuoto
@@ -668,8 +667,8 @@
Temp-Target predefiniti
target \"pasto a breve\" - durata
target \"pasto a breve\"
- target \"attività\" - durata
- target \"attività\"
+ target \"attività fisica\" - durata
+ target \"attività fisica\"
target \"ipoglicemia\" - durata
target \"ipoglicemia\"
Riempimento
@@ -696,7 +695,7 @@
Attesa per la fine del bolo. Rimangono %1$d sec.
Evento di elaborazione
Avvio erogazione bolo
- Il comando verrà eseguito ora
+ Il comando sarà eseguito ora
Driver del micro corretto
Micro irraggiungibile
Letture BG mancanti
@@ -772,7 +771,7 @@
Normale
Necessario aggiornare orologio micro
Attenzione
- Avviso TBR CANCELLATO confermato
+ Avviso TBR CANCELLATO: confermato
Il micro potrebbe non essere raggiungibile. Nessun bolo erogato
Erogazione bolo fallita. Sembra che nessun bolo sia stato erogato. Per sicurezza, controlla il micro per evitare un doppio bolo e se è tutto ok, erogalo di nuovo. Come protezione da eventuali \"bug\", i boli non vengono ripetuti automaticamente.
Solo la quantità di %1$.2f U del bolo richiesto di %2$.2f U è stata erogata a causa di un errore. Controlla il micro per verificare quanto accaduto e intraprendi le azioni necessarie.
@@ -790,7 +789,7 @@
Abilita SMB con COB
Abilita SMB quando COB è attivo (ci sono carboidrati non assorbiti).
Abilita SMB con target temporanei
- Abilita SMB quando è attivo un target temporaneo (pasto a breve, attività)
+ Abilita SMB quando è attivo un target temporaneo (pasto a breve, attività fisica)
Abilita SMB con target temporanei \"alti\"
Abilita SMB quando è attivo un target temporaneo \"alto\"
Lascia eseguire la basale temporanea
@@ -816,7 +815,7 @@
Consenti la segnalazione automatica degli errori e l\'invio dei dati di utilizzo delle funzioni dell\'app agli sviluppatori tramite il servizio fabric.io.
Aggiorna la tua app Dexcom ad una versione supportata
App Dexcom non installata.
- Avvia TT Attività
+ Avvia TT Attività fisica
Avvia TT Pasto a breve
TT
No bolo, solo record
@@ -839,13 +838,13 @@
%1$.2f U/h
Lettura profilo basale
Lo storico del micro è cambiato dopo il calcolo del bolo. Il bolo non è stato erogato. Ricalcolare se un bolo è ancora necessario.
- Bolo erogato con successo, ma impossibile aggiungere la voce ai trattamenti. Questo può accadere se due piccoli boli della stessa quantità sono stati somministrati negli ultimi due minuti. Verifica lo storico del micro e le voci della sezione Trattamenti e utilizza la sezione Portale per aggiungere eventuali voci mancanti. Assicurati di non aggiungere voci con lo stesso orario e con la stessa quantità.
+ Bolo erogato con successo, ma non è possibile aggiungere la voce ai trattamenti. Questo può accadere se due piccoli boli della stessa quantità sono stati somministrati negli ultimi due minuti. Verifica lo storico del micro e le voci della sezione Trattamenti e utilizza la sezione Portale per aggiungere eventuali voci mancanti. Assicurati di non aggiungere voci che si riferiscano al medesimo minuto e alla stessa quantità.
Rifiuto basale temporanea \"alta\" in quanto il calcolo non ha considerato i cambiamenti recenti allo storico del micro
Aggiornamento stato micro
La velocità basale nel micro è cambiata e verrà aggiornata a breve
Velocità basale cambiata sul micro, ma la sua lettura è fallita
Controllo modifiche allo storico
- Sono appena stati importati più boli con la stessa quantità nello stesso minuto. Solo un record può essere aggiunto ai trattamenti. Controlla il micro e aggiungi manualmente un record di bolo utilizzando la sezione Portale. Assicurati di creare un bolo con un orario non utilizzato da nessun altro bolo.
+ Sono appena stati importati più boli con la stessa quantità nello stesso minuto. Solo un record può essere aggiunto ai trattamenti. Controlla il micro e aggiungi manualmente un record di bolo utilizzando la sezione Portale. Assicurati di creare un bolo con un\'ora non utilizzata da nessun altro bolo.
\n\nhttp://www.androidaps.org\nhttp://www.androidaps.de (de)\n\nfacebook:\nhttp://facebook.androidaps.org\nhttp://facebook.androidaps.de (de)
L\'ultimo bolo è più vecchio di 24 ore o ha una data nel futuro. Controlla che la data sul micro sia impostata correttamente.
L\'ora/la data del bolo erogato sul micro sembra errata, IOB probabilmente non è corretto. Controlla l\'ora e/o la data del micro.
@@ -983,8 +982,8 @@
Configurazione micro non valida, controlla la documentazione e verifica che il menu Quick Info sia denominato QUICK INFO utilizzando \"360 configuration software\".
Personalizzato
- Grande differenza d\'orario
- Grande differenza d\'orario:\nL\'orario nel micro differisce per più di 1h e 30m. \nRegola l\'ora manualmente e assicurati che la lettura dello storico dal micro non causi comportamenti imprevisti.\nSe possibile, cancella la cronologia del micro prima di cambiare l\'orario oppure disabilita il loop chiuso per un tempo corrispondente al tuo valore DIA.
+ Grande differenza oraria
+ Grande differenza oraria:\nL\'ora nel micro differisce per più di 1h e 30m. \nRegola l\'ora manualmente e assicurati che la lettura dello storico dal micro non causi comportamenti imprevisti.\nSe possibile, cancella la cronologia del micro prima di cambiare l\'ora oppure disabilita il loop chiuso per un tempo corrispondente al tuo valore DIA.
Rimuovi gli eventi \"AndroidAPS avviato\"
Trovate impostazioni salvate
Attenzione: se attivi e connetti un micro, AndroidAPS copierà le impostazioni della basale dal profilo al micro, sovrascrivendo la velocità basale esistente memorizzata sul micro. Assicurati di avere la giusta impostazione della basale in AndroidAPS. Se non sei sicuro o non vuoi sovrascrivere le impostazioni della basale sul micro, premi annulla e ripeti il processo in un altro momento.
@@ -1031,11 +1030,11 @@
Conferma
Muto
Avviso microinfusore
- Registra cambi posizione cannula
+ Registra cambi posizione
Registra cambi serbatoio
Registra cambi catetere
Registra cambi batteria
- Registra cambi modalità di funzionamento
+ Registra cambi modalità operativa
Registra avvisi
Abilita emulazione TBR
Usa i bolli estesi invece dei TBR per aggirare il limite del 250%%
@@ -1114,9 +1113,9 @@
Glicemia %1$s %2$.1f %3$s
PCT profilo %1$s %2$d
IOB %1$s %2$.1f
- E
- O
- O (esclusivo)
+ E (AND)
+ O (OR)
+ O (esclusivo - XOR)
A %1$s
Usa posizione di rete
Usa posizione GPS
@@ -1162,7 +1161,7 @@
vincolo di archiviazione interna
Libera almeno %1$d MB dalla memoria interna! Loop disabilitato!
Formato errato
- Codice errato. Comando annullato.
+ Codice errato. Comando cancellato.
Non configurato
Cambio profilo creato
Tempo ricorrente
@@ -1322,7 +1321,7 @@
Max bolo errato impostato nel micro (deve essere %1$.2f).
Max basale errata impostata nel micro (deve essere %1$.2f).
Operazione non possibile.\n\n Devi prima configurare il micro Medtronic.
- È stata richiesta una modifica d\'orario di oltre 24h.
+ È stata richiesta una modifica oraria di oltre 24h.
Basali
Configurazioni
@@ -1353,7 +1352,7 @@
Il profilo basale è lo stesso, non sarà impostato di nuovo.
Ottieni storico - Pagina %1$d (%2$d/16)
Ottieni storico - Pagina %1$d
- Ottieni orario micro
+ Ottieni ora micro
Ottieni impostazioni
Ottieni modello micro
Ottieni profilo basale
@@ -1378,7 +1377,7 @@
Caricamento ...
Posticipa
Intervallo di tempo
- Il tempo è compreso tra %1$s e %2$s
+ L\'intervallo di tempo è compreso tra %1$s e %2$s
Tra
Chiudi
Aumento del valore max basale perché l\'impostazione è inferiore alla tua basale massima nel profilo
@@ -1396,8 +1395,8 @@
%1$dg
On
Off
- Cancella completato
- Cancella avviato
+ Cancella completamento
+ Cancella avvio
Rilevazione tempo
Vuoi resettare l\'avvio dell\'obiettivo? Potresti perdere i tuoi progressi.
Nessun micro selezionato
@@ -1420,7 +1419,7 @@
ID:
Invia
Profilo più comune:
- Nota: solo i dati visibili su questa schermata verranno caricati (in modo anonimo). Un ID è assegnato a questa installazione di AndroidAPS. Puoi inviare nuovamente i dati se il tuo profilo principale viene modificato, ma lascialo in esecuzione almeno per una settimana per rendere visibili i risultati nel time in range. Il tuo aiuto è apprezzato.
+ Nota: solo i dati visibili su questa schermata verranno caricati (in modo anonimo). Un ID è assegnato a questa installazione di AndroidAPS. Puoi inviare nuovamente i dati se il tuo profilo principale viene modificato, ma lascialo in esecuzione almeno per una settimana per rendere il risultato visibile nel time in range (TIR). Il tuo aiuto è apprezzato.
Sondaggio
Inserimento età non valido
Inserimento peso non valido
@@ -1450,8 +1449,9 @@
\"PhoneChecker\"
Menu grafico
AS
- Tempo richiesta SMB
- Tempo esecuzione SMB
- Tempo richiesta basale temporanea
- Tempo esecuzione basale temporanea
+ Richiesta SMB (momento)
+ Esecuzione SMB (momento)
+ Richiesta basale temporanea (momento)
+ Esecuzione basale temporanea (momento)
+ Avvisi micro Insight
diff --git a/app/src/main/res/values-iw-rIL/objectives.xml b/app/src/main/res/values-iw-rIL/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-iw-rIL/objectives.xml
+++ b/app/src/main/res/values-iw-rIL/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml
index d4508abe7a..ac0f8d512e 100644
--- a/app/src/main/res/values-iw-rIL/strings.xml
+++ b/app/src/main/res/values-iw-rIL/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-ja-rJP/objectives.xml b/app/src/main/res/values-ja-rJP/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-ja-rJP/objectives.xml
+++ b/app/src/main/res/values-ja-rJP/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml
index df88c88e20..96062d70ad 100644
--- a/app/src/main/res/values-ja-rJP/strings.xml
+++ b/app/src/main/res/values-ja-rJP/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-ko-rKR/objectives.xml b/app/src/main/res/values-ko-rKR/objectives.xml
index 08c2a7f8d8..86f97a4f64 100644
--- a/app/src/main/res/values-ko-rKR/objectives.xml
+++ b/app/src/main/res/values-ko-rKR/objectives.xml
@@ -1,5 +1,4 @@
-
뒤로
시작
@@ -36,7 +35,6 @@
Loop 플러그인 내용을 표시합니다
홈의 혈당 차트를 길게 눌러 차트 시간을 변경하세요
입력
- 당신이 OpenAPS 사용자였고 당신의 NS가 최소 3개월의 Loop 데이터가 저장되어 있다면, objectives@androidaps.org로 메일을 보내 당신의 NS주소를 알려주시고 목표를 건너뛸 수 있는 코드를 요청하세요. 그리고 개발자로 부터 받은 코드를 입력하세요.
코드 인증
잘못된 코드
당신의 지식을 확인해봅니다
diff --git a/app/src/main/res/values-lt-rLT/exam.xml b/app/src/main/res/values-lt-rLT/exam.xml
index 634982d1fc..5cd75c66cf 100644
--- a/app/src/main/res/values-lt-rLT/exam.xml
+++ b/app/src/main/res/values-lt-rLT/exam.xml
@@ -1,5 +1,4 @@
-
Koks atsakymas apie IVT yra teisingas?
Tema: Insulino veikimo trukmė
@@ -124,9 +123,9 @@
Spike iPhone telefone.
https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html
Tema: Jautrumo Insulinui Faktorius
- Didesnis IVT lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.
- Mažesnis IVT lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.
- IVT reikšmės pakeitimas neturi įtakos AAPS leidžiamo insulino kiekiui koreguojant aukštą glikemiją.
+ Didesnė JIF reikšmė lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.
+ Mažesnė JIF reikšmė lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.
+ JIF reikšmės pakeitimas neturi įtakos AAPS leidžiamo insulino kiekiui koreguojant aukštą glikemiją.
Nustatymuose turite įvesti JIF.
Jei profilyje pakeisite JIF vertę, Ciklas į pokytį iškart atsižvelgs.
https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u
@@ -136,7 +135,7 @@
Mažesnis insulino ir angliavandenių IA santykis reiškia, kad mažiau insulino reikia padengti tam tikram angliavandenių kiekiui.
Jei turite 0 AAO (aktyvių angliavandenių organizme), pakeitus IA, glikemija bus koreguojama kitokiu insulino kiekiu.
IA vertė skirsis priklausomai nuo to, ar duonos vienetui skaičiuojate 10g, ar 12g angliavandenių.
- IA reiškia: kiek vienas vienetas insulino dengia angliavandenių (gramais).
+ IA reiškia: kiek vienas vienetas insulino dengia duonos vienetų.
https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u
Tema: Profilio keitimas
Kai profilio keitime nustatote 90%…
diff --git a/app/src/main/res/values-lt-rLT/objectives.xml b/app/src/main/res/values-lt-rLT/objectives.xml
index bf4a460fae..06357e3814 100644
--- a/app/src/main/res/values-lt-rLT/objectives.xml
+++ b/app/src/main/res/values-lt-rLT/objectives.xml
@@ -1,5 +1,4 @@
-
Atgal
Pradėti
@@ -36,7 +35,6 @@
Parodyti Ciklo įskiepio turinį
Panaudokite vaizdo dydžio keitimo funkciją ilgai spaudžiant ant glikemijos kreivės
Įeiti
- Jei anksčiau naudojote OpenAPS ir jūsų Nightscout svetainėje yra bent trijų mėnesių uždaro ciklo duomenų, galite atsiųsti el. laišką objectives@androidaps.org su savo NS svetainės adresu, ir paprašykite kodo, kad praleistumėte likusius tikslus. Įveskite kodą, kurį pateikė kūrėjai
Kodas priimtas
Neteisingas kodas
Patvirtinkite savo žinias
diff --git a/app/src/main/res/values-nl-rNL/objectives.xml b/app/src/main/res/values-nl-rNL/objectives.xml
index bd41e6d26e..c9e23d317a 100644
--- a/app/src/main/res/values-nl-rNL/objectives.xml
+++ b/app/src/main/res/values-nl-rNL/objectives.xml
@@ -1,5 +1,4 @@
-
Terug
Start
@@ -36,7 +35,6 @@
Inhoud van loop plugin weergeven
Gebruik de schaalfunctie: houd de BG grafiek lang ingedrukt
Enter
- Als u eerder OpenAPS gebruikte en u NS ten minste 3 maanden aan Loop gegevens heeft kunt u een code aanvragen waarmee u de rest van de doelstellingen kunt omzeilen. U kunt de aanvraag indienen via objectives@androidaps.org, samen met de url van uw NS. Voer de code die u van de ontwikkelaars hebt ontvangen in
Code geaccepteerd
Code ongeldig
Bewijs je kennis
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index e797344f49..b7b391a804 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -1,5 +1,4 @@
-
@@ -143,6 +142,7 @@
In strijd met beperkingen
Bolus toedien storing
Tijdelijk basaal toedien storing
+ Basaal waarde [%]
Accepteer nieuw tijdelijk basaal:
Bolus
Bolus wizard
@@ -180,6 +180,7 @@
CGM Sens. ingebracht
CGM Sens. Start
Insuline ampul wissel
+ Profiel wissel
Snack bolus
Maaltijd bolus
Correctie bolus
@@ -200,6 +201,7 @@
Procent
Absoluut
Notities
+ Tijdstip gebeurtenis
Profiel
Ingegeven door
Glucose type
@@ -224,6 +226,7 @@
Verbinden
Verbonden
Niet verbonden
+ Dana pomp instellingen
Eind gebruiker overeenkomst
MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
Begrepen en goedgekeurd
@@ -272,6 +275,8 @@
Vingerprik
Sensor
Manueel
+ Tijdelijk streefdoel
+ Tijdelijk streefdoel annuleren
DanaR profiel instellingen
DIA [uur]
Duur van insuline activiteit
@@ -410,6 +415,7 @@
Eet binnenkort
Hypo
Activiteit
+ Verwijder record
DanaR Statistiek
Cumulatieve TDD
Exponentieel verhoogd TDD
@@ -576,6 +582,7 @@
Ouderdom insuline
uren
Ongeldig profiel !!!
+ Profiel wissel uitvoeren
Ouderdom batterij
Pomp bat. wissel
Alarm opties
@@ -643,6 +650,7 @@
Wachten op koppelen van de pomp
Koppeling geslaagd
Koppeling verlopen
+ Koppelen
Geen toestel gevonden
Ampul leeg
Bloed glucose meetpunt alarm
@@ -753,6 +761,7 @@
Een bolus met dezelfde hoeveelheid was gevraagd binnen de afgelopen twee minuten. Om incidentele of door bugs veroorzaakte dubbele bolussen te voorkomen is deze bolus geannuleerd.
Zojuist
Lezen van pomp historiek
+ Historiek
Instellen van basaal profiel
Insuline ampul is bijna leeg
Batterij pomp is bijna leeg
@@ -772,6 +781,7 @@
Insight
voorbij
%1$.2f u
+ %1$d minuten
Activeer SMB altijd
SMB altijd aan onafhankelijk van bolussen. Enkel mogelijk met een BG bron met goed gefilterde data zoals de G5
Activeer SMB na koolhydraten
@@ -935,6 +945,7 @@
Start je eerste Doel
Toestemming
Vragen om toestemming
+ Toepassing vereist systeemvenstermachtiging voor meldingen
Toepassing heeft toestemming nodig voor bepalen van Locatie (voor BT scan)
Applicatie heeft toestemming nodig om log bestanden op te kunnen slaan
Verzoek
@@ -948,7 +959,11 @@
Geluid
Trillen
Beide
+ LCD-aan tijd [sec.]
+ Achtergrondverlichting-aan tijd [sec.]
Glucose units
+ Afsluiten [uren]
+ Laag reservoir (eenheden)
Opslaan van de opties om de pomp
Aan
Uit
@@ -1206,6 +1221,8 @@
COB %1$s %2$.0f
Taaknaam
EDIT
+ Kies een actie
+ Kies een type trigger
Triggers:
VERWIJDER
Voorwaarden:
@@ -1298,6 +1315,7 @@
Pomp frequentie niet ondersteund.
RileyLink adres ongeldig.
Gedetecteerde pomp type komt niet overeen met ingestelde pomp type.
+ De instelling voor basaalprofielen/patronen is niet ingeschakeld op de pomp. Schakel het in op de pomp.
Basaalprofiel ingesteld op pomp is onjuist (moet STD zijn).
Verkeerde Tijdelijk Basaal-type ingesteld op pomp (moet Insulinesnelh (E/H) zijn).
Verkeerde Max Bolus ingesteld op pomp (moet %1$.2f zijn).
@@ -1348,6 +1366,7 @@
Laatste verbinding met pomp [minuten geleden]
Laatste verbinding met pomp %1$s %2$s min geleden
Stuur SMS: %1$s
+ SMS verzenden naar alle nummers
Stuur SMS met tekst
%2$+.2fU]]>
Bolus limiet bereikt: %2$.2fU naar %3$.2fU]]>
@@ -1376,7 +1395,7 @@
%1$dg
Aan
Uit
- Wissen voltooid
+ Voltooiing wissen
Wissen gestart
Tijd detectie
Wil je dit leerdoel opnieuw starten? Je kunt je voortgang verliezen.
@@ -1399,5 +1418,39 @@
Gewicht:
ID:
Verzenden
+ Meest voorkomende profiel:
Opmerking: Alleen gegevens die zichtbaar zijn op dit scherm worden anoniem geüpload. ID is toegewezen aan deze installatie van AndroidAPS. U kunt gegevens opnieuw indienen als uw hoofdprofiel wordt gewijzigd, maar laat het ten minste een week draaien om resultaat zichtbaar te maken in de tijd in het bereik. Uw hulp wordt gewaardeerd.
+ Enquête
+ Ongeldige leeftijd invoer
+ Ongeldige gewicht invoer
+ %1$s: ∑: %2$.2f Bol: %3$.2f Bas: %4$.2f]]>
+ %1$s: Laag: %2$02d%% In: %3$02d%% Hoog: %4$02d%%]]>
+ Gemiddelde
+ TDD
+ TIR
+ Activiteitsmonitor
+ Wil je de activiteitenstatistieken resetten?
+ Statistieken
+ Willekeurige BG
+ Willekeurige BG gegevens genereren (alleen Demo modus)
+ BG
+ Hulpmiddelen
+ Toon berekening
+ Fout
+ 12u
+ 24u
+ Automation gebeurtenis
+ Al ingesteld
+ Bericht
+ Wachtrij leegmaken? Alle gegevens in de wachtrij zullen verloren gaan!
+ Gebruik van Vertraagde bolus functie zal de closed loop modus stoppen voor de duur van de vertraagde bolus. Wil je dit toch?
+ Closed loop modus uitgeschakeld vanwege afgeven Vertraagde bolus
+ VertrB
+ \"PhoneChecker\"
+ Grafiek menu
+ AS
+ SMB aanvraagtijd
+ SMB uitvoeringstijd
+ Tijdelijk basaal aanvraag tijd
+ Tijdelijke basaal uitvoering tijd
diff --git a/app/src/main/res/values-pl-rPL/objectives.xml b/app/src/main/res/values-pl-rPL/objectives.xml
index 3e529a5c92..a2be1d375e 100644
--- a/app/src/main/res/values-pl-rPL/objectives.xml
+++ b/app/src/main/res/values-pl-rPL/objectives.xml
@@ -1,5 +1,4 @@
-
Wstecz
Start
@@ -36,7 +35,6 @@
Wyświetl zawartość wtyczki Pętla (Loop)
Użyj funkcji skalowania przez dłuższe przytrzymanie wykresu glikemii
Wprowadź
- Jeśli używano OpenAPS przez co najmniej 3 miesiące z NS, gromadząc dane z pętli, można wysłać e-mail na adres objectives@androidaps.org podając adres serwera NightScout i kod zapytania aby pominąć resztę zadań. Wprowadź kod odpowiedzi uzyskany od programistów
Kod został zaakceptowany
Niepoprawny kod
Potwierdź swoje umiejętności
diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml
index 6260b24658..0152dc7966 100644
--- a/app/src/main/res/values-pl-rPL/strings.xml
+++ b/app/src/main/res/values-pl-rPL/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-pt-rBR/objectives.xml b/app/src/main/res/values-pt-rBR/objectives.xml
index 112ee86451..3ff8541944 100644
--- a/app/src/main/res/values-pt-rBR/objectives.xml
+++ b/app/src/main/res/values-pt-rBR/objectives.xml
@@ -1,5 +1,4 @@
-
Voltar
Iniciar
@@ -36,7 +35,7 @@
Mostrar conteúdo do plugin Loop
Utilizar a função de escala premindo longamente gráfico Glic
Inserir
- Se era utilizador do OpenAPS antes e o seu NS tem pelo menos 3 meses de dados do loop, pode enviar um e-mail para oobjectives@androidaps.org com seu endereço de NS e pedir código para ignorar o resto dos objectivos. Digite o código obtido dos programadores
+ Se tiver pelo menos 3 meses de experiência com Close Loop com outros sistemas, pode-se qualificar para um código para ignorar objectivos. Ver https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives para mais detalhes.
Código aceite
Código inválido
Prove seu conhecimento
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 1e7dd42d16..97dff6ccd7 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -1,5 +1,4 @@
-
@@ -565,7 +564,7 @@
Firmware
Última ligação
Estado Bluetooth
- Acerca
+ Sobre
Falta de permissão SMS
Falta permissão do estado do telefone
Estado xDrip (relógio)
@@ -743,7 +742,7 @@
Valores das basais não definidos por horas: %1$s
Perfil inválido: %1$s
A programar a bomba para injectar o bolus
- Actualizar
+ Atualizar
Estado
Atividades
Sem conexão há %1$d min
@@ -842,7 +841,7 @@
O bolus foi injectado, mas não foi possível adicionar ao histórico. Isto é possível se dois bolus do mesmo valor baixo foram administrados nos últimos dois minutos. Por favor verifique o histórico da bomba e use o Careportal para adicionar os dados em falta caso necessário. Cuidado para não adicionar dados com o mesmo valor no mesmo minuto.
A rejeitar a temporal alta uma vez que o cálculo não considerou as mudanças do histórico da bomba
Atualizando estado da bomba
- O rácio da basal foi alterado na bomba e vai ser actualizado em breve
+ A taxa basal na bomba mudou e será atualizada em breve
Rácio da basal foi alterado na bomba, mas a leitura falhou
Verificando alterações de histórico
Bólus múltiplos, com a mesma quantidade e no mesmo minuto acabaram de ser importados. Apenas um registo pôde ser adicionado aos tratamentos. Por favor confirma na bomba e adicione o registo de bólus manualmente, utilizando o separador do Careportal. Tenha em atenção que deve criar um bólus com um tempo em que nã oexistem outros registos de bólus.
@@ -946,6 +945,7 @@
Iniciar primeiro objectivo
Permissão
Pedir permissão
+ Aplicação precisa de permissão de janela do sistema para notificações
Aplicação requer permissão de localização para pesquisa BT
Aplicação necessita da permissão de armazenamento para ser capaz de armazenar ficheiros de registo
Pedido
@@ -1449,4 +1449,9 @@
\"VerificadorTelefone\"
Menu do Gráfico
AS
+ Hora de solicitação SMB
+ Hora de execução do SMB
+ Hora de solicitação Basal Temp
+ Hora de execução Basal Temp
+ Alertas Bomba Insight
diff --git a/app/src/main/res/values-pt-rPT/objectives.xml b/app/src/main/res/values-pt-rPT/objectives.xml
index 875a605631..4722ee8fa8 100644
--- a/app/src/main/res/values-pt-rPT/objectives.xml
+++ b/app/src/main/res/values-pt-rPT/objectives.xml
@@ -1,5 +1,4 @@
-
Voltar
Iniciar
@@ -36,7 +35,7 @@
Mostrar conteúdo do plugin Loop
Utilizar a função de escala premindo longamente gráfico Glic
Inserir
- Se era utilizador do OpenAPS antes e o seu NS tem pelo menos 3 meses de dados do loop, pode enviar um e-mail para oobjectives@androidaps.org com seu endereço de NS e pedir código para ignorar o resto dos objectivos. Digite o código obtido dos programadores
+ Se tiver pelo menos 3 meses de experiência com Close Loop com outros sistemas, pode-se qualificar para um código para ignorar objectivos. Ver https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives para mais detalhes.
Código aceite
Código inválido
Prove seu conhecimento
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 313f6c6658..1990230176 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -1,5 +1,4 @@
-
@@ -828,7 +827,7 @@
Actividade
Sensibilidade
Desvios
- Carboidratos a bordo
+ Hidratos a Bordo (COB)
Insulina a bordo
Basais
Nenhuma acção seleccionada, nada irá acontecer
@@ -884,7 +883,7 @@
repor
À espera da sincronização da hora (%1$d sec)
Desligado (%1$d m)
- Máximo total IOS OpenAPS não pode superar [U]
+ Máximo total IOB OpenAPS não pode superar [U]
Este valor é chamado de Max IOB em contexto de OpenAPS\nOpenAPS não adicionará mais insulina se o IOB atual for maior que este valor
Bomba parada
Bomba iniciada
@@ -1454,4 +1453,5 @@
Hora de execução do SMB
Hora de solicitação Basal Temp
Hora de execução Basal Temp
+ Alertas Bomba Insight
diff --git a/app/src/main/res/values-ro-rRO/objectives.xml b/app/src/main/res/values-ro-rRO/objectives.xml
index c37a61470e..cdf5312139 100644
--- a/app/src/main/res/values-ro-rRO/objectives.xml
+++ b/app/src/main/res/values-ro-rRO/objectives.xml
@@ -1,5 +1,4 @@
-
Înapoi
Start
diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml
index 6bc27065bc..d7fac933c4 100644
--- a/app/src/main/res/values-ro-rRO/strings.xml
+++ b/app/src/main/res/values-ro-rRO/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-ru-rRU/objectives.xml b/app/src/main/res/values-ru-rRU/objectives.xml
index 71faff0d36..38c25925e7 100644
--- a/app/src/main/res/values-ru-rRU/objectives.xml
+++ b/app/src/main/res/values-ru-rRU/objectives.xml
@@ -1,5 +1,4 @@
-
Назад
Старт
@@ -36,7 +35,7 @@
Просмотр содержимого модуля Цикл Loop
Применить функцию масштабирования по долгому нажатию на диаграмму ГК
Ввод
- Если прежде вы были пользователем OpenAPS и имеете в NS не менее 3 месяцев данных, отправьте электронное письмо на objectives@androidaps.org с вашим адресом NS и запросом кода для обхода остальных целей. Введите код, полученный от разработчиков
+ Если у вас есть хотя бы три месяца работы с замкнутым циклом с другими системами, то можно получить код пропуска. Подробности смотрите по адресу https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives.
Код принят
Неверный код
Подтвердите ваши знания
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 860db5a999..f8548845d1 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -1,5 +1,4 @@
-
@@ -1456,4 +1455,5 @@ Context | Edit Context
Время выполнения микроболюса SMB
Время запроса временной базальной скорости
Время выполнения временной базальной скорости
+ Оповещения помпы Insight
diff --git a/app/src/main/res/values-sk-rSK/objectives.xml b/app/src/main/res/values-sk-rSK/objectives.xml
index 467ae4f0de..5da99833ad 100644
--- a/app/src/main/res/values-sk-rSK/objectives.xml
+++ b/app/src/main/res/values-sk-rSK/objectives.xml
@@ -1,5 +1,4 @@
-
Naspäť
Začiatok
@@ -36,7 +35,7 @@
Zobrazte obsah modulu uzavretý okruh
Prepnite režim zobrazenia dlhým stlačením grafu glykémie
Zadať
- Ak ste boli používateľom OpenAPS už predtým a Váš NS má dáta uzavretého okruhu za minimálne 3 mesiace, môžete nám zaslať E-mail na adresu objectives@androidaps.org z Vašou adresou NS a požiadať o kód na obídenie zvyšných cieľov. Zadajte kód získaný od vývojárov
+ Pokiaľ máte aspoň 3 mesiace skúseností s uzavretým okruhom na iných systémoch, môžete získať kód, ktorý vám umožní preskočiť ciele. Viac informácií nájdete na https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Usage/Objectives.html#skip-objectives.
Kód akceptovaný
Neplatný kód
Preukážte svoje znalosti
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index 0b8fdca2e3..424955cb09 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -1,5 +1,4 @@
-
@@ -1454,4 +1453,5 @@
Čas aplikácie SMB
Čas požiadavky dočasného bazálu
Čas spustenia dočasného bazálu
+ Výstrahy pumpy Insight
diff --git a/app/src/main/res/values-sl-rSI/objectives.xml b/app/src/main/res/values-sl-rSI/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-sl-rSI/objectives.xml
+++ b/app/src/main/res/values-sl-rSI/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml
index df88c88e20..96062d70ad 100644
--- a/app/src/main/res/values-sl-rSI/strings.xml
+++ b/app/src/main/res/values-sl-rSI/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-sv-rSE/objectives.xml b/app/src/main/res/values-sv-rSE/objectives.xml
index f049262c18..94b2ba5549 100644
--- a/app/src/main/res/values-sv-rSE/objectives.xml
+++ b/app/src/main/res/values-sv-rSE/objectives.xml
@@ -1,5 +1,4 @@
-
Tillbaka
Starta
@@ -36,7 +35,7 @@
Visa innehållet i insticksprogrammet \"Loop\"
Testa skala om BG-grafen genom att trycka och hålla in fingret på den
Enter
- Om du var OpenAPS-användare innan och din NS har minst 3 månaders APS-data, kan du skicka ett e-postmeddelande till objectives@androidaps.org med din NS-adress och begära kod för att kringgå resten av målen. Ange kod som du fått från utvecklarna
+ Om du har minst 3 månaders erfarenhet av closed loop med andra system kan du kvalificera dig för en kod för att hoppa över mål. Se https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives för mer info.
Koden godkänd
Koden är felaktig
Bevisa dina kunskaper
diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml
index 96b45303a9..4fada83e89 100644
--- a/app/src/main/res/values-sv-rSE/strings.xml
+++ b/app/src/main/res/values-sv-rSE/strings.xml
@@ -1,5 +1,4 @@
-
@@ -1455,4 +1454,5 @@ Eversense-appen.
SMB utförd
Basalförändring begärd
Basalförändring utförd
+ Pumpvarningar Insight
diff --git a/app/src/main/res/values-tr-rTR/objectives.xml b/app/src/main/res/values-tr-rTR/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-tr-rTR/objectives.xml
+++ b/app/src/main/res/values-tr-rTR/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml
index b14049e2b4..ca73b4490a 100644
--- a/app/src/main/res/values-tr-rTR/strings.xml
+++ b/app/src/main/res/values-tr-rTR/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values-zh-rCN/objectives.xml b/app/src/main/res/values-zh-rCN/objectives.xml
index 70489fbc5e..3ea04e700d 100644
--- a/app/src/main/res/values-zh-rCN/objectives.xml
+++ b/app/src/main/res/values-zh-rCN/objectives.xml
@@ -1,3 +1,2 @@
-
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index be7793e576..1741294a35 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -1,5 +1,4 @@
-
diff --git a/app/src/main/res/values/objectives.xml b/app/src/main/res/values/objectives.xml
index dac9b0234a..7fada71a72 100644
--- a/app/src/main/res/values/objectives.xml
+++ b/app/src/main/res/values/objectives.xml
@@ -47,7 +47,7 @@
Display content of Loop plugin
Use scale function by long-pressing BG chart
Enter
- If you were OpenAPS user before and your NS has at least 3 months of looping data, you can send an email to objectives@androidaps.org with your NS address and request code to bypass the rest of objectives. Enter code obtained from developers
+ If you have at least 3 month of closed loop experience with other systems you might qualify for a code to skip objectives. See https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives for details.
Code accepted
Code invalid
Prove your knowledge
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d64c9b518a..2d5da40098 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1701,6 +1701,7 @@
SMB execution time
Temp basal request time
Temp basal execution time
+ Insight Pump Alerts
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index e31396a640..a790051830 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -27,12 +27,10 @@
- @android:style/Animation
-