Merge branch 'dev' into omnipod_eros_dev

This commit is contained in:
Andy Rozman 2020-04-04 20:25:09 +01:00
commit 88554ee376
89 changed files with 1280 additions and 460 deletions

View file

@ -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"

View file

@ -23,6 +23,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.dexcom.cgm.EXTERNAL_PERMISSION" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission-sdk-23 android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
@ -124,14 +125,6 @@
</intent-filter>
</receiver>
<!-- Network change local receiver -->
<receiver android:name=".receivers.NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
@ -266,6 +259,8 @@
<activity
android:name=".plugins.pump.insight.activities.InsightAlertActivity"
android:label="@string/pump_alert"
android:excludeFromRecents="true"
android:launchMode="singleInstance"
android:theme="@style/InsightAlertDialog" />
<activity
android:name=".plugins.pump.insight.activities.InsightPairingInformationActivity"

View file

@ -1,8 +1,11 @@
package info.nightscout.androidaps;
import android.app.Application;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.os.SystemClock;
import androidx.annotation.ColorRes;
@ -86,9 +89,11 @@ import info.nightscout.androidaps.plugins.source.SourcePoctechPlugin;
import info.nightscout.androidaps.plugins.source.SourceTomatoPlugin;
import info.nightscout.androidaps.plugins.source.SourceXdripPlugin;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.receivers.ChargingStateReceiver;
import info.nightscout.androidaps.receivers.DataReceiver;
import info.nightscout.androidaps.receivers.KeepAliveReceiver;
import info.nightscout.androidaps.receivers.NSAlarmReceiver;
import info.nightscout.androidaps.receivers.NetworkChangeReceiver;
import info.nightscout.androidaps.receivers.TimeDateOrTZChangeReceiver;
import info.nightscout.androidaps.services.Intents;
import info.nightscout.androidaps.utils.ActivityMonitor;
@ -297,6 +302,12 @@ public class MainApp extends Application {
this.timeDateOrTZChangeReceiver = new TimeDateOrTZChangeReceiver();
this.timeDateOrTZChangeReceiver.registerBroadcasts(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION );
registerReceiver(new NetworkChangeReceiver(), intentFilter);
registerReceiver(new ChargingStateReceiver(), new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
public static String gs(@StringRes int id) {

View file

@ -72,6 +72,12 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void attachBaseContext(Context newBase) {
super.attachBaseContext(LocaleHelper.INSTANCE.wrap(newBase));

View file

@ -84,7 +84,7 @@ class SurveyActivity : NoSplashAppCompatActivity() {
.addOnCompleteListener(this) { task ->
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)

View file

@ -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() {

View file

@ -57,7 +57,7 @@ class CalibrationDialog : DialogFragmentWithDate() {
activity?.let { activity ->
OKDialog.showConfirmation(activity, MainApp.gs(R.string.overview_calibration), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
log.debug("USER ENTRY: CALIBRATION $bg")
XdripCalibrations.confirmAndSendCalibration(bg, context)
XdripCalibrations.sendIntent(bg)
})
}
} else

View file

@ -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

View file

@ -78,9 +78,9 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
?: return false
val actions: LinkedList<String> = 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("<br/>").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

View file

@ -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())
}
}
}

View file

@ -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));
}
}

View file

@ -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) {

View file

@ -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);
}

View file

@ -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;

View file

@ -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));
}

View file

@ -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
}
}

View file

@ -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<Alert> 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<Alert> 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,9 +206,10 @@ 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;
}
@ -200,10 +218,6 @@ public class InsightAlertService extends Service implements InsightConnectionSer
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 {
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 {
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;

View file

@ -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);
}
} 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;
}

View file

@ -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();
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);

View file

@ -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;
}
}

View file

@ -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
}

View file

@ -160,7 +160,7 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
} catch (SQLException e) {
log.error("Unhandled exception", e);
}
scheduleTreatmentChange(null);
scheduleTreatmentChange(null, true);
}
@ -208,7 +208,18 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
/**
* Schedule a foodChange Event.
*/
public void scheduleTreatmentChange(@Nullable final Treatment treatment) {
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) {
@ -221,6 +232,7 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
}
});
}
}
public List<Treatment> getTreatmentData() {
try {
@ -294,7 +306,7 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
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<DatabaseHelper> {
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> {
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> {
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<DatabaseHelper> {
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<DatabaseHelper> {
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<DatabaseHelper> {
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<DatabaseHelper> {
}
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<DatabaseHelper> {
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<DatabaseHelper> {
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<DatabaseHelper> {
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<DatabaseHelper> {
} catch (SQLException e) {
log.error("Unhandled exception", e);
}
scheduleTreatmentChange(treatment);
scheduleTreatmentChange(treatment, true);
}
/**

View file

@ -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) {

View file

@ -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);

View file

@ -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)
}

View file

@ -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"/>
<LinearLayout
android:id="@+id/overview_buttons_layout"

View file

@ -0,0 +1,584 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".plugins.general.overview.OverviewFragment">
<ScrollView
android:id="@+id/overview_toppart_scrollbar"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/overview_notifications"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/overview_looplayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</androidx.recyclerview.widget.RecyclerView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/overview_looplayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/overview_pumpstatuslayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/overview_notifications">
<TextView
android:id="@+id/overview_apsmode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="3dp"
android:paddingBottom="3dp"
android:text="@string/openloop"
android:textAppearance="?android:attr/textAppearanceSmall"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/overview_activeprofile"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/overview_activeprofile"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="3dp"
android:paddingBottom="3dp"
android:text="@string/profile"
android:textAppearance="?android:attr/textAppearanceSmall"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/overview_temptarget"
app:layout_constraintStart_toEndOf="@+id/overview_apsmode"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/overview_temptarget"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="3dp"
android:paddingBottom="3dp"
android:text="@string/temptargetshort"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/mdtp_white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/overview_activeprofile"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/overview_pumpstatuslayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@+id/bg_tbr_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/overview_looplayout">
<TextView
android:id="@+id/overview_pumpstatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="3dp"
android:paddingBottom="3dp"
android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/bg_tbr_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@+id/overview_statuslights"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/overview_pumpstatuslayout">
<TextView
android:id="@+id/overview_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00.0"
android:textSize="42sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/overview_arrow"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/overview_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:paddingStart="-2dp"
android:paddingEnd="0dp"
android:text="→"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/overview_bg_guideline"
app:layout_constraintStart_toEndOf="@+id/overview_bg"
app:layout_constraintTop_toTopOf="@+id/overview_bg" />
<TextView
android:id="@+id/overview_hor_space"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/overview_bg_guideline"
app:layout_constraintStart_toEndOf="@+id/overview_arrow"
app:layout_constraintTop_toTopOf="@+id/overview_bg" />
<TextView
android:id="@+id/overview_timeago"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1 min ago"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@+id/overview_delta"
app:layout_constraintEnd_toEndOf="@+id/overview_arrow"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/overview_bg" />
<TextView
android:id="@+id/overview_delta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="delta 15m: 0.3"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@+id/overview_avgdelta"
app:layout_constraintEnd_toEndOf="@+id/overview_arrow"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/overview_timeago" />
<TextView
android:id="@+id/overview_avgdelta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="delta 40m: 0.3"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@+id/overview_arrow"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/overview_delta" />
<!-- right side -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/overview_bg_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/overview_iob_label"
app:layout_constraintGuide_percent="0.40"
app:layout_constraintStart_toEndOf="@+id/overview_hor_space"
app:layout_constraintTop_toTopOf="parent" />
<!-- right side IOB -->
<TextView
android:id="@+id/overview_iob_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/iob"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/overview_cob_label"
app:layout_constraintStart_toEndOf="@+id/overview_bg_guideline"
app:layout_constraintTop_toBottomOf="parent" />
<TextView
android:id="@+id/overview_iob_colon"
android:layout_width="5dp"
android:layout_height="wrap_content"
android:text=":"
android:textSize="16sp"
app:layout_constraintStart_toEndOf="@+id/overview_iob_label"
app:layout_constraintTop_toTopOf="@+id/overview_iob_label" />
<TextView
android:id="@+id/overview_iob"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@string/iob"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/overview_iob_label"
app:layout_constraintStart_toEndOf="@+id/overview_iob_colon" />
<!-- right side COB -->
<TextView
android:id="@+id/overview_cob_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cob"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/overview_basebasal_label"
app:layout_constraintStart_toEndOf="@+id/overview_bg_guideline"
app:layout_constraintTop_toBottomOf="@+id/overview_iob_label" />
<TextView
android:id="@+id/overview_cob_colon"
android:layout_width="5dp"
android:layout_height="wrap_content"
android:text=":"
android:textSize="16sp"
app:layout_constraintStart_toEndOf="@+id/overview_cob_label"
app:layout_constraintTop_toBottomOf="@+id/overview_iob_label" />
<TextView
android:id="@+id/overview_cob"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@string/cob"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/overview_cob_label"
app:layout_constraintStart_toEndOf="@+id/overview_cob_colon" />
<!-- right side basal -->
<TextView
android:id="@+id/overview_basebasal_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/basal_short"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/overview_extendedbolus_label"
app:layout_constraintStart_toEndOf="@+id/overview_bg_guideline"
app:layout_constraintTop_toBottomOf="@+id/overview_cob_label" />
<TextView
android:id="@+id/overview_basebasal_colon"
android:layout_width="5dp"
android:layout_height="wrap_content"
android:text=":"
android:textSize="16sp"
app:layout_constraintStart_toEndOf="@+id/overview_basebasal_label"
app:layout_constraintTop_toBottomOf="@+id/overview_cob_label" />
<TextView
android:id="@+id/overview_basebasal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="0.50U/h @17:35 1/30min"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/overview_basebasal_label"
app:layout_constraintStart_toEndOf="@+id/overview_basebasal_colon" />
<!-- right side extended -->
<TextView
android:id="@+id/overview_extendedbolus_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/extended_bolus_short"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/overview_sensitivity_label"
app:layout_constraintStart_toEndOf="@+id/overview_bg_guideline"
app:layout_constraintTop_toBottomOf="@+id/overview_basebasal_label" />
<TextView
android:id="@+id/overview_extendedbolus_colon"
android:layout_width="5dp"
android:layout_height="wrap_content"
android:text=":"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/overview_extendedbolus_label"
app:layout_constraintStart_toEndOf="@+id/overview_extendedbolus_label" />
<TextView
android:id="@+id/overview_extendedbolus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="0.50U/h @17:35 1/30min"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/overview_extendedbolus_label"
app:layout_constraintStart_toEndOf="@+id/overview_extendedbolus_colon" />
<!-- right side AS -->
<TextView
android:id="@+id/overview_sensitivity_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sensitivity_short"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/overview_bg_guideline"
app:layout_constraintTop_toBottomOf="@+id/overview_extendedbolus_label" />
<TextView
android:id="@+id/overview_sensitivity_colon"
android:layout_width="5dp"
android:layout_height="wrap_content"
android:text=":"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/overview_sensitivity_label"
app:layout_constraintStart_toEndOf="@+id/overview_sensitivity_label" />
<TextView
android:id="@+id/overview_sensitivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="100%"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/overview_sensitivity_label"
app:layout_constraintStart_toEndOf="@+id/overview_sensitivity_colon" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/overview_statuslights"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@+id/overview_bggraph"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/bg_tbr_layout">
<TextView
android:id="@+id/overview_canulaage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text=""
android:textSize="14sp" />
<TextView
android:id="@+id/overview_insulinage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text=""
android:textSize="14sp" />
<TextView
android:id="@+id/overview_reservoirlevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text=""
android:textSize="14sp" />
<TextView
android:id="@+id/overview_sensorage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text=""
android:textSize="14sp" />
<TextView
android:id="@+id/overview_batterylevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text=""
android:textSize="14sp" />
</LinearLayout>
<com.jjoe64.graphview.GraphView
android:id="@+id/overview_bggraph"
android:layout_width="0dp"
android:layout_height="200dp"
app:layout_constraintBottom_toTopOf="@+id/overview_iobgraph"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/overview_statuslights" />
<ImageButton
android:id="@+id/overview_chartMenuButton"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginEnd="5dp"
android:contentDescription="@string/chartmenu"
app:layout_constraintEnd_toEndOf="@+id/overview_bggraph"
app:layout_constraintTop_toTopOf="@+id/overview_bggraph"
app:srcCompat="@drawable/ic_arrow_drop_down_white_24dp" />
<TextView
android:id="@+id/overview_iobcalculationprogess"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text=""
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="@+id/overview_bggraph"
app:layout_constraintEnd_toEndOf="@+id/overview_bggraph"
app:layout_constraintStart_toStartOf="@+id/overview_bggraph"
app:layout_constraintTop_toTopOf="@+id/overview_bggraph" />
<com.jjoe64.graphview.GraphView
android:id="@+id/overview_iobgraph"
android:layout_width="0dp"
android:layout_height="100dp"
app:layout_constraintBottom_toTopOf="@+id/overview_accepttempbutton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/overview_bggraph" />
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_accepttempbutton"
style="?android:attr/buttonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:text="@string/setbasalquestion"
android:textColor="@color/colorAcceptTempButton"
app:layout_constraintBottom_toTopOf="@id/overview_buttons_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/overview_iobgraph"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/overview_buttons_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="0dp"
android:paddingEnd="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/overview_accepttempbutton">
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_treatmentbutton"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/icon_insulin_carbs"
android:text="@string/overview_treatment_label"
android:textColor="@color/colorTreatmentButton"
android:textSize="10sp"
android:visibility="gone" />
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_insulinbutton"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/icon_bolus"
android:text="@string/overview_insulin_label"
android:textColor="@color/colorInsulinButton"
android:textSize="10sp" />
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_carbsbutton"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/icon_cp_bolus_carbs"
android:text="@string/overview_carbs_label"
android:textColor="@color/colorCarbsButton"
android:textSize="10sp" />
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_wizardbutton"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/icon_calculator"
android:text="@string/overview_calculator_label"
android:textColor="@color/colorCalculatorButton"
android:textSize="10sp" />
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_calibrationbutton"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/icon_calibration"
android:text="@string/overview_calibration"
android:textColor="@color/colorCalibrationButton"
android:textSize="10sp"
android:visibility="gone" />
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_cgmbutton"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/icon_xdrip"
android:text="@string/overview_cgm"
android:textColor="@color/colorCalibrationButton"
android:textSize="10sp"
android:visibility="gone" />
<info.nightscout.androidaps.utils.SingleClickButton
android:id="@+id/overview_quickwizardbutton"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/icon_quickwizard"
android:text="@string/quickwizard"
android:textColor="@color/colorQuickWizardButton"
android:textSize="10sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Назад</string>
<string name="objectives_button_start">Старт</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Отворете съдържанието на Цикъл плъгина.</string>
<string name="objectives_usescale">Използвайте функцията за удължаване на периода на графиката, като задържите върху нея.</string>
<string name="objectives_button_enter">Въведи</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">Ако сте били потребител на OpenAPS и НС има най-малко 3 месеца цикъл на данни, можете да изпращате по електронна поща objectives@androidaps.org с адрес на НС, за да поискате код за заобикаляне на останалите цели. Въведете кода, получен от разработчици</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">Ако имате поне 3 месеца опит с други системи, които биха може да получите код за пропускане на целите. Прочетете https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives за получаване на подробна информация.</string>
<string name="codeaccepted">Код приет!</string>
<string name="codeinvalid">Неправилен код</string>
<string name="objectives_exam_objective">Докажете знанията си</string>
@ -47,6 +46,7 @@
<string name="requestcode">Код (request code): %1$s</string>
<string name="objectives_hint">(отбележете всички правилни отговори)</string>
<string name="disconnectpump_hint" formatted="false">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-to-do-when-taking-a-shower-or-bath</string>
<string name="notconnected">Няма връзка с Интернет!</string>
<string name="failedretrievetime">Не може да се вземе времето</string>
<string name="requirementnotmet">Задачите не са изпълнени</string>
<plurals name="objective_days">

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="dia_whatmeansdia">Co je pravda o DIA?</string>
<string name="dia_label">Téma: Doba trvání účinku inzulínu</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Zpět</string>
<string name="objectives_button_start">Začátek</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Zobrazte obsah modulu Smyčka</string>
<string name="objectives_usescale">Přepněte režim zobrazení dlouhým stisknutím grafu glykémie</string>
<string name="objectives_button_enter">Zadat</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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ářů.</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Kód přijat</string>
<string name="codeinvalid">Neplatný kód</string>
<string name="objectives_exam_objective">Prokažte své znalosti</string>

View file

@ -280,7 +280,7 @@
<string name="danarprofile">DanaR profil</string>
<string name="danarprofile_dia">DIA [h]</string>
<string name="danarprofile_dia_summary">Celková doba aktivity inzulínu</string>
<string name="failedupdatebasalprofile">Chyba při nastavení dočasného bazálu</string>
<string name="failedupdatebasalprofile">Chyba při nastavení bazálního pprofilu</string>
<string name="danar_historyreload">Načíst</string>
<string name="uploading">Nahrávám</string>
<string name="danar_ebolus">E bolus</string>
@ -340,7 +340,7 @@
<string name="smscommunicator_tempbasalfailed">Spuštění dočasného bazálu selhalo</string>
<string name="smscommunicator_extendedfailed">Spuštění prodlouženého bolusu selhalo</string>
<string name="smscommunicator_basalstopreplywithcode">Na zastavení dočasného bazálu odpovězte SMS s kódem %1$s</string>
<string name="smscommunicator_extendedstopreplywithcode">Na zastavení prodlouženého bolusu odpovězte SMS s kódem %1$s</string>
<string name="smscommunicator_extendedstopreplywithcode">Pro zastavení prodlouženého bolusu odpovězte SMS s kódem %1$s</string>
<string name="smscommunicator_tempbasalcanceled">Dočasný bazál zastaven</string>
<string name="smscommunicator_extendedcanceled">Prodloužený bolus zastaven</string>
<string name="smscommunicator_tempbasalcancelfailed">Rušení dočasného bazálu selhalo</string>
@ -1443,8 +1443,8 @@
<string name="alreadyset">Již nastaveno</string>
<string name="message">Zpráva</string>
<string name="clearqueueconfirm">Vymazat frontu? Všechna data ve frontě budou ztracena!</string>
<string name="ebstopsloop">Použití funkce rozloženého bolusu zastaví uzavřenou smyčku po dobu trvání rozloženého bolusu. Opravdu to chcete?</string>
<string name="closed_loop_disabled_with_eb">Uzavřená smyčka je zastavena kvůli běžícímu rozloženému bolusu</string>
<string name="ebstopsloop">Použití funkce prodlouženého bolusu zastaví uzavřenou smyčku po dobu trvání prodlouženého bolusu. Opravdu to chcete?</string>
<string name="closed_loop_disabled_with_eb">Uzavřená smyčka je zastavena kvůli běžícímu prodlouženému bolusu</string>
<string name="extended_bolus_short">EB</string>
<string name="phonechecker">PhoneChecker</string>
<string name="chartmenu">Možnosti grafu</string>
@ -1453,4 +1453,5 @@
<string name="loop_smbexecution_time_label">Čas provedení SMB</string>
<string name="loop_tbrrequest_time_label">Čas požadavku dočasného bazálu</string>
<string name="loop_tbrexecution_time_label">Čas provedení dočasného bazálu</string>
<string name="insight_alert_notification_channel">Upozornění pumpy Insight</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Zurück</string>
<string name="objectives_button_start">Start</string>
@ -37,7 +36,7 @@ die Formel maxIOB = durchschnittlicher Essensbolus + 3 x höchste Basalrate</str
<string name="objectives_useloop">Zeige den Inhalt des Loop-Plugins an</string>
<string name="objectives_usescale">Nutze die Skalierfunktion. Drücke dazu lange auf das BZ-Diagramm</string>
<string name="objectives_button_enter">OK</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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:</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Code akzeptiert</string>
<string name="codeinvalid">Code ungültig</string>
<string name="objectives_exam_objective">Prüfe Dein Wissen</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -686,7 +685,7 @@
<string name="shortgramm">g</string>
<string name="shortminute">min</string>
<string name="shorthour">h</string>
<string name="shortday">T</string>
<string name="shortday">d</string>
<string name="none"><![CDATA[<nichts>]]></string>
<string name="shortkilojoul">kJ</string>
<string name="shortenergy">En</string>
@ -1455,4 +1454,5 @@ Unerwartetes Verhalten.</string>
<string name="loop_smbexecution_time_label">SMB Ausführungszeit</string>
<string name="loop_tbrrequest_time_label">Temp. BR Anfragezeit</string>
<string name="loop_tbrexecution_time_label">Temp. BR Ausführungszeit</string>
<string name="insight_alert_notification_channel">Insight Pumpenalarme</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Πίσω</string>
<string name="objectives_button_start">Έναρξη</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Atrás</string>
<string name="objectives_button_start">Inicio</string>
@ -36,7 +35,6 @@
<string name="objectives_useloop">Mostrar contenido del plugin Loop</string>
<string name="objectives_usescale">Usar función de escala mediante un gráfico BG pulsado largo</string>
<string name="objectives_button_enter">Intro</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="codeaccepted">Código aceptado</string>
<string name="codeinvalid">Código no válido</string>
<string name="objectives_exam_objective">Compruebe su conocimiento</string>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Retour</string>
<string name="objectives_button_start">Départ</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Affichage du contenu du plugin Boucle</string>
<string name="objectives_usescale">Modification de l\'échelle du graphique par un appui long sur la courbe de glycémie</string>
<string name="objectives_button_enter">Entrer</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Code accepté</string>
<string name="codeinvalid">Code invalide</string>
<string name="objectives_exam_objective">Prouver ses connaissances</string>

View file

@ -42,10 +42,10 @@
<string name="description_pump_dana_rs">Intégration pour les pompes Diabecare DANA RS</string>
<string name="description_pump_mdi">Intégration pompe pour les personnes qui font des injections quotidiennes multiples pour le traitement de leur diabète</string>
<string name="description_pump_virtual">Intégration pour les pompes qui nont pas encore de pilote (Boucle Ouverte)</string>
<string name="description_sensitivity_aaps">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 dabsorption max des glucides du menu préférences.</string>
<string name="description_sensitivity_oref0">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 lheure spécifiée dans les préférences.</string>
<string name="description_sensitivity_oref1">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).</string>
<string name="description_sensitivity_weighted_average">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 dabsorption des glucides max du menu préférences. Cet algorithme est le plus rapide pour s\'adapter aux changements de sensibilité.</string>
<string name="description_sensitivity_aaps">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 dabsorption max des glucides du menu préférences.</string>
<string name="description_sensitivity_oref0">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 lheure spécifiée dans les préférences.</string>
<string name="description_sensitivity_oref1">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).</string>
<string name="description_sensitivity_weighted_average">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 dabsorption des glucides max du menu préférences. Cet algorithme est le plus rapide pour s\'adapter aux changements de sensibilité.</string>
<string name="description_source_eversense">Recevoir les valeurs de glycémie de lapp Eversense patchée.</string>
<string name="description_source_glimp">Recevoir les glycémies depuis Glimp.</string>
<string name="description_source_mm640g">Recevoir les glycémies depuis le 600SeriesAndroidUploder.</string>
@ -145,7 +145,7 @@
<string name="overview_newtempbasal_basalpercent">Valeur Basal [%]</string>
<string name="setbasalquestion">Accepter nouveau basal temporaire :</string>
<string name="overview_treatment_label">Traitement</string>
<string name="overview_calculator_label">Calculatrice</string>
<string name="overview_calculator_label">Assistant</string>
<string name="constraintapllied">Restriction appliquée !</string>
<string name="confirmation">Confirmation</string>
<string name="bolus">Bolus</string>
@ -456,7 +456,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="openapsama_max_daily_safety_multiplier_summary">Valeur par défaut : 3 Ceci est un paramètre important de sécurité de lOpenAPS. Ceci va limiter vos débits basal à 3 fois votre débit Basal maximum. Il est probable que vous naurez 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”.</string>
<string name="openapsama_current_basal_safety_multiplier_summary">Valeur par défaut : 4 Ceci est lautre moitié des paramètres de sécurité limitant lOpenAPS, et lautre 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 lutilisateur en danger en programmant des débits Basal maximum trop élevés avant de comprendre comment lalgorithme fonctionne. Encore une fois, la valeur par défaut est 4x, la plupart des gens nauront jamais besoin dajuster ce paramètre, plutôt ils auront tendance à ajuster dautres paramètres sils voient quils atteignent ce paramètre de limite de sécurité.</string>
<string name="openapsama_autosens_max_summary">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.</string>
<string name="openapsama_autosens_min_summary">Valeur par défaut: 0.7\nLautre 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.</string>
<string name="openapsama_autosens_min_summary">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.</string>
<string name="openapsama_autosens_adjusttargets">Autosens ajuste aussi les cibles</string>
<string name="openapsama_autosens_adjusttargets_summary">Valeur par défaut : true\nCeci est utilisé pour autoriser Autosens à ajuster les cibles de glycémie en plus de SI et les basals.</string>
<string name="openapsama_bolussnooze_dia_divisor_summary">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. Lexemple 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).</string>
@ -543,7 +543,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="treatments_wizard_cob_label">GA</string>
<string name="superbolus">Superbolus</string>
<string name="ns_logappstartedevent">Démarrage AAPS entré dans NS</string>
<string name="restartingapp">Sortie de lapplication pour appliquer de nouveaux paramètres.</string>
<string name="restartingapp">Sortir de lapplication pour appliquer les nouveaux paramètres.</string>
<string name="danarv2pump">DanaRv2</string>
<string name="configbuilder_insulin">Insuline</string>
<string name="configbuilder_insulin_description">Quel type d\'insuline utilisez-vous ?</string>
@ -565,7 +565,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="virtualpump_firmware_label">Firmware</string>
<string name="pump_lastconnection_label">Dernière connexion</string>
<string name="danar_bluetooth_status">État Bluetooth</string>
<string name="nav_about">À propos de</string>
<string name="nav_about">À propos</string>
<string name="smscommunicator_missingsmspermission">Autorisation SMS manquante</string>
<string name="smscommunicator_missingphonestatepermission">Autorisation du téléphone manquante</string>
<string name="xdripstatus_settings">état Xdrip (montre)</string>
@ -984,7 +984,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="combo_invalid_setup">Paramétrage de la pompe invalide. Vérifiez la documentation et le menu QUICK INFO en utilisant le logiciel de configuration 360.</string>
<string name="custom">Personnalisé</string>
<string name="largetimedifftitle">Différence horaire importante</string>
<string name="largetimediff">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.</string>
<string name="largetimediff">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.</string>
<string name="careportal_removestartedevents">Réinitialiser AndroidAPS</string>
<string name="storedsettingsfound">Paramètres sauvegardés trouvés</string>
<string name="allow_hardware_pump_text">ATTENTION : Si vous activez et connectez à une vraie pompe, AndroidAPS copiera les paramètres Basals du profil vers la pompe, écrasant le taux basal existant stocké sur la pompe. Assurez-vous d\'avoir correctement saisi et réglé les paramètres Basal dans AndroidAPS. Si vous ne savez pas ou si ne voulez pas écraser les paramètres Basal sur votre pompe, appuyez sur Annuler et reporter le passage à la pompe à une date ultérieure.</string>
@ -1425,10 +1425,10 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="invalidage">Âge invalide</string>
<string name="invalidweight">Poids invalide</string>
<string name="tddformat"><![CDATA[<b>%1$s:</b> ∑: <b>%2$.2f</b> Bol: <b>%3$.2f</b> Bas: <b>%4$.2f</b>]]></string>
<string name="tirformat"><![CDATA[<b>%1$s:</b> Bas: <b>%2$02d%%</b> Médian: <b>%3$02d%%</b> Haut: <b>%4$02d%%</b>]]></string>
<string name="tirformat"><![CDATA[<b>%1$s:</b> Bas: <b>%2$02d%%</b> Cible: <b>%3$02d%%</b> Haut: <b>%4$02d%%</b>]]></string>
<string name="average">Moyenne</string>
<string name="tdd">DTI</string>
<string name="tir">TIR</string>
<string name="tir">Cible Gly</string>
<string name="activitymonitor">Moniteur d\'activité</string>
<string name="doyouwantresetstats">Voulez-vous réinitialiser les stats d\'activité ?</string>
<string name="statistics">Statistiques</string>
@ -1454,4 +1454,5 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="loop_smbexecution_time_label">Heure d\'exécution SMB</string>
<string name="loop_tbrrequest_time_label">Heure de demande basal temp</string>
<string name="loop_tbrexecution_time_label">Heure d\'exécution basal temp</string>
<string name="insight_alert_notification_channel">Alertes Pompe Insight</string>
</resources>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="dia_whatmeansdia">Cosa è vero riguardo DIA?</string>
<string name="dia_label">Argomento: Durata dell\'Azione dell\'Insulina</string>
@ -47,8 +46,8 @@
<string name="exercise_switchprofilebelow100">Fare un cambio profilo sotto il 100%.</string>
<string name="exercise_switchprofileabove100">Fare un cambio profilo sopra il 100%.</string>
<string name="exercise_stoploop">Stoppare il loop.</string>
<string name="exercise_doitbeforestart">Impostare un temp-target \"attività\" prima dell\'inizio dell\'esercizio fisico.</string>
<string name="exercise_afterstart">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.</string>
<string name="exercise_doitbeforestart">Impostare un temp-target \"attività fisica\" prima dell\'inizio dell\'esercizio fisico.</string>
<string name="exercise_afterstart">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.</string>
<string name="exercise_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target</string>
<string name="suspendloop_label">Argomento: Loop Disabilitato/Sospeso</string>
<string name="suspendloop_doigetinsulin">Ricevo insulina quando il loop è disabilitato/sospeso?</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="alert_r1_title">Eroga bolo</string>
<string name="alert_r2_title">Bolo perso</string>
@ -10,8 +9,8 @@
<string name="alert_w32_title">Batteria quasi scarica</string>
<string name="alert_w33_title">Ora/data non valida</string>
<string name="alert_w34_title">Fine della garanzia</string>
<string name="alert_w36_title">TBR annullato</string>
<string name="alert_w38_title">Bolo annullato</string>
<string name="alert_w36_title">TBR cancellato</string>
<string name="alert_w38_title">Bolo cancellato</string>
<string name="alert_w39_title">Avviso di prestito</string>
<string name="alert_m20_title">Cartuccia non inserita</string>
<string name="alert_m21_title">Cartuccia vuota</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="connection_failed">Connessione fallita</string>
<string name="connection_lost">Connessione persa</string>
@ -7,9 +6,9 @@
<string name="socket_creation_failed">Creazione socket fallita</string>
<string name="timeout">Timeout</string>
<string name="maximum_number_of_bolus_type_already_running">Numero massimo tipo di bolo già in esecuzione</string>
<string name="no_active_tbr_to_cancel">Nessun TBR attivo da annullare</string>
<string name="no_active_tbr_to_cancel">Nessun TBR attivo da cancellare</string>
<string name="no_active_tbr_to_change">Nessun TBR attivo da modificare</string>
<string name="no_such_bolus_to_cancel">Nessun bolo da annullare</string>
<string name="no_such_bolus_to_cancel">Nessun bolo da cancellare</string>
<string name="pump_already_in_that_state_exception">Micro già in questo stato</string>
<string name="run_mode_not_allowed">Modalità di esecuzione non consentita</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Indietro</string>
<string name="objectives_button_start">Avvia</string>
@ -18,14 +17,14 @@
<string name="objectives_maxiob_objective">Regolazione del loop chiuso, aumentando max IOB al di sopra di 0 e abbassando gradualmente i target glicemici</string>
<string name="objectives_maxiob_gate">Esegui l\'applicazione per alcuni giorni e almeno una notte senza allarmi di glicemia bassa, prima di abbassare il target glicemico</string>
<string name="objectives_autosens_objective">Adatta basali e rapporti se necessario, quindi attiva auto-sens</string>
<string name="objectives_autosens_gate">1 settimana di looping diurno con dichiarazione regolare dei carboidrati, eseguito con successo</string>
<string name="objectives_autosens_gate">1 settimana di looping diurno con inserimento regolare dei carboidrati, eseguito con successo</string>
<string name="objectives_ama_objective">Abilitazione funzioni aggiuntive per l\'uso diurno, ad esempio AMA (advanced meal assist - assistenza avanzata del pasto)</string>
<string name="objectives_smb_objective">Abilitazione funzioni aggiuntive per l\'uso diurno, come SMB</string>
<string name="objectives_smb_gate">È 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</string>
<string name="objectives_bgavailableinns">Glicemia disponibile in NS</string>
<string name="objectives_pumpstatusavailableinns">Stato micro disponibile in NS</string>
<string name="objectives_manualenacts">Attivazioni manuali</string>
<string name="accomplished">Compiuto: %1$s</string>
<string name="accomplished">Completato: %1$s</string>
<string name="objectives_usage_objective">Impara a controllare AndroidAPS</string>
<string name="objectives_usage_gate">Esegui varie azioni in AndroidAPS</string>
<string name="objectives_useprofileswitch">Imposta il profilo \"90%\" per 10 min (premi a lungo sul nome profilo nella sezione Panoramica)</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Visualizza il contenuto del plugin Loop</string>
<string name="objectives_usescale">Usa la funzione di ridimensionamento premendo a lungo sul grafico delle glicemie</string>
<string name="objectives_button_enter">Entra</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Codice accettato</string>
<string name="codeinvalid">Codice non valido</string>
<string name="objectives_exam_objective">Dai prova della tua conoscenza</string>
@ -51,7 +50,7 @@
<string name="useaction_hint" formatted="false">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#config-builder</string>
<string name="usescale_hint" formatted="false">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#the-homescreen</string>
<string name="notconnected">Non connesso a internet</string>
<string name="failedretrievetime">Impossibile recuperare l\'orario</string>
<string name="failedretrievetime">Impossibile recuperare l\'ora</string>
<string name="requirementnotmet">Requisiti obiettivo non soddisfatti</string>
<plurals name="objective_days">
<item quantity="one">%1$d giorno</item>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -14,7 +13,7 @@
<string name="reset_db_confirm">Vuoi davvero resettare i database?</string>
<string name="nav_exit">Esci</string>
<string name="danar_useextended_title">Usa boli estesi per &gt;200%%</string>
<string name="danar_bt_name_title">Dispositivo DanaR Bluetooth</string>
<string name="danar_bt_name_title">Dispositivo Bluetooth DanaR</string>
<string name="ns_sync_use_absolute_title">Utilizza sempre valori basali assoluti</string>
<string name="alert_dialog_storage_permission_text">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)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Questo dispositivo non sembra supportare la whitelist dell\'ottimizzazione della batteria: potrebbero verificarsi problemi di prestazioni.</string>
@ -25,7 +24,7 @@
<string name="description_food">Visualizza l\'elenco dei cibi definiti in Nightscout</string>
<string name="description_insulin_rapid">Preset per insulina Humalog e NovoRapid</string>
<string name="description_insulin_ultra_rapid">Preset per insulina Fiasp</string>
<string name="description_insulin_free_peak">Ti consente di definire il picco dell\'insulina e deve essere utilizzato solo dagli utenti avanzati</string>
<string name="description_insulin_free_peak">Ti consente di definire il picco di attività dell\'insulina e deve essere utilizzato solo dagli utenti avanzati</string>
<string name="description_loop">Attiva o disattiva l\'implementazione del loop.</string>
<string name="description_ns_client">Sincronizza i tuoi dati con Nightscout</string>
<string name="description_ma">Stato dell\'algoritmo nel 2016</string>
@ -42,7 +41,7 @@
<string name="description_pump_dana_r_v2">Integrazione del microinfusore DANA Diabecare R con firmware aggiornato</string>
<string name="description_pump_dana_rs">Integrazione del microinfusore DANA Diabecare RS</string>
<string name="description_pump_mdi">Per le persone in terapia multi-iniettiva</string>
<string name="description_pump_virtual">Per microinfusori che non hanno ancora alcun driver (Loop Aperto)</string>
<string name="description_pump_virtual">Per microinfusori che non hanno ancora alcun driver (Loop aperto)</string>
<string name="description_sensitivity_aaps">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.</string>
<string name="description_sensitivity_oref0">La sensibilità è calcolata dai dati delle ultime 24h e i carboidrati (se non assorbiti) vengono tagliati fuori dopo il tempo specificato nelle preferenze.</string>
<string name="description_sensitivity_oref1">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.</string>
@ -51,7 +50,7 @@
<string name="description_source_glimp">Ricevi valori glicemia da Glimp.</string>
<string name="description_source_mm640g">Ricevi valori glicemia da 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Scarica dati glicemia da Nightscout</string>
<string name="description_source_xdrip">Ricevi dati glicemia da xDrip.</string>
<string name="description_source_xdrip">Ricevi valori glicemia da xDrip.</string>
<string name="description_treatments">Salva tutti i trattamenti che sono stati fatti</string>
<string name="description_wear">Monitora e controlla AndroidAPS usando il tuo smartwatch WearOS.</string>
<string name="description_xdrip_status_line">Mostra le informazioni del loop sulla watchface di xDrip+.</string>
@ -120,7 +119,7 @@
<string name="configbuilder_treatments">Trattamenti</string>
<string name="configbuilder_treatments_description">Quale plugin dovrebbe essere utilizzato per la gestione del trattamento?</string>
<string name="configbuilder_profile">Profilo</string>
<string name="configbuilder_profile_description">Quale profilo dovrebbe usare AndroidAPS?</string>
<string name="configbuilder_profile_description">Quale profilo AndroidAPS dovrebbe usare?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Quale algoritmo APS dovrebbe apportare aggiustamenti terapeutici?</string>
<string name="configbuilder_general">Generale</string>
@ -176,7 +175,7 @@
<string name="careportal_announcement">Annuncio</string>
<string name="careportal_note">Nota</string>
<string name="careportal_question">Domanda</string>
<string name="careportal_exercise">Esercizio</string>
<string name="careportal_exercise">Esercizio fisico</string>
<string name="careportal_pumpsitechange">Cambio posizione cannula</string>
<string name="careportal_cgmsensorinsert">Inserimento sensore</string>
<string name="careportal_cgmsensorstart">Avvio Sensore</string>
@ -196,7 +195,7 @@
<string name="careportal_newnstreatment_sensor">Sensore</string>
<string name="careportal_newnstreatment_carbs_label">CHO</string>
<string name="careportal_newnstreatment_insulin_label">Insulina</string>
<string name="careportal_newnstreatment_carbtime_label">Tempo CHO</string>
<string name="careportal_newnstreatment_carbtime_label">Offset CHO</string>
<string name="careportal_newnstreatment_split_label">Frazione</string>
<string name="careportal_newnstreatment_duration_label">Durata</string>
<string name="careportal_newnstreatment_percent_label">Percentuale</string>
@ -248,7 +247,7 @@
<string name="success">OK</string>
<string name="percent">Percentuale</string>
<string name="absolute">Assoluto</string>
<string name="canceltemp">Cancellare basale temporanea</string>
<string name="canceltemp">Cancella basale temporanea</string>
<string name="smscommunicator">Comunicazioni SMS</string>
<string name="waitingforpumpresult">In attesa del risultato</string>
<string name="smscommunicator_allowednumbers">Numeri di telefono consentiti</string>
@ -265,7 +264,7 @@
<string name="smscommunicator_remotebolusmindistance">Quanti minuti devono trascorrere, almeno, tra un bolo e il successivo</string>
<string name="smscommunicator_remotebolusmindistance_caveat">Per la tua sicurezza, per modificare questa preferenza hai bisogno di aggiungere almeno 2 numeri di telefono.</string>
<string name="bolusdelivered">Bolo di %1$.2fU erogato con successo</string>
<string name="bolusrequested">Sto per erogare %1$.2fU</string>
<string name="bolusrequested">A erogare %1$.2fU</string>
<string name="smscommunicator_bolusdelivered">Bolo di %1$.2fU erogato con successo</string>
<string name="smscommunicator_mealbolusdelivered">Bolo pasto di %1$.2fU erogato con successo</string>
<string name="smscommunicator_mealbolusdelivered_tt">Target %1$s per %2$d minuti</string>
@ -344,8 +343,8 @@
<string name="smscommunicator_extendedstopreplywithcode">Per stoppare il bolo esteso rispondi col codice %1$s</string>
<string name="smscommunicator_tempbasalcanceled">Basale temporanea cancellata</string>
<string name="smscommunicator_extendedcanceled">Bolo esteso cancellato</string>
<string name="smscommunicator_tempbasalcancelfailed">Cancellazione basale temporanea fallita</string>
<string name="smscommunicator_extendedcancelfailed">Cancellazione bolo esteso fallita</string>
<string name="smscommunicator_tempbasalcancelfailed">Basale temporanea: cancellazione fallita</string>
<string name="smscommunicator_extendedcancelfailed">Bolo esteso: cancellazione fallita</string>
<string name="smscommunicator_unknowncommand">Comando sconosciuto o risposta errata</string>
<string name="quickwizard">Calcolatore Rapido</string>
<string name="quickwizardsettings">Impostazioni Calcolatore Rapido</string>
@ -415,7 +414,7 @@
<string name="deletefuturetreatments">Elimina trattamenti nel futuro</string>
<string name="eatingsoon">Pasto a breve</string>
<string name="hypo">Ipoglicemia</string>
<string name="activity">Attività</string>
<string name="activity">Attività fisica</string>
<string name="removerecord">Rimuovi record</string>
<string name="danar_stats">Statistiche DanaR</string>
<string name="danar_stats_cumulative_tdd">TDD cumulativo</string>
@ -619,7 +618,7 @@
<string name="basal_short">BAS</string>
<string name="virtualpump_extendedbolus_label_short">EXT</string>
<string name="keep_screen_on_title">Mantieni lo schermo acceso</string>
<string name="keep_screen_on_summary">Evita che Android disattivi lo schermo. Consumerà molta energia quando non è collegato alla presa di corrente.</string>
<string name="keep_screen_on_summary">Evita che Android spenga lo schermo. Consumerà molta energia quando non è collegato alla presa di corrente.</string>
<string name="sensitivity_warning">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à !!</string>
<string name="sensitivityweightedaverage">Sensibilità WeightedAverage</string>
<string name="mdtp_ok">OK</string>
@ -639,8 +638,8 @@
<string name="enablesmb">Abilita SMB</string>
<string name="enablesmb_summary">Utilizza Super Micro Boli al posto della basale temporanea per un\'azione più veloce</string>
<string name="enableuam_summary">Rilevazione dei pasti Non Annunciati</string>
<string name="insulin_oref_peak">IOB Curve Peak Time</string>
<string name="insulin_peak_time">Peak Time [min]</string>
<string name="insulin_oref_peak">Tempo picco Curva IOB</string>
<string name="insulin_peak_time">Tempo del picco [min]</string>
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
@ -650,7 +649,7 @@
<string name="invalid">NON VALIDO</string>
<string name="waitingforpairing">In attesa di associare il micro</string>
<string name="pairingok">Associazione OK</string>
<string name="pairingtimedout">Time out associazione micro</string>
<string name="pairingtimedout">Time out associazione</string>
<string name="pairing">Accoppiamento</string>
<string name="danars_nodeviceavailable">Nessun dispositivo trovato finora</string>
<string name="emptyreservoir">Serbatoio vuoto</string>
@ -668,8 +667,8 @@
<string name="default_temptargets">Temp-Target predefiniti</string>
<string name="eatingsoon_duration">target \"pasto a breve\" - durata</string>
<string name="eatingsoon_target">target \"pasto a breve\"</string>
<string name="activity_duration">target \"attività\" - durata</string>
<string name="activity_target">target \"attività\"</string>
<string name="activity_duration">target \"attività fisica\" - durata</string>
<string name="activity_target">target \"attività fisica\"</string>
<string name="hypo_duration">target \"ipoglicemia\" - durata</string>
<string name="hypo_target">target \"ipoglicemia\"</string>
<string name="danar_history_prime">Riempimento</string>
@ -696,7 +695,7 @@
<string name="waitingforestimatedbolusend">Attesa per la fine del bolo. Rimangono %1$d sec.</string>
<string name="processinghistory">Evento di elaborazione</string>
<string name="startingbolus">Avvio erogazione bolo</string>
<string name="executingrightnow">Il comando verrà eseguito ora</string>
<string name="executingrightnow">Il comando sarà eseguito ora</string>
<string name="pumpdrivercorrected">Driver del micro corretto</string>
<string name="pump_unreachable">Micro irraggiungibile</string>
<string name="missed_bg_readings">Letture BG mancanti</string>
@ -772,7 +771,7 @@
<string name="combo_reservoir_normal">Normale</string>
<string name="combo_notification_check_time_date">Necessario aggiornare orologio micro</string>
<string name="combo_warning">Attenzione</string>
<string name="combo_pump_tbr_cancelled_warrning">Avviso TBR CANCELLATO confermato</string>
<string name="combo_pump_tbr_cancelled_warrning">Avviso TBR CANCELLATO: confermato</string>
<string name="combo_error_no_connection_no_bolus_delivered">Il micro potrebbe non essere raggiungibile. Nessun bolo erogato</string>
<string name="combo_error_no_bolus_delivered">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.</string>
<string name="combo_error_partial_bolus_delivered">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.</string>
@ -790,7 +789,7 @@
<string name="enablesmbwithcob">Abilita SMB con COB</string>
<string name="enablesmbwithcob_summary">Abilita SMB quando COB è attivo (ci sono carboidrati non assorbiti).</string>
<string name="enablesmbwithtemptarget">Abilita SMB con target temporanei</string>
<string name="enablesmbwithtemptarget_summary">Abilita SMB quando è attivo un target temporaneo (pasto a breve, attività)</string>
<string name="enablesmbwithtemptarget_summary">Abilita SMB quando è attivo un target temporaneo (pasto a breve, attività fisica)</string>
<string name="enablesmbwithhightemptarget">Abilita SMB con target temporanei \"alti\"</string>
<string name="enablesmbwithhightemptarget_summary">Abilita SMB quando è attivo un target temporaneo \"alto\"</string>
<string name="let_temp_basal_run">Lascia eseguire la basale temporanea</string>
@ -816,7 +815,7 @@
<string name="allow_automated_crash_reporting">Consenti la segnalazione automatica degli errori e l\'invio dei dati di utilizzo delle funzioni dell\'app agli sviluppatori tramite il servizio fabric.io.</string>
<string name="g5appnotdetected">Aggiorna la tua app Dexcom ad una versione supportata</string>
<string name="dexcom_app_not_installed">App Dexcom non installata.</string>
<string name="start_activity_tt">Avvia TT Attività</string>
<string name="start_activity_tt">Avvia TT Attività fisica</string>
<string name="start_eating_soon_tt">Avvia TT Pasto a breve</string>
<string name="temptargetshort">TT</string>
<string name="do_not_bolus_record_only">No bolo, solo record</string>
@ -839,13 +838,13 @@
<string name="pump_basebasalrate">%1$.2f U/h</string>
<string name="combo_actvity_reading_basal_profile">Lettura profilo basale</string>
<string name="combo_bolus_rejected_due_to_pump_history_change">Lo storico del micro è cambiato dopo il calcolo del bolo. Il bolo non è stato erogato. Ricalcolare se un bolo è ancora necessario.</string>
<string name="combo_error_updating_treatment_record">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à.</string>
<string name="combo_error_updating_treatment_record">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à.</string>
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Rifiuto basale temporanea \"alta\" in quanto il calcolo non ha considerato i cambiamenti recenti allo storico del micro</string>
<string name="combo_activity_checking_pump_state">Aggiornamento stato micro</string>
<string name="combo_warning_pump_basal_rate_changed">La velocità basale nel micro è cambiata e verrà aggiornata a breve</string>
<string name="combo_error_failure_reading_changed_basal_rate">Velocità basale cambiata sul micro, ma la sua lettura è fallita</string>
<string name="combo_activity_checking_for_history_changes">Controllo modifiche allo storico</string>
<string name="combo_error_multiple_boluses_with_identical_timestamp">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.</string>
<string name="combo_error_multiple_boluses_with_identical_timestamp">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.</string>
<string name="about_link_urls">\n\nhttp://www.androidaps.org\nhttp://www.androidaps.de (de)\n\nfacebook:\nhttp://facebook.androidaps.org\nhttp://facebook.androidaps.de (de)</string>
<string name="combo_check_date">L\'ultimo bolo è più vecchio di 24 ore o ha una data nel futuro. Controlla che la data sul micro sia impostata correttamente.</string>
<string name="combo_suspious_bolus_time">L\'ora/la data del bolo erogato sul micro sembra errata, IOB probabilmente non è corretto. Controlla l\'ora e/o la data del micro.</string>
@ -983,8 +982,8 @@
<string name="low_temptarget_lowers_sensitivity_summary"><![CDATA[Riduci la sensibilità per temp-target < 100]]></string>
<string name="combo_invalid_setup">Configurazione micro non valida, controlla la documentazione e verifica che il menu Quick Info sia denominato QUICK INFO utilizzando \"360 configuration software\".</string>
<string name="custom">Personalizzato</string>
<string name="largetimedifftitle">Grande differenza d\'orario</string>
<string name="largetimediff">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.</string>
<string name="largetimedifftitle">Grande differenza oraria</string>
<string name="largetimediff">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.</string>
<string name="careportal_removestartedevents">Rimuovi gli eventi \"AndroidAPS avviato\"</string>
<string name="storedsettingsfound">Trovate impostazioni salvate</string>
<string name="allow_hardware_pump_text">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.</string>
@ -1031,11 +1030,11 @@
<string name="confirm">Conferma</string>
<string name="mute_alert">Muto</string>
<string name="pump_alert">Avviso microinfusore</string>
<string name="log_site_changes">Registra cambi posizione cannula</string>
<string name="log_site_changes">Registra cambi posizione</string>
<string name="log_reservoir_changes">Registra cambi serbatoio</string>
<string name="log_tube_changes">Registra cambi catetere</string>
<string name="log_battery_changes">Registra cambi batteria</string>
<string name="log_operating_mode_changes">Registra cambi modalità di funzionamento</string>
<string name="log_operating_mode_changes">Registra cambi modalità operativa</string>
<string name="log_alerts">Registra avvisi</string>
<string name="enable_tbr_emulation">Abilita emulazione TBR</string>
<string name="enable_tbr_emulation_summary">Usa i bolli estesi invece dei TBR per aggirare il limite del 250%%</string>
@ -1114,9 +1113,9 @@
<string name="glucosecomparedmmol">Glicemia %1$s %2$.1f %3$s</string>
<string name="percentagecompared">PCT profilo %1$s %2$d</string>
<string name="iobcompared">IOB %1$s %2$.1f</string>
<string name="and">E</string>
<string name="or">O</string>
<string name="xor">O (esclusivo)</string>
<string name="and">E (AND)</string>
<string name="or">O (OR)</string>
<string name="xor">O (esclusivo - XOR)</string>
<string name="atspecifiedtime">A %1$s</string>
<string name="use_network_location">Usa posizione di rete</string>
<string name="use_gps_location">Usa posizione GPS</string>
@ -1162,7 +1161,7 @@
<string name="storage">vincolo di archiviazione interna</string>
<string name="diskfull">Libera almeno %1$d MB dalla memoria interna! Loop disabilitato!</string>
<string name="wrongformat">Formato errato</string>
<string name="sms_wrongcode">Codice errato. Comando annullato.</string>
<string name="sms_wrongcode">Codice errato. Comando cancellato.</string>
<string name="notconfigured">Non configurato</string>
<string name="profileswitchcreated">Cambio profilo creato</string>
<string name="recurringTime">Tempo ricorrente</string>
@ -1322,7 +1321,7 @@
<string name="medtronic_error_pump_wrong_max_bolus_set">Max bolo errato impostato nel micro (deve essere %1$.2f).</string>
<string name="medtronic_error_pump_wrong_max_basal_set">Max basale errata impostata nel micro (deve essere %1$.2f).</string>
<string name="medtronic_error_operation_not_possible_no_configuration">Operazione non possibile.\n\n Devi prima configurare il micro Medtronic.</string>
<string name="medtronic_error_pump_24h_time_change_requested">È stata richiesta una modifica d\'orario di oltre 24h.</string>
<string name="medtronic_error_pump_24h_time_change_requested">È stata richiesta una modifica oraria di oltre 24h.</string>
<!-- MDT History -->
<string name="medtronic_history_group_basal">Basali</string>
<string name="medtronic_history_group_configuration">Configurazioni</string>
@ -1353,7 +1352,7 @@
<string name="medtronic_cmd_basal_profile_not_set_is_same">Il profilo basale è lo stesso, non sarà impostato di nuovo.</string>
<string name="medtronic_cmd_desc_get_history">Ottieni storico - Pagina %1$d (%2$d/16)</string>
<string name="medtronic_cmd_desc_get_history_request">Ottieni storico - Pagina %1$d</string>
<string name="medtronic_cmd_desc_get_time">Ottieni orario micro</string>
<string name="medtronic_cmd_desc_get_time">Ottieni ora micro</string>
<string name="medtronic_cmd_desc_get_settings">Ottieni impostazioni</string>
<string name="medtronic_cmd_desc_get_model">Ottieni modello micro</string>
<string name="medtronic_cmd_desc_get_basal_profile">Ottieni profilo basale</string>
@ -1378,7 +1377,7 @@
<string name="loading">Caricamento ...</string>
<string name="snooze">Posticipa</string>
<string name="time_range">Intervallo di tempo</string>
<string name="timerange_value">Il tempo è compreso tra %1$s e %2$s</string>
<string name="timerange_value">L\'intervallo di tempo è compreso tra %1$s e %2$s</string>
<string name="between">Tra </string>
<string name="close">Chiudi</string>
<string name="increasingmaxbasal">Aumento del valore max basale perché l\'impostazione è inferiore alla tua basale massima nel profilo</string>
@ -1396,8 +1395,8 @@
<string name="format_carbs">%1$dg</string>
<string name="common_on">On</string>
<string name="common_off">Off</string>
<string name="objectives_button_unfinish">Cancella completato</string>
<string name="objectives_button_unstart">Cancella avviato</string>
<string name="objectives_button_unfinish">Cancella completamento</string>
<string name="objectives_button_unstart">Cancella avvio</string>
<string name="timedetection">Rilevazione tempo</string>
<string name="doyouwantresetstart">Vuoi resettare l\'avvio dell\'obiettivo? Potresti perdere i tuoi progressi.</string>
<string name="nopumpselected">Nessun micro selezionato</string>
@ -1420,7 +1419,7 @@
<string name="id">ID:</string>
<string name="submit">Invia</string>
<string name="mostcommonprofile">Profilo più comune:</string>
<string name="survey_comment">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.</string>
<string name="survey_comment">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.</string>
<string name="nav_survey">Sondaggio</string>
<string name="invalidage">Inserimento età non valido</string>
<string name="invalidweight">Inserimento peso non valido</string>
@ -1450,8 +1449,9 @@
<string name="phonechecker">\"PhoneChecker\"</string>
<string name="chartmenu">Menu grafico</string>
<string name="sensitivity_short">AS</string>
<string name="loop_smbrequest_time_label">Tempo richiesta SMB</string>
<string name="loop_smbexecution_time_label">Tempo esecuzione SMB</string>
<string name="loop_tbrrequest_time_label">Tempo richiesta basale temporanea</string>
<string name="loop_tbrexecution_time_label">Tempo esecuzione basale temporanea</string>
<string name="loop_smbrequest_time_label">Richiesta SMB (momento)</string>
<string name="loop_smbexecution_time_label">Esecuzione SMB (momento)</string>
<string name="loop_tbrrequest_time_label">Richiesta basale temporanea (momento)</string>
<string name="loop_tbrexecution_time_label">Esecuzione basale temporanea (momento)</string>
<string name="insight_alert_notification_channel">Avvisi micro Insight</string>
</resources>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">뒤로</string>
<string name="objectives_button_start">시작</string>
@ -36,7 +35,6 @@
<string name="objectives_useloop">Loop 플러그인 내용을 표시합니다</string>
<string name="objectives_usescale">홈의 혈당 차트를 길게 눌러 차트 시간을 변경하세요</string>
<string name="objectives_button_enter">입력</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">당신이 OpenAPS 사용자였고 당신의 NS가 최소 3개월의 Loop 데이터가 저장되어 있다면, objectives@androidaps.org로 메일을 보내 당신의 NS주소를 알려주시고 목표를 건너뛸 수 있는 코드를 요청하세요. 그리고 개발자로 부터 받은 코드를 입력하세요.</string>
<string name="codeaccepted">코드 인증</string>
<string name="codeinvalid">잘못된 코드</string>
<string name="objectives_exam_objective">당신의 지식을 확인해봅니다</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="dia_whatmeansdia">Koks atsakymas apie IVT yra teisingas?</string>
<string name="dia_label">Tema: Insulino veikimo trukmė</string>
@ -124,9 +123,9 @@
<string name="nsclient_spikeiphone">Spike iPhone telefone.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html</string>
<string name="isf_label">Tema: Jautrumo Insulinui Faktorius</string>
<string name="isf_increasingvalue">Didesnis IVT lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.</string>
<string name="isf_decreasingvalue">Mažesnis IVT lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.</string>
<string name="isf_noeffect">IVT reikšmės pakeitimas neturi įtakos AAPS leidžiamo insulino kiekiui koreguojant aukštą glikemiją.</string>
<string name="isf_increasingvalue">Didesnė JIF reikšmė lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.</string>
<string name="isf_decreasingvalue">Mažesnė JIF reikšmė lemia mažesnį insulino tiekimą, kai AAPS koreguoja aukštą glikemiją.</string>
<string name="isf_noeffect">JIF reikšmės pakeitimas neturi įtakos AAPS leidžiamo insulino kiekiui koreguojant aukštą glikemiją.</string>
<string name="isf_preferences">Nustatymuose turite įvesti JIF.</string>
<string name="isf_profile">Jei profilyje pakeisite JIF vertę, Ciklas į pokytį iškart atsižvelgs.</string>
<string name="isf_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u</string>
@ -136,7 +135,7 @@
<string name="ic_decreasingvalue">Mažesnis insulino ir angliavandenių IA santykis reiškia, kad mažiau insulino reikia padengti tam tikram angliavandenių kiekiui.</string>
<string name="ic_noeffect">Jei turite 0 AAO (aktyvių angliavandenių organizme), pakeitus IA, glikemija bus koreguojama kitokiu insulino kiekiu.</string>
<string name="ic_different">IA vertė skirsis priklausomai nuo to, ar duonos vienetui skaičiuojate 10g, ar 12g angliavandenių.</string>
<string name="ic_meaning">IA reiškia: kiek vienas vienetas insulino dengia angliavandenių (gramais).</string>
<string name="ic_meaning">IA reiškia: kiek vienas vienetas insulino dengia duonos vienetų.</string>
<string name="ic_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u</string>
<string name="profileswitch_label">Tema: Profilio keitimas</string>
<string name="profileswitch_pctwillchange"> Kai profilio keitime nustatote 90%…</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Atgal</string>
<string name="objectives_button_start">Pradėti</string>
@ -36,7 +35,6 @@
<string name="objectives_useloop">Parodyti Ciklo įskiepio turinį</string>
<string name="objectives_usescale">Panaudokite vaizdo dydžio keitimo funkciją ilgai spaudžiant ant glikemijos kreivės</string>
<string name="objectives_button_enter">Įeiti</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="codeaccepted">Kodas priimtas</string>
<string name="codeinvalid">Neteisingas kodas</string>
<string name="objectives_exam_objective">Patvirtinkite savo žinias</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Terug</string>
<string name="objectives_button_start">Start</string>
@ -36,7 +35,6 @@
<string name="objectives_useloop">Inhoud van loop plugin weergeven</string>
<string name="objectives_usescale">Gebruik de schaalfunctie: houd de BG grafiek lang ingedrukt</string>
<string name="objectives_button_enter">Enter</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="codeaccepted">Code geaccepteerd</string>
<string name="codeinvalid">Code ongeldig</string>
<string name="objectives_exam_objective">Bewijs je kennis</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -143,6 +142,7 @@
<string name="constraints_violation">In strijd met beperkingen</string>
<string name="treatmentdeliveryerror">Bolus toedien storing</string>
<string name="tempbasaldeliveryerror">Tijdelijk basaal toedien storing</string>
<string name="overview_newtempbasal_basalpercent">Basaal waarde [%]</string>
<string name="setbasalquestion">Accepteer nieuw tijdelijk basaal:</string>
<string name="overview_treatment_label">Bolus</string>
<string name="overview_calculator_label">Bolus wizard</string>
@ -180,6 +180,7 @@
<string name="careportal_cgmsensorinsert">CGM Sens. ingebracht</string>
<string name="careportal_cgmsensorstart">CGM Sens. Start</string>
<string name="careportal_insulincartridgechange">Insuline ampul wissel</string>
<string name="careportal_profileswitch">Profiel wissel</string>
<string name="careportal_snackbolus">Snack bolus</string>
<string name="careportal_mealbolus">Maaltijd bolus</string>
<string name="careportal_correctionbolus">Correctie bolus</string>
@ -200,6 +201,7 @@
<string name="careportal_newnstreatment_percent_label">Procent</string>
<string name="careportal_newnstreatment_absolute_label">Absoluut</string>
<string name="careportal_newnstreatment_notes_label">Notities</string>
<string name="event_time_label">Tijdstip gebeurtenis</string>
<string name="careportal_newnstreatment_profile_label">Profiel</string>
<string name="careportal_newnstreatment_enteredby_title">Ingegeven door</string>
<string name="careportal_newnstreatment_glucosetype">Glucose type</string>
@ -224,6 +226,7 @@
<string name="connecting">Verbinden</string>
<string name="connected">Verbonden</string>
<string name="disconnected">Niet verbonden</string>
<string name="danar_pump_settings">Dana pomp instellingen</string>
<string name="end_user_license_agreement">Eind gebruiker overeenkomst</string>
<string name="end_user_license_agreement_text">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.</string>
<string name="end_user_license_agreement_i_understand">Begrepen en goedgekeurd</string>
@ -272,6 +275,8 @@
<string name="glucosetype_finger">Vingerprik</string>
<string name="glucosetype_sensor">Sensor</string>
<string name="manual">Manueel</string>
<string name="careportal_temporarytarget">Tijdelijk streefdoel</string>
<string name="careportal_temporarytargetcancel">Tijdelijk streefdoel annuleren</string>
<string name="danarprofile">DanaR profiel instellingen</string>
<string name="danarprofile_dia">DIA [uur]</string>
<string name="danarprofile_dia_summary">Duur van insuline activiteit</string>
@ -410,6 +415,7 @@
<string name="eatingsoon">Eet binnenkort</string>
<string name="hypo">Hypo</string>
<string name="activity">Activiteit</string>
<string name="removerecord">Verwijder record</string>
<string name="danar_stats">DanaR Statistiek</string>
<string name="danar_stats_cumulative_tdd">Cumulatieve TDD</string>
<string name="danar_stats_expweight">Exponentieel verhoogd TDD</string>
@ -576,6 +582,7 @@
<string name="careportal_insulinage_label">Ouderdom insuline</string>
<string name="hours">uren</string>
<string name="invalidprofile">Ongeldig profiel !!!</string>
<string name="doprofileswitch">Profiel wissel uitvoeren</string>
<string name="careportal_pbage_label">Ouderdom batterij</string>
<string name="careportal_pumpbatterychange">Pomp bat. wissel</string>
<string name="ns_alarmoptions">Alarm opties</string>
@ -643,6 +650,7 @@
<string name="waitingforpairing">Wachten op koppelen van de pomp</string>
<string name="pairingok">Koppeling geslaagd</string>
<string name="pairingtimedout">Koppeling verlopen</string>
<string name="pairing">Koppelen</string>
<string name="danars_nodeviceavailable">Geen toestel gevonden</string>
<string name="emptyreservoir">Ampul leeg</string>
<string name="bloodsugarmeasurementalert">Bloed glucose meetpunt alarm</string>
@ -753,6 +761,7 @@
<string name="bolus_frequency_exceeded">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.</string>
<string name="combo_pump_connected_now">Zojuist</string>
<string name="combo_activity_reading_pump_history">Lezen van pomp historiek</string>
<string name="danar_history">Historiek</string>
<string name="combo_activity_setting_basal_profile">Instellen van basaal profiel</string>
<string name="combo_pump_cartridge_low_warrning">Insuline ampul is bijna leeg</string>
<string name="combo_pump_battery_low_warrning">Batterij pomp is bijna leeg</string>
@ -772,6 +781,7 @@
<string name="insightpump_shortname">Insight</string>
<string name="ago">voorbij</string>
<string name="format_hours">%1$.2f u</string>
<string name="format_mins">%1$d minuten</string>
<string name="enablesmbalways">Activeer SMB altijd</string>
<string name="enablesmbalways_summary">SMB altijd aan onafhankelijk van bolussen. Enkel mogelijk met een BG bron met goed gefilterde data zoals de G5</string>
<string name="enablesmbaftercarbs">Activeer SMB na koolhydraten</string>
@ -935,6 +945,7 @@
<string name="startobjective">Start je eerste Doel</string>
<string name="permission">Toestemming</string>
<string name="askforpermission">Vragen om toestemming</string>
<string name="needsystemwindowpermission">Toepassing vereist systeemvenstermachtiging voor meldingen</string>
<string name="needlocationpermission">Toepassing heeft toestemming nodig voor bepalen van Locatie (voor BT scan)</string>
<string name="needstoragepermission">Applicatie heeft toestemming nodig om log bestanden op te kunnen slaan</string>
<string name="request">Verzoek</string>
@ -948,7 +959,11 @@
<string name="danar_pumpalarm_sound">Geluid</string>
<string name="danar_pumpalarm_vibrate">Trillen</string>
<string name="danar_pumpalarm_both">Beide</string>
<string name="danar_screentimeout">LCD-aan tijd [sec.]</string>
<string name="danar_backlight">Achtergrondverlichting-aan tijd [sec.]</string>
<string name="danar_glucoseunits">Glucose units</string>
<string name="danar_shutdown">Afsluiten [uren]</string>
<string name="danar_lowreservoir">Laag reservoir (eenheden)</string>
<string name="danar_saveuseroptions">Opslaan van de opties om de pomp</string>
<string name="option_on">Aan</string>
<string name="option_off">Uit</string>
@ -1206,6 +1221,8 @@
<string name="cobcompared">COB %1$s %2$.0f</string>
<string name="taskname">Taaknaam</string>
<string name="edit_short">EDIT</string>
<string name="please_choose_an_action_type">Kies een actie</string>
<string name="please_choose_a_trigger_type">Kies een type trigger</string>
<string name="triggers">Triggers:</string>
<string name="remove_label">VERWIJDER</string>
<string name="preconditions">Voorwaarden:</string>
@ -1298,6 +1315,7 @@
<string name="medtronic_error_pump_frequency_invalid">Pomp frequentie niet ondersteund.</string>
<string name="medtronic_error_rileylink_address_invalid">RileyLink adres ongeldig.</string>
<string name="medtronic_error_pump_type_set_differs_from_detected">Gedetecteerde pomp type komt niet overeen met ingestelde pomp type.</string>
<string name="medtronic_error_pump_basal_profiles_not_enabled">De instelling voor basaalprofielen/patronen is niet ingeschakeld op de pomp. Schakel het in op de pomp.</string>
<string name="medtronic_error_pump_incorrect_basal_profile_selected">Basaalprofiel ingesteld op pomp is onjuist (moet STD zijn).</string>
<string name="medtronic_error_pump_wrong_tbr_type_set">Verkeerde Tijdelijk Basaal-type ingesteld op pomp (moet Insulinesnelh (E/H) zijn).</string>
<string name="medtronic_error_pump_wrong_max_bolus_set">Verkeerde Max Bolus ingesteld op pomp (moet %1$.2f zijn).</string>
@ -1348,6 +1366,7 @@
<string name="automation_trigger_pump_last_connection_description">Laatste verbinding met pomp [minuten geleden]</string>
<string name="automation_trigger_pump_last_connection_compared">Laatste verbinding met pomp %1$s %2$s min geleden</string>
<string name="sendsmsactionlabel">Stuur SMS: %1$s</string>
<string name="sendsmsactiondescription">SMS verzenden naar alle nummers</string>
<string name="sendsmsactiontext">Stuur SMS met tekst</string>
<string name="insulinFromCob"><![CDATA[COB vs IOB: <font color=\'%1$s\'>%2$+.2fU</font>]]></string>
<string name="bolusconstraintappliedwarning"><![CDATA[<font color=\'%1$s\'>Bolus limiet bereikt: %2$.2fU naar %3$.2fU</font>]]></string>
@ -1376,7 +1395,7 @@
<string name="format_carbs">%1$dg</string>
<string name="common_on">Aan</string>
<string name="common_off">Uit</string>
<string name="objectives_button_unfinish">Wissen voltooid</string>
<string name="objectives_button_unfinish">Voltooiing wissen</string>
<string name="objectives_button_unstart">Wissen gestart</string>
<string name="timedetection">Tijd detectie</string>
<string name="doyouwantresetstart">Wil je dit leerdoel opnieuw starten? Je kunt je voortgang verliezen.</string>
@ -1399,5 +1418,39 @@
<string name="weight">Gewicht:</string>
<string name="id">ID:</string>
<string name="submit">Verzenden</string>
<string name="mostcommonprofile">Meest voorkomende profiel:</string>
<string name="survey_comment">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.</string>
<string name="nav_survey">Enquête</string>
<string name="invalidage">Ongeldige leeftijd invoer</string>
<string name="invalidweight">Ongeldige gewicht invoer</string>
<string name="tddformat"><![CDATA[<b>%1$s:</b> ∑: <b>%2$.2f</b> Bol: <b>%3$.2f</b> Bas: <b>%4$.2f</b>]]></string>
<string name="tirformat"><![CDATA[<b>%1$s:</b> Laag: <b>%2$02d%%</b> In: <b>%3$02d%%</b> Hoog: <b>%4$02d%%</b>]]></string>
<string name="average">Gemiddelde</string>
<string name="tdd">TDD</string>
<string name="tir">TIR</string>
<string name="activitymonitor">Activiteitsmonitor</string>
<string name="doyouwantresetstats">Wil je de activiteitenstatistieken resetten?</string>
<string name="statistics">Statistieken</string>
<string name="randombg">Willekeurige BG</string>
<string name="description_source_randombg">Willekeurige BG gegevens genereren (alleen Demo modus)</string>
<string name="randombg_short">BG</string>
<string name="tools">Hulpmiddelen</string>
<string name="show_calculation">Toon berekening</string>
<string name="error">Fout</string>
<string name="timeformat12h">12u</string>
<string name="timeformat24h">24u</string>
<string name="automation_event">Automation gebeurtenis</string>
<string name="alreadyset">Al ingesteld</string>
<string name="message">Bericht</string>
<string name="clearqueueconfirm">Wachtrij leegmaken? Alle gegevens in de wachtrij zullen verloren gaan!</string>
<string name="ebstopsloop">Gebruik van Vertraagde bolus functie zal de closed loop modus stoppen voor de duur van de vertraagde bolus. Wil je dit toch?</string>
<string name="closed_loop_disabled_with_eb">Closed loop modus uitgeschakeld vanwege afgeven Vertraagde bolus</string>
<string name="extended_bolus_short">VertrB</string>
<string name="phonechecker">\"PhoneChecker\"</string>
<string name="chartmenu">Grafiek menu</string>
<string name="sensitivity_short">AS</string>
<string name="loop_smbrequest_time_label">SMB aanvraagtijd</string>
<string name="loop_smbexecution_time_label">SMB uitvoeringstijd</string>
<string name="loop_tbrrequest_time_label">Tijdelijk basaal aanvraag tijd</string>
<string name="loop_tbrexecution_time_label">Tijdelijke basaal uitvoering tijd</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Wstecz</string>
<string name="objectives_button_start">Start</string>
@ -36,7 +35,6 @@
<string name="objectives_useloop">Wyświetl zawartość wtyczki Pętla (Loop)</string>
<string name="objectives_usescale">Użyj funkcji skalowania przez dłuższe przytrzymanie wykresu glikemii</string>
<string name="objectives_button_enter">Wprowadź</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="codeaccepted">Kod został zaakceptowany</string>
<string name="codeinvalid">Niepoprawny kod</string>
<string name="objectives_exam_objective">Potwierdź swoje umiejętności</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Voltar</string>
<string name="objectives_button_start">Iniciar</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Mostrar conteúdo do plugin Loop</string>
<string name="objectives_usescale">Utilizar a função de escala premindo longamente gráfico Glic</string>
<string name="objectives_button_enter">Inserir</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Código aceite</string>
<string name="codeinvalid">Código inválido</string>
<string name="objectives_exam_objective">Prove seu conhecimento</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -565,7 +564,7 @@
<string name="virtualpump_firmware_label">Firmware</string>
<string name="pump_lastconnection_label">Última ligação</string>
<string name="danar_bluetooth_status">Estado Bluetooth</string>
<string name="nav_about">Acerca</string>
<string name="nav_about">Sobre</string>
<string name="smscommunicator_missingsmspermission">Falta de permissão SMS</string>
<string name="smscommunicator_missingphonestatepermission">Falta permissão do estado do telefone</string>
<string name="xdripstatus_settings">Estado xDrip (relógio)</string>
@ -743,7 +742,7 @@
<string name="basalprofilenotaligned">Valores das basais não definidos por horas: %1$s</string>
<string name="zerovalueinprofile">Perfil inválido: %1$s</string>
<string name="combo_programming_bolus">A programar a bomba para injectar o bolus</string>
<string name="combo_refresh">Actualizar</string>
<string name="combo_refresh">Atualizar</string>
<string name="combo_pump_state_label">Estado</string>
<string name="combo_pump_activity_label">Atividades</string>
<string name="combo_no_pump_connection">Sem conexão há %1$d min</string>
@ -842,7 +841,7 @@
<string name="combo_error_updating_treatment_record">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.</string>
<string name="combo_high_temp_rejected_due_to_pump_history_changes">A rejeitar a temporal alta uma vez que o cálculo não considerou as mudanças do histórico da bomba</string>
<string name="combo_activity_checking_pump_state">Atualizando estado da bomba</string>
<string name="combo_warning_pump_basal_rate_changed">O rácio da basal foi alterado na bomba e vai ser actualizado em breve</string>
<string name="combo_warning_pump_basal_rate_changed">A taxa basal na bomba mudou e será atualizada em breve</string>
<string name="combo_error_failure_reading_changed_basal_rate">Rácio da basal foi alterado na bomba, mas a leitura falhou</string>
<string name="combo_activity_checking_for_history_changes">Verificando alterações de histórico</string>
<string name="combo_error_multiple_boluses_with_identical_timestamp">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.</string>
@ -946,6 +945,7 @@
<string name="startobjective">Iniciar primeiro objectivo</string>
<string name="permission">Permissão</string>
<string name="askforpermission">Pedir permissão</string>
<string name="needsystemwindowpermission">Aplicação precisa de permissão de janela do sistema para notificações</string>
<string name="needlocationpermission">Aplicação requer permissão de localização para pesquisa BT</string>
<string name="needstoragepermission">Aplicação necessita da permissão de armazenamento para ser capaz de armazenar ficheiros de registo</string>
<string name="request">Pedido</string>
@ -1449,4 +1449,9 @@
<string name="phonechecker">\"VerificadorTelefone\"</string>
<string name="chartmenu">Menu do Gráfico</string>
<string name="sensitivity_short">AS</string>
<string name="loop_smbrequest_time_label">Hora de solicitação SMB</string>
<string name="loop_smbexecution_time_label">Hora de execução do SMB</string>
<string name="loop_tbrrequest_time_label">Hora de solicitação Basal Temp</string>
<string name="loop_tbrexecution_time_label">Hora de execução Basal Temp</string>
<string name="insight_alert_notification_channel">Alertas Bomba Insight</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Voltar</string>
<string name="objectives_button_start">Iniciar</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Mostrar conteúdo do plugin Loop</string>
<string name="objectives_usescale">Utilizar a função de escala premindo longamente gráfico Glic</string>
<string name="objectives_button_enter">Inserir</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Código aceite</string>
<string name="codeinvalid">Código inválido</string>
<string name="objectives_exam_objective">Prove seu conhecimento</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -828,7 +827,7 @@
<string name="overview_show_activity">Actividade</string>
<string name="overview_show_sensitivity">Sensibilidade</string>
<string name="overview_show_deviations">Desvios</string>
<string name="overview_show_cob">Carboidratos a bordo</string>
<string name="overview_show_cob">Hidratos a Bordo (COB)</string>
<string name="overview_show_iob">Insulina a bordo</string>
<string name="overview_show_basals">Basais</string>
<string name="no_action_selected">Nenhuma acção seleccionada, nada irá acontecer</string>
@ -884,7 +883,7 @@
<string name="reset">repor</string>
<string name="waitingfortimesynchronization">À espera da sincronização da hora (%1$d sec)</string>
<string name="loopdisconnectedfor">Desligado (%1$d m)</string>
<string name="openapssmb_maxiob_title">Máximo total IOS OpenAPS não pode superar [U]</string>
<string name="openapssmb_maxiob_title">Máximo total IOB OpenAPS não pode superar [U]</string>
<string name="openapssmb_maxiob_summary">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</string>
<string name="pump_stopped">Bomba parada</string>
<string name="pump_started">Bomba iniciada</string>
@ -1454,4 +1453,5 @@
<string name="loop_smbexecution_time_label">Hora de execução do SMB</string>
<string name="loop_tbrrequest_time_label">Hora de solicitação Basal Temp</string>
<string name="loop_tbrexecution_time_label">Hora de execução Basal Temp</string>
<string name="insight_alert_notification_channel">Alertas Bomba Insight</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Înapoi</string>
<string name="objectives_button_start">Start</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Назад</string>
<string name="objectives_button_start">Старт</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Просмотр содержимого модуля Цикл Loop</string>
<string name="objectives_usescale">Применить функцию масштабирования по долгому нажатию на диаграмму ГК</string>
<string name="objectives_button_enter">Ввод</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">Если прежде вы были пользователем OpenAPS и имеете в NS не менее 3 месяцев данных, отправьте электронное письмо на objectives@androidaps.org с вашим адресом NS и запросом кода для обхода остальных целей. Введите код, полученный от разработчиков</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">Если у вас есть хотя бы три месяца работы с замкнутым циклом с другими системами, то можно получить код пропуска. Подробности смотрите по адресу https://androidaps.readthedocs.io/en/latest/EN/Usage/Objectives.html#skip-objectives.</string>
<string name="codeaccepted">Код принят</string>
<string name="codeinvalid">Неверный код</string>
<string name="objectives_exam_objective">Подтвердите ваши знания</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -1456,4 +1455,5 @@ Context | Edit Context</string>
<string name="loop_smbexecution_time_label">Время выполнения микроболюса SMB</string>
<string name="loop_tbrrequest_time_label">Время запроса временной базальной скорости</string>
<string name="loop_tbrexecution_time_label">Время выполнения временной базальной скорости</string>
<string name="insight_alert_notification_channel">Оповещения помпы Insight</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Naspäť</string>
<string name="objectives_button_start">Začiatok</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Zobrazte obsah modulu uzavretý okruh</string>
<string name="objectives_usescale">Prepnite režim zobrazenia dlhým stlačením grafu glykémie</string>
<string name="objectives_button_enter">Zadať</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Kód akceptovaný</string>
<string name="codeinvalid">Neplatný kód</string>
<string name="objectives_exam_objective">Preukážte svoje znalosti</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -1454,4 +1453,5 @@
<string name="loop_smbexecution_time_label">Čas aplikácie SMB</string>
<string name="loop_tbrrequest_time_label">Čas požiadavky dočasného bazálu</string>
<string name="loop_tbrexecution_time_label">Čas spustenia dočasného bazálu</string>
<string name="insight_alert_notification_channel">Výstrahy pumpy Insight</string>
</resources>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="objectives_button_back">Tillbaka</string>
<string name="objectives_button_start">Starta</string>
@ -36,7 +35,7 @@
<string name="objectives_useloop">Visa innehållet i insticksprogrammet \"Loop\"</string>
<string name="objectives_usescale">Testa skala om BG-grafen genom att trycka och hålla in fingret på den</string>
<string name="objectives_button_enter">Enter</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Koden godkänd</string>
<string name="codeinvalid">Koden är felaktig</string>
<string name="objectives_exam_objective">Bevisa dina kunskaper</string>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
@ -1455,4 +1454,5 @@ Eversense-appen.</string>
<string name="loop_smbexecution_time_label">SMB utförd</string>
<string name="loop_tbrrequest_time_label">Basalförändring begärd</string>
<string name="loop_tbrexecution_time_label">Basalförändring utförd</string>
<string name="insight_alert_notification_channel">Pumpvarningar Insight</string>
</resources>

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -1,3 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->

View file

@ -47,7 +47,7 @@
<string name="objectives_useloop">Display content of Loop plugin</string>
<string name="objectives_usescale">Use scale function by long-pressing BG chart</string>
<string name="objectives_button_enter">Enter</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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</string>
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">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.</string>
<string name="codeaccepted">Code accepted</string>
<string name="codeinvalid">Code invalid</string>
<string name="objectives_exam_objective">Prove your knowledge</string>

View file

@ -1701,6 +1701,7 @@
<string name="loop_smbexecution_time_label">SMB execution time</string>
<string name="loop_tbrrequest_time_label">Temp basal request time</string>
<string name="loop_tbrexecution_time_label">Temp basal execution time</string>
<string name="insight_alert_notification_channel">Insight Pump Alerts</string>
<!-- Omnipod -->

View file

@ -27,12 +27,10 @@
<item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>
<style name="InsightAlertDialog" parent="Theme.AppCompat.Dialog">
<style name="InsightAlertDialog" parent="Theme.AppCompat.Dialog.MinWidth">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowMinWidthMajor">96%</item>
<item name="android:windowMinWidthMinor">96%</item>
</style>
<style name="Theme.AppCompat.NoTitle" parent="Theme.AppCompat.NoActionBar">

View file

@ -82,6 +82,11 @@ class DetailedBolusInfoStorageTest {
d = DetailedBolusInfoStorage.findDetailedBolusInfo(1070000, 4.0)
assertNull(d)
assertEquals(3, DetailedBolusInfoStorage.store.size)
// Use last, if bolus size is the same
setUp()
d = DetailedBolusInfoStorage.findDetailedBolusInfo(1070000, 5.0)
assertEquals(5.0, d!!.insulin, 0.01)
assertEquals(2, DetailedBolusInfoStorage.store.size)
}

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
@ -98,7 +97,7 @@
<string name="status_tdd">TDD</string>
<string name="activity_carb">CHO</string>
<string name="activity_IOB">IOB</string>
<string name="activity_no_status">no stato</string>
<string name="activity_no_status">no status</string>
<string name="unit_mg_dl">mg/dl</string>
<string name="unit_mmol_l">mmol/l</string>
<string name="unit_g" comment="Shortcut for ISO unit: gram">g</string>

View file

@ -1,18 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_xdrip">AAPS</string>
<string name="label_xdrip_large">AAPS(Groot)</string>
<string name="label_xdrip_big_chart">AAPS(GroteGrafiek)</string>
<string name="label_xdrip_no_chart">AAPS(GeenGrafiek)</string>
<string name="label_xdrip_circle">AAPS(Cirkel)</string>
<string name="label_xdrip_v2">AAPSv2</string>
<string name="label_xdrip_cockpit">AAPS(Cockpit)</string>
<string name="label_xdrip_steampunk">AAPS(Steampunk)</string>
<string name="label_warning_sync">Geen gegevens!</string>
<string name="label_warning_old">Oude gegevens!</string>
<string name="label_warning_since">Sinds %1$s</string>
<string name="label_warning_sync_aaps">Synchroniseer met AAPS!</string>
<string name="msg_warning_sync">Geen gegevens ontvangen sinds %1$s! Controleer of AAPS op de telefoon gegevens verstuurt naar horloge</string>
<string name="msg_warning_old">AAPS gegevens zijn %1$s oud! Controleer je sensor, xDrip+, NS, AAPS instellingen of andere!</string>
<string name="pref_on">Aan</string>
<string name="pref_off">Uit</string>
<string name="pref_vibrate_on_bolus">Trillen bij bolus</string>
<string name="pref_units_for_actions">Eenheden voor acties</string>
<string name="pref_show_date">Toon datum</string>
<string name="pref_show_iob">Toon IOB</string>
<string name="pref_show_cob">Toon COB</string>
<string name="pref_show_delta">Toon Delta</string>
<string name="pref_show_avgdelta">Toon gemiddelde delta</string>
<string name="pref_show_phone_battery">Toon telefoonbatterij</string>
<string name="pref_show_rig_battery">Toon rig batterij</string>
<string name="pref_show_basal_rate">Toon basaal</string>
<string name="pref_show_loop_status">Toon loop status</string>
<string name="pref_show_bg">Toon BG</string>
<string name="pref_show_direction_arrow">Toon richtingspijl</string>
<string name="pref_show_ago">Toon tijd geleden</string>
<string name="pref_dark" comment="Enables dark visual theme">Donker</string>
<string name="pref_highlight_basals">Markeer basaalstanden</string>
<string name="pref_matching_divider" comment="To make divider match its background with background of whole watchface">Bijpassende verdeler</string>
<string name="pref_chart_timeframe">Tijdsschaal grafiek</string>
<string name="pref_1_hour">1 uur</string>
<string name="pref_2_hours">2 uren</string>
<string name="pref_3_hours">3 uren</string>
<string name="pref_4_hours">4 uren</string>
<string name="pref_5_hours">5 uren</string>
<string name="pref_input_design">Invoer ontwerp</string>
<string name="pref_default">Standaard</string>
<string name="pref_quick_righty">Snel rechts</string>
<string name="pref_quick_lefty">Snel links</string>
<string name="pref_modern_sparse">Modern spaarzaam</string>
<string name="pref_delta_granularity">Delta schaalverdeling (Steampunk)</string>
<string name="pref_low">Laag</string>
<string name="pref_medium">Middel</string>
<string name="pref_high">Hoog</string>
<string name="pref_auto">Automatisch</string>
<string name="pref_big_numbers">Grote nummers</string>
<string name="pref_ring_history">Ring geschiedenis</string>
<string name="pref_light_ring_history">Lichte ring geschiedenis</string>
<string name="pref_animations">Animaties</string>
<string name="pref_wizard_in_menu">Wizard in menu</string>
<string name="pref_prime_in_menu">Ontlucht/vul in menu</string>
<string name="pref_single_target">Enkel streefdoel</string>
<string name="pref_wizard_percentage">Wizardpercentage</string>
<string name="pref_complication_tap_action">Complicatie tik voor actie</string>
<string name="pref_unicode_in_complications">Unicode in complicaties</string>
<string name="pref_version">Versie:</string>
<string name="menu_tempt">TijdStreefd</string>
<string name="menu_wizard">Wizard</string>
<string name="menu_bolus">Bolus</string>
<string name="menu_ecarb">eCarb</string>
<string name="menu_settings">Instellingen</string>
<string name="menu_status">Status</string>
<string name="menu_prime_fill">Ontlucht/vul</string>
<string name="menu_none">Geen</string>
<string name="menu_default">Standaard</string>
<string name="menu_menu">Menu</string>
<string name="action_duration">tijdsduur</string>
<string name="action_target" comment="In temp target menu, single target value">doel</string>
<string name="action_low" comment="In temp target menu, lower value from range">laag</string>
<string name="action_high" comment="In temp target menu, higher value from range">hoog</string>
<string name="action_carbs">khd</string>
<string name="action_percentage">percentage</string>
<string name="action_start_min">start [min]</string>
<string name="action_duration_h">duur [h]</string>
<string name="action_insulin">insuline</string>
<string name="action_preset_1">Voorinstelling 1</string>
<string name="action_preset_2">Voorinstelling 2</string>
<string name="action_preset_3">Voorinstelling 3</string>
<string name="action_free_amount" comment="In prime/fill menu, allows to enter any amount to be used for priming/filling">Vrije hoeveelheid</string>
<string name="action_confirm">BEVESTIGEN</string>
<string name="action_status_pump">STATUS POMP</string>
<string name="action_status_loop">STATUS LOOP</string>
<string name="action_timeshift">tijdsverschuiving</string>
<string name="action_tdd_weighted">Gewogen TDD</string>
<string name="action_bolus">bolus</string>
<string name="status_pump">Pomp</string>
<string name="status_loop">Loop</string>
<string name="status_cpp">CPP</string>
<string name="status_tdd">TDD</string>
<string name="activity_carb">Khd</string>
<string name="activity_IOB">IOB</string>
<string name="activity_no_status">geen status</string>
<string name="unit_mg_dl">mg/dl</string>
<string name="unit_mmol_l">mmol/l</string>
<string name="unit_g" comment="Shortcut for ISO unit: gram">g</string>
<string name="unit_u" comment="Shortcut for: insulin Unit">E</string>
<string name="unit_u_p_h" comment="Shortcut for: insulin Unit per Hour">E/u</string>
<string name="unit_h" comment="One letter shortcut for: Hour" maxLength="1">u</string>
<string name="unit_d" comment="One letter shortcut for: Day" maxLength="1">d</string>
<string name="unit_w" comment="One letter shortcut for: Week" maxLength="1">w</string>
</resources>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>