This commit is contained in:
Milos Kozak 2023-10-21 20:26:06 +02:00
commit ef5c8e3304
115 changed files with 453 additions and 1196 deletions

View file

@ -17,22 +17,23 @@ jobs:
tag: 2023.07.1
steps:
# Checkout the code as the first step.
- checkout
- android/change-java-version:
java-version: 17
# The next step will run the unit tests
- android/start-emulator-and-run-tests:
system-image: system-images;android-29;google_apis;x86
# Compile while the emulator starts to use the time.
post-emulator-launch-assemble-command: ./gradlew compileFullDebugUnitTestSources database:impl:compileFullDebugAndroidTestSources
test-command: ./gradlew database:impl:connectedFullDebugAndroidTest
- android/run-tests:
test-command: ./gradlew testFullDebugUnitTest
- android/run-tests:
test-command: ./gradlew --stacktrace jacocoAllDebugReport
# Then start the emulator and run the Instrumentation tests!
# - android/start-emulator-and-run-tests:
# test-command: ./gradlew connectedDebugAndroidTest
# system-image: system-images;android-25;google_apis;x86
# And finally run the release build
# - run:
# name: Assemble release build

View file

@ -50,7 +50,7 @@ buildscript {
wearable_version = '2.9.0'
play_services_wearable_version = '18.1.0'
play_services_location_version = '21.0.1'
play_services_measurement_version = '21.3.0'
play_services_measurement_version = '21.4.0'
kotlinx_datetime_version = '0.4.1'
kotlinx_serialization_version = '1.6.0'

View file

@ -170,7 +170,8 @@ enum class CwfMetadataKey(val key: String, @StringRes val label: Int, val isPref
CWF_PREF_WATCH_SHOW_AGO("key_show_ago", R.string.pref_show_ago, true),
CWF_PREF_WATCH_SHOW_BG("key_show_bg", R.string.pref_show_bg, true),
CWF_PREF_WATCH_SHOW_LOOP_STATUS("key_show_loop_status", R.string.pref_show_loop_status, true),
CWF_PREF_WATCH_SHOW_WEEK_NUMBER("key_show_week_number", R.string.pref_show_week_number, true);
CWF_PREF_WATCH_SHOW_WEEK_NUMBER("key_show_week_number", R.string.pref_show_week_number, true),
CWF_PREF_WATCH_SHOW_DATE("key_show_date", R.string.pref_show_date, true);
companion object {
@ -260,6 +261,7 @@ enum class JsonKeys(val key: String) {
INVALIDIMAGE("invalidImage"),
INVALIDCOLOR("invalidColor"),
INVALIDFONTCOLOR("invalidFontColor"),
INVALIDTEXTSIZE("invalidTextSize"),
TWINVIEW("twinView"),
TOPOFFSETTWINHIDDEN("topOffsetTwinHidden"),
LEFTOFFSETTWINHIDDEN("leftOffsetTwinHidden"),

View file

@ -58,6 +58,7 @@
<string name="pref_show_direction_arrow">Zobrazit trendovou šipku</string>
<string name="pref_show_ago">Zobrazit aktualizováno před</string>
<string name="pref_show_week_number">Zobrazit číslo týdne</string>
<string name="pref_show_date">Zobrazit datum</string>
<string name="default_custom_watchface_comment">Výchozí ciferník. Můžete kliknout na tlačítko EXPORTOVAT CIFERNÍK pro vygenerování šablony</string>
<string name="wear_default_watchface">Výchozí ciferník</string>
<string name="cwf_comment_background">Tapeta</string>

View file

@ -58,6 +58,7 @@
<string name="pref_show_direction_arrow">Mostrar flecha de dirección</string>
<string name="pref_show_ago">Mostrar \"hace\"</string>
<string name="pref_show_week_number">Mostrar número de semana</string>
<string name="pref_show_date">Mostrar fecha</string>
<string name="default_custom_watchface_comment">Esfera predeterminada, puedes hacer clic en el botón EXPORTAR ESFERA para generar una plantilla</string>
<string name="wear_default_watchface">Esfera por defecto</string>
<string name="cwf_comment_background">Imagen de fondo</string>

View file

@ -57,6 +57,7 @@
<string name="pref_show_direction_arrow">הצג חץ מגמה</string>
<string name="pref_show_ago">הצג עבר</string>
<string name="pref_show_week_number">הצג מספר שבוע</string>
<string name="pref_show_date">הצג תאריך</string>
<string name="default_custom_watchface_comment">ברירת המחדל של פני השעון, ניתן ללחוץ על כפתור ייצוא פני שעון כדי ליצור תבנית</string>
<string name="wear_default_watchface">ברירת מחדל פני שעון</string>
<string name="cwf_comment_background">תמונת רקע</string>

View file

@ -58,6 +58,7 @@
<string name="pref_show_direction_arrow">Vis retningspil</string>
<string name="pref_show_ago">Vis tid siden</string>
<string name="pref_show_week_number">Vis ukenummer</string>
<string name="pref_show_date">Vis dato</string>
<string name="default_custom_watchface_comment">Standard klokkebakgrunn, du kan klikke på EKSPORTER KLOKKEBAKGRUNN for å lage en mal</string>
<string name="wear_default_watchface">Standard klokkebakgrunn</string>
<string name="cwf_comment_background">Bakgrunnsbilde</string>

View file

@ -58,6 +58,7 @@
<string name="pref_show_direction_arrow">Toon richtingspijl</string>
<string name="pref_show_ago">Toon tijd geleden</string>
<string name="pref_show_week_number">Weeknummer weergeven</string>
<string name="pref_show_date">Toon datum</string>
<string name="default_custom_watchface_comment">Standaard watchface, u kunt op de EXPORT WATCHFACE knop klikken om een sjabloon te genereren</string>
<string name="wear_default_watchface">Standaard watchface</string>
<string name="cwf_comment_background">Achtergrondafbeelding</string>

View file

@ -58,6 +58,7 @@
<string name="pref_show_direction_arrow">Pokaż Strzałkę Trendu</string>
<string name="pref_show_ago">Pokaż Aktualność</string>
<string name="pref_show_week_number">Pokaż numer tygodnia</string>
<string name="pref_show_date">Pokaż Datę</string>
<string name="default_custom_watchface_comment">Domyślna tarcza, możesz kliknąć na EXPORTUJ TARCZĘ aby wygenerować szablon</string>
<string name="wear_default_watchface">Domyślna Tarcza</string>
<string name="cwf_comment_background">Obraz w tle</string>

View file

@ -58,6 +58,7 @@
<string name="pref_show_direction_arrow">Arată săgeată tendință</string>
<string name="pref_show_ago">Afişare în urmă</string>
<string name="pref_show_week_number">Arată numărul săptămânii</string>
<string name="pref_show_date">Arată data</string>
<string name="default_custom_watchface_comment">Fațetă implicită. Poți apăsa pe butonul EXPORT pentru a genera un șablon</string>
<string name="wear_default_watchface">Fațetă implicită</string>
<string name="cwf_comment_background">Imagine de fundal</string>

View file

@ -66,6 +66,7 @@
<string name="pref_show_direction_arrow">Show Direction Arrow</string>
<string name="pref_show_ago">Show Ago</string>
<string name="pref_show_week_number">Show Week number</string>
<string name="pref_show_date">Show Date</string>
<string name="default_custom_watchface_comment">Default watchface, you can click on EXPORT WATCHFACE button to generate a template</string>
<string name="wear_default_watchface">Default Watchface</string>
<string name="cwf_comment_background">Background image</string>

View file

@ -17,7 +17,7 @@
<string name="bolus_delivered_successfully">Bolo %1$.2fU entregado correctamente</string>
<string name="no_valid_basal_rate">Tasa basal no válida leída en la bomba</string>
<string name="limiting_iob">Limitando IOB a %1$.1f U debido a %2$s</string>
<string name="loop_disabled">BUCLE DESACTIVADO POR RESTRICCIONES</string>
<string name="loop_disabled">LAZO DESACTIVADO POR RESTRICCIONES</string>
<string name="event_type">Tipo de evento</string>
<string name="reload">Recargar</string>
<string name="mgdl">mg/dl</string>
@ -88,9 +88,9 @@
<string name="removerecord">Eliminar registro</string>
<string name="loopisdisabled">Bucle desactivado</string>
<string name="alarm">Alarma</string>
<string name="disableloop">Desactivar bucle</string>
<string name="enableloop">Activar bucle</string>
<string name="resumeloop">Reanudar el bucle</string>
<string name="disableloop">Desactivar lazo</string>
<string name="enableloop">Activar lazo</string>
<string name="resumeloop">Reanudar el lazo</string>
<string name="suspendloop">Suspender lazo</string>
<string name="duration_min_label">Duración [min]</string>
<string name="notification">Notificación</string>
@ -118,7 +118,7 @@
<string name="shortgramm">g</string>
<string name="pumpsuspended">Bomba parada</string>
<string name="notconfigured">Sin configurar</string>
<string name="loopsuspended">Bucle suspendido</string>
<string name="loopsuspended">Lazo suspendido</string>
<string name="trend_arrow">Flecha de tendencia</string>
<string name="a11y_autosens_label">Auto sens</string>
<string name="required">req</string>
@ -156,8 +156,8 @@
<string name="prime_fill">Cebar/Llenar</string>
<string name="overview_insulin_label">Insulina</string>
<string name="stoptemptarget">Detener objetivo temporal</string>
<string name="closedloop">Bucle cerrado</string>
<string name="openloop">Bucle abierto</string>
<string name="closedloop">Lazo cerrado</string>
<string name="openloop">Lazo abierto</string>
<string name="lowglucosesuspend">Suspensión por glucosa baja (LGS)</string>
<string name="dia">DIA</string>
<string name="ic_short">IC</string>
@ -165,7 +165,7 @@
<string name="canceling_tbr_failed">Error cancelando la basal temporal</string>
<string name="canceling_eb_failed">Error cancelando el bolo extendido</string>
<string name="virtualpump_uploadstatus_title">Subir estado de la bomba a NS o Tidepool</string>
<string name="suspendloop_label">Desactiva/suspende el bucle</string>
<string name="suspendloop_label">Desactiva/suspende el lazo</string>
<string name="iob_label">Insulina a bordo (IOB)</string>
<!-- Protection-->
<string name="wrongpassword">Contraseña incorrecta</string>
@ -234,7 +234,7 @@
<string name="wear">Reloj</string>
<string name="automation">Automatización</string>
<string name="custom">Personalizado</string>
<string name="loop">Bucle</string>
<string name="loop">Lazo</string>
<string name="ns">NS</string>
<string name="record">Registro</string>
<!-- Command-->
@ -278,11 +278,11 @@
<string name="uel_store_profile">GUARDAR PERFIL</string>
<string name="uel_profile_switch">CAMBIO DE PERFIL</string>
<string name="uel_profile_switch_cloned">CAMBIO DE PERFIL CLONADO</string>
<string name="uel_closed_loop_mode">MODO BUCLE CERRADO</string>
<string name="uel_lgs_loop_mode">MODO BUCLE LGS</string>
<string name="uel_open_loop_mode">MODO BUCLE ABIERTO</string>
<string name="uel_loop_disabled">BUCLE DESACTIVADO</string>
<string name="uel_loop_enabled">BUCLE ACTIVADO</string>
<string name="uel_closed_loop_mode">MODO LAZO CERRADO</string>
<string name="uel_lgs_loop_mode">MODO LAZO LGS</string>
<string name="uel_open_loop_mode">MODO LAZO ABIERTO</string>
<string name="uel_loop_disabled">LAZO DESACTIVADO</string>
<string name="uel_loop_enabled">LAZO ACTIVADO</string>
<string name="uel_reconnect">RECONECTAR</string>
<string name="uel_disconnect">DESCONECTAR</string>
<string name="uel_resume">REANUDAR</string>
@ -353,8 +353,8 @@
<string name="ue_action">Acción</string>
<string name="ue_timestamp">Fecha y hora</string>
<string name="ue_none">Sin Unidad</string>
<string name="uel_loop_change">BUCLE CAMBIADO</string>
<string name="uel_loop_removed">BUCLE ELIMINADO</string>
<string name="uel_loop_change">LAZO CAMBIADO</string>
<string name="uel_loop_removed">LAZO ELIMINADO</string>
<string name="uel_other">OTROS</string>
<!-- HardLimits -->
<string name="profile_low_target">Perfil de objetivo bajo</string>

View file

@ -496,8 +496,8 @@
<string name="reservoir_label">Reservoar</string>
<string name="last_connection_label">Siste tilkobling</string>
<string name="last_bolus_label">Siste bolus</string>
<string name="base_basal_rate_label">Profilens basaldose</string>
<string name="tempbasal_label">Midl. basal</string>
<string name="base_basal_rate_label">Profilens basal</string>
<string name="tempbasal_label">Midlertidig basal</string>
<string name="extended_bolus_label">Forlenget bolus</string>
<string name="serial_number">Serienummer</string>
<string name="disconnected">Frakoblet</string>

View file

@ -51,6 +51,7 @@
<string name="extended_bolus">Extended bolus</string>
<string name="paused">Paused</string>
<string name="tdd_total">TDD Total</string>
<string name="tdd_old_data">Old data</string>
<string name="goingtodeliver">Going to deliver %1$.2f U</string>
<string name="waitingforpump">Waiting for pump</string>
<string name="androidaps_start">AAPS started</string>
@ -168,6 +169,8 @@
<string name="virtualpump_uploadstatus_title">Upload pump status to NS or Tidepool</string>
<string name="suspendloop_label">Disabled/Suspended loop</string>
<string name="iob_label">Insulin on Board (IOB)</string>
<string name="loopstatus_targets">TARGETS:</string>
<string name="loopstatus_OAPS_result">OAPS RESULT:</string>
<!-- Protection-->
<string name="wrongpassword">Wrong password</string>
@ -492,6 +495,8 @@
<string name="bolus_recorded_only">Bolus will be recorded only (not delivered by pump)</string>
<string name="advisoralarm">Run alarm when is time to eat</string>
<string name="no_action_selected">No action selected, nothing will happen</string>
<string name="carb_equal_zero_no_action">Carbs = 0. No action taken!</string>
<string name="wizard_no_insulin_required">No insulin required!</string>
<string name="wizard_no_actual_bg">No recent BG to base calculation on!</string>
<string name="wizard_no_active_profile">No active profile set!</string>
<string name="wizard_no_cob">Unknown COB! BG reading missing or recent app restart?</string>

View file

@ -24,7 +24,7 @@ dependencies {
api "net.danlew:android.joda:$joda_version"
//Firebase
api platform('com.google.firebase:firebase-bom:32.3.1')
api platform('com.google.firebase:firebase-bom:32.4.0')
api "com.google.firebase:firebase-analytics-ktx"
api "com.google.firebase:firebase-crashlytics-ktx"
// StatsActivity not in use now

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="enable_tbr_over_notification">Aktiver varsel når slutt på temp basal\n(pumpeinnstilling)</string>
<string name="disable_tbr_over_notification">Slå av varsel når slutt på temp basal\n(pumpeinnstilling)</string>
<string name="enable_tbr_over_notification">Aktiver varsel når slutt på midlertidig basal\n(pumpeinnstilling)</string>
<string name="disable_tbr_over_notification">Slå av varsel når slutt på midlertidig basal\n(pumpeinnstilling)</string>
<string name="not_paired">Ikke sammenkoblet</string>
<string name="recovering">Gjenoppretter</string>
<string name="insight_status">Status</string>
@ -32,7 +32,7 @@
<string name="disable_vibration">Slå av vibrasjoner på manuell bolus</string>
<string name="disable_vibration_summary">For bolus og forlenget bolus (bare tilgjengelig med Insight firmware 3.x)</string>
<string name="disable_vibration_auto">Slå av vibrasjoner ved automatisk bolus</string>
<string name="disable_vibration_auto_summary">For SMB og temp basal med TBR emulering (bare tilgjengelig med Insight firmware 3.x)</string>
<string name="disable_vibration_auto_summary">For SMB og midlertidig basal med TBR emulering (bare tilgjengelig med Insight firmware 3.x)</string>
<string name="timeout_during_handshake">En timeout oppstod i paringsprosessen - restart Bluetooth</string>
<string name="pump_stopped">Pumpen stoppet</string>
<string name="pump_started">Pumpen startet</string>
@ -60,7 +60,7 @@
<string name="log_operating_mode_changes">Logg endring i driftsmodus</string>
<string name="log_alerts">Logg varslinger</string>
<string name="enable_tbr_emulation">Aktiver emulering av TBR</string>
<string name="enable_tbr_emulation_summary">Bruk forlenget bolus i stedet for temp basaler for å omgå 250%% grensen</string>
<string name="enable_tbr_emulation_summary">Bruk forlenget bolus i stedet for midlertidig basaler for å omgå 250%% grensen</string>
<string name="disconnect_delay">Utsett frakobling [s]</string>
<string name="max_recovery_duration">Maks pause mellom tilkoblingsforsøk [s]</string>
<string name="min_recovery_duration">Min pause mellom tilkoblingsforsøk [s]</string>

View file

@ -94,8 +94,8 @@
<string name="run_now">Ejecutar ahora</string>
<string name="smb_frequency_exceeded">Un bolo ha sido entregado en los últimos 3 minutos, omitiendo SMB</string>
<string name="pump_not_initialized">¡Bomba no iniciada!</string>
<string name="loop_shortname">BUCLE</string>
<string name="description_loop">Activar o desactivar la posibilidad para activar el bucle.</string>
<string name="loop_shortname">LAZO</string>
<string name="description_loop">Activar o desactivar la posibilidad para activar el lazo.</string>
<string name="no_aps_selected">NO APS Seleccionado o resultado entregado</string>
<string name="ignore5m">Ignorar 5m</string>
<string name="ignore15m">Ignorar 15m</string>
@ -114,6 +114,6 @@
<string name="loop_smb_execution_time_label">Tiempo de ejecución de SMB</string>
<string name="loop_smb_set_by_pump_label">SMB administrado por la bomba</string>
<string name="loop_open_mode_min_change">Valor mínimo de cambio [%]</string>
<string name="loop_open_mode_min_change_summary" formatted="false">Valor predeterminado 20%. El bucle abierto realizará una petición de cambio, sólo cuando se supere este valor</string>
<string name="loop_open_mode_min_change_summary" formatted="false">Valor predeterminado 20%. El lazo abierto realizará una petición de cambio, sólo cuando se supere este valor</string>
<string name="fallback_smb_no_tdd">Regreso a SMB. No hay suficientes datos de TDD.</string>
</resources>

View file

@ -13,7 +13,7 @@
<string name="alreadydisabled">Ya está deshabilitado</string>
<string name="alreadysuspended">Ya está suspendido</string>
<string name="notsuspended">No suspendido</string>
<string name="suspendloopforXmin">Suspender bucle durante %1$d min</string>
<string name="suspendloopforXmin">Suspender lazo durante %1$d min</string>
<string name="notification_message">Notificación: %1$s</string>
<string name="profilename">Cambiar perfil a</string>
<string name="changengetoprofilename">Cambiar perfil a %1$s</string>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -68,8 +68,8 @@
<string name="configbuilder_sync">Sincronización</string>
<string name="configbuilder_sync_description">Subida de datos y sincronización de plugins</string>
<string name="configbuilder_constraints_description">¿Qué restricciones se aplican?</string>
<string name="configbuilder_loop">Bucle</string>
<string name="configbuilder_loop_description">Usa esto para habilitar la integración de bucle de AAPS.</string>
<string name="configbuilder_loop">Lazo</string>
<string name="configbuilder_loop_description">Usa esto para habilitar la integración de lazo de AAPS</string>
<string name="configbuilder_insulin_description">¿Qué tipo de insulina estás utilizando?</string>
<string name="configbuilder_bgsource">Origen de Glucosa</string>
<string name="configbuilder_bgsource_description">¿Desde dónde debería obtener AAPS los datos?</string>

View file

@ -3,15 +3,15 @@
<!-- PhoneChecker -->
<!-- DST Helper -->
<string name="dst_in_24h_warning">Cambio al horario de verano en menos de 24 horas</string>
<string name="dst_loop_disabled_warning">Cambio al horario de verano hace menos de 3 horas - Bucle cerrado deshabilitado</string>
<string name="dst_loop_disabled_warning">Cambio al horario de verano hace menos de 3 horas - Lazo cerrado deshabilitado</string>
<!-- Storage constraint -->
<string name="disk_full">Debe liberar al menos %1$d MB de almacenamiento interno. ¡El bucle se encuentra desactivado!</string>
<string name="disk_full">Debe liberar al menos %1$d MB de almacenamiento interno. ¡El lazo se encuentra desactivado!</string>
<!-- Version Checker -->
<string name="old_version">versión antigua</string>
<string name="very_old_version">versión muy antigua</string>
<string name="application_expired">Aplicación caducada</string>
<string name="new_version_warning">¡La nueva versión no se ha comprobado desde hace al menos %1$d días! Volverás a LGS después de %2$d días, el lazo se deshabilitará después de %3$d días. ¡Restaura la conexión a Internet!</string>
<string name="running_invalid_version">Hemos detectado que está ejecutando una versión no válida. ¡Bucle desactivado!</string>
<string name="running_invalid_version">Hemos detectado que está ejecutando una versión no válida. ¡Lazo desactivado!</string>
<string name="versionavailable">Versión %1$s disponible</string>
<string name="version_expire">La versión %1$s caduca el %2$s</string>
<!-- Signature verifier -->
@ -25,11 +25,11 @@
<string name="limitingextendedbolus">Limitando el bolo extendido a %1$.1f U debido a %2$s</string>
<string name="limitingcarbs">Limitando carbohidratos a %1$d g debido a %2$s</string>
<string name="pumpisnottempbasalcapable">La bomba no tiene capacidad de basal temporal</string>
<string name="closedmodedisabledinpreferences">Bucle cerrado deshabilitado en preferencias</string>
<string name="closed_loop_disabled_on_dev_branch">Ejecutando la versión dev. Bucle cerrado no disponible.</string>
<string name="closed_loop_disabled_with_eb">Bucle cerrado deshabilitado debido a la ejecución de un bolo extendido</string>
<string name="closedmodedisabledinpreferences">Lazo cerrado deshabilitado en preferencias</string>
<string name="closed_loop_disabled_on_dev_branch">Ejecutando la versión dev. Lazo cerrado no disponible.</string>
<string name="closed_loop_disabled_with_eb">Lazo cerrado deshabilitado debido a la ejecución de un bolo extendido</string>
<string name="smbalwaysdisabled">SMB siempre y después de carbohidratos desactivados porque la fuente activa de BG no soporta filtrado avanzado</string>
<string name="smbnotallowedinopenloopmode">SMB no permitido en modo de Bucle abierto</string>
<string name="smbnotallowedinopenloopmode">SMB no permitido en modo de lazo abierto</string>
<string name="maxvalueinpreferences">valor máximo en preferencias</string>
<string name="hardlimit">límite estricto</string>
<string name="treatmentssafety_title">Seguridad de tratamientos</string>
@ -40,9 +40,9 @@
<string name="maxiobset">Máximo IOB ajustado correctamente</string>
<string name="hasbgdata">Glucosa disponible desde la fuente seleccionada</string>
<string name="synchaswritepermission">El servicio de sincronización tiene permiso de escritura</string>
<string name="loopenabled">Bucle activado</string>
<string name="loopenabled">Lazo activado</string>
<string name="apsselected">APS seleccionado</string>
<string name="closedmodeenabled">Bucle cerrado activado</string>
<string name="closedmodeenabled">Lazo cerrado activado</string>
<string name="objectives_shortname">OBJ</string>
<string name="description_objectives">Programa de aprendizaje</string>
<string name="doyouwantresetstart">¿Desea reiniciar el objetivo? Puedes perder tu progreso.</string>

View file

@ -7,8 +7,8 @@
<string name="dia_hint1">https://wiki.aaps.app/en/latest/Configuration/Config-Builder.html#insulin</string>
<string name="dia_meaningisequaltodiapump">Hvis du føler at DIA verdien (insulinvarigheten) som du benyttet i pumpen fungerte godt før du tok i bruk AndroidAPS, da er det ikke nødvendig å endre dette når du starter å loope.</string>
<string name="dia_valuemustbedetermined">Du må selv bestemme hvilken verdi som passer for DIA.</string>
<string name="hypott_label">Hypo Temp-Target (TT)</string>
<string name="hypott_whenhypott">Hva er hovedgrunnen til å velge en hypo temp-target?</string>
<string name="hypott_label">Hypo midlertidig mål (TT)</string>
<string name="hypott_whenhypott">Hva er hovedgrunnen til å velge et Hypo midlertidig mål?</string>
<string name="hypott_wrongbasal">For å korrigere følinger som er forårsaket av feil i dine basalinnstillinger.</string>
<string name="hypott_preventoversmb">For å forhindre at AAPS overkorrigerer for en blodglukoseøkning forårsaket av de hurtigvirkende karbohydratene som brukes til behandling av en hypo.</string>
<string name="hypott_exercise">For å korrigere for en føling som er et resultat av trening.</string>
@ -55,11 +55,11 @@
<string name="exercise_label">Trening og midlertidige målverdier (temp targets)</string>
<string name="exercise_whattodo">Hvordan kan du bruke midlertidige målverdier til å hjelpe systemet å håndtere aerobic trening?</string>
<string name="exercise_settt">Sett et midlertidig mål for blodsukkeret som starter en passende tid før treningen begynner.</string>
<string name="exercise_setfinished">Angi en temp mål for Trening etter at du har avsluttet treningen.</string>
<string name="exercise_setfinished">Angi et midlertidig mål for Aktivitet etter at du har avsluttet treningen.</string>
<string name="exercise_setunchanged">La målverdien for ditt blodsukker være uforandret.</string>
<string name="exercise_15g">Vent til blodsukkeret ditt synker under Hypo temp target og spis så 15 gram med hurtigvirkende karbohydrater.</string>
<string name="exercise_15g">Vent til blodsukkeret ditt synker under Hypo midlertidig mål og spis så 15 gram med hurtigvirkende karbohydrater.</string>
<string name="exercise_hint1">https://wiki.aaps.app/en/latest/Usage/temptarget.html#activity-temp-target</string>
<string name="suspendloop_doigetinsulin">Får jag insulin når loop er stanset/pauset?</string>
<string name="suspendloop_doigetinsulin">Får jeg insulin når loop er stanset/pauset?</string>
<string name="suspendloop_yes">Ja, basal insulin vil fortsatt bli levert.</string>
<string name="suspendloop_no">Nei, levering av insulin er stanset.</string>
<string name="basaltest_label">Test av basaldoser, ISF og KH ratio</string>
@ -150,7 +150,7 @@
<string name="cob3_no_effect">Ved å sette profilen til 150% påvirkes ikke beregningen av absorbering av karbohydrater</string>
<string name="cob_hint1">https://wiki.aaps.app/en/latest/Usage/COB-calculation.html#how-does-aaps-calculate-the-cob-value</string>
<string name="iob_value">IOB verdi påvirkes av midlertidige temp basaler.</string>
<string name="iob_hightemp">Høy temp basal vil ikke bli gitt når ditt blodsukker er under målverdi.</string>
<string name="iob_hightemp">Høy midlertidig basal vil ikke bli gitt når ditt blodsukker er under målverdi.</string>
<string name="iob_negiob">Negativ IOB i en lengre periode selv om du ikke trener tyder på at profilen din gir for mye insulin og kanskje bør reduseres i innstillingene.</string>
<string name="iob_posiob">Positiv IOB for en lengre periode tyder på enten økt insulinresistens eller uannonserte måltider.</string>
<string name="breadgrams_label">Karbohydrater og bolus</string>
@ -207,7 +207,7 @@
<string name="profileswitchtime_iwant">Hvis du står opp 2 timer tidligere enn vanlig, hvordan forteller du AndroidAPS om endringen i døgnrytmen din?</string>
<string name="profileswitchtime_2">Gjør et profilbytte med en tidsforskyvning på 2</string>
<string name="profileswitchtime__2">Gjør et profilbytte med en tidsforskyvning på -2</string>
<string name="profileswitchtime_tt">Angi et \"spise snart\" temp target.</string>
<string name="profileswitchtime_tt">Angi et \"Spise snart\" midlertidig mål.</string>
<string name="profileswitchtime_100">Gjør et profilbytte til mer enn 100%.</string>
<string name="profileswitchtime_hint1">https://wiki.aaps.app/en/latest/Usage/Profiles.html#timeshift</string>
<string name="profileswitch4_label">Endring av profil</string>

View file

@ -54,12 +54,12 @@
<string name="objectives_exam_learned_dia">Insulinvarighet (DIA) i looping har en annen betydning (tid før alt insulin er absorbert) enn ved klassisk pumpebehandling (tid før det meste av insulinet er absorbert).</string>
<string name="objectives_exam_learned_isf">Du lærte betydningen av ISF-verdien og hvordan det påvirker mengden insulin som brukes for korreksjon av BS.</string>
<string name="objectives_exam_learned_ic">Du lærte betydningen av IK-verdien og hvordan det påvirker mengden insulin som brukes for dekke karbohydratene.</string>
<string name="objectives_exam_learned_hypott">Hypo temp target bør brukes for å forhindre enn overkorreksjon etter en hypo situasjon, når det vanligvis er bygget opp negativ IOB. Ytterligere tiltak bør vurderes for å forebygge denne situasjonen igjen i fremtiden.</string>
<string name="objectives_exam_learned_hypott">Hypo midlertidig mål bør brukes for å forhindre enn overkorreksjon etter en hypo situasjon, når det vanligvis er bygget opp negativ IOB. Ytterligere tiltak bør vurderes for å forebygge denne situasjonen igjen i fremtiden.</string>
<string name="objectives_exam_learned_profileswitch">Bruk av prosent påvirker ikke målverdier for BS men basal, ISF og IK justeres for å gi mer insulin (over 100%%) eller mindre insulin (under 100%%).</string>
<string name="objectives_exam_learned_profileswitchtime">Ved å bruke tidsskifte i profilbytte kan du tilpasse døgnprofilen til uregelmessigheter som for eksempel en sen oppvåkning.</string>
<string name="objectives_exam_learned_profileswitch4">Redigering av profilen er ikke tilstrekkelig til å gjøre en endring. Du må fremdeles fysisk aktivere et profil bytte for å registrere endringene.</string>
<string name="objectives_exam_learned_exercise">Du bør redusere mengden insulin i kroppen minst 1 time før du starter treningen ved å velge profil under 100 %.</string>
<string name="objectives_exam_learned_exercise2">Ved å sette høyere temp target minst 1 time før trening så vil det bidra til å redusere mengden med insulin i kroppen.</string>
<string name="objectives_exam_learned_exercise2">Ved å sette høyere midlertidig mål minst 1 time før trening så vil det bidra til å redusere mengden med insulin i kroppen.</string>
<string name="objectives_exam_learned_noisycgm">Hvis du ikke stoler på CGM-verdier bør du ikke bruke loop uten tilsyn.</string>
<string name="objectives_exam_learned_pumpdisconnect">AAPS må vite at pumpen ikke er tilkoblet for å beregne IOB riktig.</string>
<string name="objectives_exam_learned_insulin">Å vite hvilken type insulin som er i pumpen er nødvendig for å beregne IOB korrekt.</string>

View file

@ -48,6 +48,6 @@
<string name="doyouwantresetstart">Deseja reiniciar o objetivo? Pode perder seu progresso.</string>
<string name="objectives_next_button">Próxima</string>
<string name="objectives_previous_button">Anterior</string>
<string name="objectives_button_unfinish">Redefinir estado terminado</string>
<string name="objectives_button_unstart">Redefinir estado terminado</string>
<string name="objectives_button_unfinish">Reiniciar objetivo</string>
<string name="objectives_button_unstart">Reiniciar objetivo</string>
</resources>

View file

@ -28,11 +28,9 @@
android:id="@+id/loop_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:orientation="horizontal" >
<com.google.android.material.button.MaterialButton
<TextView
android:id="@+id/active_profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -40,23 +38,29 @@
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:hint="active profile"
android:text="Profile"
android:textAppearance="?android:attr/textAppearanceSmall"
app:icon="@drawable/ic_ribbon_profile"
android:foreground="?attr/selectableItemBackgroundBorderless"
app:drawableStartCompat="@drawable/ic_ribbon_profile"
tools:ignore="HardcodedText" />
<com.google.android.material.button.MaterialButton
<TextView
android:id="@+id/temp_target"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:hint="temp target"
android:text="@string/value_unavailable_short"
android:textAppearance="?android:attr/textAppearanceSmall"
app:icon="@drawable/ic_crosstarget"
android:foreground="?attr/selectableItemBackgroundBorderless"
app:drawableStartCompat="@drawable/ic_crosstarget"
tools:ignore="HardcodedText" />
</LinearLayout>
@ -68,7 +72,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:layout_marginTop="1dp"
android:layout_marginTop="4dp"
app:cardCornerRadius="4dp"
app:contentPadding="2dp"
app:cardElevation="2dp"

View file

@ -49,9 +49,9 @@
<string name="smscommunicator_tt_set">Objetivo %1$s para %2$d minutos establecido correctamente</string>
<string name="smscommunicator_tt_canceled">Objetivo temporal cancelado correctamente</string>
<string name="smscommunicator_remote_commands_allowed">Permitir comandos remotos vía SMS</string>
<string name="smscommunicator_loop_has_been_disabled">El bucle se ha desactivado</string>
<string name="smscommunicator_loop_has_been_enabled">El bucle se ha activado</string>
<string name="smscommunicator_loop_is_enabled">Bucle activo</string>
<string name="smscommunicator_loop_has_been_disabled">El lazo se ha desactivado</string>
<string name="smscommunicator_loop_has_been_enabled">El lazo se ha activado</string>
<string name="smscommunicator_loop_is_enabled">Lazo activo</string>
<string name="smscommunicator_pump_connect_with_code">Para conectar la bomba, responder con el código %1$s</string>
<string name="smscommunicator_pump_connect_fail">Error al conectar a la bomba</string>
<string name="smscommunicator_pump_disconnect_with_code">Para desconectar la bomba durante %1$dminutos, responde con el código %2$s</string>
@ -64,10 +64,10 @@
<string name="smscommunicator_extended_reply_with_code">Para iniciar un bolo extendido de %1$.2fU durante %2$d minutos, responder con el código %3$s</string>
<string name="smscommunicator_carbs_reply_with_code">Para introducir %1$dg en %2$s, responder con el código %3$s</string>
<string name="smscommunicator_basal_pct_reply_with_code">Para iniciar una basal de %1$d%% durante %2$d min, responder con el código %3$s</string>
<string name="smscommunicator_suspend_reply_with_code">Para suspender el bucle durante %1$d minutos, responde con el código %2$s</string>
<string name="smscommunicator_loop_resume_reply_with_code">Para reanudar el bucle, responde con el código %1$s</string>
<string name="smscommunicator_loop_enable_reply_with_code">Para activar el bucle, responder con el código %1$s</string>
<string name="smscommunicator_loop_disable_reply_with_code">Para desactivar el bucle, responder con el código %1$s</string>
<string name="smscommunicator_suspend_reply_with_code">Para suspender el lazo durante %1$d minutos, responde con el código %2$s</string>
<string name="smscommunicator_loop_resume_reply_with_code">Para reanudar el lazo, responde con el código %1$s</string>
<string name="smscommunicator_loop_enable_reply_with_code">Para activar el lazo, responder con el código %1$s</string>
<string name="smscommunicator_loop_disable_reply_with_code">Para desactivar el lazo, responder con el código %1$s</string>
<string name="smscommunicator_tempbasal_set">Basal temporal %1$.2fU/h durante %2$d minutos iniciada correctamente</string>
<string name="smscommunicator_extended_set">Bolo extendido de %1$.2fU durante %2$d minutos se inició correctamente</string>
<string name="smscommunicator_carbs_set">Carbohidratos %1$d g ingresados correctamente</string>
@ -84,17 +84,17 @@
<string name="smscommunicator_unknown_command">Comando desconocido o respuesta incorrecta</string>
<string name="smscommunicator_another_bolus_in_queue">Hay otro bolo en cola. Inténtalo de nuevo más tarde.</string>
<string name="smscommunicator_wrong_duration">Duración incorrecta</string>
<string name="smscommunicator_loop_suspended">Bucle suspendido</string>
<string name="smscommunicator_loop_resumed">Bucle reanudado</string>
<string name="smscommunicator_loop_suspended">Lazo suspendido</string>
<string name="smscommunicator_loop_resumed">Lazo reanudado</string>
<string name="smscommunicator_invalid_phone_number">Número de teléfono incorrecto para SMS</string>
<string name="smscommunicator_calibration_sent">Calibración enviada. La recepción debe estar habilitada en xDrip+.</string>
<string name="smscommunicator_calibration_failed">xDrip+ no está recibiendo calibraciones</string>
<string name="smscommunicator_message_body">El cuerpo del mensaje es inválido</string>
<string name="smscommunicator_report_pump_unreachable_summary">Enviar SMS si se activa un evento de bomba inaccesible</string>
<string name="smscommunicator_pump_unreachable">Reportar bomba inalcanzable</string>
<string name="smscommunicator_set_lgs_reply_with_code">Para cambiar el modo del bucle a LGS (Suspensión por glucosa baja) responde con el código %1$s</string>
<string name="smscommunicator_set_closed_loop_reply_with_code">Para cambiar el modo a bucle cerrado, responde con código %1$s</string>
<string name="smscommunicator_current_loop_mode">Modo bucle actual: %1$s</string>
<string name="smscommunicator_set_lgs_reply_with_code">Para cambiar el modo lazo a LGS (Suspensión por glucosa baja) responde con el código %1$s</string>
<string name="smscommunicator_set_closed_loop_reply_with_code">Para cambiar el modo lazo a lazo cerrado, responde con código %1$s</string>
<string name="smscommunicator_current_loop_mode">Modo lazo actual: %1$s</string>
<string name="wrong_format">Formato incorrecto</string>
<string name="sms_actual_bg">Glucosa:</string>
<string name="sms_last_bg">Última Glucosa:</string>
@ -108,7 +108,7 @@
<string name="sms_profile_switch_created">Cambio de perfil creado</string>
<string name="sms_wrong_tbr_duration">La duración de TBR debe ser un múltiplo de %1$d minutos y mayor a 0.</string>
<string name="a11y_otp_qr_code">Código QR para la configuración de la contraseña de un sólo uso</string>
<string name="disabled_loop">Bucle desactivado</string>
<string name="disabled_loop">Lazo desactivado</string>
<!-- Food-->
<string name="food_short">Comida</string>
<string name="description_food">Muestra los ajustes preestablecidos de alimentos definidos en Nightscout</string>
@ -199,7 +199,7 @@
<string name="overview_cgm">MCG</string>
<string name="overview">Inicio</string>
<string name="overview_shortname">INICIO</string>
<string name="description_overview">Muestra el estado actual de tu bucle y los botones para las acciones más usadas</string>
<string name="description_overview">Muestra el estado actual de tu lazo y los botones para las acciones más usadas</string>
<string name="overview_buttons_selection">Botones</string>
<string name="show_calibration_button_summary">Envía una calibración a xDrip+ o abre la pantalla de calibración de Dexcom BYODA</string>
<string name="show_cgm_button_summary">Abre xDrip+ o Dexcom BYODA. Si pulsas el botón atrás, regresa a AAPS</string>
@ -287,6 +287,6 @@
<!-- Iob-->
<string name="send_logfiles">Enviar los archivos de registro de hoy a los desarrolladores. Situación inesperada.</string>
<!-- PersistentNotification-->
<string name="description_persistent_notification">Muestra una notificación en curso con un breve resumen de lo que está haciendo tu bucle</string>
<string name="description_persistent_notification">Muestra una notificación en curso con un breve resumen de lo que está haciendo tu lazo</string>
<string name="old_data">DATOS CADUCADOS</string>
</resources>

View file

@ -156,7 +156,7 @@
<!-- Actions -->
<string name="actions">Handlinger</string>
<string name="description_actions">Hurtigknapper for rask tilgang til ofte brukte funksjoner</string>
<string name="actions_shortname">HNDL</string>
<string name="actions_shortname">HAND</string>
<string name="tempbasal_button">Midlertidig basal</string>
<string name="extended_bolus_button">Forlenget bolus</string>
<string name="extended_bolus_cancel_button">Avbryt forlenget bolus</string>
@ -210,7 +210,7 @@
<string name="constraints_violation">Brudd på begrensninger</string>
<string name="change_your_input">Endre dine inndata!</string>
<string name="openaps">OpenAPS</string>
<string name="uploader">Opplaster</string>
<string name="uploader">Opplaster-batteri</string>
<string name="data_status">BS data status</string>
<string name="quickwizard_settings">Innstillinger for hurtigknapp</string>
<string name="keep_screen_on_title">Hold skjermen påslått</string>

View file

@ -528,10 +528,10 @@ class DataSyncSelectorV3 @Inject constructor(
aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. Only NS id changed ID: ${eb.second.id} ")
// without nsId = create new
eb.first.interfaceIDs.nightscoutId == null ->
cont = activePlugin.activeNsClient?.nsAdd("treatments", DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id), "$startId/$lastDbId") ?: false
cont = activePlugin.activeNsClient?.nsAdd("treatments", DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id), "$startId/$lastDbId", profile) ?: false
// with nsId = update
eb.first.interfaceIDs.nightscoutId != null ->
cont = activePlugin.activeNsClient?.nsUpdate("treatments", DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id), "$startId/$lastDbId") ?: false
cont = activePlugin.activeNsClient?.nsUpdate("treatments", DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id), "$startId/$lastDbId", profile) ?: false
}
} else aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. No profile: ${eb.second.id} ")
if (cont) confirmLastExtendedBolusIdIfGreater(eb.second.id)

View file

@ -188,7 +188,7 @@ class NSClientV3Plugin @Inject constructor(
)
)
setClient("START")
setClient()
receiverDelegate.grabReceiversState()
disposable += rxBus
@ -203,8 +203,8 @@ class NSClientV3Plugin @Inject constructor(
assert(nsClientV3Service != null)
if (ev.connected) {
when {
isAllowed && nsClientV3Service?.storageSocket == null -> setClient("CONNECTIVITY") // socket must be created
!isAllowed && nsClientV3Service?.storageSocket != null -> shutdownWebsockets()
isAllowed && nsClientV3Service?.storageSocket == null -> setClient() // socket must be created
!isAllowed && nsClientV3Service?.storageSocket != null -> stopService()
}
if (isAllowed) executeLoop("CONNECTIVITY", forceNew = false)
}
@ -221,8 +221,8 @@ class NSClientV3Plugin @Inject constructor(
ev.isChanged(rh.gs(app.aaps.core.utils.R.string.key_ns_alarms)) ||
ev.isChanged(rh.gs(app.aaps.core.utils.R.string.key_ns_announcements))
) {
shutdownWebsockets()
setClient("SETTING CHANGE")
stopService()
setClient()
}
if (ev.isChanged(rh.gs(app.aaps.core.utils.R.string.key_local_profile_last_change)))
executeUpload("PROFILE_CHANGE", forceNew = true)
@ -310,7 +310,7 @@ class NSClientV3Plugin @Inject constructor(
override fun onStop() {
handler.removeCallbacksAndMessages(null)
disposable.clear()
shutdownWebsockets()
stopService()
super.onStop()
}
@ -338,7 +338,7 @@ class NSClientV3Plugin @Inject constructor(
}
}
private fun setClient(reason: String) {
private fun setClient() {
if (nsAndroidClient == null)
nsAndroidClient = NSAndroidClientImpl(
baseUrl = sp.getString(app.aaps.core.utils.R.string.key_nsclientinternal_url, "").lowercase().replace("https://", "").replace(Regex("/$"), ""),
@ -348,24 +348,18 @@ class NSClientV3Plugin @Inject constructor(
logger = { msg -> aapsLogger.debug(LTag.HTTP, msg) }
)
SystemClock.sleep(2000)
initializeWebSockets(reason)
startService()
rxBus.send(EventSWSyncStatus(status))
}
private fun initializeWebSockets(reason: String) {
private fun startService() {
if (sp.getBoolean(app.aaps.core.utils.R.string.key_ns_use_ws, true)) {
context.bindService(Intent(context, NSClientV3Service::class.java), serviceConnection, Context.BIND_AUTO_CREATE)
while (nsClientV3Service == null) {
aapsLogger.debug(LTag.NSCLIENT, "Waiting for service start")
SystemClock.sleep(100)
}
nsClientV3Service?.initializeWebSockets(reason)
}
}
private fun shutdownWebsockets() {
private fun stopService() {
if (nsClientV3Service != null) context.unbindService(serviceConnection)
nsClientV3Service?.shutdownWebsockets()
}
override fun resend(reason: String) {

View file

@ -70,10 +70,12 @@ class NSClientV3Service : DaggerService() {
super.onCreate()
wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AndroidAPS:NSClientService")
wakeLock?.acquire()
initializeWebSockets("onCreate")
}
override fun onDestroy() {
super.onDestroy()
shutdownWebsockets()
disposable.clear()
if (wakeLock?.isHeld == true) wakeLock?.release()
}

View file

@ -175,7 +175,7 @@ class DataHandlerMobile @Inject constructor(
EventMobileToWear(
EventData.ConfirmAction(
rh.gs(R.string.loop_status).uppercase(),
"TARGETS:\n$targetsStatus\n\n$loopStatus\n\nOAPS RESULT:\n$oAPSResultStatus",
"$targetsStatus\n\n$loopStatus\n\n$oAPSResultStatus",
returnCommand = null
)
)
@ -336,7 +336,7 @@ class DataHandlerMobile @Inject constructor(
val dummies: MutableList<TotalDailyDose> = LinkedList()
val historyList = getTDDList(dummies)
if (isOldData(historyList)) {
message = "OLD DATA - "
message = rh.gs(app.aaps.core.ui.R.string.tdd_old_data) + ", "
//if pump is not busy: try to fetch data
if (activePump.isBusy()) {
message += rh.gs(app.aaps.core.ui.R.string.pump_busy)
@ -434,7 +434,7 @@ class DataHandlerMobile @Inject constructor(
return
}
if (bolusWizard.calculatedTotalInsulin <= 0 && bolusWizard.carbs <= 0) {
sendError("No insulin required")
sendError(rh.gs(app.aaps.core.ui.R.string.wizard_no_insulin_required))
return
}
val message =
@ -540,7 +540,7 @@ class DataHandlerMobile @Inject constructor(
message += "\n" + rh.gs(app.aaps.core.ui.R.string.constraint_applied)
}
if (carbsAfterConstraints <= 0) {
sendError("Carbs = 0! No action taken!")
sendError(rh.gs(app.aaps.core.ui.R.string.carb_equal_zero_no_action))
return
}
rxBus.send(
@ -998,7 +998,7 @@ class DataHandlerMobile @Inject constructor(
private
val targetsStatus: String
get() {
var ret = ""
var ret = rh.gs(app.aaps.core.ui.R.string.loopstatus_targets) + "\n"
if (!config.APS) {
return rh.gs(R.string.target_only_aps_mode)
}
@ -1020,7 +1020,7 @@ class DataHandlerMobile @Inject constructor(
private
val oAPSResultStatus: String
get() {
var ret = ""
var ret = rh.gs(app.aaps.core.ui.R.string.loopstatus_OAPS_result) + "\n"
if (!config.APS)
return rh.gs(R.string.aps_only)
val usedAPS = activePlugin.activeAPS

View file

@ -120,6 +120,7 @@
<string name="data_broadcaster_description">Odesílání dat do Garmin aplikace G-Watch Wear App</string>
<!-- GarminPlugin -->
<string name="garmin">Garmin</string>
<string name="garmin_description">Připojení k zařízení Garmin (Fenix, Edge, …)</string>
<string name="key_garmin_settings">Nastavení hodinek Garmin</string>
<!-- Wear-->
<string name="wear_shortname">WEAR</string>

View file

@ -109,7 +109,7 @@
<string name="xdrip_status_show_bgi_title">Mostrar BGI</string>
<string name="xdrip_status_show_bgi_summary">Agregar BGI a la línea de estado</string>
<string name="xdrip_status_settings">xDrip+ Línea de estado avanzada</string>
<string name="disabled_loop">Bucle desactivado</string>
<string name="disabled_loop">Lazo desactivado</string>
<string name="xdrip_send_status_title">Enviar línea de estado a xDrip+</string>
<string name="xdrip_not_installed">xDrip+ no instalado</string>
<string name="calibration_sent">Calibración enviada a xDrip+</string>
@ -127,7 +127,7 @@
<string name="description_wear">Supervisar y controlar AAPS usando un reloj WearOS</string>
<string name="no_watch_connected">(Ningún reloj conectado)</string>
<string name="pump_status">Estado de la bomba de insulina</string>
<string name="loop_status">Estado del bucle</string>
<string name="loop_status">Estado del lazo</string>
<string name="wizard_result">Calc. Asistente:\nInsulina: %1$.2fU\nCarbohidratos: %2$dg</string>
<string name="quick_wizard_not_available">El asistente rápido seleccionado ya no está disponible, por favor actualice su tarjeta</string>
<string name="quick_wizard_message">Asistente Rápido: %1$s\nInsulina: %2$.2fU\nCarbohidratos: %3$dg</string>
@ -178,9 +178,9 @@
<string name="no_profile">Ningún perfil cargado</string>
<string name="aps_only">Sólo se aplica en modo APS</string>
<string name="last_aps_result_na">¡Último resultado no disponible!</string>
<string name="loop_status_closed">BUCLE CERRADO</string>
<string name="loop_status_open">BUCLE ABIERTO</string>
<string name="loop_status_disabled">BUCLE DESACTIVADO</string>
<string name="loop_status_closed">LAZO CERRADO</string>
<string name="loop_status_open">LAZO ABIERTO</string>
<string name="loop_status_disabled">LAZO DESACTIVADO</string>
<string name="aps">APS</string>
<string name="last_run">Última ejecución</string>
<string name="last_enact">Último acto</string>

View file

@ -31,7 +31,7 @@
<string name="profile_switches">Profilbytter</string>
<string name="total_daily_doses">Totale daglige doser</string>
<string name="temporary_basal_rates">Midlertidige basal doser</string>
<string name="temporary_targets">Temp Target</string>
<string name="temporary_targets">Midlertidige mål</string>
<string name="settings">Innstillinger</string>
<string name="application_version">Programversjon</string>
<string name="device_model">Enhetsmodell</string>

View file

@ -18,8 +18,8 @@
<string name="blocked_by_charging">Blokkert på grunn av ladealternativer</string>
<string name="blocked_by_connectivity">Blokkert på grunn av tilkoblingsalternativer</string>
<string name="unsupported_ns_version">Versjonen av Nightscout støttes ikke</string>
<string name="openaps_short">OAPS</string>
<string name="uploader_short">OPPL</string>
<string name="openaps_short">OpenAPS</string>
<string name="uploader_short">Opplaster</string>
<string name="ns_malfunction">NSClient feil. Vurder omstart av NS og NSClient.</string>
<!-- NSClient -->
<string name="no_write_permission">NSCLIENT har ingen skriverettighet. Feil API-nøkkel?</string>

View file

@ -116,11 +116,14 @@
<string name="xdrip_local_broadcasts_summary">Verzend glucose en behandelingsgegevens naar xDrip+. Gegevensbron \"xDrip+ Sync Follower\" moet worden geselecteerd en het accepteren van gegevens moet worden ingeschakeld in Instellingen - Inter-app instellingen - Accepteer Glucose/Behandelingen</string>
<string name="xdrip_local_broadcasts_title">Activeer uitzendingen naar xDrip+.</string>
<!-- DataBroadcast-->
<string name="data_broadcaster_short">DBRO</string>
<string name="data_broadcaster_description">Verzend gegevens naar Garmin\'s G-Watch Wear App</string>
<!-- GarminPlugin -->
<string name="garmin">Garmin</string>
<string name="garmin_description">Verbinding met Garmin apparaat (Fenix, Edge, …)</string>
<string name="key_garmin_settings">Garmin instellingen</string>
<!-- Wear-->
<string name="wear_shortname">WEAR</string>
<string name="description_wear">Monitor en bedien AAPS met uw WearOS horloge.</string>
<string name="no_watch_connected">(Geen horloge verbonden)</string>
<string name="pump_status">Pomp status</string>

View file

@ -116,8 +116,14 @@
<string name="xdrip_local_broadcasts_summary">Wyślij dane dotyczące glikemii i leczenia do xDrip+. W ustawieniach xDrip+ należy ustawić \"Sprzętowe źródło danych\" na \"xDrip+ Sync Follower\" oraz włączyć akceptowanie danych: \"Ustawienia innych aplikacji\" - \"Akceptuj Glukozę/Akceptuj zabiegi\"</string>
<string name="xdrip_local_broadcasts_title">Włącz nadawanie do xDrip+.</string>
<!-- DataBroadcast-->
<string name="data_broadcaster_short">DBRO</string>
<string name="data_broadcaster_description">Transmisja danych do aplikacji G-Watch Garmin</string>
<!-- GarminPlugin -->
<string name="garmin">Garmin</string>
<string name="garmin_description">Połączenie z urządzeniem Garmin (Fenix, Edge, …)</string>
<string name="key_garmin_settings">Ustawienia Garmin</string>
<!-- Wear-->
<string name="wear_shortname">WEAR</string>
<string name="description_wear">Monitoruj i steruj AAPS używając zegarka z WearOS.</string>
<string name="no_watch_connected">(Brak połączonego zegarka)</string>
<string name="pump_status">Status pompy</string>

View file

@ -15,8 +15,8 @@
<string name="combo_pump_action_bolusing">Inyectando (%1$.1f U)</string>
<string name="combo_pump_action_refreshing">Actualizando</string>
<string name="combo_pump_unsupported_operation">Acción requerida no disponible por la bomba</string>
<string name="combo_low_suspend_forced_notification">Uso inseguro: bolo extendido o multionda activo. El modo del bucle ha sido establecido a sólo suspensión en baja glucosa durante 6 horas. En modo bucle sólo se soportan el bolo estándar</string>
<string name="combo_force_disabled_notification">Uso inseguro: la bomba usa un perfil basal diferente al primero. El bucle ha sido apagado. Elige el primer perfil basal en la bomba y acualiza.</string>
<string name="combo_low_suspend_forced_notification">Uso inseguro: bolo extendido o multionda activo. El modo del lazo ha sido fijado a sólo suspensión en baja glucosa durante 6 horas. En modo lazo sólo se soportan los bolo estándar.</string>
<string name="combo_force_disabled_notification">Uso inseguro: la bomba usa un perfil basal diferente al primero. El lazo ha sido apagado. Elige el primer perfil basal en la bomba y acualiza.</string>
<string name="bolus_frequency_exceeded">Un bolo de mismo valor ha sido dado durante el pasado minuto. Para evitar bolos dobles y prevenir fallos de programa esto no está permitido.</string>
<string name="combo_pump_connected_now">Ahora</string>
<string name="combo_activity_setting_basal_profile">Activando perfil base</string>

View file

@ -27,7 +27,7 @@
<string name="combo_reservoir_empty">Tom</string>
<string name="combo_reservoir_normal">Normal</string>
<string name="combo_notification_check_time_date">Pumpens tid må oppdateres</string>
<string name="combo_pump_tbr_cancelled_warrning">Varsel om kansellering av temp basal er bekreftet</string>
<string name="combo_pump_tbr_cancelled_warrning">Varsel om kansellering av midlertidig basal er bekreftet</string>
<string name="combo_error_no_connection_no_bolus_delivered">Ingen kontakt med pumpen. Ingen bolus er levert</string>
<string name="combo_error_no_bolus_delivered">Bolus avbrutt. Det virker som ingen bolus er levert. For å være sikker, sjekk pumpen for å unngå levering av dobbel bolus og gjør evt et nytt forsøk. For å unngå feil vil systemet aldri prøve å levere ny bolus.</string>
<string name="combo_error_partial_bolus_delivered">Bare %1$.2f E av bolusdosen på %2$.2f E ble levert på grunn av en feil. Sjekk pumpen for å kontrollere dette og iverksett nødvendige tiltak.</string>
@ -37,7 +37,7 @@
<string name="combo_actvity_reading_basal_profile">Leser basalprofil</string>
<string name="combo_bolus_rejected_due_to_pump_history_change">Pumpe historikken har blitt endret siden bolus kalkuleringen ble utført. Bolus har ikke blitt levert. Vennligst rekalkuler om bolus fortsatt er nødvendig.</string>
<string name="combo_error_updating_treatment_record">Bolus har blitt levert, men det oppsto en feil ved loggføring i behandlinger. Dette kan oppstå hvis to små bolus på samme størrelse blir levert i løpet av to minutter. Vennligst sjekk pumpe historikken og behandlinger loggen, og bruk Helseportal for å legge til de manglende behandlingene. Pass på at du ikke legger til to identiske behandlinger på samme minutt.</string>
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Avviser høy temp target siden kalkuleringen ikke tok hensyn til nylige endringer i pumpe historikken</string>
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Avviser høyt midlertidig mål siden kalkuleringen ikke tok hensyn til nylige endringer i pumpe historikken</string>
<string name="combo_activity_checking_pump_state">Oppdaterer pumpestatus</string>
<string name="combo_warning_pump_basal_rate_changed">Basal dosen i pumpen har blitt endret og vil i løpet av kort tid bli oppdatert</string>
<string name="combo_error_failure_reading_changed_basal_rate">Basalsats endret i pumpe, men lesing av den feilet</string>
@ -46,7 +46,7 @@
<string name="combo_check_date">Den siste bolus er eldre enn 24t eller er i fremtiden. Vennligst sjekk at datoen i pumpen er korrekt.</string>
<string name="combo_suspious_bolus_time">Tid/dato for levert bolus i pumpen er trolig feil, og IOB beregningen blir da feil. Vennligst sjekk pumpens tid/dato.</string>
<string name="combo_bolus_count">Antall boluser</string>
<string name="combo_tbr_count">Antall temp basaler TBR</string>
<string name="combo_tbr_count">Antall midlertidige basaler TBR</string>
<string name="bolusstopped">Bolus stoppet</string>
<string name="bolusstopping">Stopper bolus</string>
<string name="pump_commerror_label">Komm. feiltelling</string>

View file

@ -39,7 +39,7 @@
<string name="gettingpumpstatus">Henter pumpestatus</string>
<string name="gettingextendedbolusstatus">Henter forlenget bolus status</string>
<string name="gettingbolusstatus">Henter bolus status</string>
<string name="gettingtempbasalstatus">Henter temp basal status</string>
<string name="gettingtempbasalstatus">Henter status om midlertidig basal</string>
<string name="gettingpumpsettings">Henter pumpe innstillinger</string>
<string name="gettingpumptime">Henter pumpens tid</string>
<string name="largetimedifftitle">Stor tidsforskjell</string>
@ -48,11 +48,11 @@
<string name="approachingdailylimit">Maksimal daglig insulindose er snart nådd</string>
<string name="startingbolus">Starter bolus dosering</string>
<string name="waitingforestimatedbolusend">Venter på bolus slutt. Gjenværende %1$d sek.</string>
<string name="stoppingtempbasal">Stopper temp basal</string>
<string name="stoppingtempbasal">Stopper midlertidig basal</string>
<string name="settingextendedbolus">Setter forlenget bolus</string>
<string name="stoppingextendedbolus">Stopper forlenget bolus</string>
<string name="updatingbasalrates">Oppdaterer basaldoser</string>
<string name="settingtempbasal">Setter temp basal</string>
<string name="settingtempbasal">Setter midlertidig basal</string>
<string name="waitingfortimesynchronization">Venter på tidsykronisering (%1$d sek)</string>
<string name="wrongpumppassword">Feil pumpepassord!</string>
<string name="danar_history_alarm">Alarmer</string>

View file

@ -24,8 +24,8 @@
<string name="startingbolus">Starter bolus dosering</string>
<string name="waitingforestimatedbolusend">Venter på avsluttet bolus dosering</string>
<string name="gettingbolusstatus">Leser bolus status</string>
<string name="stoppingtempbasal">Stopper temp basal</string>
<string name="settingtempbasal">Setter temp basal</string>
<string name="stoppingtempbasal">Stopper midlertidig basal</string>
<string name="settingtempbasal">Setter midlertidig basal</string>
<string name="settingextendedbolus">Setter forlenget bolus</string>
<string name="stoppingextendedbolus">Stopper forlenget bolus</string>
<string name="updatingbasalrates">Oppdaterer basaldoser</string>
@ -54,7 +54,7 @@
<string name="processinghistory">"Behandler hendelse "</string>
<string name="apslastLogNum">aps_last_log_num</string>
<string name="apsWrappingCount">aps_wrapping_count</string>
<string name="diaconn_g8_history_tempbasal">Temp basal</string>
<string name="diaconn_g8_history_tempbasal">Midlertidig basal</string>
<string name="diaconng8_pump_settings">Diaconn pumpe innstillinger</string>
<string name="diaconn_g8_pumpalarm">Lyd</string>
<string name="diaconn_g8_pumpalarm_sound">lyd</string>
@ -146,12 +146,12 @@
<string name="diaconn_g8_errotpreceivedyet">Kommandoen ble ikke utført. Vennligst prøv igjen.</string>
<string name="diaconn_g8_logtubechange_title">Logg bytte av slangesett</string>
<string name="diaconn_g8_logtubechange_summary">Legg til \"Slangesettbytte\" i Helseportal når den oppdages i historikken</string>
<string name="diaconn_g8_logtempstart">Temp Basal startet</string>
<string name="diaconn_g8_logtempstart">Midlertidig basal startet</string>
<string name="diaconn_g8_errorcode_32">Vel Lav Glukose Stopp (LGS) er injeksjoner begrenset</string>
<string name="diaconn_g8_errorcode_33">LGS status er PÅ. PÅ kommando er nektet.</string>
<string name="diaconn_g8_errorcode_34">LGS status er AV. AV kommandoen er avslått.</string>
<string name="diaconn_g8_errorcode_35">Temp basal avslått siden det allerede kjøres en temp basal</string>
<string name="diaconn_g8_errorcode_36">Stopp av temp basal avslått siden det ikke kjøres en temp basal</string>
<string name="diaconn_g8_errorcode_35">Midlertidig basal avslått siden det allerede kjøres en midlertidig basal</string>
<string name="diaconn_g8_errorcode_36">Stopp av midlertidig basal avslått siden det ikke kjøres en midlertidig basal</string>
<string name="diaconn_g8_cloudsend_summary">Send pumpe logger til Diaconn Cloud.</string>
<string name="diaconn_g8_cloudsend_title">Diaconn Cloud Sync</string>
</resources>

View file

@ -8,16 +8,16 @@
<string name="patch_expiration_reminders">Recordatorio de expiración del parche</string>
<string name="patch_buzzer_reminders">Recordatorios de sonidos del parche</string>
<string name="time_format_a_h_mm">h:mm a</string>
<string name="eopatch_ble_status">Estado del Bluetooth</string>
<string name="eopatch_serial_number">Número de Serie</string>
<string name="eopatch_lot_number">Número de Lote</string>
<string name="eopatch_ble_status">Estado del bluetooth</string>
<string name="eopatch_serial_number">Número de serie</string>
<string name="eopatch_lot_number">Número de lote</string>
<string name="eopatch_wakeup_time">Fecha de activación</string>
<string name="eopatch_expiration_time">Fecha de expiración</string>
<string name="eopatch_status">Estado</string>
<string name="eopatch_base_basal_rate">Tasa basal predeterminada</string>
<string name="eopatch_base_basal_rate">Tasa basal programada</string>
<string name="eopatch_temp_basal_rate">Tasa basal temporal</string>
<string name="eopatch_total_delivered">Total entregado</string>
<string name="invalid_basal_rate">El perfil basal es inferior a 0.05 U/h EOPatch tiene una unidad de inyección mínima de 0.05 U. Por favor, inténtelo de nuevo después de ajustar el perfil usando la unidad miníma de inyección.</string>
<string name="invalid_basal_rate">La tasa basal del perfil es inferior a 0.05 U/h. EOPatch tiene una unidad de inyección mínima de 0.05U. Por favor, inténtelo de nuevo, después de ajustar el perfil usando la unidad de inyección mínima</string>
<string name="no_profile_selected">No se ha seleccionado ningún perfil. Por favor, seleccione un perfil e inténtelo de nuevo.</string>
<string name="symbol_day">día</string>
<string name="symbol_plus">+</string>
@ -30,24 +30,23 @@
<string name="patch_safe_deactivation_desc">Para cambiar al nuevo parche, el parche actual debe ser descartado. Todo suministro de insulina por parte del parche será cancelado.</string>
<string name="patch_discard_complete_title">El parche se ha desactivado por completo.</string>
<string name="patch_discard_complete_desc">El parche ha sido desactivado.\nDescarte el parche.\nElimine el parche pegado a tu cuerpo.</string>
<string name="patch_change_confirm_bolus_is_active_desc">Un bolo ha sido suministrado. ¿Realmente quieres cancelar el suministro de insulina y remover el parche?</string>
<string name="patch_change_confirm_temp_basal_is_active_desc">Un basal temporal ha sido suministrado en este momento. ¿Realmente desea cancelar el suministro insulina y remover el parche?</string>
<string name="patch_change_confirm_bolus_is_active_desc">Se ha administrado un bolo en este momento. ¿Realmente quieres cancelar la administración de insulina y descartar el parche?</string>
<string name="patch_change_confirm_temp_basal_is_active_desc">En este momento se está administrando una basal temporal. ¿Realmente quieres cancelar la administración de insulina y desechar el parche?</string>
<string name="patch_change_confirm_bolus_and_temp_basal_are_active_desc">Un bolo y un basal temporal han sido suministrados en este momento. ¿Realmente desea cancelar el suministro insulina y remover el parche?</string>
<string name="patch_change_confirm_desc">¿Seguro que quiere remover el parche?</string>
<string name="patch_change_confirm_desc">¿Estás seguro de descartar el parche?</string>
<string name="patch_remaining_insulin">Insulina restante</string>
<string name="patch_remaining_usage_period">Tiempo restante</string>
<string name="patch_finish">Finalizar</string>
<string name="patch_forced_discard">Remover</string>
<string name="patch_comm_error_during_discard_status">Remueva el parche debido a un error de comunicación </string>
<string name="patch_forced_discard">Descartar</string>
<string name="patch_comm_error_during_discard_status">Descartar el parche debido a un error de comunicación </string>
<string name="patch_comm_error_during_discard_desc">Para la desactivación normal, pulse \'Reintentar\'.\nPara desactivar unilateralmente, pulse \'Descartar\'.</string>
<string name="patch_comm_error_during_discard_desc_1">Para la desactivación normal, pulse \'Reintentar\'.</string>
<string name="patch_comm_error_during_discard_desc_2">Para desactivar unilateralmente, pulse \"Remover\".</string>
<string name="patch_comm_error_during_discard_desc_2">Para desactivar unilateralmente, pulse \"Descartar\".</string>
<string name="patch_manually_turning_off_alarm_title">Apagar manualmente la alarma del parche</string>
<string name="patch_manually_turning_off_alarm_desc_1">Si se desactiva unilateralmente durante un error de comunicación, es posible que el sonido de alarma del parche no deje de sonar.</string>
<string name="patch_manually_turning_off_alarm_desc_2">En este caso, puede detenerlo completamente pulsando el botón de Alarma manual que libera el puerto del parche como se muestra a continuación:</string>
<string name="patch_manually_turning_off_alarm_step_1">1. Retire el parche de su cuerpo y despegue la cinta adhesiva.</string>
<string name="patch_manually_turning_off_alarm_step_2">2. Use un clip, para presionar fuertemente el agujero al lado de a la entrada de insulina.</string>
<string name="patch_wake_up">Llenado de insulina</string>
<string name="patch_wake_up_step">1/6</string>
<string name="patch_step_desc_1">1.</string>
<string name="patch_wake_up_desc_1">Llene un nuevo parche con insulina a temperatura ambiente. Compruebe el ángulo de la jeringa</string>

View file

@ -92,9 +92,9 @@
<string name="patch_cancel_pairing">Avbryt paringen</string>
<string name="symbol_days">dager</string>
<string name="all_dose_unit">&#160;E</string>
<string name="insulin_suspend_msg1">Når du pauser pumpen vil gjeldende bolus dosering &amp; Temp basal bli kansellert. \n\nDosering : %1$s E/time\nGjenstående tid : %2$s\n&amp; Gjenværende insulin å levere: %3$.2f E</string>
<string name="insulin_suspend_msg1">Når du pauser pumpen vil gjeldende bolus dosering &amp; midlertidig basal bli kansellert. \n\nDosering : %1$s E/time\nGjenstående tid : %2$s\n&amp; Gjenværende insulin å levere: %3$.2f E</string>
<string name="insulin_suspend_msg2">Når du pauser pumpen vil levering av bolus dose bli avbrutt. \n\nGjenværende insulin : %1$.2f E</string>
<string name="insulin_suspend_msg3">Når du pauser pumpen vil gjeldende Temp basal dosering bli kansellert. \n\nDosering : %1$s E/time\nGjenstående tid : %2$s</string>
<string name="insulin_suspend_msg3">Når du pauser pumpen vil gjeldende midlertidig basaldosering bli kansellert. \n\nDosering : %1$s E/time\nGjenstående tid : %2$s</string>
<string name="insulin_suspend_msg4">Insulintilførsel er pauset.</string>
<string name="string_change_patch">Kast/bytt patch</string>
<string name="string_activate_patch">Aktiver Patch</string>

View file

@ -71,8 +71,8 @@
<string name="medtronic_cmd_desc_get_model">Henter pumpe modell</string>
<string name="medtronic_cmd_desc_get_basal_profile">Henter basal profil</string>
<string name="medtronic_cmd_desc_set_basal_profile">Angi basal profil</string>
<string name="medtronic_cmd_desc_get_tbr">Henter Temp Basal</string>
<string name="medtronic_cmd_desc_set_tbr">Angi Temp Basal</string>
<string name="medtronic_cmd_desc_get_tbr">Henter midlertidig basal</string>
<string name="medtronic_cmd_desc_set_tbr">Angi midlertidig basal</string>
<string name="medtronic_cmd_desc_cancel_tbr">Avbryt midlertidig basal</string>
<string name="medtronic_cmd_desc_set_bolus">Angi Bolus</string>
<string name="medtronic_cmd_desc_get_remaining_insulin">Oppdater status insulinvolum</string>
@ -88,7 +88,7 @@
<string name="common_off">Av</string>
<string name="pump_time_updated">Pumpens tid ble oppdatert</string>
<string name="set_neutral_temps_title">Sett nøytrale temp basaler</string>
<string name="set_neutral_temps_summary">Hvis aktivert så vil den stoppe en temp basal rett før hver hele time for å stoppe noen pumpers varsler/vibreringer på hver hele time.</string>
<string name="set_neutral_temps_summary">Hvis aktivert så vil den stoppe en midlertidig basal rett før hver hele time for å stoppe noen pumpers varsler/vibreringer på hver hele time.</string>
<string name="mdt_tbr_remaining">%1$.1f E/t (%2$d min gjenstår)</string>
<string name="invalid_history_data">Ugyldige data for pumpehistorikken er oppdaget. Rapporter hendelsen til APPS og legg ved logg.</string>
<string name="riley_statistics">RL statistikk</string>

View file

@ -141,6 +141,7 @@ import kotlin.math.abs
preprocessAlarmSettings(preferenceFragment)
preprocessMaxInsulinSettings(preferenceFragment)
preprocessConnectionAlertSettings(preferenceFragment)
preprocessPumpWarningSettings(preferenceFragment)
}
private fun preprocessSerialSettings(preferenceFragment: PreferenceFragmentCompat) {
@ -263,6 +264,14 @@ import kotlin.math.abs
}
}
private fun preprocessPumpWarningSettings(preferenceFragment: PreferenceFragmentCompat) {
val patchExpirationPref = preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_patch_expiration))
val pumpWarningNotificationPref = preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_pump_warning_notification))
val pumpWarningExpiryHourPref = preferenceFragment.findPreference<ValidatingEditTextPreference>(rh.gs(R.string.key_pump_warning_expiry_hour))
pumpWarningExpiryHourPref?.isEnabled = patchExpirationPref?.isChecked == true && pumpWarningNotificationPref?.isChecked == true
}
override fun isInitialized(): Boolean {
return medtrumPump.pumpState > MedtrumPumpState.EJECTED && medtrumPump.pumpState < MedtrumPumpState.STOPPED
}

View file

@ -288,6 +288,8 @@ class MedtrumPump @Inject constructor(
var desiredAlarmSetting = AlarmSetting.LIGHT_VIBRATE_AND_BEEP
var desiredHourlyMaxInsulin: Int = 40
var desiredDailyMaxInsulin: Int = 180
var desiredPumpWarning = true
var desiredPumpWarningExpiryThresholdHours = 72L
fun pumpType(): PumpType = pumpType(deviceType)
@ -333,6 +335,8 @@ class MedtrumPump @Inject constructor(
desiredAlarmSetting = AlarmSetting.values().firstOrNull { it.code == alarmSettingCode } ?: AlarmSetting.LIGHT_VIBRATE_AND_BEEP
desiredHourlyMaxInsulin = sp.getInt(R.string.key_hourly_max_insulin, 40)
desiredDailyMaxInsulin = sp.getInt(R.string.key_daily_max_insulin, 180)
desiredPumpWarning = sp.getBoolean(R.string.key_pump_warning_notification, true)
desiredPumpWarningExpiryThresholdHours = sp.getLong(R.string.key_pump_warning_expiry_hour, 72L)
_pumpSN = pumpSNFromSP
}

View file

@ -101,6 +101,8 @@ class MedtrumService : DaggerService(), BLECommCallback {
private const val COMMAND_CONNECTING_TIMEOUT_SEC: Long = 30
private const val ALARM_HOURLY_MAX_CLEAR_CODE = 4
private const val ALARM_DAILY_MAX_CLEAR_CODE = 5
private const val CHECK_EXPIRY_WARNING_TIME_MS = 5 * 60 * 1000L
}
private val disposable = CompositeDisposable()
@ -135,6 +137,11 @@ class MedtrumService : DaggerService(), BLECommCallback {
pumpSync.connectNewPump()
medtrumPump.setFakeTBRIfNotSet()
}
if (event.isChanged(rh.gs(R.string.key_pump_warning_notification))
|| event.isChanged(rh.gs(R.string.key_pump_warning_expiry_hour))
) {
medtrumPump.loadUserSettingsFromSP()
}
if (event.isChanged(rh.gs(R.string.key_alarm_setting))
|| event.isChanged(rh.gs(R.string.key_patch_expiration))
|| event.isChanged(rh.gs(R.string.key_hourly_max_insulin))
@ -169,6 +176,12 @@ class MedtrumService : DaggerService(), BLECommCallback {
notifyPumpWarning(pumpWarning)
}
}
scope.launch {
while (true) {
checkExpiryWarning()
kotlinx.coroutines.delay(CHECK_EXPIRY_WARNING_TIME_MS)
}
}
}
override fun onDestroy() {
@ -700,7 +713,7 @@ class MedtrumService : DaggerService(), BLECommCallback {
private fun notifyPumpWarning(alarmState: AlarmState) {
// Notification on pump warning
if (sp.getBoolean(R.string.key_pump_warning_notification, true) && alarmState != AlarmState.NONE) {
if (medtrumPump.desiredPumpWarning && alarmState != AlarmState.NONE) {
uiInteraction.addNotification(
Notification.PUMP_WARNING,
rh.gs(R.string.pump_warning, medtrumPump.alarmStateToString(alarmState)),
@ -715,6 +728,25 @@ class MedtrumService : DaggerService(), BLECommCallback {
}
}
private fun checkExpiryWarning() {
if (medtrumPump.desiredPatchExpiration && medtrumPump.desiredPumpWarning) {
val warningAt = medtrumPump.patchStartTime + T.hours(medtrumPump.desiredPumpWarningExpiryThresholdHours).msecs()
if (dateUtil.now() >= warningAt && dateUtil.now() <= warningAt + CHECK_EXPIRY_WARNING_TIME_MS) {
uiInteraction.addNotification(
Notification.PUMP_WARNING,
rh.gs(R.string.alarm_pump_expires_soon),
Notification.ANNOUNCEMENT,
)
pumpSync.insertAnnouncement(
rh.gs(R.string.alarm_pump_expires_soon),
null,
medtrumPump.pumpType(),
medtrumPump.pumpSN.toString(radix = 16)
)
}
}
}
/** BLECommCallbacks */
override fun onBLEConnected() {
aapsLogger.debug(LTag.PUMPCOMM, "<<<<< onBLEConnected")

View file

@ -105,9 +105,7 @@
<string name="alarm_setting_summary">Изберете предпочитани настройки за аларми на помпата.</string>
<string name="patch_expiration_title">Срок на пач помпата</string>
<string name="patch_expiration_summary">След активация, пач помпата има срок от 3 дни с допълнителен период от 8 часа след това.</string>
<string name="hourly_max_insulin_title">Максимално количество инсулин за час</string>
<string name="hourly_max_insulin_summary">Посочете максималните единици инсулин за час. Ако бъдат превишени, помпата ще бъде изключена.</string>
<string name="daily_max_insulin_title">Максимално количество инсулин за ден</string>
<string name="daily_max_insulin_summary">Посочете максималните единици инсулин за ден. Ако бъдат превишени, помпата ще бъде изключена.</string>
<!-- treatment state-->
<string name="getting_pump_status">Получава статус на помпата</string>

View file

@ -112,11 +112,13 @@
<string name="alarm_setting_summary">Vyberte preferované nastavení alarmů.</string>
<string name="pump_warning_notification_title">Oznámení o varování pumpy</string>
<string name="pump_warning_notification_summary">Zobrazit upozornění na nekritická varování pumpy: vybitá baterie, téměř prázdný zásobník (20 jednotek) a brzy dojde inzulin. Doporučeno ponechat zapnuté, když jsou výstrahy pumpy nastaveny na ticho.</string>
<string name="pump_warning_expiry_hour_title">Varování před vypršením platnosti pumpy [hodiny]</string>
<string name="pump_warning_expiry_hour_summary">Zobrazit upozornění v určené hodině po aktivaci.</string>
<string name="patch_expiration_title">Vypršení platnosti Patche</string>
<string name="patch_expiration_summary">Pokud je povoleno, Patch vyprší po 3 dnech s maximální dobou odkladu 8 hodin.</string>
<string name="hourly_max_insulin_title">Hodinové maximum inzulínu</string>
<string name="hourly_max_insulin_title">Hodinové maximum inzulínu [U]</string>
<string name="hourly_max_insulin_summary">Zadejte maximální povolený počet jednotek inzulínu za hodinu. Pokud je překročeno, pumpa bude pozastavena.</string>
<string name="daily_max_insulin_title">Denní maximální inzulín</string>
<string name="daily_max_insulin_title">Denní maximum inzulínu [U]</string>
<string name="daily_max_insulin_summary">Zadejte maximální povolené množství inzulínu za den. Pokud je překročeno, pumpa bude pozastavena.</string>
<!-- treatment state-->
<string name="getting_pump_status">Nahrávám stav pumpy</string>

View file

@ -107,9 +107,7 @@
<string name="alarm_setting_summary">Vælg dine fortrukne pumpealarmindstillinger.</string>
<string name="patch_expiration_title">Patch Udløber</string>
<string name="patch_expiration_summary">Efter aktivering udløber patchen efter 3 dage med en nådeperiode på 8 timer herefter.</string>
<string name="hourly_max_insulin_title">Maksimal Insulin pr. Time</string>
<string name="hourly_max_insulin_summary">Specificér det maksimale tilladte antal enheder insulin per time. Hvis denne overskrides, pauseres pumpen.</string>
<string name="daily_max_insulin_title">Maksimal Insulin pr. Dag</string>
<string name="daily_max_insulin_summary">Specificér det maksimale tilladte antal enheder insulin per Dag. Hvis denne overskrides, pauseres pumpen.</string>
<!-- treatment state-->
<string name="getting_pump_status">Henter pumpestatus</string>

View file

@ -105,9 +105,7 @@
<string name="alarm_setting_summary">Wählen Sie Ihre bevorzugten Pumpen-Alarmeinstellungen.</string>
<string name="patch_expiration_title">Patch Ablaufdatum</string>
<string name="patch_expiration_summary">Wenn aktiviert, läuft der Patch nach 3 Tagen ab, mit einer Nachfrist von 8 Stunden danach.</string>
<string name="hourly_max_insulin_title">Stündliches Maximum Insulin</string>
<string name="hourly_max_insulin_summary">Lege die maximale Anzahl an Insulineinheiten pro Stunde fest. Bei Überschreitung wird die Pumpe ausgesetzt.</string>
<string name="daily_max_insulin_title">Tägliches Maximum Insulin</string>
<string name="daily_max_insulin_summary">Legen Sie die maximale Anzahl an Insulineinheiten pro Tag fest. Bei Überschreitung wird die Pumpe ausgesetzt.</string>
<!-- treatment state-->
<string name="getting_pump_status">Pumpenstatus wird abgerufen</string>

View file

@ -107,9 +107,7 @@
<string name="alarm_setting_summary">Επιλέξτε τις προτιμώμενες ρυθμίσεις συναγερμού της αντλίας σας.</string>
<string name="patch_expiration_title">Λήξη Patch</string>
<string name="patch_expiration_summary">Όταν ενεργοποιηθεί, το patch θα λήξει μετά από 3 ημέρες, με περίοδο χάριτος 8 ώρες μετά από αυτό.</string>
<string name="hourly_max_insulin_title">Μέγιστη Ωριαία Ινσουλίνη</string>
<string name="hourly_max_insulin_summary">Καθορίστε τις μέγιστες μονάδες ινσουλίνης που επιτρέπονται ανά ώρα. Αν ξεπεραστείη ποσότητα αυτή, η αντλία θα αναστείλει.</string>
<string name="daily_max_insulin_title">Ημερήσια Μέγιστη Ινσουλίνη</string>
<string name="daily_max_insulin_summary">Καθορίστε τις μέγιστες μονάδες ινσουλίνης που επιτρέπονται ανά ημέρα. Αν ξεπεραστεί η ποσότητα αυτή, η αντλία θα αναστείλει.</string>
<!-- treatment state-->
<string name="getting_pump_status">Φόρτωση κατάστασης αντλίας</string>

View file

@ -112,11 +112,13 @@
<string name="alarm_setting_summary">Selecciona los ajustes de la alarma de la bomba que prefieras.</string>
<string name="pump_warning_notification_title">Notificación sobre advertencia de la bomba</string>
<string name="pump_warning_notification_summary">Mostrar notificación en advertencias de la bomba no críticas: batería baja, reserva baja (20 unidades) y próxima a caducar. Se recomienda dejarlo habilitado cuando las alarmas de la bomba estén configuradas en silencio.</string>
<string name="pump_warning_expiry_hour_title">Aviso de expiración de la bomba [hours]</string>
<string name="pump_warning_expiry_hour_summary">Mostrar notificación a la hora especificada tras la activación.</string>
<string name="patch_expiration_title">Caducidad del parche</string>
<string name="patch_expiration_summary">Cuando está activado, el parche caducará a los 3 días, con un periodo de gracia de 8 horas adicionales</string>
<string name="hourly_max_insulin_title">Insulina máxima por hora</string>
<string name="hourly_max_insulin_title">Insulina máxima por hora [Units]</string>
<string name="hourly_max_insulin_summary">Especificar las unidades máximas de insulina permitidas por hora. Si se supera, la bomba se suspenderá.</string>
<string name="daily_max_insulin_title">Insulina máxima diaria</string>
<string name="daily_max_insulin_title">Insulina máxima diaria [Units]</string>
<string name="daily_max_insulin_summary">Especificar las unidades máximas de insulina permitidas por día. Si se superan, la bomba se suspenderá.</string>
<!-- treatment state-->
<string name="getting_pump_status">Obteniendo el estado de la bomba</string>

View file

@ -114,9 +114,7 @@
<string name="pump_warning_notification_summary">Afficher une notification sur les avertissements non critiques de la pompe : pile faible, réservoir faible (20 unités) et expire bientôt. Il est recommandé de laisser activé lorsque les alarmes de la pompe sont réglées sur silencieux.</string>
<string name="patch_expiration_title">Expiration du Patch</string>
<string name="patch_expiration_summary">Lorsqu\'il est activé, le Patch expirera après 3 jours, avec un délai de grâce de 8 heures au-delà.</string>
<string name="hourly_max_insulin_title">Insuline maximale horaire</string>
<string name="hourly_max_insulin_summary">Spécifiez le nombre maximum d\'unités d\'insuline autorisées par heure. Si ce montant est dépassé, la pompe sera suspendue.</string>
<string name="daily_max_insulin_title">Insuline maximale quotidienne</string>
<string name="daily_max_insulin_summary">Spécifiez le nombre maximum d\'unités d\'insuline autorisées par jour. Si ce montant est dépassé, la pompe sera suspendue.</string>
<!-- treatment state-->
<string name="getting_pump_status">Mise à jour de l\'état pompe</string>

View file

@ -105,9 +105,7 @@
<string name="alarm_setting_summary">Seleziona le tue impostazioni di allarme del micro preferite.</string>
<string name="patch_expiration_title">Scadenza patch</string>
<string name="patch_expiration_summary">Una volta abilitata, la patch scadrà dopo 3 giorni, con un periodo di grazia di 8 ore.</string>
<string name="hourly_max_insulin_title">Insulina massima oraria</string>
<string name="hourly_max_insulin_summary">Specificare le unità massime di insulina consentite per ora. Se superate, il micro sarà sospeso.</string>
<string name="daily_max_insulin_title">Insulina massima giornaliera</string>
<string name="daily_max_insulin_summary">Specificare le unità massime di insulina consentite per giorno. Se superate, il micro sarà sospeso.</string>
<!-- treatment state-->
<string name="getting_pump_status">Ricezione stato micro</string>

View file

@ -106,9 +106,7 @@
<string name="alarm_setting_summary">선호하는 펌프 알람 설정을 선택하세요.</string>
<string name="patch_expiration_title">Patch 만료</string>
<string name="patch_expiration_summary">활성화되면, patch는 3일 후에 만료되며, 이후 8시간의 유예 기간이 적용됩니다.</string>
<string name="hourly_max_insulin_title">시간당 최대 인슐린</string>
<string name="hourly_max_insulin_summary">시간당 허용되는 인슐린 최대 unit을 정합니다. 이를 초과하면, 펌프는 중지됩니다.</string>
<string name="daily_max_insulin_title">일일 최대 인슐린</string>
<string name="daily_max_insulin_summary">하루에 허용되는 인슐린 최대 unit을 정합니다. 이를 초과하면, 펌프는 중지됩니다.</string>
<!-- treatment state-->
<string name="getting_pump_status">펌프 상태 가져오기</string>

View file

@ -108,9 +108,7 @@
<string name="alarm_setting_summary">Pasirinkite pompos aliarmų nustatymus</string>
<string name="patch_expiration_title">Rezervuaras išsijungs</string>
<string name="patch_expiration_summary">Įgalinus, rezervuaras išsijungs po 3 parų ir 8 val.</string>
<string name="hourly_max_insulin_title">Valandos insulino limitas</string>
<string name="hourly_max_insulin_summary">Nustatykite maksimalų insulino kiekį valandai. Jį viršijus pompa bus sustabdyta.</string>
<string name="daily_max_insulin_title">Paros insulino limitas</string>
<string name="daily_max_insulin_summary">Nustatykite maksimalų insulino kiekį parai. Jį viršijus pompa bus sustabdyta.</string>
<!-- treatment state-->
<string name="getting_pump_status">Gaunamas pompos statusas</string>

View file

@ -112,11 +112,13 @@
<string name="alarm_setting_summary">Velg dine foretrukne alarminnstillinger.</string>
<string name="pump_warning_notification_title">Varsel om pumpeadvarsel</string>
<string name="pump_warning_notification_summary">Vis varsel om ikke-kritisk pumpeadvarsel: lavt batteri, lavt reservoar (20 enheter) og utløper snart. Anbefales og la være aktivert når pumpealarmer er satt til stillemodus.</string>
<string name="pump_warning_expiry_hour_title">Utløpsvarsel om pumpe</string>
<string name="pump_warning_expiry_hour_summary">Vis varsel på angitt time etter aktivering.</string>
<string name="patch_expiration_title">Patch utløpsdato</string>
<string name="patch_expiration_summary">Når aktivert vil plasteret utløpe etter 3 dager, med en nådeperiode på 8 timer etter det.</string>
<string name="hourly_max_insulin_title">Maksimal insulin per time</string>
<string name="hourly_max_insulin_title">Maks insulin per time [Enheter]</string>
<string name="hourly_max_insulin_summary">Angi maksimalt antall enheter insulin tillatt per time. Hvis overskredet vil pumpen suspendere.</string>
<string name="daily_max_insulin_title">Maksimal insulin per dag</string>
<string name="daily_max_insulin_title">Maks insulin per dag [Enheter]</string>
<string name="daily_max_insulin_summary">Angi maksimalt antall enheter insulin tillatt per dag. Hvis overskredet vil pumpen suspendere.</string>
<!-- treatment state-->
<string name="getting_pump_status">Henter pumpestatus</string>

View file

@ -112,11 +112,13 @@
<string name="alarm_setting_summary">Selecteer uw gewenste alarminstellingen voor de pomp.</string>
<string name="pump_warning_notification_title">Notificatie bij pomp waarschuwing</string>
<string name="pump_warning_notification_summary">Melding weergeven op niet-kritische pompwaarschuwingen: batterij bijna leeg, reservoir bijna leeg (20 eenheden) en vervalt bijna. Aanbevolen om ingeschakeld te laten wanneer pomp alarmen op stil zijn ingesteld.</string>
<string name="pump_warning_expiry_hour_title">Waarschuwing vervallen pomp [uren]</string>
<string name="pump_warning_expiry_hour_summary">Melding weergeven op opgegeven uur na activering.</string>
<string name="patch_expiration_title">Patch vervalt</string>
<string name="patch_expiration_summary">Wanneer ingeschakeld, zal de patch na 3 dagen verlopen met een extra periode van 8 uur coulance.</string>
<string name="hourly_max_insulin_title">Maximale insuline per uur</string>
<string name="hourly_max_insulin_title">Maximale insuline per uur [Eenheden]</string>
<string name="hourly_max_insulin_summary">Geef de maximale hoeveelheid insuline per uur op. Indien overschreden zal de pomp de insuline toediening onderbreken.</string>
<string name="daily_max_insulin_title">Maximale insuline per dag</string>
<string name="daily_max_insulin_title">Maximale insuline per dag [Eenheden]</string>
<string name="daily_max_insulin_summary">Geef de maximale hoeveelheid insuline per dag op. Indien overschreden zal de pomp de insuline toediening onderbreken.</string>
<!-- treatment state-->
<string name="getting_pump_status">Pompstatus aan het ophalen</string>

View file

@ -53,6 +53,7 @@
<string name="alarm_battery_out">Rozładowana bateria</string>
<string name="alarm_no_calibration">Brak kalibracji</string>
<string name="pump_time_update_failed">Nie udało się zaktualizować strefy czasowej pompy, wycisz to powiadomienie i zaktualizuj ręcznie.</string>
<string name="bolus_error">Błąd bolusa</string>
<!-- wizard-->
<string name="retry">Spróbuj ponownie</string>
<string name="next">Dalej</string>
@ -101,6 +102,8 @@
<string name="press_retry_or_discard">Naciśnij <b>Dalej</b> aby wznowić aktywację lub <b>Odrzuć</b> aby zresetować stan aktywacji.</string>
<string name="reading_activation_status">Proszę czekać, odczytywanie stanu aktywacji z pompy.</string>
<!-- settings-->
<string name="enable_pump_unreachable_alert_summary">Wymuszono włączenie alarmu nieosiągalności, ponieważ Patch Medtrum może przestać działać i być nieosiągalny.</string>
<string name="pump_unreachable_threshold_minutes_summary">Zaleca się ustawić na 30 minut, ponieważ Patch Medtrum może przestać działać i być nieosiągalny.</string>
<string name="sn_input_title">Numer seryjny</string>
<string name="sn_input_summary">Wprowadź numer seryjny bazy pompy.</string>
<string name="sn_input_invalid">Nieprawidłowy numer seryjny!</string>
@ -109,11 +112,13 @@
<string name="alarm_setting_summary">Wybierz preferowaną konfigurację alarmu pompy.</string>
<string name="pump_warning_notification_title">Powiadomienie o ostrzeżeniu pompy</string>
<string name="pump_warning_notification_summary">Pokaż powiadomienia o niekrytycznych ostrzeżeniach pompy takich jak: niski poziom baterii, niski poziom zbiornika (20 jednostek) i wkrótce wygasa. Zalecane zostawianie włączonych powiadomień, gdy alarmy pompy są wyciszone.</string>
<string name="pump_warning_expiry_hour_title">Ostrzeżenie o upływie terminu ważności pompy [godziny]</string>
<string name="pump_warning_expiry_hour_summary">Pokaż powiadomienie w określonej godzinie po aktywacji.</string>
<string name="patch_expiration_title">Wygaśnięcie Patcha</string>
<string name="patch_expiration_summary">Po uruchomieniu Patch wygaśnie po 3 dniach, z dodatkowym 8 godzinowym okresem karencji.</string>
<string name="hourly_max_insulin_title">Maksymalna Insulina w godzinę</string>
<string name="hourly_max_insulin_title">Maksymalna Insulina w godzinę [jednostki]</string>
<string name="hourly_max_insulin_summary">Określ maksymalną dozwoloną ilość jednostek insuliny podanych na godzinę. Po przekroczeniu tego limitu pompa zawiesi podaż insuliny.</string>
<string name="daily_max_insulin_title">Maksymalna Insulina dziennie</string>
<string name="daily_max_insulin_title">Maksymalna Insulina dziennie [jednostki]</string>
<string name="daily_max_insulin_summary">Określ maksymalną dozwoloną ilość jednostek insuliny podanych na dzień. Po przekroczeniu tego limitu pompa zawiesi podaż insuliny.</string>
<!-- treatment state-->
<string name="getting_pump_status">Uzyskiwanie statusu pompy</string>

View file

@ -114,9 +114,7 @@
<string name="pump_warning_notification_summary">Arată notificare cu privire la avertismentele non-critice ale pompei: baterie scăzută, rezervor redus (20 de unități) și expiră în curând. Se recomandă să lăsaţi activat când alarmele pompei sunt setate la silențios.</string>
<string name="patch_expiration_title">Patch Expirare</string>
<string name="patch_expiration_summary">Când este activat, patchul va expira după 3 zile, cu o perioadă de graţie de 8 ore după expirare.</string>
<string name="hourly_max_insulin_title">Insulină maximă pe oră</string>
<string name="hourly_max_insulin_summary">Specifică numărul maxim de unități de insulină permise pe oră. Dacă sunt depăşite, pompa se va suspenda.</string>
<string name="daily_max_insulin_title">Insulină maximă zilnică</string>
<string name="daily_max_insulin_summary">Specifică numărul maxim de unități de insulină permise pe zi. Dacă sunt depăşite, pompa se va suspenda.</string>
<!-- treatment state-->
<string name="getting_pump_status">Se primește starea pompei</string>

View file

@ -114,9 +114,7 @@
<string name="pump_warning_notification_summary">Показывать уведомления о некритических оповещениях помпы: низком заряде батареи, низком запасе инсулина (20 единиц) и приближающемся истечении срока работы. Рекомендуется оставить включенным, когда звук оповещений выключен.</string>
<string name="patch_expiration_title">Окончание срока действия патча</string>
<string name="patch_expiration_summary">Если включено, то патч закончит свое действие через 3 дня, с дополнительными 8 часами после этого.</string>
<string name="hourly_max_insulin_title">Максимальное количество инсулина в час</string>
<string name="hourly_max_insulin_summary">Укажите максимальное количество инсулина, допустимое для ввода в течение часа. Если оно будет превышено - помпа будет приостановлена.</string>
<string name="daily_max_insulin_title">Максимальное количество инсулина в сутки</string>
<string name="daily_max_insulin_summary">Укажите максимальное количество инсулина, допустимое для ввода в течение суток. Если оно будет превышено - помпа будет приостановлена.</string>
<!-- treatment state-->
<string name="getting_pump_status">Получение статуса помпы</string>

View file

@ -114,9 +114,7 @@
<string name="pump_warning_notification_summary">Zobraziť upozornenie na nie kritické varovanie pumpy: vybitá batéria, takmer prázdny zásobník (20 jednotiek) a čoskoro dojde inzulín. Doporučené ponechať zapnuté, keď sú výstrahy pumpy nastavené na ticho.</string>
<string name="patch_expiration_title">Expirácia Patch</string>
<string name="patch_expiration_summary">Pokiaľ je povolené, Patch expiruje po 3 dňoch s maximálnou dobou odkladu 8 hodín.</string>
<string name="hourly_max_insulin_title">Hodinové maximum inzulínu</string>
<string name="hourly_max_insulin_summary">Zadajte maximálny povolený počet jednotiek inzulínu za hodinu. Pokiaľ budú prekročené, pumpa bude pozastavená.</string>
<string name="daily_max_insulin_title">Denný maximálny inzulín</string>
<string name="daily_max_insulin_summary">Zadajte maximálny povolený počet jednotiek inzulínu za deň. Pokiaľ budú prekročené, pumpa bude pozastavená.</string>
<!-- treatment state-->
<string name="getting_pump_status">Načítavam stav pumpy</string>

View file

@ -106,9 +106,7 @@
<string name="alarm_setting_summary">Ställ in dina föredragna larminställningar för pumpen.</string>
<string name="patch_expiration_title">Poddens utgångsdatum</string>
<string name="patch_expiration_summary">När den är aktiverad, kommer podden att löpa ut efter 3 dagar, med en tidsfrist på 8 timmar efter det.</string>
<string name="hourly_max_insulin_title">Maximalt insulin per timme</string>
<string name="hourly_max_insulin_summary">Ange maximalt tillåtna insulin-enheter per timme. Om den överskrids kommer pumpen att pausas.</string>
<string name="daily_max_insulin_title">Maximal daglig insulin-dos</string>
<string name="daily_max_insulin_summary">Ange maximalt tillåtna insulin-enheter per dag. Om den överskrids kommer pumpen att pausas.</string>
<!-- treatment state-->
<string name="getting_pump_status">Hämtar pumpstatus</string>

View file

@ -114,9 +114,7 @@
<string name="pump_warning_notification_summary">Kritik olmayan pompa uyarılarıyla ilgili bildirimi göster: düşük pil, düşük rezervuar (20 birim) ve yakında süresi doluyor. Pompa alarmları sessize ayarlandığında etkin bırakılması önerilir.</string>
<string name="patch_expiration_title">Patch süre sonu</string>
<string name="patch_expiration_summary">Etkinleştirildiğinde, patch 3 gün sonra sona erecek ve bunun ardından 8 saatlik bir ek süre tanınacaktır.</string>
<string name="hourly_max_insulin_title">Saatlik Maksimum insülin</string>
<string name="hourly_max_insulin_summary">Bir saatte izin verilen maksimum insülini (Ü) belirtin. Bu değer aşılırsa pompa askıya alınır.</string>
<string name="daily_max_insulin_title">Günlük Maksimum insülin</string>
<string name="daily_max_insulin_summary">Bir günde izin verilen maksimum insülini (Ü) belirtin. Bu değer aşılırsa pompa askıya alınır.</string>
<!-- treatment state-->
<string name="getting_pump_status">Pompa durumu alınıyor</string>

View file

@ -5,6 +5,7 @@
<string name="key_alarm_setting" translatable="false">alarm_setting</string>
<string name="key_patch_expiration" translatable="false">patch_expiration</string>
<string name="key_pump_warning_notification" translatable="false">pump_warning_notification</string>
<string name="key_pump_warning_expiry_hour" translatable="false">pump_expiry_warning_hour</string>
<string name="key_hourly_max_insulin" translatable="false">hourly_max_insulin</string>
<string name="key_daily_max_insulin" translatable="false">daily_max_insulin</string>
@ -145,11 +146,13 @@
<string name="alarm_setting_summary">Select your preferred pump alarm settings.</string>
<string name="pump_warning_notification_title">Notification on pump warning</string>
<string name="pump_warning_notification_summary">Show notification on non critical pump warnings: low battery, low reservoir (20 units) and expires soon. Recommended to leave enabled when pump alarms are set to silent.</string>
<string name="pump_warning_expiry_hour_title">Pump expiry warning [hours]</string>
<string name="pump_warning_expiry_hour_summary">Show notification on specified hour after activation.</string>
<string name="patch_expiration_title">Patch Expiration</string>
<string name="patch_expiration_summary">When enabled, the patch will expire after 3 days, with a grace period of 8 hours after that.</string>
<string name="hourly_max_insulin_title">Hourly Maximum Insulin</string>
<string name="hourly_max_insulin_title">Hourly Maximum Insulin [Units]</string>
<string name="hourly_max_insulin_summary">Specify the maximum units of insulin allowed per hour. If exceeded, the pump will suspend.</string>
<string name="daily_max_insulin_title">Daily Maximum Insulin</string>
<string name="daily_max_insulin_title">Daily Maximum Insulin [Units]</string>
<string name="daily_max_insulin_summary">Specify the maximum units of insulin allowed per day. If exceeded, the pump will suspend.</string>
<!-- treatment state-->

View file

@ -13,12 +13,6 @@
android:singleLine="true"
android:title="@string/sn_input_title" />
<SwitchPreference
android:defaultValue="true"
android:key="@string/key_patch_expiration"
android:title="@string/patch_expiration_title"
android:summary="@string/patch_expiration_summary" />
<ListPreference
android:defaultValue="6"
android:key="@string/key_alarm_setting"
@ -33,6 +27,22 @@
android:title="@string/pump_warning_notification_title"
android:summary="@string/pump_warning_notification_summary" />
<SwitchPreference
android:defaultValue="true"
android:key="@string/key_patch_expiration"
android:title="@string/patch_expiration_title"
android:summary="@string/patch_expiration_summary" />
<app.aaps.core.validators.ValidatingEditTextPreference
android:defaultValue="72"
android:inputType="number"
android:key="@string/key_pump_warning_expiry_hour"
android:title="@string/pump_warning_expiry_hour_title"
android:dialogMessage="@string/pump_warning_expiry_hour_summary"
validate:maxNumber="80"
validate:minNumber="48"
validate:testType="numericRange" />
<app.aaps.core.validators.ValidatingEditTextPreference
android:defaultValue="25"
android:inputType="number"

View file

@ -116,7 +116,7 @@
<string name="omnipod_common_preferences_category_alerts">Varsler</string>
<string name="omnipod_common_preferences_category_confirmation_beeps">Bekreftelseslyd</string>
<string name="omnipod_common_preferences_category_notifications">Varsler</string>
<string name="omnipod_common_preferences_notification_uncertain_tbr_sound_enabled">Lydvarsel for ubekreftet temp basal dosering (TBR) er aktivert</string>
<string name="omnipod_common_preferences_notification_uncertain_tbr_sound_enabled">Lydvarsel for ubekreftet midlertidig basaldosering (TBR) er aktivert</string>
<string name="omnipod_common_preferences_notification_uncertain_smb_sound_enabled">Lydvarsel for ubekreftet SMB er aktivert</string>
<string name="omnipod_common_preferences_notification_uncertain_bolus_sound_enabled">Lydvarsel for ubekreftet bolus er aktivert</string>
<!-- Omnipod - Pod Status -->
@ -134,7 +134,7 @@
<string name="omnipod_common_cmd_discard_pod">Forkast Pod</string>
<string name="omnipod_common_cmd_set_bolus">Angi Bolus</string>
<string name="omnipod_common_cmd_cancel_bolus">Avbryt Bolus</string>
<string name="omnipod_common_cmd_set_tbr">Angi Midlertidig Basal</string>
<string name="omnipod_common_cmd_set_tbr">Angi midlertidig basal</string>
<string name="omnipod_common_cmd_cancel_tbr_by_driver">Avbryt midlertidig basal (internt av driver)</string>
<string name="omnipod_common_cmd_cancel_tbr">Avbryt midlertidig basal</string>
<string name="omnipod_common_cmd_set_basal_schedule">Angi basalprogram</string>

View file

@ -44,10 +44,10 @@
<string name="omnipod_eros_error_set_basal_failed_delivery_might_be_suspended">Endring av basalprofil mislyktes. Insulinlevering kan bli stoppet! Vennligst velg Oppdater Pod fra Omnipod fanen og velg gjenoppta levering hvis nødvendig.</string>
<string name="omnipod_eros_error_set_basal_might_have_failed_delivery_might_be_suspended">Endring av basalprofil kan ha feilet. Insulinlevering kan bli stoppet! Vennligst velg Oppdater Pod fra Omnipod fanen og velg gjenoppta levering hvis nødvendig.</string>
<string name="omnipod_eros_error_set_basal_failed_delivery_suspended">Endring av basal profil mislyktes. Insulinlevering er stoppet! Velg gjenoppta levering manuelt fra Omnipod-menyen.</string>
<string name="omnipod_eros_error_cancel_temp_basal_failed_uncertain">Mislyktes trolig med å kansellere temp basal. Vennligst oppdater Pod status manuelt fra Omnipod menyen.</string>
<string name="omnipod_eros_error_cancel_temp_basal_failed_uncertain">Mislyktes trolig med å kansellere midlertidig basal. Vennligst oppdater Pod-status manuelt fra Omnipod-menyen.</string>
<string name="omnipod_eros_error_set_temp_basal_failed_old_tbr_might_be_cancelled">Endring av midlertidig basal var mislykket. En tidligere midlertidig basal kan ha blitt kansellert. Oppdater statusen på Pod manuelt fra Omnipod fanen.</string>
<string name="omnipod_eros_error_set_temp_basal_failed_old_tbr_cancelled_new_might_have_failed">Setting av temp basal kan ha feilet. Hvis en temp basal allerede var aktiv så er den nå avbrutt. Vennligst oppdater Pod status manuelt fra Omnipod menyen.</string>
<string name="omnipod_eros_error_set_temp_basal_failed_validation">TBR varighet må være større enn null og et multiplum av %1$s minutter.</string>
<string name="omnipod_eros_error_set_temp_basal_failed_old_tbr_cancelled_new_might_have_failed">Setting av midlertidig basal kan ha feilet. Hvis en midlertidig basal allerede var aktiv så er den nå avbrutt. Vennligst oppdater Pod-status manuelt fra Omnipod-menyen.</string>
<string name="omnipod_eros_error_set_temp_basal_failed_validation">Midlertidig basalvarighet må være større enn null og et multiplum av %1$s minutter.</string>
<string name="omnipod_eros_error_set_time_failed_delivery_might_be_suspended">Innstilling av tid kan ha mislyktes. Insulinlevering kan være pauset! Oppdater statusen manuelt fra fanen Omnipod og gjenoppta levering hvis nødvendig.</string>
<string name="omnipod_eros_error_set_time_failed_delivery_suspended">Endring av tid mislyktes. Insulinlevering er pauset! Velg gjenoppta levering manuelt fra Omnipod-fanen.</string>
<string name="omnipod_eros_error_failed_to_read_pulse_log">Feilet i å lese Pulsloggen</string>

View file

@ -35,7 +35,7 @@ class TreatmentsActivity : TranslatedDaggerAppCompatActivity() {
// Use index, TabItems crashes with an id
val useFakeTempBasal = activePlugin.activePump.isFakingTempsByExtendedBoluses
binding.treatmentsTabs.getTabAt(1)?.view?.visibility = useFakeTempBasal.toVisibility()
binding.treatmentsTabs.getTabAt(1)?.view?.visibility = useFakeTempBasal.not().toVisibility()
setFragment(TreatmentsBolusCarbsFragment())
setSupportActionBar(binding.toolbar)

View file

@ -48,9 +48,9 @@
<string name="timeshift_label">Cambio de hora</string>
<string name="percentage_label">Porcentaje</string>
<!-- LoopDialog -->
<string name="suspendloopfor1h">Suspender bucle durante 1 hora</string>
<string name="suspendloopfor2h">Suspender bucle durante 2 horas</string>
<string name="suspendloopfor3h">Suspender bucle durante 3 horas</string>
<string name="suspendloopfor1h">Suspender lazo durante 1 hora</string>
<string name="suspendloopfor2h">Suspender lazo durante 2 horas</string>
<string name="suspendloopfor3h">Suspender lazo durante 3 horas</string>
<string name="suspendloopfor10h">Suspender bucle durante 10 horas</string>
<string name="disconnectpump">Desconectar bomba</string>
<string name="disconnectpumpfor15m">Desconectar la bomba durante 15 minutos</string>
@ -101,12 +101,12 @@
<string name="show_invalidated">Mostrar invalidados</string>
<string name="hide_invalidated">Ocultar invalidados</string>
<string name="careportal_remove_started_events">Eliminar registros de inicio de AAPS</string>
<string name="hide_loop">Ocultar bucle</string>
<string name="show_loop">Mostrar bucle</string>
<string name="hide_loop">Ocultar lazo</string>
<string name="show_loop">Mostrar lazo</string>
<string name="user_entry">Registro por parte del usuario</string>
<string name="clone_label">Duplicar</string>
<string name="show_loop_records">Mostrar registros del bucle</string>
<string name="show_hide_records">Ocultar registros del bucle</string>
<string name="show_loop_records">Mostrar registros del lazo</string>
<string name="show_hide_records">Ocultar registros del lazo</string>
<!-- ProfileHelperActivity -->
<string name="profile1">Perfil 1</string>
<string name="profile2">Perfil 2</string>

View file

@ -7,7 +7,7 @@
<string name="start_activity_tt">Start midlertidig mål for Aktivitet</string>
<string name="start_eating_soon_tt">Start midlertidig mål for Spise snart</string>
<string name="start_hypo_tt">Start midlertidig mål for Hypo</string>
<string name="time_offset">Tids- forskyvning</string>
<string name="time_offset">Tidsforskyvning</string>
<string name="unit_minute_short">min</string>
<string name="remind_to_bolus_later">Påminnelse om å gi bolus senere</string>
<string name="a11y_carb_reminder">angi påminnelse</string>
@ -45,7 +45,7 @@
<string name="do_not_bolus_record_only">Ikke gi bolus, bare loggfør hendelse</string>
<!-- ProfileSwitchDialog -->
<string name="reuse_profile_pct_hours">Gjenbruk %1$d%% %2$dt</string>
<string name="timeshift_label">Tids- forskyving</string>
<string name="timeshift_label">Tidsforskyving</string>
<string name="percentage_label">Prosent</string>
<!-- LoopDialog -->
<string name="suspendloopfor1h">Pause loop i 1t</string>

View file

@ -70,56 +70,6 @@
</intent-filter>
</service>
<service
android:name=".watchfaces.AapsWatchface"
android:allowEmbedded="true"
android:exported="false"
android:label="@string/label_watchface"
android:permission="android.permission.BIND_WALLPAPER">
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/watch_face" />
<meta-data
android:name="com.google.android.wearable.watchface.preview"
android:resource="@drawable/watchface_graph" />
<meta-data
android:name="com.google.android.wearable.watchface.wearableConfigurationAction"
android:value="watch_face_configuration_home" />
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
<category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</service>
<service
android:name=".watchfaces.AapsV2Watchface"
android:allowEmbedded="true"
android:exported="false"
android:label="@string/label_watchface_v2"
android:permission="android.permission.BIND_WALLPAPER">
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/watch_face" />
<meta-data
android:name="com.google.android.wearable.watchface.preview"
android:resource="@drawable/watchface_graph_2" />
<meta-data
android:name="com.google.android.wearable.watchface.wearableConfigurationAction"
android:value="watch_face_configuration_home2" />
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
<category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</service>
<service
android:name=".watchfaces.AapsLargeWatchface"
android:allowEmbedded="true"
@ -601,8 +551,6 @@
<action android:name="watch_face_configuration_circle" />
<action android:name="watch_face_configuration_custom" />
<action android:name="watch_face_configuration_digitalstyle" />
<action android:name="watch_face_configuration_home" />
<action android:name="watch_face_configuration_home2" />
<action android:name="watch_face_configuration_largehome" />
<action android:name="watch_face_configuration_nochart" />

View file

@ -20,8 +20,6 @@ import app.aaps.wear.tile.QuickWizardTileService
import app.aaps.wear.tile.TempTargetTileService
import app.aaps.wear.tile.TileBase
import app.aaps.wear.watchfaces.AapsLargeWatchface
import app.aaps.wear.watchfaces.AapsV2Watchface
import app.aaps.wear.watchfaces.AapsWatchface
import app.aaps.wear.watchfaces.BigChartWatchface
import app.aaps.wear.watchfaces.CircleWatchface
import app.aaps.wear.watchfaces.CustomWatchface
@ -52,8 +50,6 @@ abstract class WearServicesModule {
@ContributesAndroidInjector abstract fun contributesWallpaperComplication(): WallpaperComplication
@ContributesAndroidInjector abstract fun contributesBaseWatchFace(): BaseWatchFace
@ContributesAndroidInjector abstract fun contributesAapsWatchface(): AapsWatchface
@ContributesAndroidInjector abstract fun contributesAapsV2Watchface(): AapsV2Watchface
@ContributesAndroidInjector abstract fun contributesAapsLargeWatchface(): AapsLargeWatchface
@ContributesAndroidInjector abstract fun contributesDigitalStyleWatchface(): DigitalStyleWatchface
@ContributesAndroidInjector abstract fun contributesBIGChart(): BigChartWatchface

View file

@ -1,172 +0,0 @@
package app.aaps.wear.watchfaces
import android.graphics.Color
import android.view.LayoutInflater
import androidx.annotation.ColorInt
import androidx.core.content.ContextCompat
import androidx.viewbinding.ViewBinding
import app.aaps.wear.R
import app.aaps.wear.databinding.ActivityHome2Binding
import app.aaps.wear.watchfaces.utils.BaseWatchFace
import com.ustwo.clockwise.common.WatchMode
class AapsV2Watchface : BaseWatchFace() {
private lateinit var binding: ActivityHome2Binding
override fun inflateLayout(inflater: LayoutInflater): ViewBinding {
binding = ActivityHome2Binding.inflate(inflater)
return binding
}
override fun setColorDark() {
@ColorInt val dividerTxtColor = if (dividerMatchesBg) ContextCompat.getColor(this, R.color.dark_midColor) else Color.BLACK
@ColorInt val dividerBatteryOkColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery)
@ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView)
binding.secondaryLayout.setBackgroundColor(dividerBgColor)
binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.iob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.iob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.cob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.cob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.day.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.month.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.loop.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
setTextSizes()
val color = when (singleBg.sgvLevel) {
1L -> R.color.dark_highColor
0L -> R.color.dark_midColor
-1L -> R.color.dark_lowColor
else -> R.color.dark_midColor
}
binding.sgv.setTextColor(ContextCompat.getColor(this, color))
binding.direction.setTextColor(ContextCompat.getColor(this, color))
val colorTime = if (ageLevel == 1) R.color.dark_midColor else R.color.dark_TimestampOld
binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime))
val colourBat = if (status.batteryLevel == 1) dividerBatteryOkColor else ContextCompat.getColor(this, R.color.dark_uploaderBatteryEmpty)
binding.uploaderBattery.setTextColor(colourBat)
binding.rigBattery.setTextColor(dividerTxtColor)
binding.delta.setTextColor(dividerTxtColor)
binding.avgDelta.setTextColor(dividerTxtColor)
binding.basalRate.setTextColor(dividerTxtColor)
binding.bgi.setTextColor(dividerTxtColor)
when (loopLevel) {
-1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25)
else -> binding.loop.setBackgroundResource(R.drawable.loop_red_25)
}
highColor = ContextCompat.getColor(this, R.color.dark_highColor)
lowColor = ContextCompat.getColor(this, R.color.dark_lowColor)
midColor = ContextCompat.getColor(this, R.color.dark_midColor)
gridColor = ContextCompat.getColor(this, R.color.dark_gridColor)
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark)
basalCenterColor = ContextCompat.getColor(this, R.color.basal_light)
pointSize = 2
setupCharts()
}
override fun setColorLowRes() {
@ColorInt val dividerTxtColor = if (dividerMatchesBg) ContextCompat.getColor(this, R.color.dark_midColor) else Color.BLACK
@ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView)
binding.secondaryLayout.setBackgroundColor(dividerBgColor)
binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
binding.loop.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.sgv.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.direction.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp))
binding.delta.setTextColor(dividerTxtColor)
binding.avgDelta.setTextColor(dividerTxtColor)
binding.rigBattery.setTextColor(dividerTxtColor)
binding.uploaderBattery.setTextColor(dividerTxtColor)
binding.basalRate.setTextColor(dividerTxtColor)
binding.bgi.setTextColor(dividerTxtColor)
binding.iob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.iob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.cob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.cob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.day.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.month.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime))
highColor = ContextCompat.getColor(this, R.color.dark_midColor)
lowColor = ContextCompat.getColor(this, R.color.dark_midColor)
midColor = ContextCompat.getColor(this, R.color.dark_midColor)
gridColor = ContextCompat.getColor(this, R.color.dark_gridColor)
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres)
basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres)
pointSize = 2
setupCharts()
setTextSizes()
}
override fun setColorBright() {
if (currentWatchMode == WatchMode.INTERACTIVE) {
@ColorInt val dividerTxtColor = if (dividerMatchesBg) Color.BLACK else ContextCompat.getColor(this, R.color.dark_midColor)
@ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background)
binding.secondaryLayout.setBackgroundColor(dividerBgColor)
binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background))
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background))
binding.time.setTextColor(Color.BLACK)
binding.iob1.setTextColor(Color.BLACK)
binding.iob2.setTextColor(Color.BLACK)
binding.cob1.setTextColor(Color.BLACK)
binding.cob2.setTextColor(Color.BLACK)
binding.day.setTextColor(Color.BLACK)
binding.month.setTextColor(Color.BLACK)
binding.loop.setTextColor(Color.BLACK)
setTextSizes()
val color = when (singleBg.sgvLevel) {
1L -> R.color.light_highColor
0L -> R.color.light_midColor
-1L -> R.color.light_lowColor
else -> R.color.light_midColor
}
binding.sgv.setTextColor(ContextCompat.getColor(this, color))
binding.direction.setTextColor(ContextCompat.getColor(this, color))
val colorTime = if (ageLevel == 1) Color.BLACK else Color.RED
binding.timestamp.setTextColor(colorTime)
val colourBat = if (status.batteryLevel == 1) dividerTxtColor else Color.RED
binding.uploaderBattery.setTextColor(colourBat)
binding.rigBattery.setTextColor(dividerTxtColor)
binding.delta.setTextColor(dividerTxtColor)
binding.avgDelta.setTextColor(dividerTxtColor)
binding.basalRate.setTextColor(dividerTxtColor)
binding.bgi.setTextColor(dividerTxtColor)
when (loopLevel) {
-1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25)
else -> binding.loop.setBackgroundResource(R.drawable.loop_red_25)
}
highColor = ContextCompat.getColor(this, R.color.light_highColor)
lowColor = ContextCompat.getColor(this, R.color.light_lowColor)
midColor = ContextCompat.getColor(this, R.color.light_midColor)
gridColor = ContextCompat.getColor(this, R.color.light_gridColor)
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light)
basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark)
pointSize = 2
setupCharts()
} else {
setColorDark()
}
}
private fun setTextSizes() {
if (detailedIob) {
binding.iob1.textSize = 14f
binding.iob2.textSize = 10f
} else {
binding.iob1.textSize = 10f
binding.iob2.textSize = 14f
}
}
}

View file

@ -1,107 +0,0 @@
package app.aaps.wear.watchfaces
import android.graphics.Color
import android.view.LayoutInflater
import androidx.core.content.ContextCompat
import androidx.viewbinding.ViewBinding
import app.aaps.wear.R
import app.aaps.wear.databinding.ActivityHomeBinding
import app.aaps.wear.watchfaces.utils.BaseWatchFace
import com.ustwo.clockwise.common.WatchMode
class AapsWatchface : BaseWatchFace() {
private lateinit var binding: ActivityHomeBinding
override fun inflateLayout(inflater: LayoutInflater): ViewBinding {
binding = ActivityHomeBinding.inflate(inflater)
return binding
}
override fun setColorDark() {
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
binding.secondaryLayout.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView))
binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime))
val color = when (singleBg.sgvLevel) {
1L -> R.color.dark_highColor
0L -> R.color.dark_midColor
-1L -> R.color.dark_lowColor
else -> R.color.dark_midColor
}
binding.sgv.setTextColor(ContextCompat.getColor(this, color))
binding.delta.setTextColor(ContextCompat.getColor(this, color))
binding.direction.setTextColor(ContextCompat.getColor(this, color))
val colorTime = if (ageLevel == 1) if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mTimestamp1_home else R.color.dark_TimestampOld
binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime))
val colourBat = if (status.batteryLevel == 1) if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery else R.color.dark_uploaderBatteryEmpty
binding.uploaderBattery.setTextColor(ContextCompat.getColor(this, colourBat))
binding.status.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mStatus_home))
highColor = ContextCompat.getColor(this, R.color.dark_highColor)
lowColor = ContextCompat.getColor(this, R.color.dark_lowColor)
midColor = ContextCompat.getColor(this, R.color.dark_midColor)
gridColor = ContextCompat.getColor(this, R.color.dark_gridColor)
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark)
basalCenterColor = ContextCompat.getColor(this, R.color.basal_light)
pointSize = 2
setupCharts()
}
override fun setColorLowRes() {
binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime))
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
binding.sgv.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.delta.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp))
highColor = ContextCompat.getColor(this, R.color.dark_midColor)
lowColor = ContextCompat.getColor(this, R.color.dark_midColor)
midColor = ContextCompat.getColor(this, R.color.dark_midColor)
gridColor = ContextCompat.getColor(this, R.color.dark_gridColor)
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres)
basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres)
pointSize = 2
setupCharts()
}
override fun setColorBright() {
if (currentWatchMode == WatchMode.INTERACTIVE) {
binding.secondaryLayout.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background))
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background))
val color = when (singleBg.sgvLevel) {
1L -> R.color.light_highColor
0L -> R.color.light_midColor
-1L -> R.color.light_lowColor
else -> R.color.light_midColor
}
binding.sgv.setTextColor(ContextCompat.getColor(this, color))
binding.delta.setTextColor(ContextCompat.getColor(this, color))
binding.direction.setTextColor(ContextCompat.getColor(this, color))
val colorTime = if (ageLevel == 1) if (dividerMatchesBg) Color.BLACK else Color.WHITE else Color.RED
binding.timestamp.setTextColor(colorTime)
val colourBat = if (status.batteryLevel == 1) if (dividerMatchesBg) Color.BLACK else Color.WHITE else Color.RED
binding.uploaderBattery.setTextColor(colourBat)
binding.status.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE)
binding.time.setTextColor(Color.BLACK)
highColor = ContextCompat.getColor(this, R.color.light_highColor)
lowColor = ContextCompat.getColor(this, R.color.light_lowColor)
midColor = ContextCompat.getColor(this, R.color.light_midColor)
gridColor = ContextCompat.getColor(this, R.color.light_gridColor)
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light)
basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark)
pointSize = 2
setupCharts()
} else {
setColorDark()
}
}
}

View file

@ -106,15 +106,15 @@ class CustomWatchface : BaseWatchFace() {
override fun setColorDark() {
setWatchfaceStyle()
if ((ViewMap.SGV.dynData?.stepFontColor ?: 0) == 0)
if ((ViewMap.SGV.dynData?.stepFontColor ?: 0) <= 0)
binding.sgv.setTextColor(bgColor)
if ((ViewMap.DIRECTION.dynData?.stepColor ?: 0) == 0)
if ((ViewMap.DIRECTION.dynData?.stepColor ?: 0) <= 0)
binding.direction2.colorFilter = changeDrawableColor(bgColor)
if (ageLevel != 1 && (ViewMap.TIMESTAMP.dynData?.stepFontColor ?: 0) == 0)
if (ageLevel != 1 && (ViewMap.TIMESTAMP.dynData?.stepFontColor ?: 0) <= 0)
binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld))
if (status.batteryLevel != 1 && (ViewMap.UPLOADER_BATTERY.dynData?.stepFontColor ?: 0) == 0)
if (status.batteryLevel != 1 && (ViewMap.UPLOADER_BATTERY.dynData?.stepFontColor ?: 0) <= 0)
binding.uploaderBattery.setTextColor(lowBatColor)
if ((ViewMap.LOOP.dynData?.stepDraw ?: 0) == 0) // Apply automatic background image only if no dynData or no step images
if ((ViewMap.LOOP.dynData?.stepDraw ?: 0) <= 0) // Apply automatic background image only if no dynData or no step images
when (loopLevel) {
-1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25)
@ -160,6 +160,10 @@ class CustomWatchface : BaseWatchFace() {
FontMap.init(this)
ViewMap.init(this)
TrendArrowMap.init(this)
binding.freetext1.text = ""
binding.freetext2.text = ""
binding.freetext3.text = ""
binding.freetext4.text = ""
}
if (checkPref()) {
DynProvider.init(this, json)
@ -393,10 +397,10 @@ class CustomWatchface : BaseWatchFace() {
MINUTE(ViewKeys.MINUTE.key, R.id.minute),
SECOND(ViewKeys.SECOND.key, R.id.second, R.string.key_show_seconds),
TIMEPERIOD(ViewKeys.TIMEPERIOD.key, R.id.timePeriod),
DAY_NAME(ViewKeys.DAY_NAME.key, R.id.day_name),
DAY(ViewKeys.DAY.key, R.id.day),
DAY_NAME(ViewKeys.DAY_NAME.key, R.id.day_name, R.string.key_show_date),
DAY(ViewKeys.DAY.key, R.id.day, R.string.key_show_date),
WEEKNUMBER(ViewKeys.WEEKNUMBER.key, R.id.week_number, R.string.key_show_week_number),
MONTH(ViewKeys.MONTH.key, R.id.month),
MONTH(ViewKeys.MONTH.key, R.id.month, R.string.key_show_date),
LOOP(ViewKeys.LOOP.key, R.id.loop, R.string.key_show_external_status),
DIRECTION(ViewKeys.DIRECTION.key, R.id.direction2, R.string.key_show_direction),
TIMESTAMP(ViewKeys.TIMESTAMP.key, R.id.timestamp, R.string.key_show_ago),
@ -436,6 +440,7 @@ class CustomWatchface : BaseWatchFace() {
);
companion object {
const val TRANSPARENT = "#00000000"
fun init(cwf: CustomWatchface) = values().forEach {
it.cwf = cwf
@ -447,6 +452,7 @@ class CustomWatchface : BaseWatchFace() {
it.viewJson = null
it.twinView = null
}
fun fromId(id: Int): ViewMap? = values().firstOrNull { it.id == id }
fun fromKey(key: String?): ViewMap? = values().firstOrNull { it.key == key }
}
@ -477,6 +483,7 @@ class CustomWatchface : BaseWatchFace() {
}
var twinView: ViewMap? = null
get() = field ?: viewJson?.let { viewJson -> ViewMap.fromKey(viewJson.optString(TWINVIEW.key)).also { twinView = it } }
fun visibility(): Boolean = this.pref?.let { cwf.sp.getBoolean(it, true) }
?: true
@ -492,39 +499,42 @@ class CustomWatchface : BaseWatchFace() {
top = (viewJson.optInt(TOPMARGIN.key) * cwf.zoomFactor).toInt()
val params = FrameLayout.LayoutParams(width, height)
dynData = DynProvider.getDyn(cwf, viewJson.optString(DYNPREF.key), viewJson.optString(DYNDATA.key), width, height, key)
val topOffset = if (viewJson.optBoolean(TOPOFFSET.key, false)) dynData?.getTopOffset() ?: 0 else 0
val topOffset = ((if (viewJson.optBoolean(TOPOFFSET.key, false)) dynData?.getTopOffset() ?: 0 else 0) * cwf.zoomFactor).toInt()
val topOffsetTwin = ((twinView?.let { if (it.visibility != View.VISIBLE) viewJson.optInt(TOPOFFSETTWINHIDDEN.key, 0) else 0 } ?: 0) * cwf.zoomFactor).toInt()
params.topMargin = top + topOffset + topOffsetTwin
val leftOffset = if (viewJson.optBoolean(LEFTOFFSET.key, false)) dynData?.getLeftOffset() ?: 0 else 0
val topOffsetStep = ((dynData?.getTopOffsetStep() ?:0) * cwf.zoomFactor).toInt()
params.topMargin = top + topOffset + topOffsetTwin + topOffsetStep
val leftOffset = ((if (viewJson.optBoolean(LEFTOFFSET.key, false)) dynData?.getLeftOffset() ?: 0 else 0) * cwf.zoomFactor).toInt()
val leftOffsetTwin = ((twinView?.let { if (it.visibility != View.VISIBLE) viewJson.optInt(LEFTOFFSETTWINHIDDEN.key, 0) else 0 } ?: 0) * cwf.zoomFactor).toInt()
params.leftMargin = left + leftOffset + leftOffsetTwin
val leftOffsetStep = ((dynData?.getLeftOffsetStep() ?:0) * cwf.zoomFactor).toInt()
params.leftMargin = left + leftOffset + leftOffsetTwin + leftOffsetStep
view.layoutParams = params
val rotationOffset = if (viewJson.optBoolean(ROTATIONOFFSET.key, false)) dynData?.getRotationOffset()?.toFloat() ?: 0F else 0F
view.rotation = viewJson.optInt(ROTATION.key).toFloat() + rotationOffset
val rotationOffsetStep = (dynData?.getRotationOffsetStep() ?:0).toFloat()
view.rotation = viewJson.optInt(ROTATION.key).toFloat() + rotationOffset + rotationOffsetStep
}
}
fun customizeTextView(view: TextView) {
customizeViewCommon(view)
viewJson?.let { viewJson ->
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, (viewJson.optInt(TEXTSIZE.key, 22) * cwf.zoomFactor).toFloat())
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, ((dynData?.getTextSizeStep() ?: viewJson.optInt(TEXTSIZE.key, 22)) * cwf.zoomFactor).toFloat())
view.gravity = GravityMap.gravity(viewJson.optString(GRAVITY.key, GravityMap.CENTER.key))
view.setTypeface(
FontMap.font(viewJson.optString(FONT.key, FontMap.DEFAULT.key)),
StyleMap.style(viewJson.optString(FONTSTYLE.key, StyleMap.NORMAL.key))
)
view.setTextColor(dynData?.getFontColor() ?: cwf.getColor(viewJson.optString(FONTCOLOR.key)))
view.setTextColor(dynData?.getFontColorStep() ?: cwf.getColor(viewJson.optString(FONTCOLOR.key)))
view.isAllCaps = viewJson.optBoolean(ALLCAPS.key)
if (viewJson.has(TEXTVALUE.key))
view.text = viewJson.optString(TEXTVALUE.key)
(dynData?.getDrawable() ?: textDrawable())?.let {
if (viewJson.has(COLOR.key) || (dynData?.stepColor ?: 0) > 0) // Note only works on bitmap (png or jpg) not for svg files
it.colorFilter = cwf.changeDrawableColor(dynData?.getColor() ?: cwf.getColor(viewJson.optString(COLOR.key)))
it.colorFilter = cwf.changeDrawableColor(dynData?.getColorStep() ?: cwf.getColor(viewJson.optString(COLOR.key)))
else
it.clearColorFilter()
view.background = it
} ?: apply { // if no drawable loaded either background key or dynData, then apply color to text background
view.setBackgroundColor(dynData?.getColor() ?: cwf.getColor(viewJson.optString(COLOR.key, TRANSPARENT), Color.TRANSPARENT))
view.setBackgroundColor(dynData?.getColorStep() ?: cwf.getColor(viewJson.optString(COLOR.key, TRANSPARENT), Color.TRANSPARENT))
}
} ?: apply { view.text = "" }
}
@ -535,19 +545,19 @@ class CustomWatchface : BaseWatchFace() {
viewJson?.let { viewJson ->
drawable?.let {
if (viewJson.has(COLOR.key) || (dynData?.stepColor ?: 0) > 0) // Note only works on bitmap (png or jpg) not for svg files
it.colorFilter = cwf.changeDrawableColor(dynData?.getColor() ?: cwf.getColor(viewJson.optString(COLOR.key)))
it.colorFilter = cwf.changeDrawableColor(dynData?.getColorStep() ?: cwf.getColor(viewJson.optString(COLOR.key)))
else
it.clearColorFilter()
view.setImageDrawable(it)
} ?: apply {
view.setImageDrawable(defaultDrawable?.let { cwf.resources.getDrawable(it) })
if (viewJson.has(COLOR.key) || (dynData?.stepColor ?: 0) > 0) // works on xml included into res files
view.setColorFilter(dynData?.getColor() ?: cwf.getColor(viewJson.optString(COLOR.key)))
view.setColorFilter(dynData?.getColorStep() ?: cwf.getColor(viewJson.optString(COLOR.key)))
else
view.clearColorFilter()
}
if (view.drawable == null) // if no drowable (either default, hardcoded or dynData, then apply color to background
view.setBackgroundColor(dynData?.getColor() ?: cwf.getColor(viewJson.optString(COLOR.key, TRANSPARENT), Color.TRANSPARENT))
view.setBackgroundColor(dynData?.getColorStep() ?: cwf.getColor(viewJson.optString(COLOR.key, TRANSPARENT), Color.TRANSPARENT))
}
}
@ -556,12 +566,12 @@ class CustomWatchface : BaseWatchFace() {
viewJson?.let { viewJson ->
(dynData?.getDrawable() ?: textDrawable())?.let {
if (viewJson.has(COLOR.key) || (dynData?.stepColor ?: 0) > 0) // Note only works on bitmap (png or jpg) not for svg files
it.colorFilter = cwf.changeDrawableColor(dynData?.getColor() ?: cwf.getColor(viewJson.optString(COLOR.key)))
it.colorFilter = cwf.changeDrawableColor(dynData?.getColorStep() ?: cwf.getColor(viewJson.optString(COLOR.key)))
else
it.clearColorFilter()
view.background = it
} ?: apply { // if no drowable loaded, then apply color to background
view.setBackgroundColor(dynData?.getColor() ?: cwf.getColor(viewJson.optString(COLOR.key, TRANSPARENT), Color.TRANSPARENT))
view.setBackgroundColor(dynData?.getColorStep() ?: cwf.getColor(viewJson.optString(COLOR.key, TRANSPARENT), Color.TRANSPARENT))
}
}
}
@ -586,6 +596,7 @@ class CustomWatchface : BaseWatchFace() {
it.arrowCustom = null
}
fun drawable() = values().firstOrNull { it.symbol == it.cwf.singleBg.slopeArrow }?.arrowCustom ?: NONE.arrowCustom
fun value() = values().firstOrNull { it.symbol == it.cwf.singleBg.slopeArrow }?.dynValue ?: NONE.dynValue
}
@ -673,12 +684,15 @@ class CustomWatchface : BaseWatchFace() {
SHOW_BGI(CwfMetadataKey.CWF_PREF_WATCH_SHOW_BGI.key, R.string.key_show_bgi, true),
SHOW_LOOP_STATUS(CwfMetadataKey.CWF_PREF_WATCH_SHOW_LOOP_STATUS.key, R.string.key_show_external_status, true),
SHOW_WEEK_NUMBER(CwfMetadataKey.CWF_PREF_WATCH_SHOW_WEEK_NUMBER.key, R.string.key_show_week_number, true),
SHOW_DATE(CwfMetadataKey.CWF_PREF_WATCH_SHOW_DATE.key, R.string.key_show_date, true),
PREF_UNITS(JsonKeyValues.PREF_UNITS.key, R.string.key_units_mgdl, true),
PREF_DARK(JsonKeyValues.PREF_DARK.key, R.string.key_dark, true),
PREF_MATCH_DIVIDER(JsonKeyValues.PREF_MATCH_DIVIDER.key, R.string.key_match_divider, true);
var value: String = ""
companion object {
fun fromKey(key: String) = PrefMap.values().firstOrNull { it.key == key }
}
}
@ -727,16 +741,28 @@ class CustomWatchface : BaseWatchFace() {
private val dynDrawable = mutableMapOf<Int, Drawable?>()
private val dynColor = mutableMapOf<Int, Int>()
private val dynFontColor = mutableMapOf<Int, Int>()
private val dynTextSize = mutableMapOf<Int, Int>()
private val dynLeftOffset = mutableMapOf<Int, Int>()
private val dynTopOffset = mutableMapOf<Int, Int>()
private val dynRotationOffset = mutableMapOf<Int, Int>()
private var dataRange: DataRange? = null
private var topRange: DataRange? = null
private var leftRange: DataRange? = null
private var rotationRange: DataRange? = null
val stepDraw: Int
get() = dynDrawable[0]?.let { dynDrawable.size - 1 } ?: dynDrawable.size
get() = dynDrawable.size - 1
val stepColor: Int
get() = dynColor[0]?.let { dynColor.size - 1 } ?: dynColor.size
val stepFontColor: Int
get() = dynFontColor[0]?.let { dynFontColor.size - 1 } ?: dynFontColor.size
val stepTextSize: Int
get() = dynTextSize[0]?.let { dynTextSize.size - 1 } ?: dynTextSize.size
val stepLeftOffset: Int
get() = dynLeftOffset[0]?.let { dynLeftOffset.size - 1 } ?: dynLeftOffset.size
val stepTopOffset: Int
get() = dynTopOffset[0]?.let { dynTopOffset.size - 1 } ?: dynTopOffset.size
val stepRotationOffset: Int
get() = dynRotationOffset[0]?.let { dynRotationOffset.size - 1 } ?: dynRotationOffset.size
val dataValue: Double?
get() = when (valueMap) {
@ -756,14 +782,32 @@ class CustomWatchface : BaseWatchFace() {
ValueMap.WEEKNUMBER -> DateTime().weekOfWeekyear.toDouble()
}
fun getTopOffset(): Int = dataRange?.let { dataRange -> topRange?.let { topRange -> dataValue?.let { (valueMap.dynValue(it, dataRange, topRange) * cwf.zoomFactor).toInt() }
?: (topRange.invalidData * cwf.zoomFactor).toInt() } } ?: 0
fun getLeftOffset(): Int = dataRange?.let { dataRange -> leftRange?.let { leftRange -> dataValue?.let { (valueMap.dynValue(it, dataRange, leftRange) * cwf.zoomFactor).toInt() }
?: (leftRange.invalidData * cwf.zoomFactor).toInt() } } ?: 0
fun getTopOffset(): Int = dataRange?.let { dataRange ->
topRange?.let { topRange ->
dataValue?.let { (valueMap.dynValue(it, dataRange, topRange) * cwf.zoomFactor).toInt() }
?: (topRange.invalidData * cwf.zoomFactor).toInt()
}
} ?: 0
fun getLeftOffset(): Int = dataRange?.let { dataRange ->
leftRange?.let { leftRange ->
dataValue?.let { (valueMap.dynValue(it, dataRange, leftRange) * cwf.zoomFactor).toInt() }
?: (leftRange.invalidData * cwf.zoomFactor).toInt()
}
} ?: 0
fun getRotationOffset(): Int = dataRange?.let { dataRange -> rotationRange?.let { rotRange -> dataValue?.let { valueMap.dynValue(it, dataRange, rotRange) } ?: rotRange.invalidData } } ?: 0
fun getDrawable() = dataRange?.let { dataRange -> dataValue?.let { dynDrawable[valueMap.stepValue(it, dataRange, stepDraw)] } ?: dynDrawable[0] ?: dynDrawable[1] }
fun getFontColor() = if (stepFontColor > 0) dataRange?.let { dataRange -> dataValue?.let { dynFontColor[valueMap.stepValue(it, dataRange, stepFontColor)] } ?: dynFontColor[0] ?: dynFontColor[1] } else null
fun getColor() = if (stepColor > 0) dataRange?.let { dataRange -> dataValue?.let { dynColor[valueMap.stepValue(it, dataRange, stepColor)] } ?: dynColor[0] ?: dynColor[1] } else null
fun getDrawable() = dataRange?.let { dataRange -> dataValue?.let { dynDrawable[valueMap.stepValue(it, dataRange, stepDraw)] } ?: dynDrawable[0] }
fun getFontColorStep() = getIntValue(dynFontColor, stepFontColor)
fun getTextSizeStep() = getIntValue(dynTextSize, stepTextSize)
fun getColorStep() = getIntValue(dynColor, stepColor)
fun getTopOffsetStep() = getIntValue(dynTopOffset, stepTopOffset)
fun getLeftOffsetStep() = getIntValue(dynLeftOffset, stepLeftOffset)
fun getRotationOffsetStep() = getIntValue(dynRotationOffset, stepRotationOffset)
private fun getIntValue(dynMap: MutableMap<Int, Int>, step: Int) =
if (step > 0) dataRange?.let { dataRange -> dataValue?.let { dynMap[valueMap.stepValue(it, dataRange, step)] } ?: dynMap[0] ?: dynMap[1] } else null
private fun load() {
DataRange(dataJson.optDouble(MINDATA.key, valueMap.min), dataJson.optDouble(MAXDATA.key, valueMap.max)).let { defaultRange ->
dataRange = defaultRange
@ -771,30 +815,56 @@ class CustomWatchface : BaseWatchFace() {
leftRange = parseDataRange(dataJson.optJSONObject(LEFTOFFSET.key), defaultRange)
rotationRange = parseDataRange(dataJson.optJSONObject(ROTATIONOFFSET.key), defaultRange)
}
if (dataJson.has(INVALIDIMAGE.key))
dynDrawable[0] = dataJson.optString(INVALIDIMAGE.key)?.let { cwf.resDataMap[it]?.toDrawable(cwf.resources, width, height) }
getDrawableSteps(dynDrawable, IMAGE.key, INVALIDIMAGE.key)
getColorSteps(dynColor, COLOR.key, INVALIDCOLOR.key)
getColorSteps(dynFontColor, FONTCOLOR.key, INVALIDFONTCOLOR.key)
getIntSteps(dynTextSize, TEXTSIZE.key, INVALIDTEXTSIZE.key)
getIntSteps(dynLeftOffset, LEFTOFFSET.key, INVALIDTEXTSIZE.key)
getIntSteps(dynTopOffset, TOPOFFSET.key, INVALIDTEXTSIZE.key)
getIntSteps(dynRotationOffset, ROTATIONOFFSET.key, INVALIDTEXTSIZE.key)
}
private fun getDrawableSteps(dynMap: MutableMap<Int, Drawable?>, key: String, invalidKey: String) {
if (dataJson.has(invalidKey))
dynMap[0] = dataJson.optString(invalidKey)?.let { cwf.resDataMap[it]?.toDrawable(cwf.resources, width, height) }
var idx = 1
while (dataJson.has("${IMAGE.key}$idx")) {
cwf.resDataMap[dataJson.optString("${IMAGE.key}$idx")]?.toDrawable(cwf.resources, width, height).also { dynDrawable[idx] = it }
idx++
}
if (dataJson.has(INVALIDCOLOR.key))
dynColor[0] = cwf.getColor(dataJson.optString(INVALIDCOLOR.key))
idx = 1
while (dataJson.has("${COLOR.key}$idx")) {
dynColor[idx] = cwf.getColor(dataJson.optString("${COLOR.key}$idx"))
idx++
}
if (dataJson.has(INVALIDFONTCOLOR.key))
dynFontColor[0] = cwf.getColor(dataJson.optString(INVALIDFONTCOLOR.key))
idx = 1
while (dataJson.has("${FONTCOLOR.key}$idx")) {
dynFontColor[idx] = cwf.getColor(dataJson.optString("${FONTCOLOR.key}$idx"))
while (dataJson.has("${key}$idx")) {
cwf.resDataMap[dataJson.optString("${key}$idx")]?.toDrawable(cwf.resources, width, height).also { dynMap[idx] = it }
idx++
}
}
private fun getColorSteps(dynMap: MutableMap<Int, Int>, key: String, invalidKey: String) {
if (dataJson.has(invalidKey))
dynMap[0] = cwf.getColor(dataJson.optString(invalidKey))
var idx = 1
while (dataJson.has("${key}$idx")) {
dynMap[idx] = cwf.getColor(dataJson.optString("${key}$idx"))
idx++
}
}
private fun getIntSteps(dynMap: MutableMap<Int, Int>, key: String, invalidKey: String) {
if (dataJson.has(invalidKey))
dynMap[0] = dataJson.optInt(invalidKey)
var idx = 1
while (dataJson.has("${key}$idx")) {
dynMap[idx] = dataJson.optInt("${key}$idx", 22)
idx++
}
}
private fun parseDataRange(json: JSONObject?, defaultData: DataRange) =
json?.let {
DataRange(
minData = it.optDouble(MINVALUE.key, defaultData.minData),
maxData = it.optDouble(MAXVALUE.key, defaultData.maxData),
invalidData = it.optInt(INVALIDVALUE.key, defaultData.invalidData)
)
} ?: defaultData
companion object {
val dynData = mutableMapOf<String, DynProvider>()
var dynJson: JSONObject? = null
fun init(cwf: CustomWatchface, json: JSONObject?) {
@ -824,15 +894,6 @@ class CustomWatchface : BaseWatchFace() {
return dynData[defaultViewKey]
}
private fun parseDataRange(json: JSONObject?, defaultData: DataRange) =
json?.let {
DataRange(
minData = it.optDouble(MINVALUE.key, defaultData.minData),
maxData = it.optDouble(MAXVALUE.key, defaultData.maxData),
invalidData = it.optInt(INVALIDVALUE.key, defaultData.invalidData)
)
} ?: defaultData
}
}
@ -845,11 +906,12 @@ class CustomWatchface : BaseWatchFace() {
valPref.clear()
dynPref.clear()
dynJson?.keys()?.forEach { key ->
dynJson.optJSONObject(key)?.let { buildDynPrefs(dynJson, it, key, mutableSetOf()) }
val targetJson = JSONObject()
dynJson.optJSONObject(key)?.let { buildDynPrefs(dynJson, targetJson, it, key, mutableSetOf()) }
}
}
private fun buildDynPrefs(dynJson: JSONObject, json: JSONObject, key: String, visitedKeys: MutableSet<String>) {
private fun buildDynPrefs(dynJson: JSONObject, targetJson: JSONObject, json: JSONObject, key: String, visitedKeys: MutableSet<String>) {
val prefKey = json.optString(PREFKEY.key)
PrefMap.fromKey(prefKey)?.let { prefMap ->
val value = valPref[prefMap.key]
@ -858,16 +920,23 @@ class CustomWatchface : BaseWatchFace() {
}
json.optJSONObject(value)?.let { nextJson ->
if (nextJson.has(DYNPREF.key)) {
nextJson.keys().forEach { key ->
if (key != DYNPREF.key)
targetJson.putOpt(key, nextJson.opt(key))
}
val nextKey = nextJson.optString(DYNPREF.key)
if (nextKey.isNotEmpty() && nextKey !in visitedKeys) {
visitedKeys += nextKey
dynJson.optJSONObject(nextKey)?.let {
buildDynPrefs(dynJson, it, key, visitedKeys)
buildDynPrefs(dynJson, targetJson, it, key, visitedKeys)
}
}
} else {
//aapsLogger.debug("XXXXX dynKey json $key $nextJson")
dynPref[key] = nextJson
nextJson.keys().forEach { key ->
if (key != DYNPREF.key)
targetJson.putOpt(key, nextJson.opt(key))
}
dynPref[key] = targetJson
}
}
}

View file

@ -4,8 +4,6 @@ import androidx.viewbinding.ViewBinding
import app.aaps.wear.databinding.ActivityBigchartBinding
import app.aaps.wear.databinding.ActivityCustomBinding
import app.aaps.wear.databinding.ActivityDigitalstyleBinding
import app.aaps.wear.databinding.ActivityHome2Binding
import app.aaps.wear.databinding.ActivityHomeBinding
import app.aaps.wear.databinding.ActivityHomeLargeBinding
import app.aaps.wear.databinding.ActivityNochartBinding
@ -15,8 +13,6 @@ import app.aaps.wear.databinding.ActivityNochartBinding
*/
class WatchfaceViewAdapter(
aL: ActivityHomeLargeBinding? = null,
a2: ActivityHome2Binding? = null,
aa: ActivityHomeBinding? = null,
bC: ActivityBigchartBinding? = null,
ds: ActivityDigitalstyleBinding? = null,
nC: ActivityNochartBinding? = null,
@ -24,7 +20,7 @@ class WatchfaceViewAdapter(
) {
init {
if (aL == null && a2 == null && aa == null && bC == null && ds == null && nC == null && cU == null) {
if (aL == null && bC == null && ds == null && nC == null && cU == null) {
throw IllegalArgumentException("Require at least on Binding parameter")
}
}
@ -33,47 +29,46 @@ class WatchfaceViewAdapter(
// Required attributes
val mainLayout =
aL?.mainLayout ?: a2?.mainLayout ?: aa?.mainLayout ?: bC?.mainLayout ?: bC?.mainLayout ?: ds?.mainLayout ?: nC?.mainLayout ?: cU?.mainLayout
aL?.mainLayout ?: bC?.mainLayout ?: bC?.mainLayout ?: ds?.mainLayout ?: nC?.mainLayout ?: cU?.mainLayout
?: throw IllegalArgumentException(errorMessage)
val timestamp =
aL?.timestamp ?: a2?.timestamp ?: aa?.timestamp ?: bC?.timestamp ?: bC?.timestamp ?: ds?.timestamp ?: nC?.timestamp ?: cU?.timestamp
aL?.timestamp ?: bC?.timestamp ?: bC?.timestamp ?: ds?.timestamp ?: nC?.timestamp ?: cU?.timestamp
?: throw IllegalArgumentException(errorMessage)
val root =
aL?.root ?: a2?.root ?: aa?.root ?: bC?.root ?: bC?.root ?: ds?.root ?: nC?.root ?: cU?.root
aL?.root ?: bC?.root ?: bC?.root ?: ds?.root ?: nC?.root ?: cU?.root
?: throw IllegalArgumentException(errorMessage)
// Optional attributes
val sgv = aL?.sgv ?: a2?.sgv ?: aa?.sgv ?: bC?.sgv ?: bC?.sgv ?: ds?.sgv ?: nC?.sgv ?: cU?.sgv
val direction = aL?.direction ?: a2?.direction ?: aa?.direction ?: ds?.direction
val loop = a2?.loop ?: cU?.loop
val delta = aL?.delta ?: a2?.delta ?: aa?.delta ?: bC?.delta ?: bC?.delta ?: ds?.delta ?: nC?.delta ?: cU?.delta
val avgDelta = a2?.avgDelta ?: bC?.avgDelta ?: bC?.avgDelta ?: ds?.avgDelta ?: nC?.avgDelta ?: cU?.avgDelta
val uploaderBattery = aL?.uploaderBattery ?: a2?.uploaderBattery ?: aa?.uploaderBattery ?: ds?.uploaderBattery ?: cU?.uploaderBattery
val rigBattery = a2?.rigBattery ?: ds?.rigBattery ?: cU?.rigBattery
val basalRate = a2?.basalRate ?: ds?.basalRate ?: cU?.basalRate
val bgi = a2?.bgi ?: ds?.bgi ?: cU?.bgi
val AAPSv2 = a2?.AAPSv2 ?: ds?.AAPSv2 ?: cU?.AAPSv2
val cob1 = a2?.cob1 ?: ds?.cob1 ?: cU?.cob1
val cob2 = a2?.cob2 ?: ds?.cob2 ?: cU?.cob2
val time = aL?.time ?: a2?.time ?: aa?.time ?: bC?.time ?: bC?.time ?: nC?.time ?: cU?.time
val sgv = aL?.sgv ?: bC?.sgv ?: bC?.sgv ?: ds?.sgv ?: nC?.sgv ?: cU?.sgv
val direction = aL?.direction ?: ds?.direction
val loop = cU?.loop
val delta = aL?.delta ?: bC?.delta ?: bC?.delta ?: ds?.delta ?: nC?.delta ?: cU?.delta
val avgDelta = bC?.avgDelta ?: bC?.avgDelta ?: ds?.avgDelta ?: nC?.avgDelta ?: cU?.avgDelta
val uploaderBattery = aL?.uploaderBattery ?: ds?.uploaderBattery ?: cU?.uploaderBattery
val rigBattery = ds?.rigBattery ?: cU?.rigBattery
val basalRate = ds?.basalRate ?: cU?.basalRate
val bgi = ds?.bgi ?: cU?.bgi
val AAPSv2 = ds?.AAPSv2 ?: cU?.AAPSv2
val cob1 = ds?.cob1 ?: cU?.cob1
val cob2 = ds?.cob2 ?: cU?.cob2
val time = aL?.time ?: bC?.time ?: bC?.time ?: nC?.time ?: cU?.time
val second = cU?.second
val minute = ds?.minute ?: cU?.minute
val hour = ds?.hour ?: cU?.hour
val day = a2?.day ?: ds?.day ?: cU?.day
val month = a2?.month ?: ds?.month ?: cU?.month
val iob1 = a2?.iob1 ?: ds?.iob1 ?: cU?.iob1
val iob2 = a2?.iob2 ?: ds?.iob2 ?: cU?.iob2
val chart = a2?.chart ?: aa?.chart ?: bC?.chart ?: bC?.chart ?: ds?.chart ?: cU?.chart
val status = aL?.status ?: aa?.status ?: bC?.status ?: bC?.status ?: nC?.status
val day = ds?.day ?: cU?.day
val month = ds?.month ?: cU?.month
val iob1 = ds?.iob1 ?: cU?.iob1
val iob2 = ds?.iob2 ?: cU?.iob2
val chart = bC?.chart ?: bC?.chart ?: ds?.chart ?: cU?.chart
val status = aL?.status ?: bC?.status ?: bC?.status ?: nC?.status
val timePeriod = ds?.timePeriod ?: aL?.timePeriod ?: nC?.timePeriod ?: bC?.timePeriod ?: cU?.timePeriod
val dayName = ds?.dayName ?: cU?.dayName
val mainMenuTap = ds?.mainMenuTap
val chartZoomTap = ds?.chartZoomTap
val dateTime = ds?.dateTime ?: a2?.dateTime
val dateTime = ds?.dateTime
val weekNumber = ds?.weekNumber ?: cU?.weekNumber
// val minuteHand = cU?.minuteHand
// val secondaryLayout = aL?.secondaryLayout ?: a2?.secondaryLayout ?: aa?.secondaryLayout ?: ds?.secondaryLayout
// val tertiaryLayout = a2?.tertiaryLayout
// val secondaryLayout = aL?.secondaryLayout ?: ds?.secondaryLayout
// val hourHand = cU?.hourHand
companion object {
@ -81,12 +76,10 @@ class WatchfaceViewAdapter(
fun getBinding(bindLayout: ViewBinding): WatchfaceViewAdapter {
return when (bindLayout) {
is ActivityHomeLargeBinding -> WatchfaceViewAdapter(bindLayout)
is ActivityHome2Binding -> WatchfaceViewAdapter(null, bindLayout)
is ActivityHomeBinding -> WatchfaceViewAdapter(null, null, bindLayout)
is ActivityBigchartBinding -> WatchfaceViewAdapter(null, null, null, bindLayout)
is ActivityDigitalstyleBinding -> WatchfaceViewAdapter(null, null, null, null, bindLayout)
is ActivityNochartBinding -> WatchfaceViewAdapter(null, null, null, null, null, bindLayout)
is ActivityCustomBinding -> WatchfaceViewAdapter(null, null, null, null, null, null, bindLayout)
is ActivityBigchartBinding -> WatchfaceViewAdapter(null, bindLayout)
is ActivityDigitalstyleBinding -> WatchfaceViewAdapter(null, null, bindLayout)
is ActivityNochartBinding -> WatchfaceViewAdapter(null, null, null, bindLayout)
is ActivityCustomBinding -> WatchfaceViewAdapter(null, null, null, null, bindLayout)
else -> throw IllegalArgumentException("ViewBinding is not implement in WatchfaceViewAdapter")
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 KiB

View file

@ -1,135 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".watchfaces.AapsWatchface">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/secondary_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/sgv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:gravity="bottom"
android:textSize="41sp"
tools:text="---" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/direction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="25sp"
android:textStyle="bold"
tools:text="--" />
<TextView
android:id="@+id/delta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="11sp"
android:textStyle="bold"
tools:text="1" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/secondary_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="?android:colorForeground"
android:gravity="center_horizontal"
android:paddingVertical="1dp"
app:layout_constraintBottom_toTopOf="@+id/time">
<TextView
android:id="@+id/timestamp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="11sp"
android:textStyle="bold"
tools:text="@string/time_stamp_na_min_ago" />
<TextView
android:id="@+id/uploader_battery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10sp"
android:paddingEnd="0sp"
android:textAlignment="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="11sp"
android:textStyle="bold"
tools:text="@string/uploader_na" />
<TextView
android:id="@+id/raw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10sp"
android:paddingEnd="0sp"
android:textAlignment="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="11sp"
android:textStyle="bold"
tools:text="" />
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10sp"
android:paddingEnd="0sp"
android:textAlignment="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="11sp"
android:textStyle="bold"
tools:text="@string/no_status" />
</LinearLayout>
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|top"
android:textAlignment="center"
android:textSize="35sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="12:00" />
<lecho.lib.hellocharts.view.LineChartView
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="-5dp"
android:paddingBottom="7dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/time" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,285 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".watchfaces.AapsV2Watchface">
<LinearLayout
android:id="@+id/primary_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center_horizontal"
app:layout_constraintBottom_toTopOf="@+id/secondary_layout"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/loop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@drawable/loop_grey_25"
android:gravity="center"
android:textSize="14sp"
android:textStyle="bold"
tools:text="--'" />
<TextView
android:id="@+id/sgv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity=""
android:layout_marginBottom="-2dp"
android:paddingHorizontal="5dp"
android:textSize="38sp"
tools:text="---" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/direction"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"
android:textStyle="bold"
tools:text="--" />
<TextView
android:id="@+id/timestamp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="14sp"
android:textStyle="bold"
tools:text="--'" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/secondary_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="?android:colorForeground"
android:paddingVertical="1dp"
app:layout_constraintBottom_toTopOf="@+id/tertiary_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="5dp">
<TextView
android:id="@+id/delta"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="13sp"
android:textStyle="bold"
tools:text="+/-" />
<TextView
android:id="@+id/avg_delta"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="13sp"
android:textStyle="bold"
tools:text="@string/abbreviation_average" />
<TextView
android:id="@+id/uploader_battery"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:textAlignment="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="13sp"
android:textStyle="bold"
tools:text="--%" />
<TextView
android:id="@+id/rig_battery"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:textAlignment="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="13sp"
android:textStyle="bold"
android:visibility="visible"
tools:text="--%" />
<TextView
android:id="@+id/basalRate"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1.7"
android:gravity="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="13sp"
android:textStyle="bold"
tools:text="@string/no_tmp_basal_u_h" />
<TextView
android:id="@+id/bgi"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="13sp"
android:textStyle="bold"
android:visibility="visible"
tools:text="bgi" />
<View
android:id="@+id/AAPSv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/tertiary_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:weightSum="7"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/cob1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/activity_carb"
android:textSize="11sp" />
<TextView
android:id="@+id/cob2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_cob_g"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
<View
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textSize="30sp"
tools:text="12:00" />
<LinearLayout
android:id="@+id/date_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/day"
android:layout_width="23dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textAlignment="center"
android:textSize="12sp"
tools:text="day" />
<TextView
android:id="@+id/month"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textSize="12sp"
tools:text="mth" />
</LinearLayout>
<View
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical"
android:textAlignment="center">
<TextView
android:id="@+id/iob1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textAlignment="center"
android:textSize="11sp"
tools:text="@string/activity_IOB" />
<TextView
android:id="@+id/iob2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textSize="14sp"
android:textStyle="bold"
tools:text="@string/no_iob_u" />
</LinearLayout>
</LinearLayout>
<lecho.lib.hellocharts.view.LineChartView
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="-5dp"
android:layout_marginBottom="7dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tertiary_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(голям)</string>
<string name="label_watchface_big_chart">AAPS(Графика)</string>
<string name="label_watchface_no_chart">AAPS(без Графика)</string>
<string name="label_watchface_circle">AAPS(Кръгъл)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS (DigitalStyle)</string>
<string name="label_watchface_custom">AAPS(Персонализиран)</string>
<string name="label_actions_tile">AAPS(Действия)</string>

View file

@ -2,7 +2,6 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(Gros)</string>
<string name="label_watchface_big_chart">AAPS(GrafGrossa)</string>
<string name="label_watchface_no_chart">AAPS(NoGraf)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(velký)</string>
<string name="label_watchface_big_chart">AAPS(VelkýGraf)</string>
<string name="label_watchface_no_chart">AAPS(BezGrafu)</string>
<string name="label_watchface_circle">AAPS(Kruhový)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS (DigitalStyle)</string>
<string name="label_watchface_custom">AAPS (vlastní)</string>
<string name="label_actions_tile">AAPS(Akce)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS (Stor)</string>
<string name="label_watchface_big_chart">AAPS(StorGraf)</string>
<string name="label_watchface_no_chart">AAPS(IngenGraf)</string>
<string name="label_watchface_circle">AAPS(Cirkel)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS (DigitalStil)</string>
<string name="label_watchface_custom">AAPS(Brugerdefineret)</string>
<string name="label_actions_tile">AAPS (Handlinger)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(groß)</string>
<string name="label_watchface_big_chart">AAPS(GroßerGraph)</string>
<string name="label_watchface_no_chart">AAPS(KeinGraph)</string>
<string name="label_watchface_circle">AAPS(Kreis)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS(DigitalStyle)</string>
<string name="label_watchface_custom">AAPS(Custom)</string>
<string name="label_actions_tile">AAPS(Aktionen)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(μεγάλο)</string>
<string name="label_watchface_big_chart">AAPS(μεγαλο_γράφημα)</string>
<string name="label_watchface_no_chart">AAPS(χωρίς_γράφημα)</string>
<string name="label_watchface_circle">AAPS(Κυκλικό)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS(ψηφιακό)</string>
<string name="label_watchface_custom">AAPS(προσαρμοσμένααρακτηριστικά)</string>
<string name="label_actions_tile">AAPS( Ενέργειες)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS (Grande)</string>
<string name="label_watchface_big_chart">AAPS (Aumentado)</string>
<string name="label_watchface_no_chart">AAPS (SinGráfico)</string>
<string name="label_watchface_circle">AAPS (Círculo)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS (Digital)</string>
<string name="label_watchface_custom">AAPS(personalizado)</string>
<string name="label_actions_tile">AAPS(Acciones)</string>
@ -37,7 +35,7 @@
<string name="pref_show_phone_battery">Mostrar batería del teléfono</string>
<string name="pref_show_rig_battery">Mostrar batería de la plataforma</string>
<string name="pref_show_basal_rate">Mostrar la tasa basal</string>
<string name="pref_show_loop_status">Mostrar estado de bucle</string>
<string name="pref_show_loop_status">Mostrar estado del lazo</string>
<string name="pref_show_bg">Mostrar glucosa</string>
<string name="pref_show_bgi">Mostrar BGI (Índice de glucosa en sangre)</string>
<string name="pref_show_direction_arrow">Mostrar flecha de dirección</string>
@ -122,7 +120,7 @@
<string name="press_to_cancel">Presiona para cancelar</string>
<string name="cancel_bolus">CANCELAR BOLO</string>
<string name="status_pump">Infusora</string>
<string name="status_loop">Bucle</string>
<string name="status_loop">Lazo</string>
<string name="status_profile_switch">Cambio de perfil</string>
<string name="status_tdd">TDD</string>
<string name="activity_carb">COB</string>
@ -190,7 +188,7 @@
<string name="no_status">S: --</string>
<string name="time_stamp_na_min_ago">-- Hace min.</string>
<string name="delta_na">--- mg/dl</string>
<string name="no_loop_status">Sin estado del bucle</string>
<string name="no_loop_status">Sin estado del lazo</string>
<string name="cob_000g">000g</string>
<string name="svg_00_0" comment="use , or . only">00,0</string>
<string name="iob_0_00u">0,00U</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS (Large)</string>
<string name="label_watchface_big_chart">AAPS (GrandGraph)</string>
<string name="label_watchface_no_chart">AAPS (SansGraph)</string>
<string name="label_watchface_circle">AAPS (Cercle)</string>
<string name="label_watchface_v2">AAPS (v2)</string>
<string name="label_watchface_digital_style">AAPS (Digital)</string>
<string name="label_watchface_custom">AAPS(perso)</string>
<string name="label_actions_tile">AAPS (Actions)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(Veliki)</string>
<string name="label_watchface_big_chart">AAPS(Veliki Graf)</string>
<string name="label_watchface_no_chart">AAPS(Bez grafa)</string>
<string name="label_watchface_circle">AAPS(Kružni)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="pref_low">Nisko</string>
<string name="pref_high">Visoko</string>
<string name="menu_wizard">Kalkulator</string>

View file

@ -2,7 +2,6 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(Nagy)</string>
<string name="label_watchface_big_chart">AAPS(NagyGrafikon)</string>
<string name="label_watchface_no_chart">AAPS(NincsGrafikon)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(Large)</string>
<string name="label_watchface_big_chart">AAPS(BigChart)</string>
<string name="label_watchface_no_chart">AAPS(NoChart)</string>
<string name="label_watchface_circle">AAPS(Circle)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS(DigitalStyle)</string>
<string name="label_watchface_custom">AAPS(Personalizzato)</string>
<string name="label_actions_tile">AAPS(azioni)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS (גדול)</string>
<string name="label_watchface_big_chart">AAPS (תרשים גדול)</string>
<string name="label_watchface_no_chart">AAPS (ללא תרשים)</string>
<string name="label_watchface_circle">AAPS (עיגול)</string>
<string name="label_watchface_v2">AAPS (v2)</string>
<string name="label_watchface_digital_style">AAPS (דיגיטלי)</string>
<string name="label_actions_tile">AAPS (פעולות)</string>
<string name="label_temp_target_tile">AAPS (מטרה זמנית)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(대)</string>
<string name="label_watchface_big_chart">AAPS(큰차트)</string>
<string name="label_watchface_no_chart">AAPS(차트없음)</string>
<string name="label_watchface_circle">AAPS(원형)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS(디지털방식)</string>
<string name="label_watchface_custom">AAPS(Custom)</string>
<string name="label_actions_tile">AAPS(Actions)</string>

View file

@ -2,12 +2,10 @@
<resources>
<string name="app_name">AAPS</string>
<string name="label_actions_activity">AAPS</string>
<string name="label_watchface">AAPS</string>
<string name="label_watchface_large">AAPS(didelis)</string>
<string name="label_watchface_big_chart">AAPS(DidelisGrafikas)</string>
<string name="label_watchface_no_chart">AAPS(BeGrafiko)</string>
<string name="label_watchface_circle">AAPS(Apvalus)</string>
<string name="label_watchface_v2">AAPS(v2)</string>
<string name="label_watchface_digital_style">AAPS(DigitalStyle)</string>
<string name="label_watchface_custom">AAPS(suasmeninta)</string>
<string name="label_actions_tile">AAPS(Veiksmai)</string>

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