Merge branch 'dev' into kts

This commit is contained in:
Milos Kozak 2023-10-22 00:12:34 +02:00
commit ba0c61f04b
52 changed files with 247 additions and 199 deletions

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

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

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

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

@ -28,37 +28,39 @@
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="0dp"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="4dp"
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:singleLine="false"
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="0dp"
android:layout_height="match_parent"
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:singleLine="false"
android:foreground="?attr/selectableItemBackgroundBorderless"
app:drawableStartCompat="@drawable/ic_crosstarget"
tools:ignore="HardcodedText" />
</LinearLayout>
@ -70,7 +72,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:layout_marginTop="0dp"
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">HAN</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

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

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

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

@ -112,9 +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 [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 [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

@ -112,9 +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">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">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,9 +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 [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 [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,9 +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ę [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 [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

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

@ -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)
@ -184,10 +188,10 @@ class CustomWatchface : BaseWatchFace() {
binding.mainLayout.forEach { view ->
ViewMap.fromId(view.id)?.let { viewMap ->
when (view) {
is TextView -> viewMap.customizeTextView(view)
is ImageView -> viewMap.customizeImageView(view)
is TextView -> viewMap.customizeTextView(view)
is ImageView -> viewMap.customizeImageView(view)
is lecho.lib.hellocharts.view.LineChartView -> viewMap.customizeGraphView(view)
else -> viewMap.customizeViewCommon(view)
else -> viewMap.customizeViewCommon(view)
}
}
}
@ -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
@ -485,46 +492,49 @@ class CustomWatchface : BaseWatchFace() {
fun customizeViewCommon(view: View) {
view.visibility = visibility
viewJson?.let {viewJson ->
viewJson?.let { viewJson ->
width = (viewJson.optInt(WIDTH.key) * cwf.zoomFactor).toInt()
height = (viewJson.optInt(HEIGHT.key) * cwf.zoomFactor).toInt()
left = (viewJson.optInt(LEFTMARGIN.key) * cwf.zoomFactor).toInt()
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 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 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 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()
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()
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, ((dynData?.getTextSize() ?: 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
}
@ -679,7 +690,9 @@ class CustomWatchface : BaseWatchFace() {
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 }
}
}
@ -729,6 +742,9 @@ class CustomWatchface : BaseWatchFace() {
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
@ -741,6 +757,12 @@ class CustomWatchface : BaseWatchFace() {
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) {
@ -760,15 +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] }
fun getFontColor() = if (stepFontColor > 0) dataRange?.let { dataRange -> dataValue?.let { dynFontColor[valueMap.stepValue(it, dataRange, stepFontColor)] } ?: dynFontColor[0] ?: dynFontColor[1] } else null
fun getTextSize() = if (stepTextSize > 0) dataRange?.let { dataRange -> dataValue?.let { dynTextSize[valueMap.stepValue(it, dataRange, stepTextSize)] } ?: dynTextSize[0] ?: dynTextSize[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 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
@ -776,37 +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"))
idx++
}
if (dataJson.has(INVALIDTEXTSIZE.key))
dynTextSize[0] = cwf.getColor(dataJson.optString(INVALIDTEXTSIZE.key))
idx = 1
while (dataJson.has("${TEXTSIZE.key}$idx")) {
dynTextSize[idx] = dataJson.optInt("${TEXTSIZE.key}$idx", 22)
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?) {
@ -836,19 +894,10 @@ 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
}
}
private class DataRange (val minData: Double, val maxData: Double, val invalidData: Int = 0)
private class DataRange(val minData: Double, val maxData: Double, val invalidData: Int = 0)
// block below build a map of prefKey => json Bloc recursively
val dynPref = mutableMapOf<String, JSONObject>()
@ -872,7 +921,7 @@ class CustomWatchface : BaseWatchFace() {
json.optJSONObject(value)?.let { nextJson ->
if (nextJson.has(DYNPREF.key)) {
nextJson.keys().forEach { key ->
if ( key != DYNPREF.key)
if (key != DYNPREF.key)
targetJson.putOpt(key, nextJson.opt(key))
}
val nextKey = nextJson.optString(DYNPREF.key)
@ -884,7 +933,7 @@ class CustomWatchface : BaseWatchFace() {
}
} else {
nextJson.keys().forEach { key ->
if ( key != DYNPREF.key)
if (key != DYNPREF.key)
targetJson.putOpt(key, nextJson.opt(key))
}
dynPref[key] = targetJson

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(голям)</string>
<string name="label_watchface_big_chart">AAPS(Графика)</string>
<string name="label_watchface_no_chart">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,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(velký)</string>
<string name="label_watchface_big_chart">AAPS(VelkýGraf)</string>
<string name="label_watchface_no_chart">AAPS(BezGrafu)</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 (Stor)</string>
<string name="label_watchface_big_chart">AAPS(StorGraf)</string>
<string name="label_watchface_no_chart">AAPS(IngenGraf)</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(groß)</string>
<string name="label_watchface_big_chart">AAPS(GroßerGraph)</string>
<string name="label_watchface_no_chart">AAPS(KeinGraph)</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(μεγάλο)</string>
<string name="label_watchface_big_chart">AAPS(μεγαλο_γράφημα)</string>
<string name="label_watchface_no_chart">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 (Grande)</string>
<string name="label_watchface_big_chart">AAPS (Aumentado)</string>
<string name="label_watchface_no_chart">AAPS (SinGráfico)</string>
@ -36,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>
@ -121,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>
@ -189,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,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 (Large)</string>
<string name="label_watchface_big_chart">AAPS (GrandGraph)</string>
<string name="label_watchface_no_chart">AAPS (SansGraph)</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(Veliki)</string>
<string name="label_watchface_big_chart">AAPS(Veliki Graf)</string>
<string name="label_watchface_no_chart">AAPS(Bez grafa)</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,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(Large)</string>
<string name="label_watchface_big_chart">AAPS(BigChart)</string>
<string name="label_watchface_no_chart">AAPS(NoChart)</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 (גדול)</string>
<string name="label_watchface_big_chart">AAPS (תרשים גדול)</string>
<string name="label_watchface_no_chart">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(대)</string>
<string name="label_watchface_big_chart">AAPS(큰차트)</string>
<string name="label_watchface_no_chart">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(didelis)</string>
<string name="label_watchface_big_chart">AAPS(DidelisGrafikas)</string>
<string name="label_watchface_no_chart">AAPS(BeGrafiko)</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 (stor)</string>
<string name="label_watchface_big_chart">AAPS (stor graf)</string>
<string name="label_watchface_no_chart">AAPS (ingen graf)</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(Groot)</string>
<string name="label_watchface_big_chart">AAPS(GroteGrafiek)</string>
<string name="label_watchface_no_chart">AAPS(GeenGrafiek)</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(Duży)</string>
<string name="label_watchface_big_chart">AAPS(DużyWykres)</string>
<string name="label_watchface_no_chart">AAPS(BezWykresu)</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(Smartwatch grande)</string>
<string name="label_watchface_big_chart">AAPS(GrafGrande)</string>
<string name="label_watchface_no_chart">AAPS(SemGraf)</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(Grande)</string>
<string name="label_watchface_big_chart">AAPS(GrafGrande)</string>
<string name="label_watchface_no_chart">AAPS(SemGraf)</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(Mare)</string>
<string name="label_watchface_big_chart">AAPS(GraficMare)</string>
<string name="label_watchface_no_chart">AAPS(FărăGrafic)</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 (Большой)</string>
<string name="label_watchface_big_chart">AAPS (Крупный график)</string>
<string name="label_watchface_no_chart">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(Veľký)</string>
<string name="label_watchface_big_chart">AAPS(VeľkýGraf)</string>
<string name="label_watchface_no_chart">AAPS(ŽiadnyGraf)</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 (Large)</string>
<string name="label_watchface_big_chart">AAPS (BigChart)</string>
<string name="label_watchface_no_chart">AAPS (NoChart)</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(Büyük)</string>
<string name="label_watchface_big_chart">AAPS(BüyükGrafik)</string>
<string name="label_watchface_no_chart">AAPS(GrafikYok)</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(大)</string>
<string name="label_watchface_big_chart">AAPS(大图)</string>
<string name="label_watchface_no_chart">AAPS(无图)</string>