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