diff --git a/.travis.yml b/.travis.yml index 7b83e6f199..a88c3ad408 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: android -jdk: oraclejdk8 +jdk: openjdk8 +dist: trusty env: matrix: - ANDROID_TARGET=android-28 ANDROID_ABI=x86 org.gradle.jvmargs=-XX:-OmitStackTraceInFastThrow diff --git a/app/build.gradle b/app/build.gradle index b980638c26..a3aceb96f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,7 +40,7 @@ repositories { } def generateGitBuild = { -> - StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = new StringBuilder() try { def stdout = new ByteArrayOutputStream() exec { diff --git a/app/src/main/assets/revoked_certs.txt b/app/src/main/assets/revoked_certs.txt new file mode 100644 index 0000000000..59a55d9e42 --- /dev/null +++ b/app/src/main/assets/revoked_certs.txt @@ -0,0 +1,2 @@ +#Demo certificate +51:6D:12:67:4C:27:F4:9B:9F:E5:42:9B:01:B3:98:E4:66:2B:85:B7:A8:DD:70:32:B7:6A:D7:97:9A:0D:97:10 \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index 15876ffbb5..734962e5dd 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -56,6 +56,7 @@ import info.nightscout.androidaps.plugins.general.nsclient.receivers.AckAlarmRec import info.nightscout.androidaps.plugins.general.nsclient.receivers.DBAccessReceiver; import info.nightscout.androidaps.plugins.general.overview.OverviewPlugin; import info.nightscout.androidaps.plugins.general.persistentNotification.PersistentNotificationPlugin; +import info.nightscout.androidaps.plugins.general.signatureVerifier.SignatureVerifier; import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin; import info.nightscout.androidaps.plugins.general.tidepool.TidepoolPlugin; import info.nightscout.androidaps.plugins.general.versionChecker.VersionCheckerPlugin; @@ -202,6 +203,7 @@ public class MainApp extends Application { if (Config.SAFETY) pluginsList.add(SafetyPlugin.getPlugin()); if (Config.SAFETY) pluginsList.add(VersionCheckerPlugin.INSTANCE); if (Config.SAFETY) pluginsList.add(StorageConstraintPlugin.getPlugin()); + if (Config.SAFETY) pluginsList.add(SignatureVerifier.getPlugin()); if (Config.APS) pluginsList.add(ObjectivesPlugin.getPlugin()); pluginsList.add(SourceXdripPlugin.getPlugin()); pluginsList.add(SourceNSClientPlugin.getPlugin()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java index 3780516226..6e8b07499a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java @@ -76,6 +76,7 @@ public class Notification { public static final int OLDVERSION = 52; public static final int USERMESSAGE = 53; public static final int OVER_24H_TIME_CHANGE_REQUESTED = 54; + public static final int INVALID_VERSION = 55; public int id; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/signatureVerifier/SignatureVerifier.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/signatureVerifier/SignatureVerifier.java new file mode 100644 index 0000000000..c45390590f --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/signatureVerifier/SignatureVerifier.java @@ -0,0 +1,201 @@ +package info.nightscout.androidaps.plugins.general.signatureVerifier; + +import android.content.pm.PackageManager; +import android.content.pm.Signature; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.spongycastle.util.encoders.Hex; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.interfaces.Constraint; +import info.nightscout.androidaps.interfaces.ConstraintsInterface; +import info.nightscout.androidaps.interfaces.PluginBase; +import info.nightscout.androidaps.interfaces.PluginDescription; +import info.nightscout.androidaps.interfaces.PluginType; +import info.nightscout.androidaps.logging.L; +import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification; +import info.nightscout.androidaps.plugins.general.overview.notifications.Notification; +import info.nightscout.androidaps.utils.SP; + +/** + * AndroidAPS is meant to be build by the user. + * In case someone decides to leak a ready-to-use APK nonetheless, we can still disable it. + * Self-compiled APKs with privately held certificates cannot and will not be disabled. + */ +public class SignatureVerifier extends PluginBase implements ConstraintsInterface { + + private static final String REVOKED_CERTS_URL = "https://raw.githubusercontent.com/MilosKozak/AndroidAPS/master/app/src/main/assets/revoked_certs.txt"; + private static final long UPDATE_INTERVAL = TimeUnit.DAYS.toMillis(1); + + private static SignatureVerifier plugin = new SignatureVerifier(); + + private Logger log = LoggerFactory.getLogger(L.CORE); + private final Object $lock = new Object[0]; + private File revokedCertsFile; + private List revokedCerts; + + public static SignatureVerifier getPlugin() { + return plugin; + } + + private SignatureVerifier() { + super(new PluginDescription() + .mainType(PluginType.CONSTRAINTS) + .neverVisible(true) + .alwaysEnabled(true) + .showInList(false) + .pluginName(R.string.signature_verifier)); + } + + @Override + protected void onStart() { + super.onStart(); + revokedCertsFile = new File(MainApp.instance().getFilesDir(), "revoked_certs.txt"); + new Thread(() -> { + loadLocalRevokedCerts(); + if (shouldDownloadCerts()) { + try { + downloadAndSaveRevokedCerts(); + } catch (IOException e) { + log.error("Could not download revoked certs", e); + } + } + if (hasIllegalSignature()) showNotification(); + }).start(); + } + + @Override + public Constraint isLoopInvocationAllowed(Constraint value) { + if (hasIllegalSignature()) { + showNotification(); + value.set(false); + } + if (shouldDownloadCerts()) { + new Thread(() -> { + try { + downloadAndSaveRevokedCerts(); + } catch (IOException e) { + log.error("Could not download revoked certs", e); + } + }).start(); + } + return value; + } + + private void showNotification() { + Notification notification = new Notification(Notification.INVALID_VERSION, MainApp.gs(R.string.running_invalid_version), Notification.URGENT); + MainApp.bus().post(new EventNewNotification(notification)); + } + + private boolean hasIllegalSignature() { + try { + synchronized ($lock) { + if (revokedCerts == null) return false; + Signature[] signatures = MainApp.instance().getPackageManager().getPackageInfo(MainApp.instance().getPackageName(), PackageManager.GET_SIGNATURES).signatures; + for (Signature signature : signatures) { + MessageDigest digest = MessageDigest.getInstance("SHA256"); + byte[] fingerprint = digest.digest(signature.toByteArray()); + for (byte[] cert : revokedCerts) { + if (Arrays.equals(cert, fingerprint)) { + return true; + } + } + } + } + } catch (PackageManager.NameNotFoundException e) { + log.error("Error in SignatureVerifier", e); + } catch (NoSuchAlgorithmException e) { + log.error("Error in SignatureVerifier", e); + } + return false; + } + + private boolean shouldDownloadCerts() { + return System.currentTimeMillis() - SP.getLong(R.string.key_last_revoked_certs_check, 0L) >= UPDATE_INTERVAL; + } + + private void downloadAndSaveRevokedCerts() throws IOException { + String download = downloadRevokedCerts(); + saveRevokedCerts(download); + SP.putLong(R.string.key_last_revoked_certs_check, System.currentTimeMillis()); + synchronized ($lock) { + revokedCerts = parseRevokedCertsFile(download); + } + } + + private void loadLocalRevokedCerts() { + try { + String revokedCerts = readCachedDownloadedRevokedCerts(); + if (revokedCerts == null) revokedCerts = readRevokedCertsInAssets(); + synchronized ($lock) { + this.revokedCerts = parseRevokedCertsFile(revokedCerts); + } + } catch (IOException e) { + log.error("Error in SignatureVerifier", e); + } + } + + private void saveRevokedCerts(String revokedCerts) throws IOException { + OutputStream outputStream = new FileOutputStream(revokedCertsFile); + outputStream.write(revokedCerts.getBytes(StandardCharsets.UTF_8)); + outputStream.close(); + } + + private String downloadRevokedCerts() throws IOException { + URLConnection connection = new URL(REVOKED_CERTS_URL).openConnection(); + return readInputStream(connection.getInputStream()); + } + + private String readInputStream(InputStream inputStream) throws IOException { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int read; + while ((read = inputStream.read(buffer)) != -1) { + baos.write(buffer, 0, read); + } + baos.flush(); + return new String(baos.toByteArray(), StandardCharsets.UTF_8); + } finally { + inputStream.close(); + } + } + + private String readRevokedCertsInAssets() throws IOException { + InputStream inputStream = MainApp.instance().getAssets().open("revoked_certs.txt"); + return readInputStream(inputStream); + } + + private String readCachedDownloadedRevokedCerts() throws IOException { + if (!revokedCertsFile.exists()) return null; + return readInputStream(new FileInputStream(revokedCertsFile)); + } + + private List parseRevokedCertsFile(String file) { + List revokedCerts = new ArrayList<>(); + for (String line : file.split("\n")) { + if (line.startsWith("#")) continue; + revokedCerts.add(Hex.decode(line.replace(" ", "").replace(":", ""))); + } + return revokedCerts; + } +} diff --git a/app/src/main/java/info/nightscout/utils/MidnightTime.java b/app/src/main/java/info/nightscout/utils/MidnightTime.java deleted file mode 100644 index 523fe13826..0000000000 --- a/app/src/main/java/info/nightscout/utils/MidnightTime.java +++ /dev/null @@ -1,43 +0,0 @@ -package info.nightscout.utils; - -import android.util.LongSparseArray; - -import java.util.Calendar; - -public class MidnightTime { - private static LongSparseArray times = new LongSparseArray(); - - private static long hits = 0; - private static long misses = 0; - - public static long calc() { - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - c.set(Calendar.MILLISECOND, 0); - return c.getTimeInMillis(); - } - - public static long calc(long time) { - Long m = (Long) times.get(time); - if (m != null) { - ++hits; - return m; - } - Calendar c = Calendar.getInstance(); - c.setTimeInMillis(time); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - c.set(Calendar.MILLISECOND, 0); - m = c.getTimeInMillis(); - times.append(time, m); - ++misses; - return m; - } - - public static String log() { - return "Hits: " + hits + " misses: " + misses + " stored: " + times.size(); - } -} diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 1c64244738..f71d45037b 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -532,10 +532,12 @@ Loop изключен Изключен (%1$d мин) Суперболус (%1$d мин) + Изключи APS Изключи APS за 1ч Изключи APS за 2ч Изключи APS за 3ч Изключи APS за 10 ч + Изключи APS за %1$d мин Изключи помпата за 15 мин. Изключи помпата за 30 мин. Изключи помпата за 1 ч @@ -875,6 +877,7 @@ Болусът ще бъде само записан Допълни липсващи данни за КЗ от Nightscout SMB в помпата + Активност Чувствителност Отклонения Активни въглехидрати @@ -885,6 +888,7 @@ Използвате dev версия. Затворения кръг е недостъпен за Вас. Режим за раработчици (Engineering mode) включен Режим за раработчици (Engineering mode) не е активиран и не е release версия + %1$.2f Е/ч Прочита базалният профил Историята на помпата се промени след извършване на изчислението за болус. Болусът не беше доставен. Моля, преизчислете дали все още е необходим болус. Болус успешно инжектиран, но добавянето на лечение в базата данни е неуспешно. Това може да се случи, ако два малки болуса със същия размер са направени в рамките на последните две минути. Проверете записите в историята на помпата и използвайте Careportal, за да добавите липсващи записи. Уверете се,че не добавяте еднакви записи за точно една и съща минута и същото количество инсулин. @@ -1140,6 +1144,46 @@ Мин време за възстановяване [сек] Възстановяване продължителност Таймаут при сдвояването - рестартирайте bluetooth + Нед + Съб + Пет + Чет + Ср + Вт + Пон + Рецепти за автомация написани от вас + Въведете име + Въведете поне едно условие. + Въведете поне едно действие. + Вече е активно + Вече е изключено + Вече е изключено + Възстанови APS + APS не е изключен + Стартирай временна цел + Спри временна цел + е по-малко от + е равно или по-малко от + е равно на + е равно или по-голямо от + е по-голяма от + не е налично + неизвестно + КЗ не е достъпна + КЗ %1$s %2$.0f %3$s + КЗ %1$s %2$.1f %3$s + Профил проц %1$s %2$d + IOB %1$s %2$.1f + И + или + Изключващо или + В %1$s + Използвай локация от моб мрежа + Използвай GPS локация + Използвай пасивна локация + Услуги за местоположение + Автом + Автоматизация Общо %1$s Е Е/ч гр/Е @@ -1151,9 +1195,12 @@ секунда минута час + ден + седмица секунди минути часове + дни седмици Потребителското Ви име за Tidepool, обикновено е Вашия имейл Потребителско име @@ -1178,27 +1225,207 @@ Грешен код. Командата не е изпълнена. Не е конфигуриран Създаден запис - Промяна на профил + Повтарящо се време + Всеки + Никога + %1$dмин + Условие: + Действие: + IOB [Ед]: + КЗ [%1$s]: + ИЗТР + ДОБ + КОП + Добави нов Проверка на версията стара версия много стара версия Има нова версия от най-малко %1$d дни! Връщане към LGS след 60 дни, цикълът ще бъде изключен след 90 дни + Графика на инсулиновата активност [Е/мин] %1$.2fЕ Dexcom приложение (модифицирано) DXCM Да получава данни за КЗ от модифицираното приложение на Dexcom. + Известие + Известие: %1$s + Съоб: + Профил процент + Процент [%]: + Стартирай профил %1$d%% за %2$d мин + Стартирай профил %1$d%% + съществува + не съществува + Временна цел %1$s + WiFi SSID %1$s %2$s + Аутосенс %1$s %2$s %% + Аутосенс % + %3$s %1$s %2$s + Разлика в кръвната захар + Текущото местоположение + Местоположение + Ширина: + Дължина: + Разсt [м]: + Име: + Местоположението e %1$s + Последен болус + Последен болус преди %1$s %2$s минути + Активни въглехидрати + Въгл %1$s %2$.0f + Име на правилото + Име на събитие + РЕД + Моля изберете действие: + Моля изберете условие: + Ако: + Тогава: + Активиращи условия: + ИЗТРИИ + Предварителни: + Неподдържана операция. + Операцията не се поддържа от помпата (ВСЕ ОЩЕ). + Поддръжка на помпи Медтроник (специфични модели), изисква RileyLink устройство + Сериен номер на помпа + Тип помпа + Честота на помпата + Изчакване преди старт на болус (сек) + Макс болус в помпата (Е) + Максимален базал в помпата (Е/ч) + Медтроник коодиране + САЩ & Канада (916 Mhz) + Останалата част от света (868 Mhz) + Софтуерно 4b6b кодиране + Хардуерно 4b6b кодиране + RileyLink MAC адрес + Събуди и настрой + Изчисти Bolus Block + Изчисти RileyLink конфигурацията + Тип батерия (напреднали) + Не е избрано (общ) + Алкални + Литиева + СКАНИРАЙ + СТОП + Избрано + Сканирай + RileyLink скенер + Сканирай за RileyLink + Bluetooth Low Energy не се поддържа. + Bluetooth не е включен. + Локацията не е включена + За да работи откриването на нови устройсва чрез Bluetooth, трябва да включите локацията. AAPS не проследява вашето местоположение и ще можете да я изключите след успешното свързване. + Разреши + Не + Сканиране + Завършено сканиране + Грешка при сканиране: %1$d + Настройки + История + Устройство + RileyLink статус + Статус на помпата + RileyLink настройки + RileyLink настройки + RileyLink + Конфигуриран адрес + Свързано устройство + Състояние на връзката + Грешка при свързване + Устройство + Тип на устройството + Модел + Последна честота + Последно устройство + RL Firmware + Bluetooth стартиране… + Bluetooth грешка + Bluetooth готов + Не е стартиран + RileyLink стартиране… + RileyLink грешка + Настройка на RileyLink и помпа + Проблем при връзка с помпата + Свързан + Устройството не е RileyLink + RileyLink недостъпен + Bluetooth е изключен + Няма Bluetooth адаптер + Настройката се провали + Помпата е недостъпна + Pod е недостъпen + Не е зададен + Medtronic помпа + Omnipod + Грешки + Сериен номер не е зададен. + Грешен сериен номер. + Тип помпа не е зададен. + Този тип помпа не се поддържа. + Честота на помпата не е зададена. + Честотата не се поддържа. + Грешен RileyLink адрес. + Откритата помпа не е идентична с кокнфигурираната. + Базалните профили не са разрешени в помпата. + Базалния профил в помпата е грешен (трябва да е STD). + Грешен тип TBR в помпата ( трябва да е Absolute). + Грешен максимален болус в помпата ( трябвба да е %1$.2f). + Грешен макс мазал в помпата (трябва да е %1$.2f). + Забранено действие.\n\n Първо трябва да конфигурурате поомпата, преди да използвате тази операция,. + Желаната промяна на времето е повече от 24ч. + Базали + Конфигурации + Известия + Статистики + Неизвестни + Всички + История на помпата + Никога не сме се свързвали + Събуждане + Грешка в комуникацията + Изтичане на времето за връзка + Проблем при връзка с помпата + Помпата е недостъпна + Грешна конфигурация + Активна + Спинка си + Отказали сте болус след като е бил изпратен към помпата. Помпите Медтроник не го поддържат и ще трябва да го направите ръчно. Пуснете Suspend mode и след това Resume (ако оше искате да го откажете). Апликацията ще покаже промените след около 5 мин. + Не може да бъде прочетен вр. базал. + Не може да бъде изключен вр. базал. Операцията е спряна. + Смяната на профила е невъзможна, поради твърде голям размер: %1$s + Болус не може да бъде стартиран. + Временен базал не може да бъде стартиран. + Не може да бъде изключен вр. базал. + Профилът не може да бъде приложен. + Профилът е идентичен. + Вземи история - стр %1$d (%2$d/16) + Вземи история - стр %1$d + Вземи история - стр %1$d + Вземи времето на помпата + Вземи настройките на помпата + Вземи модел на помпата + Вземи базален профил от помпата + Приложи базалният профил + Получи временния базал + Приложи временен базал + Стартирай болус + Няма връзка от %1$d час(а) %2$d мин + Няма връзка от %1$d дни %2$d часа + %2$.1fг %3$.2fЕ]]> + Ограничение на болуса: %2$.2fЕ на %3$.2fЕ]]> + !!!!! Бавна абсорбция на въглехидрати: %2$d%% от времето. Проверете въведените данни. Може има голяма грешка !!!!!]]> %1$d дeн %1$d дни diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1bea6ad10f..2eaab7235c 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -886,6 +886,7 @@ Běží DEV verze. Uzavřená smyčka je zakázána. Expertní mód povolen Expertní mód není povolen a neběží vydaná verze + %1$.2f U/h Načítám bazální profil Historie v pumpě se změnila po spočítání bolusu. Bolus nebyl proveden. Prosím spočítejte ho znovu, pokud je to stále potřeba. Bolus úspěšně podán, ale zápis se nezdařil. To se může stát pokud jsou podány bolusy stejné velikosti během 2 minut. Zkontrolujte historii pumpy a zadejte chybějící položky do ošetření. Ujistěte se, že nezadáváte stejnou velikost v rámci 1 minuty. @@ -1141,6 +1142,27 @@ Min. doba čekání na obnovení spojení [s] Doba čekání na obnovení spojení Vypršel limit spojení - resetujte Bluetooth + Zadejte prosím název úlohy. + Aktuálně povoleno + Aktuálně zakázáno + Aktuálně pozastaveno + Obnovit smyčku + Nepozastaveno + Start dočasného cíle + Stop dočasného cíle + je menší než + je rovno nebo menší než + je rovno + je rovno nebo větší než + je větší než + není k dispozici + neznámý + Glykémie není k dispozici + A + Nebo + Exkluzivní nebo + Povolit zjištění polohy podle sítě + Použití GPS pozice == ∑ %1$s U U/h g/U diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 146f9fad0b..20672f048a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -2,8 +2,8 @@ Sicurezza trattamenti - Bolo massimo [U] - Valore massimo carboidrati [g] + Max Bolo consentito [U] + Max carboidrati consentiti [g] Preferenze Ricarica trattamenti da NS Ripristina database @@ -58,187 +58,186 @@ Avvio Verifica Unità - Durata Insulina attiva + DIA - Durata Azione dell\'Insulina IC - Rapporto Insulina/Carboidrati ISF - Fattore Sensibilità all\'Insulina Basale - Intervallo - Nessun profilo impostato + Target + NESSUN PROFILO IMPOSTATO Insulina: Carboidrati: IOB: IOB: Attività: IOB Totale: - Totale IOB attiva: - DUR: - rapporto: + Attività IOB Totale: + Dur: + Rapporto: Ins: IOB: - Totale IOB: - Totale insulina - Totale Carboidrati + IOB Totale: + Insulina + Carboidrati Glicemia TT Carboidrati Correzione U - Boli IOB + Bolo IOB Avvia ora - Pompa Virtuale - Base basale - Basale temporale + MICROINFUSORE VIRTUALE + Velocità basale minima + Basale temporanea Bolo Esteso Batteria Serbatoio - ok - Ultimo corsa + OK + Ultima esecuzione Entrata parametro - Stato glucosio + Stato glicemia Basale temporanea attuale - IOB dati + Dati IOB Profilo - Data Pranzo + Dati Pasto Esito - Valore nn disponibile in quella data - Non cambiare requisiti + Nessun cambiamento richiesto Richiesta - Rate + Tasso Durata Motivo - Glucosio - Delta T + Glicemia + Delta Delta: - Configurazione Strutturale - Obbiettivo + Configuratore + Obbiettivi OpenAPS MA Panoramica Profilo NS - Semplice profilo + Profilo semplice BasaleTemp - Trattamento + Trattamenti Micro Virtuale - Accesso portale + Portale Microinfusore - Quale pompa vuoi utilizzare con AndroidAPS? - Trattamento - Quale plugin dovrebbe essere utilizzato per la movimentazione di trattamento? + Quale microinfusore vuoi utilizzare con AndroidAPS? + Trattamenti + Quale plugin dovrebbe essere utilizzato per la gestione del trattamento? Profilo Quale profilo dovrebbe usare AndroidAPS? APS - Quale algoritmo APS dovrebbe apportare le modifiche di terapia? + Quale algoritmo APS dovrebbe apportare aggiustamenti terapeutici? Generale - Questi sono alcuni plugin generale che potreste trovare utile. - Quali vincoli vengono applicati? - giorno - Costrizione + Questi sono alcuni plugin generali che potresti trovare utili. + Quali vincoli sono applicati? + giorni + Vincoli Loop Loop - Consente di attivare l\'integrazione degli AndroidAPS ciclo. + Consente di attivare l\'integrazione del loop di AndroidAPS. APS - Dopo i vincoli trasformati - Basale Temp attivata sulla pompa + Dopo aver elaborato i vincoli + Basale Temp attivata sul microinfusore Ultimo attuato OK Cancella - APS selezionato o Provaider non corretto + NESSUN APS SELEZIONATO O RISULTATO FORNITO Sicurezza - Plugin e\' disabilitato - Vincolo Violato + Plugin disabilitato + Violazione dei vincoli Errore di erogazione del bolo - Errore di somministrazione basale temporale + Errore somministrazione Basale Temp Valore Basale [%%] - %% (100%%=corrente) - Accettare il nuovo basale temp - Boli + %% (100%% = corrente) + Accetta nuova Basale Temp: + Trattamento Calcolatore - Vincolo Applicato + Vincolo applicato! Conferma - Inserimento nuovo trattamento + Inserisci nuovo trattamento: Bolo Bolo: Basale Basale Carboidrati - Cambia il tuo imput - Impostare il nuovo bollo esteso - Origine glicemia + Cambia il tuo input! + Imposta nuovo bolo esteso: + Origine Glicemia Dove prendere i dati per AndroidAPS? - Xdrip + xDrip Modalità APS - Chiusura Loop - Apertura Loop + Loop Chiuso + Loop Aperto Loop Disabilitato - Disabilta Loop - Abilitare Loop + Disabilita Loop + Abilita Loop Nuovo suggerimento disponibile - Versione NsClient non supportata + Versione NSClient non supportata Versione non supportata di Nightscout - NsClient non istallato. Record perduto + NSClient non istallato. Record perduto! BG disponibile in NS - Micro disponibile in NS + Stato Micro disponibile in NS Manuale - Loop disabilitato da vincolo + LOOP DISABILITATO DAI VINCOLI Basale IOB Vincolo bolo applicato - Applicazione del conteggio Carboidrati + Vincolo carboidrati applicato Controllo Glicemia Annuncio Nota Domanda Sport - Cambio posizione ago - Attivazione del sensore + Cambio posizione cannula + Inserimento sensore Avvio Sensore Cambio serbatoio insulina Cambio profilo Bolo Spuntino Bolo pasto - Correzione Bolo - Bolo doppio - Inizio Basale Temporanea - Fine Basale temporanea - Correzione carboidrati - OpenAPS non in linea + Bolo di Correzione + Bolo Combo + Inizio Basale Temp + Fine Basale Temp + Correzione con carboidrati + OpenAPS Offline Tipo di evento Altro Glucometro Sensore Carboidrati Insulina - Tempo di assorbimento Carboidrati - Frazionare + Tempo assorb. Carboidrati + Fraziona Durata Percentuale Assoluto Note Data Evento Profilo - Ingresso - Tipo di glucosio - Nessun profilo caricato da NS - Basale Temporale + Inserito da + Tipo Glicemia + Nessun profilo ancora caricato da NS + Basale Temp Bolo Esteso - Versione Nightscout + Versione Nightscout: Mancante - Esportare Preferenze - Esportazione impostazione to - Importa impstazioni da + Preferenze esportate + Esporta impostazioni su + Importa impostazioni da Impostazioni importate - File non coretto + File non trovato Esporta impostazioni Importa impostazioni - Basale Temp Max che può essere impostato su - Il valore e\' chiamati basale in OpenAPS + Max U/h che una Basale Temp può impostare + Questo valore è chiamato \"max basal\" nel contesto OpenAPS Basale Massima in IOB OpenAPS - Questo valore si chiama Max IOB in contesto OpenAPS. Questo valore sara\' zero. Dopo diversi giorni o settimane, a seconda del livello di comfort, puoi scegliere di regolare questo numero. - Respingere + Questo valore è chiamato Max IOB nel contesto OpenAPS\nIndica l\'insulina massima in [U] che APS può erogare contemporaneamente. + RESPINGI DanaR - Connesso - Collegato - Scollegato - Setting Micro - ontratto di licenza + In Connessione + Connesso + Disconnesso + Impostazioni micro DanaR + Contratto di licenza per l\'utente NON DEVE ESSERE UTILIZZATO PER PRENDERE LE DECISIONI MEDICHE. NON C\'È NESSUNA GARANZIA PER IL PROGRAMMA, NELLA MISURA CONSENTITA DALLA LEGGE APPLICABILE. TRANNE QUANDO DIVERSAMENTE INDICATO PER ISCRITTO, IL DETENTORE DEL COPYRIGHT E/O ALTRE PARTI FORNISCONO IL PROGRAMMA \"COSÌ COM\'È\" SENZA GARANZIA DI ALCUN TIPO, ESPLICITA O IMPLICITA, INCLUSE, MA NON LIMITATAMENTE A, GARANZIE IMPLICITE DI COMMERCIABILITÀ E IDONEITÀ PER UN SCOPO PARTICOLARE. L\'INTERO RISCHIO PER LA QUALITÀ E LE PRESTAZIONI DEL PROGRAMMA È CON VOI. SE IL PROGRAMMA DOVESSE RISULTARE DIFETTOSO, SI ASSUME IL COSTO DI TUTTI I NECESSARI PER LA MANUTENZIONE, RIPARAZIONE O CORREZIONE. CAPISCO E ACCETTO Salva @@ -532,10 +531,12 @@ Sospensione Loop Sospendi (%1$d m) Superbolo (%1$d m) + Sospendi loop Sospendi loop per 1h Sospendi loop per 2h Sospendi loop per 3h Sospendi loop per 10h + Sospendi loop per %1$d min Sconnetti Micro per 15min Sconnetti Micro per 30min Sconnetti Micro per 1 H @@ -1081,140 +1082,309 @@ I codici mostrati su questo dispositivo e sulla pompa? associazione Insight Accu-Chek Insight - %1$.2fU / %2$.2fU consegnato + %1$.2fU / %2$.2fU erogate %1$s: %2$s - Cambio Catetere - Tempo di aggiornamento della pompa + Catetere sostituito + Ora del microinfusore aggiornata Conferma Muto - Avviso pompa - Registro modifiche al sito - Modifiche di registro serbatoio - Registro modifiche al sito - Registra modifiche batteria - Modifica modalità di funzionamento log - Avvisi log + Avviso microinfusore + Log modifiche al sito + Log sostituzione serbatoio + Log sostituzione catetere + Log sostituzione batteria + Log cambio modalità di funzionamento + Log avvisi Abilita emulazione TBR Usa i bolli estesi invece dei TBR per aggirare il limite del 250%% - Disconnetti ritardo [s] + Ritardo disconnessione [s] Numero di serie Versione software di rilascio - Versione software di processore UI - Versione software del PC - Versione software di processore UI - Versione software del processore - Versione pagina info BT + Versione UI processor software + Versione PC processor software + Versione MD tel processor software + Versione Safety processor software + Versione BT info page Indirizzo Bluetooth - Accoglienza ID sistema + Appendice ID sistema Data di produzione Elimina accoppiamento - Informazioni di abbinamento + Informazioni accoppiamento Aggiorna stato - Avvia pompa - Ferma pompa + Avvia microinfusore + Ferma microinfusore Modalità operativa Stato - Bolo TDD + TDD Boli TDD Basale - Totale TDD - Recuperando + TDD Totale + Recupero Non accoppiato - Ultimo connesso + Ultima connessione Avviato Stoppato %1$d%% per %2$d / %3$d min Bolo Esteso - Portale Multi + Bolo Multiwave %1$.2f / %2$.2f U per %3$d minuto - Abilita notifica di fine TBR e \n(impostazione pompa) - Abilita notifica di fine TBR e \n(impostazione pompa) + Abilita notifica di fine TBR e \n(impostazione microinfusore) + Disabilita notifica di fine TBR e \n(impostazione microinfusore) Ricarica - Integrazione pompa per pompe di Accu-Chek Insight + Integrazione del microinfusore Accu-Chek Insight Non inserito Ultima conn: %1$d minuti fa TBR: %1$d% per %2$d/%3$d min Esteso: %1$.2f / %2$.2f U per %3$d min - Esteso: %1$.2f/ %2$.2f U per %3$d min + Multiwave: %1$.2f / %2$.2f U per %3$d min TDD: %1$.2f Reser.: %1$.2fU Batt: %1$d%% - Durata massima [s] - Durata Minima [s] + Durata massima recupero [s] + Durata minima recupero [s] Durata recupero - Timeout durante la comunicazione - riavvia bluetooth + Timeout durante la comunicazione - riavvia il bluetooth + Dom + Sab + Ven + Gio + Mer + Mar + Lun + Automation task definiti dall\'utente + Per favore, inserisci un nome task. + Per favore, specifica almeno un trigger. + Per favore, specifica almeno un\'azione. + Già abilitato + Già disabilitato + Già sospeso + Riprendi loop + Non sospeso + Avvia temp target + Stoppa temp target + è inferiore a + è uguale o inferiore a + è uguale a + è uguale o maggiore di + è maggiore di + non è disponibile + sconosciuto + Glicemia non disponibile + Glicemia %1$s %2$.0f %3$s + Glicemia %1$s %2$.1f %3$s + Profilo pct %1$s %2$d + IOB %1$s %2$.1f + And + Or + Xor + A %1$s + Usa posizione di rete + Usa posizione GPS + Usa posizione passiva + Servizio di localizzazione + Auto + Automazione == ∑ %1$s U - U/o + U/h g/U /U - Cambia il sensore di log in NS + Registra cambio sensore in NS Crea evento \"Cambia sensore\" in NS all\'avvio del sensore Tomato (MiaoMiao) - Pomodoro - secondi + Tomato + secondo minuto ora - giorni + giorno settimana secondi minuti ore giorni settimane - Il tuo nome utente di accesso Tidepool, normalmente il tuo indirizzo email + Il tuo nome utente per l\'accesso a Tidepool, generalmente il tuo indirizzo email Nome utente - La tua password di accesso Tidepool + La tua password di accesso a Tidepool Password di accesso - Test accesso Tidepool + Test di accesso a Tidepool Se abilitato, gli upload andranno su https://int-app.tidepool.org invece che su https://app.tidepool.org/ Usa server di integrazione (test) Tidepool TDP Carica dati in Tidepool - Carica i dati del CGM + Carica dati CGM Carica trattamenti (insulina, carbo) Carica basali temporanee - Carica gli eventi del profilo, obiettivi temp - Carica i test BG - Il tempo di salvataggio cambia in 24h o meno - Il tempo di salvataggio dei dati avviene ogni 3 ore - ciclo chiuso disattivato + Carica switch di profilo, target temporanei + Carica test Glicemia + Cambio all\'ora legale in 24h o meno + Cambio all\'ora legale avvenuto meno di 3 ore fa - Closed loop disattivato vincolo di archiviazione interna Libera almeno %1$d MB dalla memoria interna! Loop disabilitato! Formato errato Codice errato. Comando annullato. Non configurato - Cambia profilo creato + Cambio profilo creato + Tempo ricorrente + Ogni + Mai + %1$dminuti + Condizione: + Azione: + IOB [U]: + Glicemia [%1$s]: + CANC + AGG + COPIA + Aggiungi nuovo Controllo Versione - versione precedente - versione molto vecchia - Nuova versione per almeno %1$d giorni disponibile! Torna ai LGS dopo 60 giorni, il ciclo sarà disattivato dopo 90 giorni - Attività su scala grafica [U/min] + versione datata + versione molto datata + Nuova versione disponibile da %1$d giorni! Ritorno a LGS trascorsi 60 giorni, disattivazione del loop dopo 90 giorni + Azione insulinica su scala grafica [U/min] 2 ore %1$.2fU - Dexcom App (con correzione) + Dexcom App (modificata) DXCM - Ricevi i valori BG dall\'app Dexcom con patch. + Ricevi valori Glicemia dall\'app Dexcom modificata. + Notifica + Notifica: %1$s + Msg: + Percentuale del profilo + Percentuale [%]: + Avvia profilo %1$d%% for %2$d min + Avvia profilo %1$d%% + esiste + non esiste + Temp target %1$s + WiFi SSID %1$s %2$s + Autosens %1$s %2$s %% + Autosens % + %3$s %1$s %2$s + Differenza Glicemia + Posizione corrente + Posizione + Lat: + Lon: + Dist [m]: + Nome: + La posizione è %1$s + Ultimo Bolo + Ora ultimo bolo %1$s %2$s min fa + COB + COB %1$s %2$.0f + Nome Task + Nome Evento + MODIFICA + Scegli un tipo di azione: + Scegli un tipo di trigger: + If: + Then: + Trigger: + RIMUOVI + Presupposti: + Operazione non supportata dal microinfusore e/o dal driver. + Operazione NON ANCORA supportata dal microinfusore. + Integrazione del microinfusore Medtronic, richiede un dispositivo RileyLink e uno specifico modello di microinfusore + Numero Seriale microinfusore + Tipo microinfusore + Frequenza microinfusore + Ritardo prima che il Bolo sia avviato (s) + Max Bolo su Microinfusore (U) + Max Basale su Microinfusore (U/h) + Codifica Medtronic + US & Canada (916 MHz) + Globale (868 Mhz) + Codifica Software 4b6b + Codifica Hardware 4b6b + RileyLink MAC Address + Risveglio e Sintonizzazione + Cancella Blocco Bolo + Reimposta Configurazione RileyLink + Tipo di batteria (Power View) + Non selezionato (Simple view) + Alkaline (Extended view) + Lithium (Extended view) + SCAN + STOP + Selezionato + Scansiona + Scansione RileyLink + Ricerca di RileyLink + Bluetooth Low Energy non supportato. + Bluetooth disabilitato. + La posizione non è abilitata + Affinché la ricerca bluetooth funzioni coi nuovi dispositivi, la localizzazione deve essere abilitata, ma può essere disabilitata dopo l\'accoppiamento. AAPS non tiene traccia della tua posizione. + Abilita + No + Scansione in corso + Scansione terminata + Errore scansione: %1$d + Impostazioni + Operazione non possibile.\n\n Devi prima configurare il Microinfusore Medtronic. + È stata richiesta una modifica d\'orario di oltre 24h. + Basali + Configurazioni + Notifiche + Statistiche + Sconosciuti + Tutto + Storico del Microinfusore Medtronic + Mai connesso + Risveglio + Errore nella comunicazione + Timeout della comunicazione + Problema di connessione al microinfusore + Microinfusore irraggiungibile + Configurazione non valida + Attivo + In sospensione + Hai cancellato il bolo, dopo che era già stato impostato sul Microinfusore. Dal momento che il Microinfusore Medtronic non supporta la cancellazione, avrai bisogno di cancellare il bolo manualmente. Metti il Microinfusore in modalità Sospensione e poi fallo Ripartire (se vuoi ancora cancellare il bolo). L\'applicazione rileverà le modifiche al prossimo aggiornamento (in meno di 5 minuti). + Impossibile leggere il TBR corrente. + Impossibile cancellare il TBR corrente. Arresto dell\'operazione. + Impostazione del profilo fallita, i seguenti modelli hanno un tasso basale troppo grande: %1$s + Il Bolo non può essere erogato. + Il TBR non può essere impostato. + Impossibile cancellare il TBR corrente. + Il profilo basale non può essere impostato. + Il profilo basale è lo stesso, quindi non sarà impostato di nuovo. + Ottieni Storico - Pagina %1$d (%2$d/16) + Ottieni Storico - Pagina %1$d + Ottieni Storico - Pagina %1$d + Ottieni Orario Microinfusore + Ottieni Impostazioni + Ottieni Modello Microinfusore + Ottieni Profilo Basale + Imposta Profilo Basale + Ottieni Basale Temporanea + Imposta Basale Temporanea + Imposta Bolo + Nessuna connessione per %1$d ora(e) e %2$d min + Nessuna connessione per %1$d giorno(i) e %2$d ore + %2$.1fg %3$.2fU]]> + Vincolo Bolo applicato: %2$.2fU a %3$.2fU]]> + !!!!! Rilevato assorbimento lento dei carboidrati: %2$d%% del tempo. Ricontrolla il tuo calcolo. COB può essere davvero fuori !!!!!]]> - %1$d giorni + %1$d giorno %1$d giorni - %1$d ore + %1$d ora %1$d ore %1$d minuto - %1$d minuto + %1$d minuti diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 40a77bc83a..1674012798 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -532,10 +532,12 @@ Pętla wstrzymana Wstrzymana (%1$d m) Superbolus (%1$d m) + Wstrzymaj pętle Wstrzymaj pętlę na 1h Wstrzymaj pętlę na 2h Wstrzymaj pętlę na 3h Wstrzymaj pętlę na 10 h + Wstrzymaj pętlę na %1$d min Wyłącz pompę na 15 min Wyłącz pompę na 30 min Wyłącz pompę na 1 h @@ -876,6 +878,7 @@ Bolus zostanie tylko zapisany w rekordach Automatycznie wypełnij brakujące BG z NS SMB ustawiony przez pompę + Ćwiczenia Wrażliwość Odchylenia COB (Aktywne Węglow.) @@ -886,6 +889,7 @@ Uruchomiona jest wersja dev. Zamknięta pętla jest wyłączona. Tryb Inżynierski włączony Tryb inżynierski nie włączony i nie pracuje wersja \"kandydat do wydania\" (RC) + %1$.2f U/h Wczytuje profil bazowy Historia pompy zmieniła się po wykonaniu obliczenia bolusa. Bolus nie został dostarczony. Proszę, przelicz ponownie, jeśli wciąż potrzebujesz bolusa. Bolus został pomyślnie dostarczony, ale dodanie wpisu leczenia nie powiodło się. Może się to zdarzyć, jeśli w ciągu ostatnich dwóch minut podano dwa małe bolusy o tej samej wielkości. Sprawdź historię pompy i leczenie i użyj PortaluOpieki, aby dodać brakujące wpisy. Make sure not to add any entries for the exact same minute and same amount. @@ -1141,6 +1145,46 @@ Min. czas odzyskiwania [s] Czas odzyskiwania Przekroczony czas przywitania - zresetuj bluetooth + Nie + Sob + Pią + Czw + Śr + Wt + Pon + Zadania zautomatyzowane zdefiniowane przez użytrkownika + Proszę wpisać nazwę zadania. + Proszę podać przynajmniej jedno wywołanie. + Proszę podać przynajmniej jedną akcję. + Już włączono + Już wyłączono + Już zawieszono + Wznów pętlę + Nie wstrzymana + Rozpocznij cel tymczasowy + Zatrzymaj cel tymczasowy + jest mniejsze niż + jest równe lub mniejsze niż + jest równe + jest równe lub większe niż + jest większe niż + nie jest dostępne + nieznany + Poziom jest nieznany + Poziom %1$s %2$.0f %3$s + Poziom %1$s %2$.1f %3$s + Profil pct %1$s %2$d + IOB %1$s %2$.1f + i + lub + wyłącznie lub + W %1$s + Użyj lokalizacji sieciowej + Użyj lokalizacji GPS + Użyj biernej lokalizacji + Usługa lokalizacji + Auto + Automatyzacja == ∑ %1$s U U/h g/U @@ -1149,6 +1193,31 @@ Podaj \"Zmiana Sensora\" do NS do NS automatycznie przy uruchomieniu sensora Tomato (MiaoMiao) Tomato + sekunda + minuta + godzina + dzień + tydzień + sekund + minut + godzin + dni + tygodnie + Twoja nazwa użytkownika Tidepool, zwykle Twój adres e-mail + Login nazwa użytkownika + Twoje hasło logowania do Tidepool + Hasło logowania + Sprawdź dostęp do Tidepool + Jeśli ta opcja jest włączona, przesyłanie będzie dostępne na https://int-app.tidepool.org zamiast zwykłego https://app.tidepool.org/ + Użyj serwerów integracyjnych (testowych) + Tidepool + TDP + Prześlij dane do Tidepool + Prześlij dane CGM + Prześlij terapię (insulina, węglowodany) + Prześlij bazy tymczasowe + Prześlij zmiany profilu, cele tymczasowe + Prześlij testowe BG Zmiana na czas letni w ciągu 24 godzin lub krócej Zmiana czasu nastąpiła mniej niż 3 godziny temu - Zamknięta pętla wyłączona limit wielkości pamięci wewnętrznej @@ -1157,27 +1226,209 @@ Zły kod. Polecenie anulowano. Nie skonfigurowano Zmiana profilu wykonana + Powtarzający się czas + Każdy/Każdego + Nigdy + %1$dmins + Warunek: + Działanie: + IOB [U]: + Poziom [%1$s]: + USUŃ + DODAJ + KOPIUJ + Dodaj nowy Kontroler wersji + Weryfikator podpisu + Wykryliśmy, że używasz nieprawidlowej wersji. Pętla wyłączona! stara wersja bardzo stara wersja Nowa wersja dostępna co najmniej %1$d dni! Powrót do LGS (zawieszania podawania bazy przy niskim poziomie) po 60 dniach, pętla zostanie wyłączona po 90 dniach + Graficzny wykres aktywności insuliny [U/min] 2 h %1$.2fU Apka Dexcom (spatchowana) DXCM Pobieraj wartości BG ze spatchowanej aplikacji Dexcom. + Powiadomienie + Powiadomienie: %1$s + Inf: + Procent profilu + Procent [%]: + Uruchom profil %1$d%% na %2$d min + Uruchom profil %1$d%% + istnieje + nie istnieje + Cel tymczasowy %1$s + WiFi SSID %1$s %2$s + Autosens %1$s %2$s %% + Autosens % + %3$s %1$s %2$s + Różnica poziomu cukru + Obecna lokalizacja + Lokalizacja + Szerokość: + Długość: + Odległość [m]: + Nazwa: + Lokalizacja to %1$s + Przed ostatnim bolusem + Czas ostatniego bolusa %1$s %2$s min temu + Węgle + Węgle %1$s %2$.0f + Nazwa zadania + Nazwa zdarzenia + EDYTUJ + Proszę wybrać typ akcji: + Proszę wybrać typ wyzwalacza: + Jeżeli: + To: + Wyzwalacz: + USUŃ + Warunki wstępne: + Operacja nie jest wspierana przez pompę i/lub sterownik pompy. + Operacja nie jest JESZCZE wspierana przez pompę. + Integracja pompy Medtronic wymaga urządzenia RileyLink i odpowiedniego modelu pompy + Numer seryjny pompy + Typ pompy + Częstotliwość pompy + Opóźnienie przed rozpoczęciem bolusa(s) + Max bolus w pompie (U) + Max dawka bazowa w pompie (U/h) + Kodowanie Medtronic + US & Kanada (916 MHz) + Reszta świata (868 Mhz) + Kodowanie oprogramowania 4b6b + Kodowanie urządzenia 4b6b + Adres MAC urządzenia RileyLink + Wzbudź i dostrój + Wyczyść blok bolusa + Przywróć konfigurację RileyLink + Typ baterii (podgląd mocy) + Nie wybrany (widok prosty) + Alkaliczne (widok rozszerzony) + Litowe (widok rozszerzony) + SKANUJ + ZATRZYMAJ + Wybrany + Skanuj + Skan RileyLink + Szukaj RileyLink + Bluetooth Low Energy nie obsługiwany. + Bluetooth nie uruchomiony. + Lokalizacja nie jest uruchomiona + Aby uruchomić odnajdywanie Bluetooth na nowszych urządzeniach, lokalizacja musi być uruchomiona. AAPS nie śledzi twojej lokalizacji więc można ją wyłączyć po udanym powiązaniu. + Uruchom + Nie + Skanowanie + Skanowanie zakończono + Błąd skanowania: %1$d + Ustawienia + Historia + Urządzenie + Stan RileyLink + Stan pompy + Ustawienia RileyLink + Ustawienia RileyLink + RileyLink + Ustawiony adres + Połączone urządzenie + Status połączenia + Błąd połączenia + Urządzenie + Typ urządzenia + Model urządzenia + Ostatnio używana częstotliwość + Ostatnie połączenie z urządzeniem + Oprogramowanie RL + Uruchamianie Bluetooth… + Błąd Bluetooth + Bluetooth gotowy + Nie rozpoczęto + Uruchamianie RileyLink… + Błąd RileyLink + Strojenie RileyLink i pompy + Problem z połączeniem z pompą + Połączono + Urządzenie to nie RileyLink + RileyLink nie osiągalny + Bluetooth wyłączony + Brak modułu Bluetooth + Dostrojenie nie powiodło się + Pompa nieosiągalna + Pod nieosiągalny + Nie ustawiono + Pompa Medtronic + Omnipod + Błędy + Numer seryjny # nie ustawiony. + Numer seryjny # nieprawidłowy. + Tyo pompy nie ustawiony. + Typ pompy nie obsługiwany. + Częstotliwość pompy nie ustawiona. + Częstotliwość pompy nie wspierana. + Adres RileyLink niewłaściwy. + Wykryty typ pompy jest inny niż ustawiony. + Profile bazowe nie są uruchomione na pompie. + Profil bazowy ustawiony na pompie nie jest właściwy (musi być STD). + Ustawiony na pompie typ dawki tymczasowej jest niewłaściwy (musi być całkowity - Absolute). + Ustawiony na pompie typ Bolus Maksymalny jest niewłaściwy (musi być %1$.2f). + Ustawiony na pompie typ Bolus Maksymalny jest niewłaściwy (musi być %1$.2f). + To działanie nie jest możliwe.\n\n Musisz skonfigurować pompę Medtronic Pump, przed uruchomieniem tego działania. + Wymagana jest zmiana ustawień czasu na 24h. + Dawki bazowe + Ustawienia + Powiadomienia + Statystyki + Nieznane + Wszystko + Historia pompy Medtronic + Nigdy nie połączona + Wybudzanie + Błąd komunikacji + Przekroczony limit czasu połączenia + Problem z połączeniem z pompą + Pompa nieosiągalna + Nieprawidłowe ustawienia + Aktywna + Uśpiona + Anulowałeś bolus po jego ustawieniu na pompie. Ponieważ pompa Medtronic nie wspiera polecenia anuluj, musisz wprowadzić zmianę ręcznie. Wprowadź pompę w stan zawieszenia, a następnie przywróć jej działanie (jeżeli wciąż chcesz anulować). Aplikacja pobierze zmiany przy następnym uaktualnieniu (poniżej 5 minut). + Nie udało się odczytać aktualnej dawki tymczasowej (TBR). + Nie udało się anulować aktualnej dawki tymczasowej (TBR). Operacja zatrzymania. + Ustawienia Profilu nie powiodły się ponieważ następująca wartość jest za duża: %1$s + Nie udało się dostarczyć bolusa. + Nie udało się ustawić dawki tymczasowej (TBR). + Nie udało się anulować bazy tymczasowej (TBR). + Profil bazy nie został ustawiony. + Profil bazy jest taki sam, więc nie ustawiono ponownie. + Pobierz historię - strona %1$d (%2$d/16) + Pobierz historię - strona %1$d + Pobierz historię - strona %1$d + Pobierz czas pompy + Pobierz ustawienia + Pobierz model pompy + Pobierz profil dawki bazowej + Ustaw profil dawki bazowej + Pobierz tymczasową dawkę bazową + Ustaw tymczasową dawkę bazową + Ustaw bolus + Brak połączenia przez %1$d godzin %2$d min + Brak połączenia przez %1$d dni %2$d godzin + %2$.1fg %3$.2fU]]> + Wprowadzono ograniczenie bolusa: %2$.2fU to %3$.2fU]]> + !!!!! Wykryto powolne wchłanianie węglowodanów: %2$d%% czasu. Sprawdź ponownie swoje obliczenia. COB mogą się znacznie różnić !!!!!]]> %1$d dzień %1$d dni diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index a364af068a..787c0d743b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1175,6 +1175,8 @@ Não configurado Troca de perfil criada Verificador de Versão + Verificador de assinatura + Detectamos que está a correr uma versão inválida. Loop desactivado! versão antiga versão muito antiga Nova versão para pelo menos %1$d dias disponíveis! Voltar para o LGS após 60 dias, o loop será desativado após 90 dias @@ -1253,6 +1255,9 @@ Definir Bólus Sem ligação por %1$d hora(s) %2$d min Sem ligação por %1$d dia(s) %2$d horas + %2$.1fg %3$.2fU]]> + Restrição de Bolus aplicada: %2$.2fU para %3$.2fU]]> + !!!!! Absorção lenta de hidratos detectada: %2$d%% do tempo. Verifique o seu cálculo. COB podem ser estar desajustados !!!]]> %1$d dia %1$d dias diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 91f1a0d9cf..6a9e4978cf 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -532,10 +532,12 @@ ЗЦ остановлен Остановлен на(%1$d m) Суперболюс(%1$d m) + Приостановить цикл приостановить цикл на 1 час приостановить цикл на 2 часа приостановить цикл на 3 часа приостановить цикл на 10 часов + Приостановить цикл на %1$d мин отсоединить помпу на 15 мин отсоединить помпу на 30 мин отсоединить помпу на 1 час @@ -886,6 +888,7 @@ Работает версия разработчика. Замкнутый цикл отключен. Режим отладки включен Режим отладки не задействован и отсутствует на ветке релиза + %1$.2f ед/час Чтение базального профиля История событий помпы изменилась с момента вычисления болюса. Болюс не подан. Пожалуйста пересчитайте потребность в болюсе. Болюс подан успешно, но запись о назначении не сделана. Это может быть вызвано тем, что за последние две минуты назначено два болюса одного объема. Пожалуйста проверьте историю событий помпы и записи о назначениях и добавьте пропущенные записи из Портала назначений. Не добавляйте записи с одним и тем же временем и одинаковым объемом. @@ -1143,6 +1146,46 @@ Context | Edit Context Мин. продолжительность восстановления [s] Продолжительность восстановления Тайм-аут сопряжения - сбросьте bluetooth + Вс + Сб + Пт + Чт + Ср + Вт + Пн + Заданные пользователем задачи автоматизации + Введите название задачи. + Укажите хотя бы один триггер. + Укажите хотя бы одно действие. + Уже включен + Уже отключен + Уже приостановлен + Возобновить цикл + Не приостановлен + Начать врем цель + Остановить врем цель + меньше чем + равно или меньше чем + равно + равно или больше чем + больше чем + недоступно + неизвестно + ГК недоступна + Гк %1$s %2$.0f %3$s + Гк %1$s %2$.1f %3$s + Профиль %1$s%2$d + Акт инс IOB %1$s %2$.1f + И + Или + Исключая или + В %1$s + Использовать сетевую геолокацию + Использовать геолокацию GPS + Использовать пассивную геолокацию + Службы геолокации + Авто + Автоматизация == ∑ %1$s ед Ед/ч г/ед @@ -1184,7 +1227,21 @@ Context | Edit Context Неверный код. Команда отменена. Не сконфигурировано Переключатель профиля создан + Время повторения + Раз в + Никогда + %1$d мин + Условие: + Действие: + Акт инс IOB [U]: + Гк %1$s]: + Удалить + ДОБАВИТЬ + КОПИРОВАТЬ + Добавить еще Проверка версии + Верификатор подписи + Мы обнаружили, что вы используете недопустимую версию. Цикл отключен! старая версия очень старая версия Новая версия доступна не менее %1$d дней! После 60 дней переход на остановку при низкой гликемии LGS, замкнутый цикл будет отключен через 90 дней @@ -1194,18 +1251,185 @@ Context | Edit Context Приложение Dexcom (модифицированное) DXCM Получать данные ГК от модифицированного приложения Dexcom. + Уведомление + Уведомление: %1$s + Сообщение: + Процент профиля + Процент [%]: + Начать профиль %1$d%% на %2$d мин + Начать профиль %1$d%% + существует + не существует + Врем цель %1$s + WiFi SSID %1$s %2$s + Автосенс %1$s %2$s %% + Автосенс % + %3$s%1$s%2$s + Разница Гк + Текущее местоположение + Местоположение + Широта: + Долгота: + Расст [м]: + Имя: + Местоположение: %1$s + Предыдущий болюс + Время болюса %1$s %2$s мин назад + Активн углеводы + Активн углеводы %1$s %2$.0f + Название задачи + Название события + РЕДАКТ + Выберите тип действия: + Выберите тип триггера: + Если: + Тогда: + Триггеры: + УДАЛИТЬ + Предусловия: + Операция не поддерживается помпой и/или драйвером. + Операция ЕЩЕ не поддерживается помпой. + Интеграция с помпой Medtronic требует устройства RileyLink и специфическую модель помпы + Серийный номер помы + Тип помпы + Частота помпы + Задержка перед подачей болюса (с) начата + Макс. болюс на помпе (ед) + Макс. базал на помпе (ед/ч) + Кодировка Medtronic + US & Canada (916 MHz) + Глобальн (868 Мгц) + Программное 4b6b кодирование + Аппаратное кодирование 4b6b + MAC адрес RileyLink + Пробудить и настроить + Очистить блок болюса + Сбросить конфигурацию RileyLink + Тип батареи (по мощности) + Не выбрано (Простой вид) + Щелочная (Подробный вид) + Литиевая (Подробный вид) + СКАН + СТОП + Выбрано + Сканирование + Сканирование RileyLink + Искать RileyLink + Bluetooth Low Energy не поддерживается. + Bluetooth не включен. + Геолокация не включена + Для обнаружения Bluetooth на новых устройствах необходимо включить геолокацию. AAPS не отслеживает ваше местоположение и может быть отключен после успешного подключения. + Включить + Нет + Сканирование + Сканирование завершено + Ошибка сканирования: %1$d + Настройки + История + Устройство + Статус RileyLink + Статус помпы + Настройки RileyLink + Настройки RileyLink + RileyLink + Настроенный адрес + Подключенное устройство + Статус подключения + Ошибка подключения + Устройство + Тип устройства + Модель устройства + Последняя использованная частота + Контакт последнего устройства + Прошивка RileyLink + Инициализация Bluetooth… + Ошибка Bluetooth + Bluetooth готов + Не запущено + Инициализация RileyLink… + Ошибка RileyLink + Настройка RileyLink и помпы + Проблема подключения к помпе + Соединение установлено + Устройство не является RileyLink + RileyLink недоступен + Bluetooth выключен + Нет Bluetooth-адаптера + Ошибка TuneUp + Помпа недоступна + POD недоступен + Не выбрано + Помпа Medtronic + Omnipod + Ошибки + Серийный # не задан. + Серийный # неверный. + Тип помпы не задан. + Тип помпы не поддерживается. + Частота помпы не задана. + Частота помпы не поддерживается. + Недопустимый адрес RileyLink. + Обнаруженный тип помпы не соответствует настроенному. + Профили базала не включены на помпе. + Базовый профиль на помпе неверный (должен быть STD). + Неверный тип временной скорости базала TBR на помпе (должен быть Absolute). + На помпе задан неверный макс болюс (должен быть %1$.2f). + На помпе задан неверный макс базал (должен быть %1$.2f). + Операция невозможна.\n\n Сначала нужно настроить помпу Medtronic. + Запрошено изменение времени свыше 24 часов. + Базалы + Конфигурация + Уведомления + Статистика + Неизвестно + Все + История с помпы Medtronic + Никогда не подключалось + Пробуждение + Ошибка связи + Таймаут связи + Проблема подключения к помпе + Помпа недоступна + Недопустимая конфигурация + Активно + Сон + Вы отменили болюс после того как он был задан на помпе. Поскольку помпа Medtronic не поддерживает отмену, нужно отменить его вручную. Переведите помпу в режим приостановки и затем сделайте Resume (если все еще хотите отменить). Приложение примет изменения при следующем обновлении (менее чем через 5 минут). + Не удалось прочитать текущий врем. базал TBR. + Не удалось отменить текущий врем базал TBR. Остановка операции. + Не удалось установить профиль потому что следующие шаблоны имеют слишком большой базал %1$s + Болюс не подан. + Врем базал TBR не задан. + Не удалось отменить текущий врем базал TBR. + Профиль базала не установлен. + Базовый профиль идентичен, он не будет задан повторно. + Получить историю - страница %1$d (%2$d/16) + Получить историю - страница %1$d + Получить историю - страница %1$d + Получить время с помпы + Получить настройки + Получить модель помпы + Получить профиль базала + Установить профиль базала + Получить временный базал + Установить временный базал + Настроить болюс + Нет соединения %1$d часа(ов) %2$d мин + Нет соединения %1$d дней %2$d часов + %2$.1fг %3$.2fU]]> + Применено ограничение на болюс: %2$.2fед до %3$.2fед]]> + !!!!! Обнаружено медленное всасывание углеводов: %2$d%% времени. Еще раз проверьте свои расчеты. Возможно акт углеводы COB вне диапазона !!!!!]]> %1$d день %1$d дня diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index adddc22cb8..f0e94b5519 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -532,10 +532,12 @@ Uzavretý okruh pozastavený Pozastavený (%1$d min) Superbolus (%1$d m) + Pozastaviť uzavretý okruh Pozastaviť uzavretý okruh na 1 h Pozastaviť uzavretý okruh na 2 h Pozastaviť uzavretý okruh na 3 h Pozastaviť uzavretý okruh na 10 h + Pozastaviť uzavretý okruh na %1$d min Odpojiť pumpu na 15 min Odpojiť pumpu na 30 min Odpojiť pumpu na 1 h @@ -886,6 +888,7 @@ Bežiaca vývojárska verzia. Uzavretý okruh je zakázaný. Vývojársky mód povolený Vývojársky mód nie je povolený a nebeží vydaná verzia + %1$.2f U/h Načítavam bazálny profil História v pumpe sa zmenila po spočítaní bolusu. Bolus nebol podaný. Prosím spočítajte ho znovu, pokiaľ je stále potrebný. Bolus úspešne podaný, ale zápis se nepodaril. To sa môže stať, pokiaľ sú podané bolusy rovnakej veľkosti v priebehu 2 minút. Skontrolujte históriu pumpy a zadajte chýbajúce položky do ošetrení. Uistite sa, že nezadávate rovnakú veľkosť v rámci 1 minúty. @@ -1141,6 +1144,13 @@ Min. doba trvania obnovenia [s] Trvanie obnovenia Vypršal čas na pripojenie - reštartuj Bluetooth + Ned + Sob + Pia + Štv + Str + Uto + Pon == ∑ %1$s U U/h g/U diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 55f4c95e7a..e57eae382c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -533,10 +533,12 @@ Eversense-appen. Loop pausad Pausad (%1$d min) Superbolus (%1$d min) + Pausa loop Pausa loop i 1 timme Pausa loop i 2 timmar Pausa loop i 3 timmar Pausa loop i 10 timmar + Pausa loop i %1$d min Koppla loss pump i 15 min Koppla loss pump i 30 min Koppla loss pump i 1 timme @@ -1143,6 +1145,46 @@ Eversense-appen. Min paus mellan återanslutningsförsök [s] Återanslutningsförsök En timeout inträffade under parningsprocessen. Starta om bluetooth och försök igen + Sön + Lör + Fre + Tor + Ons + Tis + Mån + Användardefinierade automationer + Ange ett namn för uppgiften. + Specificera åtminstone en utlösare. + Specificera åtminstone en åtgärd. + Redan aktiverad + Redan avaktiverad + Redan pausad + Återuppta loop + Inte pausad + Starta temp mål + Avbryt temp mål + är mindre än + är samma eller mindre än + är samma som + är samma eller större än + är större än + är inte tillgänglig + okänd + BG-data är inte tillgängligt + BG %1$s %2$.0f %3$s + BG %1$s %2$.1f %3$s + Profil pct %1$s %2$d + IOB %1$s %2$.1f + och + eller + exklusivt eller + kl %1$s + Använd nätverkets plats + Använd GPS-plats + Används passiv plats + Platstjänster + Auto + Automation == ∑ %1$s U U/h g/U @@ -1184,6 +1226,18 @@ Eversense-appen. Fel kod. Kommandot avbrutet. Inte konfigurerad Skapade ett profilbyte + Återkommande tid + Varje + Aldrig + %1$d min + Villkor: + Åtgärd: + IOB [U]: + BG [%1$s]: + RADERA + LÄGG TILL + KOPIERA + Lägg till Versionskontroll gammal version väldigt gammal version @@ -1194,6 +1248,42 @@ Eversense-appen. Dexcoms app (modifierad) DXCM Ta emot BG-data från den modifierade Dexcom-appen. + Avisering + Avisering: %1$s + Medd: + Procent av profil + Procent [%]: + Byt till profil %1$d% i %2$d min + Byt till profil %1$d%% + finns + finns inte + Temp mål %1$s + WiFi SSID %1$s %2$s + Autosens %1$s %2$s %% + Autosens % + %3$s %1$s %2$s + Skillnad + Nuvarande plats + Plats + Lat: + Lon: + Dist [m]: + Namn: + Platsen är %1$s + Senaste bolus + Senaste bolus %1$s %2$s min sedan + COB + COB %1$s %2$.0f + Åtgärdsnamn + Händelsenamn + ÄNDRA + Vänligen välj åtgärdstyp: + Vänligen välj typ av utlösare: + Om: + Gör: + Utlösare: + TA BORT + Förutsättningar: Operation stöds inte av pumpen/pumpdrivrutinen. Operationen stöds inte av pumpen ännu. @@ -1285,13 +1375,39 @@ Eversense-appen. Pumpfrekvens ej vald. Pumpfrekvens stöds inte. Riley Link adress felaktig. + Pumptypen verkar inte vara samma som den inställda. Basalprofiler inte aktiverat på pumpen. Fel basalprofiltyp inställt på pumpen (måste vara STD). Fel typ av temp basal på pumpen (måste vara satt till Absolut). + Fel max bolus i pumpen (måste vara %1$.2f). + Fel max basal i pumpen (måste vara %1$.2f). Operationen inte möjlig. \n\n Du måste konfigurera Medtronicpump innan du kan använda denna funktion. + Mer än 24 timmars tidsändring efterfrågades. + Basaldoser + Konfigurationer + Notiser + Statistik + Okända + Alla + Pumphistorik + Aldrig ansluten + Väcker + Kommunikationsfel + Kommunikationstimeout + Problem att ansluta till pumpen + Pumpen kan inte nås + Felaktig konfigureration + Aktiv + Sover + Du avbröt bolusen efter att kommandot skickats till pumpen. Detta stöds inte av Medtronicpumpar, så därför måste du avbryta på själva pumpen. Det kan man göra genom att pausa insulintillförseln tillfälligt och sedan starta den igen. Appen kommer att uppdatera bolusmängd vid nästa anslutning (inom 5 min). + Kunde inte hämta nuvarande temp basal. + Kunde inte avbryta nuvarande temp basal. Avbryter kommandot. + Misslyckades med att sätta basalprofilen. Följande timmar har för högt värde angivet: %1$s + Bolus misslyckades. + Temp basal kunde inte anges. Kunde inte avbryta temp basal. Kunde inte byta basalprofil. Basalprofilen är samma som nuvarande. Ingen ändring gjord. @@ -1308,6 +1424,9 @@ Eversense-appen. Leverera bolus Ingen anslutning på %1$d tim %2$d min Ingen anslutning på %1$d d %2$d tim + %2$.1fg %3$.2fU]]> + Bolusbegränsning: %2$.2fU till %3$.2fU]]> + Varning! Långsam KH-absorption upptäckt %2$d%% av tiden. Dubbelkolla din beräkning. COB kan vara väldigt missvisande!]]> %1$d dag %1$d dagar diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d2e8ca176a..eb235eaa27 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1427,6 +1427,9 @@ last_time_this_version_detected last_versionchecker_waring last_versionchecker_plugin_waring + last_revoked_certs_check + Signature verifier + We have detected that you are running an invalid version. Loop disabled! old version very old version diff --git a/demo_keystore.jks b/demo_keystore.jks new file mode 100644 index 0000000000..38c3bcabaa Binary files /dev/null and b/demo_keystore.jks differ diff --git a/revoking_leaked_apks.md b/revoking_leaked_apks.md new file mode 100644 index 0000000000..457b1ba0ef --- /dev/null +++ b/revoking_leaked_apks.md @@ -0,0 +1,22 @@ +## Revoking leaked APKs +In order to revoke a leaked APK, you need to retrieve the certificate first. This can be done by extracting the file ``META-INF\CERT.RSA`` from the APK. Open a terminal and run ``keytool -printcert -file CERT.RSA`` to get the SHA-256 fingerprint. The ``keytool`` utility is part of every JDK installation. +``` +> keytool -printcert -file CERT.RSA +Owner: O=AndroidAPS +Issuer: O=AndroidAPS +Serial number: 30546c5b +Valid from: Wed May 01 16:37:40 CEST 2019 until: Sun Apr 24 16:37:40 CEST 2044 +Certificate fingerprints: + SHA1: C4:EF:80:AD:CD:07:6F:28:B6:2E:8C:AE:C5:54:19:39:2E:E5:15:0D + SHA256: 51:6D:12:67:4C:27:F4:9B:9F:E5:42:9B:01:B3:98:E4:66:2B:85:B7:A8:DD:70:32:B7:6A:D7:97:9A:0D:97:10 +Signature algorithm name: SHA256withRSA +Subject Public Key Algorithm: 2048-bit RSA key +Version: 3 +``` +Now revoke the certificate by attaching the SHA-256 checksum to ``app/src/main/assets/revoked_certs.txt`` and prepending a comment (starting with ``#``). Finally, push the changes to ``master`` branch to populate them. +``` +#Demo certificate +51:6D:12:67:4C:27:F4:9B:9F:E5:42:9B:01:B3:98:E4:66:2B:85:B7:A8:DD:70:32:B7:6A:D7:97:9A:0D:97:10 +```` +### Demo keystore +You can verify this works by signing an APK with the demo keystore. The password for both the keystore and the key is ``androidaps``. \ No newline at end of file diff --git a/wear/build.gradle b/wear/build.gradle index c26800859a..3aa0b97506 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -7,7 +7,7 @@ ext { def generateGitBuild = { -> - StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = new StringBuilder() stringBuilder.append('"') try { def stdout = new ByteArrayOutputStream()