Merge remote-tracking branch 'Nightscout/dev' into Autotune/TuneWeekDaysClean

This commit is contained in:
Philoul 2022-12-01 23:21:45 +01:00
commit efeeb8a467
108 changed files with 745 additions and 317 deletions

View file

@ -0,0 +1,3 @@
package info.nightscout.rx.events
class EventUpdateOverviewCalcProgress(val from: String) : Event()

View file

@ -0,0 +1,3 @@
package info.nightscout.rx.events
class EventUpdateOverviewGraph(val from: String) : Event()

View file

@ -0,0 +1,3 @@
package info.nightscout.rx.events
class EventUpdateOverviewIobCob(val from: String) : Event()

View file

@ -0,0 +1,3 @@
package info.nightscout.rx.events
class EventUpdateOverviewSensitivity(val from: String) : Event()

View file

@ -6,5 +6,4 @@ import dagger.Module
includes = [
]
)
open class SharedModule {
}
open class SharedModule

View file

@ -221,6 +221,7 @@ dependencies {
implementation project(':pump:omnipod-common')
implementation project(':pump:omnipod-eros')
implementation project(':pump:omnipod-dash')
implementation project(':workflow')
implementation fileTree(include: ['*.jar'], dir: 'libs')

View file

@ -14,21 +14,21 @@ import dagger.android.HasAndroidInjector
import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.ActivityHistorybrowseBinding
import info.nightscout.core.events.EventIobCalculationProgress
import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.core.workflow.CalculationWorkflow
import info.nightscout.interfaces.Config
import info.nightscout.interfaces.overview.OverviewMenus
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.DefaultValueHelper
import info.nightscout.plugins.general.overview.OverviewMenus
import info.nightscout.plugins.general.overview.events.EventUpdateOverviewGraph
import info.nightscout.plugins.general.overview.graphData.GraphData
import info.nightscout.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventAutosensCalculationFinished
import info.nightscout.rx.events.EventCustomCalculationFinished
import info.nightscout.rx.events.EventRefreshOverview
import info.nightscout.rx.events.EventScale
import info.nightscout.rx.events.EventUpdateOverviewGraph
import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.logging.LTag
import info.nightscout.shared.extensions.toVisibility

View file

@ -35,6 +35,7 @@ import info.nightscout.rx.di.RxModule
import info.nightscout.shared.di.SharedModule
import info.nightscout.shared.impl.di.SharedImplModule
import info.nightscout.ui.di.UiModule
import info.nightscout.workflow.di.WorkflowModule
import javax.inject.Singleton
@Singleton

View file

@ -1,2 +0,0 @@
package info.nightscout.androidaps.utils

View file

@ -19,8 +19,6 @@ import info.nightscout.core.workflow.CalculationWorkflow.Companion.MAIN_CALCULAT
import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
import info.nightscout.plugins.iob.iobCobCalculator.IobCobOref1Worker
import info.nightscout.plugins.iob.iobCobCalculator.IobCobOrefWorker
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.Event
@ -33,6 +31,20 @@ import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.logging.LTag
import info.nightscout.shared.interfaces.ResourceHelper
import info.nightscout.shared.utils.DateUtil
import info.nightscout.workflow.DummyWorker
import info.nightscout.workflow.InvokeLoopWorker
import info.nightscout.workflow.LoadBgDataWorker
import info.nightscout.workflow.PrepareBasalDataWorker
import info.nightscout.workflow.PrepareBgDataWorker
import info.nightscout.workflow.PrepareBucketedDataWorker
import info.nightscout.workflow.PrepareIobAutosensGraphDataWorker
import info.nightscout.workflow.PreparePredictionsWorker
import info.nightscout.workflow.PrepareTemporaryTargetDataWorker
import info.nightscout.workflow.PrepareTreatmentsDataWorker
import info.nightscout.workflow.UpdateGraphWorker
import info.nightscout.workflow.UpdateIobCobSensWorker
import info.nightscout.workflow.iob.IobCobOref1Worker
import info.nightscout.workflow.iob.IobCobOrefWorker
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import javax.inject.Inject

View file

@ -28,7 +28,7 @@ buildscript {
tink_version = '1.7.0'
json_version = '20220320'
serialization_version = '1.4.1'
joda_version = '2.12.1'
joda_version = '2.12.1.1'
swipe_version = '1.1.0'
junit_version = '4.13.2'

View file

@ -1,4 +1,4 @@
package info.nightscout.plugins.iob.iobCobCalculator.events
package info.nightscout.core.events
import info.nightscout.core.workflow.CalculationWorkflow
import info.nightscout.rx.events.Event

View file

@ -6,15 +6,26 @@
<string name="application_protection">Защита приложения</string>
<string name="bolus_protection">Защита болюсов</string>
<string name="settings_password">Пароль параметров</string>
<string name="settings_pin">ПИН-код настроек</string>
<string name="application_password">Пароль приложения</string>
<string name="application_pin">PIN-код приложения</string>
<string name="bolus_password">Пароль болюсов</string>
<string name="bolus_pin">Пин-код болюса</string>
<string name="protection_timeout_title">Тайм-аут удержания пароля и пин-кода [s]</string>
<string name="protection_timeout_summary">Время до ввода пароля или PIN-кода</string>
<string name="biometric">Биометрия</string>
<string name="custom_password">Настраиваемый пароль</string>
<string name="custom_pin">Настраиваемый пин-код</string>
<string name="noprotection">Без защиты</string>
<string name="unsecure_fallback_biometric">Небезопасный резервный вход</string>
<string name="unsecure_fallback_descriotion_biometric">Биометрической защите требуется главный пароль для безопасности.\n\n Установите главный пароль!</string>
<string name="password_set">Пароль задан!</string>
<string name="pin_set">PIN-код установлен!</string>
<string name="password_not_set">Пароль не задан</string>
<string name="pin_not_set">PIN-код не задан</string>
<string name="password_not_changed">Пароль не был изменён</string>
<string name="pin_not_changed">PIN-код не изменён</string>
<string name="pin_cleared">PIN-код очищен!</string>
<string name="password_hint">Введите пароль здесь</string>
<string name="pin_hint">Введите PIN-код здесь</string>
</resources>

View file

@ -97,9 +97,7 @@ public class GraphView extends View {
lastDown = 0;
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (System.currentTimeMillis() - lastDown < 400) {
return true;
}
return System.currentTimeMillis() - lastDown < 400;
}
return false;
}

View file

@ -37,7 +37,7 @@ public interface LabelFormatter {
* false if it is a value for the y axis
* @return the formatted number as string
*/
public String formatLabel(double value, boolean isValueX);
String formatLabel(double value, boolean isValueX);
/**
* will be called in order to have a
@ -50,5 +50,5 @@ public interface LabelFormatter {
*
* @param viewport the used viewport
*/
public void setViewport(Viewport viewport);
void setViewport(Viewport viewport);
}

View file

@ -78,7 +78,7 @@ public class LegendRenderer {
/**
* wrapped styles
*/
private Styles mStyles;
private final Styles mStyles;
/**
* reference to the graphview
@ -94,7 +94,7 @@ public class LegendRenderer {
/**
* paint for the drawing
*/
private Paint mPaint;
private final Paint mPaint;
/**
* cached legend width

View file

@ -53,7 +53,7 @@ public class SecondScale {
* For the current version this is always
* true.
*/
private boolean mYAxisBoundsManual = true;
private final boolean mYAxisBoundsManual = true;
/**
* min y value for the y axis bounds

View file

@ -37,5 +37,5 @@ public interface ValueDependentColor<T extends DataPointInterface> {
* @return the color that the bar should be drawn with
* Generate the int via the android.graphics.Color class.
*/
public int get(T data);
int get(T data);
}

View file

@ -44,7 +44,7 @@ public class BarGraphSeries<E extends DataPointInterface> extends BaseSeries<E>
/**
* paint to do drawing on canvas
*/
private Paint mPaint;
private final Paint mPaint;
/**
* spacing between the bars in percentage.
@ -83,7 +83,7 @@ public class BarGraphSeries<E extends DataPointInterface> extends BaseSeries<E>
* stores the coordinates of the bars to
* trigger tap on series events.
*/
private Map<RectF, E> mDataPoints = new HashMap<RectF, E>();
private final Map<RectF, E> mDataPoints = new HashMap<RectF, E>();
/**
* creates bar series without any data

View file

@ -25,6 +25,7 @@ import android.util.Log;
import com.jjoe64.graphview.GraphView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@ -61,7 +62,7 @@ public abstract class BaseSeries<E extends DataPointInterface> implements Series
*
* will be filled while drawing via {@link #registerDataPoint(float, float, DataPointInterface)}
*/
private Map<PointF, E> mDataPoints = new HashMap<PointF, E>();
private final Map<PointF, E> mDataPoints = new HashMap<PointF, E>();
/**
* title for this series that can be displayed
@ -84,7 +85,7 @@ public abstract class BaseSeries<E extends DataPointInterface> implements Series
* stores the graphviews where this series is used.
* Can be more than one.
*/
private List<GraphView> mGraphViews;
private final List<GraphView> mGraphViews;
/**
* creates series without data
@ -101,9 +102,7 @@ public abstract class BaseSeries<E extends DataPointInterface> implements Series
*/
public BaseSeries(E[] data) {
mGraphViews = new ArrayList<GraphView>();
for (E d : data) {
mData.add(d);
}
Collections.addAll(mData, data);
}
/**
@ -168,7 +167,7 @@ public abstract class BaseSeries<E extends DataPointInterface> implements Series
return mData.iterator();
} else {
return new Iterator<E>() {
Iterator<E> org = mData.iterator();
final Iterator<E> org = mData.iterator();
E nextValue = null;
E nextNextValue = null;
boolean plusOne = true;
@ -350,9 +349,7 @@ public abstract class BaseSeries<E extends DataPointInterface> implements Series
*/
public void resetData(E[] data) {
mData.clear();
for (E d : data) {
mData.add(d);
}
Collections.addAll(mData, data);
checkValueOrder(null);
// update graphview

View file

@ -33,8 +33,8 @@ import java.util.Date;
public class DataPoint implements DataPointInterface, Serializable {
private static final long serialVersionUID=1428263322645L;
private double x;
private double y;
private final double x;
private final double y;
public DataPoint(double x, double y) {
this.x=x;

View file

@ -32,10 +32,10 @@ public interface DataPointInterface {
/**
* @return the x value
*/
public double getX();
double getX();
/**
* @return the y value
*/
public double getY();
double getY();
}

View file

@ -41,7 +41,7 @@ public class PointsGraphSeries<E extends DataPointInterface> extends BaseSeries<
* interface to implement a custom
* drawing for the data points.
*/
public static interface CustomShape {
public interface CustomShape {
/**
* called when drawing a single data point.
* use the x and y coordinates to render your
@ -201,10 +201,8 @@ public class PointsGraphSeries<E extends DataPointInterface> extends BaseSeries<
double orgY = y;
// overdraw
boolean overdraw = false;
if (x > graphWidth) { // end right
overdraw = true;
}
boolean overdraw = x > graphWidth;
// end right
if (y < 0) { // end bottom
overdraw = true;
}

View file

@ -42,22 +42,22 @@ public interface Series<E extends DataPointInterface> {
/**
* @return the lowest x-value of the data
*/
public double getLowestValueX();
double getLowestValueX();
/**
* @return the highest x-value of the data
*/
public double getHighestValueX();
double getHighestValueX();
/**
* @return the lowest y-value of the data
*/
public double getLowestValueY();
double getLowestValueY();
/**
* @return the highest y-value of the data
*/
public double getHighestValueY();
double getHighestValueY();
/**
* get the values for a specific range. It is
@ -69,7 +69,7 @@ public interface Series<E extends DataPointInterface> {
* @return all datapoints between the from and until x-value
* including the from and until data points.
*/
public Iterator<E> getValues(double from, double until);
Iterator<E> getValues(double from, double until);
/**
* Plots the series to the viewport.
@ -82,25 +82,25 @@ public interface Series<E extends DataPointInterface> {
* @param canvas canvas to draw on
* @param isSecondScale true if the drawing is for the second scale
*/
public void draw(GraphView graphView, Canvas canvas, boolean isSecondScale);
void draw(GraphView graphView, Canvas canvas, boolean isSecondScale);
/**
* @return the title of the series. Used in the legend
*/
public String getTitle();
String getTitle();
/**
* @return the color of the series. Used in the legend and should
* be used for the plotted points or lines.
*/
public int getColor();
int getColor();
/**
* set a listener for tap on a data point.
*
* @param l listener
*/
public void setOnDataPointTapListener(OnDataPointTapListener l);
void setOnDataPointTapListener(OnDataPointTapListener l);
/**
* called by the tap detector in order to trigger

View file

@ -0,0 +1,26 @@
package info.nightscout.interfaces.overview
import android.content.Context
import android.widget.ImageButton
interface OverviewMenus {
enum class CharType {
PRE,
TREAT,
BAS,
ABS,
IOB,
COB,
DEV,
BGI,
SEN,
ACT,
DEVSLOPE
}
val setting: List<Array<Boolean>>
fun loadGraphConfig()
fun setupChartMenu(context: Context, chartButton: ImageButton)
fun enabledTypes(graph: Int): String
fun isEnabledIn(type: CharType): Int
}

View file

@ -1,4 +1,3 @@
package info.nightscout.interfaces.source
interface DoingOwnUploadSource {
}
interface DoingOwnUploadSource

View file

@ -29,6 +29,10 @@
<string name="superbolus">Superbolus</string>
<string name="pump_paused">Pompe suspendue</string>
<string name="and">Et</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">Patient</string>
<string name="result">Résultat</string>
<string name="settings">Paramètres</string>
<string name="statuslights">Voyants d\'état</string>
<string name="do_ns_upload_title">Remonter les Gly vers NS</string>
<string name="configbuilder_insulin">Insuline</string>
<string name="value_unavailable_short">n/d</string>
@ -41,6 +45,7 @@
<string name="mute5min">Muet pendant 5 minutes</string>
<string name="mute">Muet</string>
<string name="success">Succès</string>
<string name="advancedsettings_title">Paramètres Avancés</string>
<!-- Protection-->
<string name="unlock_settings">Déverrouiller les paramètres</string>
<!-- Pumps -->
@ -109,6 +114,7 @@
<string name="location_not_found_title">Localisation désactivée</string>
<string name="location_not_found_message">Afin que la recherche par Bluetooth puisse marcher sur les nouveaux appareils, la localisation doit être activée. AAPS ne trace pas votre position, sauf lorsque vous activez l\'option Message d\'Urgence.</string>
<!-- Preferences -->
<string name="nav_plugin_preferences">Préférences du plugin</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Autorisation SMS manquante</string>
<plurals name="days">

View file

@ -45,6 +45,7 @@
<string name="mute5min">Отключить уведомления на 5 минут</string>
<string name="mute">Отключить звук</string>
<string name="success">Успешно</string>
<string name="advancedsettings_title">Дополнительные настройки</string>
<!-- Protection-->
<string name="unlock_settings">Разблокировать настройки</string>
<!-- Pumps -->

View file

@ -24,4 +24,5 @@
<string name="detailed_14_days">Podrobně 14 dní</string>
<string name="day_tir">Denní TIR</string>
<string name="night_tir">Noční TIR</string>
<string name="carbs_short" comment="max 6 characters">Sach</string>
</resources>

View file

@ -24,4 +24,5 @@
<string name="detailed_14_days">Détail de 14 jours</string>
<string name="day_tir">TIR Jour</string>
<string name="night_tir">TIR Nuit</string>
<string name="carbs_short" comment="max 6 characters">Gluc.</string>
</resources>

View file

@ -68,7 +68,8 @@ public class InsightPairingActivity extends DaggerAppCompatActivity implements I
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
service = ((InsightConnectionService.LocalBinder) binder).getService();
if (service.isPaired()) return;
if (service.isPaired()) {
}
else {
service.requestConnection(InsightPairingActivity.this);
service.registerStateCallback(InsightPairingActivity.this);

View file

@ -14,8 +14,8 @@
<string name="operating_mode">Mode de fonctionnement</string>
<string name="description_pump_insight_local">Intégration des pompes Accu-Chek Insight</string>
<string name="not_inserted">Non inséré</string>
<string name="tdd_bolus">DTI Bolus</string>
<string name="tdd_basal">DTI Basale</string>
<string name="tdd_bolus">DTQ Bolus</string>
<string name="tdd_basal">DTQ Basale</string>
<string name="tbr_formatter">%1$d%% pour %2$d / %3$d min</string>
<string name="multiwave_bolus">Bolus mixte</string>
<string name="eb_formatter">%1$.2f / %2$.2f U pour %3$d min</string>
@ -40,7 +40,7 @@
<string name="short_status_tbr">DBT : %1$d%% pour %2$d / %3$d min</string>
<string name="short_status_extended">Étendue : %1$.2f / %2$.2f U pour %3$d min</string>
<string name="short_status_multiwave">Mixte : %1$.2f / %2$.2f U pour %3$d min</string>
<string name="short_status_tdd">DTI : %1$.2f</string>
<string name="short_status_tdd">DTQ : %1$.2f</string>
<string name="short_status_reservoir">Réserv.: %1$.2f U</string>
<string name="short_status_battery">Batt.: %1$d%%</string>
<string name="release_software_version">Version du logiciel</string>

View file

@ -112,8 +112,22 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="maintenance">Maintenance</string>
<string name="maintenance_shortname">MAINT</string>
<string name="description_maintenance">Fournir différentes fonctions de maintenance (ex : envoyer, supprimer le journal).</string>
<string name="database_cleanup">Nettoyer la base de données</string>
<string name="cleanup_db_confirm">Voulez-vous nettoyer la base de données ?\nCela supprimera les modifications suivies et les données historiques de plus de 3 mois.</string>
<string name="cleared_entries">Entrées effacées</string>
<string name="reset_db_confirm">Voulez-vous vraiment réinitialiser les bases de données ?</string>
<string name="maintenance_settings">Paramètres de maintenance</string>
<string name="maintenance_email">Destinataire de l\'email</string>
<string name="maintenance_amount">Nombre de journaux à envoyer</string>
<string name="send_all_logs">Envoyer les journaux par e-mail</string>
<string name="delete_logs">Supprimer les journaux</string>
<string name="configbuilder_nightscoutversion_label">Version Nightscout :</string>
<string name="engineering_mode_enabled">Mode ingénierie actif</string>
<string name="log_files">Fichiers journaux</string>
<string name="nav_logsettings">Paramètres journal</string>
<string name="miscellaneous">Divers</string>
<string name="nav_resetdb">Réinitialiser les Bases de Données</string>
<string name="resettodefaults">Rétablir les valeurs par défaut</string>
<!-- Maintenance -->
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">exporté il y a %1$s</string>
<string name="exported_at" comment="at placeholder we add export date">exporté à %1$s</string>

View file

@ -1,15 +1,22 @@
package info.nightscout.plugins.di
import dagger.Binds
import dagger.Module
import dagger.android.ContributesAndroidInjector
import info.nightscout.interfaces.overview.OverviewMenus
import info.nightscout.plugins.general.overview.OverviewFragment
import info.nightscout.plugins.general.overview.OverviewMenusImpl
import info.nightscout.plugins.general.overview.activities.QuickWizardListActivity
import info.nightscout.plugins.general.overview.dialogs.EditQuickWizardDialog
import info.nightscout.plugins.general.overview.graphData.GraphData
import info.nightscout.plugins.general.overview.notifications.DismissNotificationService
import info.nightscout.plugins.general.overview.notifications.NotificationWithAction
@Module
@Module(
includes = [
OverviewModule.Bindings::class
]
)
@Suppress("unused")
abstract class OverviewModule {
@ -19,4 +26,10 @@ abstract class OverviewModule {
@ContributesAndroidInjector abstract fun contributesOverviewFragment(): OverviewFragment
@ContributesAndroidInjector abstract fun notificationWithActionInjector(): NotificationWithAction
@ContributesAndroidInjector abstract fun graphDataInjector(): GraphData
@Module
interface Bindings {
@Binds fun bindOverviewMenus(overviewMenusImpl: OverviewMenusImpl): OverviewMenus
}
}

View file

@ -29,7 +29,7 @@ abstract class SourceModule {
@ContributesAndroidInjector abstract fun contributesBGSourceFragment(): BGSourceFragment
@ContributesAndroidInjector abstract fun contributesNSProfileWorker(): ProfilePlugin.NSProfileWorker
@ContributesAndroidInjector abstract fun contributesNSClientSourceWorker(): info.nightscout.plugins.source.NSClientSourcePlugin.NSClientSourceWorker
@ContributesAndroidInjector abstract fun contributesNSClientSourceWorker(): NSClientSourcePlugin.NSClientSourceWorker
@ContributesAndroidInjector abstract fun contributesXdripWorker(): XdripPlugin.XdripWorker
@ContributesAndroidInjector abstract fun contributesDexcomWorker(): DexcomPlugin.DexcomWorker
@ContributesAndroidInjector abstract fun contributesMM640gWorker(): MM640gPlugin.MM640gWorker
@ -43,6 +43,6 @@ abstract class SourceModule {
@Module
interface Bindings {
@Binds fun bindNSClientSource(nsClientSourcePlugin: info.nightscout.plugins.source.NSClientSourcePlugin): NSClientSource
@Binds fun bindNSClientSource(nsClientSourcePlugin: NSClientSourcePlugin): NSClientSource
}
}

View file

@ -29,9 +29,9 @@ import dagger.android.HasAndroidInjector
import dagger.android.support.DaggerFragment
import info.nightscout.core.extensions.directionToIcon
import info.nightscout.core.extensions.valueToUnitsString
import info.nightscout.core.iob.iobCobCalculator.GlucoseStatusProvider
import info.nightscout.core.graph.OverviewData
import info.nightscout.core.iob.displayText
import info.nightscout.core.iob.iobCobCalculator.GlucoseStatusProvider
import info.nightscout.core.profile.ProfileSealed
import info.nightscout.core.ui.UIRunnable
import info.nightscout.core.ui.dialogs.OKDialog
@ -56,6 +56,7 @@ import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.nsclient.NSSettingsStatus
import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData
import info.nightscout.interfaces.overview.OverviewMenus
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.profile.DefaultValueHelper
@ -70,10 +71,6 @@ import info.nightscout.plugins.R
import info.nightscout.plugins.aps.loop.events.EventNewOpenLoopNotification
import info.nightscout.plugins.databinding.OverviewFragmentBinding
import info.nightscout.plugins.general.overview.activities.QuickWizardListActivity
import info.nightscout.plugins.general.overview.events.EventUpdateOverviewCalcProgress
import info.nightscout.plugins.general.overview.events.EventUpdateOverviewGraph
import info.nightscout.plugins.general.overview.events.EventUpdateOverviewIobCob
import info.nightscout.plugins.general.overview.events.EventUpdateOverviewSensitivity
import info.nightscout.plugins.general.overview.graphData.GraphData
import info.nightscout.plugins.general.overview.notifications.NotificationStore
import info.nightscout.plugins.general.overview.notifications.events.EventUpdateOverviewNotification
@ -94,6 +91,10 @@ import info.nightscout.rx.events.EventRefreshOverview
import info.nightscout.rx.events.EventScale
import info.nightscout.rx.events.EventTempBasalChange
import info.nightscout.rx.events.EventTempTargetChange
import info.nightscout.rx.events.EventUpdateOverviewCalcProgress
import info.nightscout.rx.events.EventUpdateOverviewGraph
import info.nightscout.rx.events.EventUpdateOverviewIobCob
import info.nightscout.rx.events.EventUpdateOverviewSensitivity
import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.weardata.EventData
import info.nightscout.shared.extensions.runOnUiThread

View file

@ -14,6 +14,7 @@ import com.google.gson.Gson
import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.Config
import info.nightscout.interfaces.aps.Loop
import info.nightscout.interfaces.overview.OverviewMenus
import info.nightscout.plugins.R
import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventRefreshOverview
@ -25,7 +26,7 @@ import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class OverviewMenus @Inject constructor(
class OverviewMenusImpl @Inject constructor(
private val aapsLogger: AAPSLogger,
private val rh: ResourceHelper,
private val sp: SP,
@ -33,9 +34,9 @@ class OverviewMenus @Inject constructor(
private val config: Config,
private val loop: Loop,
private val fabricPrivacy: FabricPrivacy
) {
) : OverviewMenus {
enum class CharType(@StringRes val nameId: Int, @AttrRes val attrId: Int, @AttrRes val attrTextId: Int, val primary: Boolean, val secondary: Boolean, @StringRes val shortnameId: Int) {
enum class CharTypeData(@StringRes val nameId: Int, @AttrRes val attrId: Int, @AttrRes val attrTextId: Int, val primary: Boolean, val secondary: Boolean, @StringRes val shortnameId: Int) {
PRE(R.string.overview_show_predictions, R.attr.predictionColor, R.attr.menuTextColor, primary = true, secondary = false, shortnameId = R.string.prediction_shortname),
TREAT(R.string.overview_show_treatments, R.attr.cobColor, R.attr.menuTextColor, primary = true, secondary = false, shortnameId = R.string.treatments_shortname),
BAS(R.string.overview_show_basals, R.attr.basal, R.attr.menuTextColor, primary = true, secondary = false, shortnameId = R.string.basal_shortname),
@ -55,9 +56,9 @@ class OverviewMenus @Inject constructor(
const val SCALE_ID = 1001
}
fun enabledTypes(graph: Int): String {
override fun enabledTypes(graph: Int): String {
val r = StringBuilder()
for (type in CharType.values()) if (_setting[graph][type.ordinal]) {
for (type in CharTypeData.values()) if (_setting[graph][type.ordinal]) {
r.append(rh.gs(type.shortnameId))
r.append(" ")
}
@ -66,7 +67,7 @@ class OverviewMenus @Inject constructor(
private var _setting: MutableList<Array<Boolean>> = ArrayList()
val setting: List<Array<Boolean>>
override val setting: List<Array<Boolean>>
@Synchronized get() = _setting.toMutableList() // implicitly does a list copy
@Synchronized
@ -77,23 +78,23 @@ class OverviewMenus @Inject constructor(
}
@Synchronized
fun loadGraphConfig() {
override fun loadGraphConfig() {
val sts = sp.getString(R.string.key_graph_config, "")
if (sts.isNotEmpty()) {
_setting = Gson().fromJson(sts, Array<Array<Boolean>>::class.java).toMutableList()
// reset when new CharType added
for (s in _setting)
if (s.size != CharType.values().size) {
if (s.size != OverviewMenus.CharType.values().size) {
_setting = ArrayList()
_setting.add(Array(CharType.values().size) { true })
_setting.add(Array(OverviewMenus.CharType.values().size) { true })
}
} else {
_setting = ArrayList()
_setting.add(Array(CharType.values().size) { true })
_setting.add(Array(OverviewMenus.CharType.values().size) { true })
}
}
fun setupChartMenu(context: Context, chartButton: ImageButton) {
override fun setupChartMenu(context: Context, chartButton: ImageButton) {
val settingsCopy = setting
val numOfGraphs = settingsCopy.size // 1 main + x secondary
@ -120,12 +121,12 @@ class OverviewMenus @Inject constructor(
dividerItem.isCheckable = true
dividerItem.isChecked = true
}
CharType.values().forEach { m ->
CharTypeData.values().forEach { m ->
if (g == 0 && !m.primary) return@forEach
if (g > 0 && !m.secondary) return@forEach
var insert = true
if (m == CharType.PRE) insert = predictionsAvailable
if (m == CharType.DEVSLOPE) insert = config.isDev()
if (m == CharTypeData.PRE) insert = predictionsAvailable
if (m == CharTypeData.DEVSLOPE) insert = config.isDev()
if (used.contains(m.ordinal)) insert = false
for (g2 in g + 1 until numOfGraphs) {
if (settingsCopy[g2][m.ordinal]) insert = false
@ -165,7 +166,7 @@ class OverviewMenus @Inject constructor(
it.itemId == numOfGraphs -> {
// add new empty
_setting.add(Array(CharType.values().size) { false })
_setting.add(Array(CharTypeData.values().size) { false })
}
it.itemId < 100 -> {
@ -194,7 +195,7 @@ class OverviewMenus @Inject constructor(
}
}
fun isEnabledIn(type: CharType): Int {
override fun isEnabledIn(type: OverviewMenus.CharType): Int {
val settingsCopy = setting
val numOfGraphs = settingsCopy.size // 1 main + x secondary
for (g in 0 until numOfGraphs) if (settingsCopy[g][type.ordinal]) return g

View file

@ -5,31 +5,32 @@ import androidx.annotation.StringRes
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import dagger.android.HasAndroidInjector
import info.nightscout.core.events.EventIobCalculationProgress
import info.nightscout.core.events.EventNewNotification
import info.nightscout.core.extensions.putDouble
import info.nightscout.core.extensions.putInt
import info.nightscout.core.extensions.putString
import info.nightscout.core.extensions.storeDouble
import info.nightscout.core.extensions.storeInt
import info.nightscout.core.extensions.storeString
import info.nightscout.core.events.EventNewNotification
import info.nightscout.core.graph.OverviewData
import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.Config
import info.nightscout.interfaces.Overview
import info.nightscout.interfaces.overview.OverviewMenus
import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.plugin.PluginDescription
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.plugins.R
import info.nightscout.plugins.general.overview.events.EventUpdateOverviewCalcProgress
import info.nightscout.plugins.general.overview.notifications.NotificationStore
import info.nightscout.plugins.general.overview.notifications.NotificationWithAction
import info.nightscout.plugins.general.overview.notifications.events.EventUpdateOverviewNotification
import info.nightscout.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventDismissNotification
import info.nightscout.rx.events.EventPumpStatusChanged
import info.nightscout.rx.events.EventUpdateOverviewCalcProgress
import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.shared.interfaces.ResourceHelper
import info.nightscout.shared.sharedPreferences.SP

View file

@ -1,5 +0,0 @@
package info.nightscout.plugins.general.overview.events
import info.nightscout.rx.events.Event
class EventUpdateOverviewCalcProgress(val from: String) : Event()

View file

@ -1,5 +0,0 @@
package info.nightscout.plugins.general.overview.events
import info.nightscout.rx.events.Event
class EventUpdateOverviewGraph(val from: String) : Event()

View file

@ -1,5 +0,0 @@
package info.nightscout.plugins.general.overview.events
import info.nightscout.rx.events.Event
class EventUpdateOverviewIobCob(val from: String) : Event()

View file

@ -1,5 +0,0 @@
package info.nightscout.plugins.general.overview.events
import info.nightscout.rx.events.Event
class EventUpdateOverviewSensitivity(val from: String) : Event()

View file

@ -1,7 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- SMS Communicator & OTP Authenticator -->
<string name="smscommunicator">SMS коммуникатор</string>
<string name="smscommunicator_shortname">SMS</string>
<string name="description_sms_communicator">Выполнить дистанционное управление AAPS при помощи команд SMS.</string>
<string name="smscommunicator_code_from_authenticator_for" comment="This is continuation of sentence: To [ACTION] reply with code">из приложения Authenticator для %1$s и дополните пином в конце</string>
<string name="smscommunicator_otp_pin">Дополнительный обязательный пин-код в конце маркера</string>
<string name="smscommunicator_otp_pin_summary">Дополнительные цифры, которые должны запоминаться и добавляться в конце каждого сгенерированного одноразового пароля</string>
<string name="smscommunicator_tab_otp_label">Настройка аутентификации</string>
<string name="smscommunicator_code_verify_label">Код для проверки:</string>
<string name="smscommunicator_code_verify_hint">OTP + ПИН-код</string>
<string name="smscommunicator_code_verify_info">Проверочный код состоит из 6 цифр, отображаемых приложением Authenticator (известным как OTP), за которым следует 3 или более цифр обязательного PIN-кода.</string>
<string name="smscommunicator_otp_reset_btn">Сбросить аутентификаторы</string>
<string name="smscommunicator_otp_reset_title">Сбросить ключ идентификации</string>
<string name="smscommunicator_otp_reset_prompt">Вы действительно хотите сбросить ключ аутентификации? Все сконфигурированные в настоящее время ключи станут недопустимы, и придется их настроить заново.</string>
<string name="smscommunicator_otp_reset_successful">Создан новый ключ аутентификации! Для идентификации используйте обновленный QRCode.</string>
<string name="smscommunicator_otp_export_title">Экспорт секретного кода OTP</string>
<string name="smscommunicator_otp_export_prompt">Вы действительно хотите скопировать пароль OTP в буфер обмена?\n\nЭто может потребоваться только в том случае, если у вашего приложения идентификации проблемы при сканировании QR кода, вы хотите ввести его вручную или настроить аппаратный маркер OTP с помощью специального приложения.</string>
<string name="smscommunicator_otp_export_successful">Секретный одноразовый код OTP (в формате Base32) экспортирован и скопирован в буфер обмена. Вставьте его в систему идентификации или аппаратный маркер OTP!</string>
<string name="smscommunicator_otp_step1_install_header">1. Установить Аутентификатор</string>
<string name="smscommunicator_otp_step2_provisioning_header">2. Сканируйте код для настройки OTP кодов AAPS</string>
<string name="smscommunicator_otp_step3_test_header">3. Проверьте одноразовый пароль</string>
<string name="smscommunicator_otp_reset_header">Сбросить авторизацию</string>
<string name="smscommunicator_otp_install_info">На каждом отслеживающем телефоне установите приложение Authenticator, поддерживающее маркеры TOTP RFC 6238. Популярные бесплатные приложения: \n Authy\n Google Authenticator\n LastPass Authenticator\n FreeOTP Authenticator</string>
<string name="smscommunicator_otp_reset_warning">После сброса аутентификатора вы делаете все созданные идентификаторы недействительными. Вам нужно будет снова создать их!</string>
<string name="sms_wrong_code">Неверный код. Команда отменена.</string>
<string name="sms_timeout_while_waiting">Время ожидания окончания предыдущего соединения с помпой истекло</string>
<string name="smscommunicator_allowednumbers">разрешенные телефонные номера</string>
<string name="smscommunicator_allowednumbers_summary">+ XXXXXXXXXX; + YYYYYYYYYY</string>
<string name="smscommunicator_bolus_reply_with_code">Для подачи болюса %1$.2fед ответьте кодом %2$s</string>
<string name="smscommunicator_meal_bolus_reply_with_code">Для подачи болюса %1$.2fед ответьте кодом %2$s</string>
<string name="smscommunicator_temptarget_with_code">Чтобы установить временную цель %1$s ответьте кодом %2$s</string>
<string name="smscommunicator_temptarget_cancel">Чтобы отменить временную цель ответьте кодом %1$s</string>
<string name="smscommunicator_stops_ns_with_code">Чтобы отключить службу удаленных SMS-сообщений ответьте кодом %1$s.\n\n Имейте в виду, что вы сможете вновь активировать ее только с основного телефона AAPS.</string>
@ -14,6 +42,8 @@
<string name="smscommunicator_bolus_delivered">Болюс %1$.2f ед. подан успешно</string>
<string name="smscommunicator_meal_bolus_delivered">Болюс на еду %1$.2f ед. подан успешно</string>
<string name="smscommunicator_meal_bolus_delivered_tt">Цель %1$s на %2$d минут</string>
<string name="smscommunicator_tt_set">Цель %1$s на %2$d минут установлена успешно</string>
<string name="smscommunicator_tt_canceled">Временная цель успешно отменена</string>
<string name="smscommunicator_remote_commands_allowed">Разрешить команды через смс</string>
<string name="smscommunicator_loop_has_been_disabled">Зцикл остановлен</string>
<string name="smscommunicator_loop_has_been_enabled">Зцикл активирован</string>
@ -22,6 +52,7 @@
<string name="smscommunicator_pump_connect_fail">Ошибка подключения к помпе</string>
<string name="smscommunicator_pump_disconnect_with_code">Для разъединения с помпой на %1$d мин ответьте кодом %2$s</string>
<string name="smscommunicator_pump_disconnected">Связь с помпой отключена</string>
<string name="smscommunicator_reconnect">Связь с помпой возобновлена</string>
<string name="smscommunicator_remote_command_not_allowed">Удаленная команда не разрешена</string>
<string name="smscommunicator_remote_bolus_not_allowed">Удаленный болюс недоступен, повторите попытку позже.</string>
<string name="smscommunicator_basal_reply_with_code">Для начала подачи базала %1$.2f ед./ч на %2$d мин. ответьте кодом %3$s</string>
@ -47,24 +78,51 @@
<string name="smscommunicator_tempbasal_cancel_failed">Отмена врем базала не состоялась</string>
<string name="smscommunicator_extended_cancel_failed">Сбой отмены пролонгированного болюса</string>
<string name="smscommunicator_unknown_command">Неизвестная команда или неверный ответ</string>
<string name="smscommunicator_another_bolus_in_queue">В очереди есть еще один болюс. Повторите попытку позже.</string>
<string name="smscommunicator_wrong_duration">Неверное значение длительности</string>
<string name="smscommunicator_loop_suspended">ЗЦикл остановлен</string>
<string name="smscommunicator_loop_resumed">ЗЦикл возобновлен</string>
<string name="smscommunicator_invalid_phone_number">Неверный номер телефона для смс</string>
<string name="smscommunicator_calibration_sent">Калибровка отправлена. В xDrip+ должна быть включена возможность приема.</string>
<string name="smscommunicator_calibration_failed">xDrip + не получает калибровки</string>
<string name="smscommunicator_message_body">Недопустимое тело сообщения</string>
<string name="smscommunicator_report_pump_unreachable_summary">Отправить SMS, если инициируется запись о недоступности помпы</string>
<string name="smscommunicator_pump_unreachable">Сообщить о недоступности помпы</string>
<string name="wrong_format">Неверный формат</string>
<string name="sms_actual_bg">ГК:</string>
<string name="sms_last_bg">Предыдущая ГК:</string>
<string name="sms_delta">дельта:</string>
<string name="sms_iob">IOB: активный инсулин</string>
<string name="sms_bolus">болюс:</string>
<string name="sms_basal">базал: </string>
<string name="sms_min_ago">%1$dмин. назад</string>
<string name="sms_loop_suspended_for">Остановлен (на %1$d мин)</string>
<string name="sms_read_status_failed">Статус чтения: неудача</string>
<string name="sms_profile_switch_created">Переключатель профиля создан</string>
<string name="sms_wrong_tbr_duration">Длительность временного базала TBR должна быть кратной %1$d минутам и больше 0.</string>
<string name="a11y_otp_qr_code">QR код для создания одноразового пароля</string>
<!-- Insulin -->
<string name="lyumjev">Lyumjev</string>
<string name="description_insulin_rapid">Предустановки для Humalog и Novorapid / Novolog</string>
<string name="description_insulin_ultra_rapid">Предустановки для Fiasp</string>
<string name="description_insulin_lyumjev">Предустановки для Lyumjev</string>
<string name="description_insulin_free_peak">Позволяет самостоятельно задавать пик активности инсулина - только для опытных пользователей</string>
<string name="insulin_shortname">ИНС</string>
<string name="insulin_oref_peak">Время пика активного инс IOB</string>
<string name="insulin_peak_time">Время пика [min]</string>
<string name="free_peak_oref">Свободный от пиков Oref</string>
<string name="rapid_acting_oref">Быстро действующий Oref</string>
<string name="ultra_rapid_oref">Сверхбыстрый Oref</string>
<string name="dia_too_short">Значение времени действия инс %1$f слишком мало - применено %2$f!</string>
<string name="fast_acting_insulin_comment">Новорапид, Хумалог</string>
<string name="ultra_fast_acting_insulin_comment">Фиасп</string>
<!-- xDrip status line -->
<!-- StatusLine -->
<string name="xdrip_status">рока состояния xDrip (часы)</string>
<string name="xdrip_status_shortname">Статус xDrip</string>
<string name="description_xdrip_status_line">Показать информацию о работе алгоритма ИПЖ на экране смарт-часов xDrip+.</string>
<string name="xdrip_status_detailed_iob_title">Показать IOB подробно</string>
<string name="xdrip_status_detailed_iob_summary">Показать разбивку IOB на болюсный и базальный IOB на часах</string>
<string name="disabled_loop">Зцикл не работает</string>
<string name="xdrip_status_show_bgi_title">Показать BGI</string>
<string name="xdrip_status_show_bgi_summary">Добавить BGI в строку состояния</string>
@ -72,21 +130,51 @@
<!-- Food-->
<string name="food_short">Еда</string>
<string name="description_food">Показывает заданные в Nightscout настройки для приема пищи</string>
<string name="filter">Фильтр</string>
<string name="food">Еда</string>
<string name="short_kilo_joul">кДж</string>
<string name="short_energy">Энергия</string>
<string name="short_protein">Белки</string>
<string name="short_fat">Жиры</string>
<string name="category">Категория</string>
<string name="subcategory">Подкатегория</string>
<string name="calculator_label">Калькулятор</string>
<!-- Theme switcher dark and light mode-->
<string name="theme_switcher_summary">Выберите темную, светлую или системную тему</string>
<string name="app_color_scheme">Цветовая схема приложения</string>
<string name="dark_theme">Тёмная тема</string>
<string name="light_theme">Светлая тема</string>
<string name="follow_system_theme">Использовать тему устройства</string>
<!-- Profile -->
<string name="localprofile">Профиль</string>
<string name="localprofile_shortname">ЛП</string>
<string name="description_profile_local">Задайте профиль, доступный в автономном режиме.</string>
<string name="a11y_add_new_to_list">добавить новый в список</string>
<string name="do_you_want_switch_profile">Хотите переключить профиль и сбросить изменения, внесенные в текущий профиль?</string>
<string name="save_or_reset_changes_first">Сначала сохраните или сбросьте текущие изменения</string>
<string name="delete_current_profile">Удалить текущий профиль?</string>
<string name="units_colon">Единицы:</string>
<string name="missing_profile_name">Отсутствует название профиля</string>
<string name="error_in_ic_values">Ошибка в значении углеводного коэффициента IC</string>
<string name="error_in_basal_values">Ошибка в величине базала</string>
<string name="error_in_target_values">Ошибка в целевых значениях</string>
<string name="error_in_isf_values">Ошибка в значении фактора чувствительности к инсулину ISF</string>
<string name="profile_name_contains_dot">Имя профиля содержит точки.\nЭто не поддерживается NS.\nПрофиль не выгружен в NS.</string>
<string name="invalid_profile_not_accepted">Неверный профиль %1$s не принят из NS</string>
<string name="view">Смотреть</string>
<string name="errors">Ошибки</string>
<string name="select_profile">Выберите профиль для изменения</string>
<string name="profile_name">Название профиля:</string>
<string name="a11y_add_new_profile">добавить новый профиль</string>
<string name="a11y_clone_profile">клонировать текущий профиль</string>
<string name="a11y_delete_current_profile">удалить текущий профиль</string>
<string name="dia_short">Время действия инсулина DIA</string>
<string name="target_short">ЦЕЛЬ</string>
<string name="basal_short">БАЗАЛ</string>
<!-- Objectives -->
<string name="completed_well_done">Завершено, отлично!</string>
<string name="not_completed_yet">Не завершено</string>
<string name="time_elapsed">Прошло времени</string>
<string name="maxiobset">Максимум активного инсулина IOB установлен правильно</string>
<string name="hasbgdata">ГК доступна из выбранного источника</string>
<string name="synchaswritepermission">Служба синхронизации имеет разрешение на запись</string>
@ -245,6 +333,7 @@
<string name="overview_show_sensitivity">Чувствительность</string>
<string name="overview_show_deviations">Отклонение</string>
<string name="overview_show_cob">Активные углеводы COB</string>
<string name="overview_show_iob">Активный инсулин IOB</string>
<string name="overview_show_basals">Базал</string>
<string name="overview_show_abs_insulin">Абсолютный инсулин</string>
<string name="prediction_shortname">ОЖИД</string>

View file

@ -34,7 +34,7 @@ class ProfileElement(ps: EffectiveProfileSwitch, serialNumber: String, dateUtil:
init {
type = "pumpSettings"
val profile: Profile? = ProfileSealed.EPS(ps)
val profile: Profile = ProfileSealed.EPS(ps)
checkNotNull(profile)
for (br in profile.getBasalValues())
basalSchedules.Normal.add(BasalRate(br.timeAsSeconds * 1000, br.value))

View file

@ -1,6 +1,7 @@
package info.nightscout.pump.combo.ruffyscripter.history;
import java.util.Date;
import java.util.Objects;
public class PumpAlert extends HistoryRecord {
public final Integer warningCode;
@ -23,11 +24,11 @@ public class PumpAlert extends HistoryRecord {
PumpAlert pumpAlert = (PumpAlert) o;
if (timestamp != pumpAlert.timestamp) return false;
if (warningCode != null ? !warningCode.equals(pumpAlert.warningCode) : pumpAlert.warningCode != null)
if (!Objects.equals(warningCode, pumpAlert.warningCode))
return false;
if (errorCode != null ? !errorCode.equals(pumpAlert.errorCode) : pumpAlert.errorCode != null)
if (!Objects.equals(errorCode, pumpAlert.errorCode))
return false;
return message != null ? message.equals(pumpAlert.message) : pumpAlert.message == null;
return Objects.equals(message, pumpAlert.message);
}
@Override

View file

@ -719,8 +719,7 @@ object ApplicationLayer {
command = extractAppLayerPacketCommand(tpLayerPacket),
version = tpLayerPacket.payload[VERSION_BYTE_OFFSET],
payload = ArrayList<Byte>(tpLayerPacket.payload.subList(PAYLOAD_BYTES_OFFSET, tpLayerPacket.payload.size))
) {
}
)
/**
* Produces transport layer DATA packet info containing this application layer
@ -1680,10 +1679,10 @@ object ApplicationLayer {
* This is preferred over directly using the [Packet] constructor.
*/
fun checkAndParseTransportLayerDataPacket(tpLayerPacket: TransportLayer.Packet):
ApplicationLayer.Packet {
Packet {
try {
logger(LogLevel.VERBOSE) { "Parsing DATA packet as application layer packet" }
val appLayerPacket = ApplicationLayer.Packet(tpLayerPacket)
val appLayerPacket = Packet(tpLayerPacket)
logger(LogLevel.VERBOSE) {
"This is an application layer packet with command ${appLayerPacket.command} and payload ${appLayerPacket.payload.toHexString()}"
}
@ -1709,7 +1708,7 @@ object ApplicationLayer {
}
return appLayerPacket
} catch (e: ApplicationLayer.InvalidCommandIDException) {
} catch (e: InvalidCommandIDException) {
logger(LogLevel.WARN) {
"Got an application layer packet with invalid/unknown command ID 0x${e.commandID.toString(16)} " +
"service ID ${e.serviceID.name} and payload (with ${e.payload.size} byte(s)) ${e.payload.toHexString()}" +
@ -1719,7 +1718,7 @@ object ApplicationLayer {
} catch (e: ErrorCodeException) {
// We already logged the error code, so just pass through the exception
throw e
} catch (e: ApplicationLayer.ExceptionBase) {
} catch (e: ExceptionBase) {
logger(LogLevel.ERROR) { "Could not parse DATA packet as application layer packet: $e" }
throw e
}

View file

@ -134,7 +134,7 @@ class PumpIO(
// and [List<Byte>.toComboFrame] for details).
private val framedComboIO = FramedComboIO(bluetoothDevice)
private var initialMode: PumpIO.Mode? = null
private var initialMode: Mode? = null
private var transportLayerIO = TransportLayer.IO(
pumpStateStore, bluetoothDevice.address, framedComboIO

View file

@ -159,8 +159,8 @@ object TransportLayer {
// Utility function to be able to throw an exception in case of
// an invalid command ID in the Packet constructor below.
private fun checkedGetCommand(value: Int, bytes: List<Byte>): TransportLayer.Command =
TransportLayer.Command.fromInt(value) ?: throw TransportLayer.InvalidCommandIDException(value, bytes)
private fun checkedGetCommand(value: Int, bytes: List<Byte>): Command =
Command.fromInt(value) ?: throw InvalidCommandIDException(value, bytes)
/**
* Class containing Combo transport layer packet data.
@ -835,7 +835,7 @@ object TransportLayer {
* @throws IncorrectPacketException if expectedCommand is non-null and
* the received packet's command does not match expectedCommand.
*/
suspend fun receive(expectedCommand: Command? = null): TransportLayer.Packet {
suspend fun receive(expectedCommand: Command? = null): Packet {
// In here, we mainly listen to the packetReceiverChannel
// for incoming packets from the packet receiver coroutine.
// The actual reception takes place there. startInternal()

View file

@ -953,7 +953,7 @@ suspend fun navigateToRTScreen(
null
}
if (path?.isEmpty() ?: false)
if (path?.isEmpty() == true)
return currentParsedScreen
if (path == null) {

View file

@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.nightscout.androidaps.plugins.pump.combov2">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application>
<activity
android:name="info.nightscout.pump.combov2.activities.ComboV2PairingActivity"
android:name=".activities.ComboV2PairingActivity"
android:exported="false"
android:theme="@style/AppTheme.NoActionBar" />
</application>

View file

@ -44,6 +44,7 @@ import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.interfaces.utils.DecimalFormatter
import info.nightscout.interfaces.utils.TimeChangeType
import info.nightscout.pump.combov2.activities.ComboV2PairingActivity
import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventDismissNotification
import info.nightscout.rx.events.EventInitializationChanged
@ -326,6 +327,8 @@ class ComboV2Plugin @Inject constructor (
val pairPref: Preference? = findPreference(rh.gs(R.string.key_combov2_pair_with_pump))
val unpairPref: Preference? = findPreference(rh.gs(R.string.key_combov2_unpair_pump))
pairPref?.intent = Intent(activity, ComboV2PairingActivity::class.java)
val isInitiallyPaired = pairedStateUIFlow.value
pairPref?.isEnabled = !isInitiallyPaired
unpairPref?.isEnabled = isInitiallyPaired

View file

@ -7,7 +7,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".plugins.pump.combov2.activities.ComboV2PairingActivity">
tools:context=".activities.ComboV2PairingActivity">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/header"

View file

@ -1,21 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="combov2_plugin_name">Accu-Chek Combo</string>
<string name="combov2_plugin_description">Nativní integrace pro pumpy Accu-Chek Combo</string>
<string name="combov2_could_not_connect">Nelze se připojit k pumpě</string>
<string name="combov2_not_paired">Není spárováno s pumpou</string>
<string name="combov2_pump_terminated_connection">Spojení ukončené pumpou</string>
<string name="combov2_warning">Varování Combo</string>
<string name="combov2_error">Chyba Combo</string>
<string name="combov2_warning_4">Zavolejte hotline pro aktualizaci</string>
<string name="combov2_warning_10">Chyba Bluetooth; opakujte párování</string>
<string name="combov2_error_1">Zásobník je prázdný</string>
<string name="combov2_error_2">Vybitá baterie</string>
<string name="combov2_error_4">Okluze</string>
<string name="combov2_error_5">Konec zálohy pumpy</string>
<string name="combov2_error_6">Porucha mechaniky</string>
<string name="combov2_error_7">Chyba elektroniky</string>
<string name="combov2_error_8">Přerušení napájení</string>
<string name="combov2_error_9">Vypršela doba zápůjčky</string>
<string name="combov2_error_10">Chyba zásobníku</string>
<string name="combov2_error_11">Infuzní set není naplněný</string>
<string name="combov2_extended_bolus_not_supported">Rozšířený bolus není podporován</string>
<string name="combov2_title">Accu-Chek Combo v2</string>
<string name="combov2_pair_with_pump_title">Párovat s pumpou</string>
<string name="combov2_unpair_pump_title">Zrušit párování pumpy</string>
<string name="combov2_driver_state_label">Stav ovladače</string>
<string name="combov2_current_activity_label">Současná aktivita</string>
<string name="bluetooth_address">Bluetooth MAC adresa</string>
<string name="combov2_start_pairing">Začít párovat</string>
<string name="combov2_pairing_in_progress">Probíhá Combo párování</string>
<string name="combov2_pairing_start_steps">Kroky k provedení párování s Combo:\n\n
1. Na vaší pumpě přejděte do nastavení Bluetooth\n
2. Zkontrolujte, zda je zařízení již zobrazeno jako spárované. pokud ano, přejděte na obrazovku pumpy \"Odstranit zařízení\" a odstranit/zrušit párování tohoto zařízení\n
3. Přejděte na obrazovku pumpy \"Přidat zařízení\" a spárujte na pumpě\n
4. Klikněte na tlačítko \"Spustit párování\" níže pro zahájení párování v AndroidAPS\n</string>
<string name="combov2_steps_if_no_connection_during_pairing">Po nějaké době se na obrazovce pumpy zobrazí jméno telefonu; stiskněte KONTROLA pro potvrzení.\n\n
Po úspěšném dokončení párování, potvrďte dokončení párování na vaší pumpě a vráťte se na hlavní obrazovku pumpy dvojím stisknutím tlačítka KONEC.\n\n
Pokud po více než ~5 minutách není navázáno žádné spojení:\n\n
1. Stiskněte tlačítko Zpět nebo tlačítko \"Zrušit párování\"\n
2. Zrušte párování na Combo (současně stiskněte tlačítka „UP i MENU“ pro zrušení párování)\n
3. Zkuste znovu spárovat</string>
<string name="combov2_pin_entry_hint">0123456789</string>
<string name="combov2_enter_pin">Vložte PIN</string>
<string name="combov2_cancel_pairing">Zrušit párování</string>
<string name="combov2_pin_hint">10místný PIN</string>
<string name="combov2_pairing_finished_successfully">Úspěšně spárováno s Combo</string>
<string name="combov2_pairing_cancelled">Párování s Combo zrušeno uživatelem</string>
<string name="combov2_pairing_combo_scan_timeout_reached">Časový limit pro vyhledávání Combo dosažen</string>
<string name="combov2_pairing_failed_due_to_error">Párování se nezdařilo z důvodu chyby: %1$s</string>
<string name="combov2_pairing_aborted_unknown_reasons">Párování přerušeno z neznámých důvodů</string>
<string name="combov2_scanning_for_pump">Vyhledávání pumpy</string>
<string name="combov2_establishing_bt_connection">Navazování připojení Bluetooth (pokus č. %1$d)</string>
<string name="combov2_pairing_performing_handshake">Provádím navazování spojení s pumpou</string>
<string name="combov2_pairing_pump_requests_pin">Pumpa vyžaduje desetimístný kód PIN</string>
<string name="combov2_pairing_finishing">Dokončování párování</string>
<string name="combov2_no_connection_for_n_mins">Žádné spojení během %1$d min</string>
<string name="combov2_less_than_one_minute_ago">Před méně než minutou</string>
<string name="combov2_setting_current_pump_time">Nastavení aktuálního času pumpy</string>
<string name="combov2_setting_current_pump_date">Nastavení aktuálního data pumpy</string>
<string name="combov2_not_initialized">Není inicializován</string>
<string name="combov2_checking_pump">Kontrola pumpy</string>
<string name="combov2_ready">Připraven</string>
<string name="combov2_suspended">Pozastaveno</string>
<string name="combov2_pump_is_suspended">Pumpa pozastavena</string>
<string name="combov2_executing_command">Provádění příkazu</string>
<string name="combov2_getting_basal_profile_cmddesc">Načítám bazální profil</string>
<string name="combov2_setting_basal_profile_cmddesc">Nastavení bazálního profilu</string>
<string name="combov2_setting_tbr_cmddesc">Nastavení %1$d%% dočasného bazálu na %2$d minut</string>
<string name="combov2_cancelling_tbr">Zrušení probíhajícího dočasného bazálu</string>
<string name="combov2_delivering_bolus_cmddesc">Podávání %1$.1f U</string>
<string name="combov2_fetching_tdd_history_cmddesc">Načítám CDD historii</string>
<string name="combov2_updating_pump_datetime_cmddesc">Aktualizace data a času v pumpě</string>
<string name="combov2_updating_pump_status_cmddesc">Nahrávám stav pumpy</string>
<string name="combov2_pairing_pin_failure">PIN nefungoval. Zkontrolujte, zda jste neudělali překlep. Pokud se to stále děje, zrušte a opakujte párování.</string>
<string name="combov2_discovery_duration">Délka hledání (v sekundách)</string>
<string name="combov2_verbose_logging">Povolit podrobné protokolování</string>
<string name="combov2_getting_basal_profile">Získávání bazálního profilu; čtení %1$d. faktoru</string>
<string name="combov2_setting_basal_profile">Nastavení bazálního profilu; zapisování %1$d. faktoru</string>
<string name="combov2_delivering_bolus">Podávání bolusu (podáno %1$.1f z %2$.1f U)</string>
<string name="combov2_cannot_deliver_pump_suspended">Nelze podat bolus - pumpa je pozastavena</string>
<string name="combov2_insufficient_insulin_in_reservoir">Nedostatečný inzulin v zásobníku</string>
<string name="combov2_bolus_cancelled">Bolus zrušen</string>
<string name="combov2_bolus_delivery_failed">Provádění bolusu selhalo. Zdá se, že žádný bolus nebyl podán. Zkontrolujte pumpu a případně pošlete bolus znovu. Jako bezpečnostní opatření podání bolusu není opakováno.</string>
<string name="combov2_bolus_not_delivered">Bolus nebyl podán</string>
<string name="combov2_cannot_access_pump_data">Nelze získat přístup k datům pumpy; pumpa musí být znovu spárována</string>
<string name="combov2_unaccounted_bolus_detected_cancelling_bolus">Zjištěny nečekané bolusy. Z bezpečnostních důvodů bolus zrušen.</string>
<string name="combov2_incorrect_active_basal_profile">Nesprávný aktivní bazální profil; profil 1 musí být aktivní, ne profil %1$d</string>
<string name="combov2_unrecognized_alert">Nerozpoznaná Combo výstraha</string>
<string name="combov2_combo_alert">Combo výstraha</string>
<string name="combov2_last_bolus">%1$.1f %2$s (%3$s)</string>
<string name="combov2_current_tbr">%1$d%% (zbývá %2$d min)</string>
<string name="combov2_current_tbr_less_than_1min">%1$d%% (zbývá méně než 1 min)</string>
<string name="combov2_load_tdds_cancelled">Načítání CDD zrušeno</string>
<string name="combov2_retrieving_tdds_failed">Načítání CDD selhalo</string>
<string name="combov2_no_activity">{fa-bed}</string>
<string name="combov2_battery_low_warning">Slabá baterie v pumpě</string>
<string name="combov2_reservoir_low_warning">V zásobníku je málo inzulínu</string>
<string name="combov2_setting_tbr_succeeded">Nastavení dočasného bazálu bylo úspěšné</string>
<string name="combov2_setting_tbr_failed">Nastavení dočasného bazálu selhalo</string>
<string name="combov2_hit_unexpected_tbr_limit">Při úpravě dočasného bazálu došlo k neočekávanému limitu: vyžadováno %1$d%%, dosažen limit %1$d%%</string>
<string name="combov2_cannot_set_absolute_tbr_if_basal_zero">Nelze nastavit absolutní dočasný bazál, pokud je bazální dávka nulová</string>
<string name="combov2_pair_with_pump_summary">Párovat AndroidAPS a Android s momentálně nespárovanou pumpou Accu-Chek Combo</string>
<string name="combov2_unpair_pump_summary">Zrušit párování AndroidAPS a Androidu v současné době spárované Accu-Chek Combo</string>
<string name="combov2_unknown_tbr_detected">Neznámý dočasný bazál byl zjištěn a zastaven. Procentuální hodnota: %1$d%%; zbývající doba trvání: %2$s</string>
<string name="combov2_connection_error">Chyba připojení: %1$s</string>
<string name="combov2_short_status_last_connection">Poslední spoj: před %1$d min</string>
<string name="combov2_short_status_alert">Výstraha: %s</string>
<string name="combov2_short_status_last_bolus">Poslední bolus: %1$sU @ %2$s</string>
<string name="combov2_short_status_temp_basal">Doč. bazál: %s</string>
<string name="combov2_short_status_reservoir">Zásobník: %dU</string>
<string name="combov2_short_status_battery_state_empty">prázdný</string>
<string name="combov2_short_status_battery_state_low">nízká</string>
<string name="combov2_short_status_battery_state_full">plná</string>
<string name="combov2_short_status_battery_state">Bat: %s</string>
<string name="combov2_automatic_reservoir_entry">Detekovat a vložit automaticky výmenu zásobníku</string>
<string name="combov2_automatic_battery_entry">Detekovat a vložit automaticky výmenu baterie</string>
<string name="combov2_note_reservoir_change">Výměna zásobníku inzulínu automaticky vložena ovladačem combov2</string>
<string name="combov2_note_battery_change">Výměna baterie automaticky vložena ovladačem combov2</string>
<string name="combov2_timezone_changed">Časové pásmo změněno</string>
<string name="combov2_datetime_changed">Datum a/nebo čas změněn</string>
<string name="combov2_dst_started">Začal letní čas (DST)</string>
<string name="combov2_dst_ended">Letní čas (DST) skončil</string>
</resources>

View file

@ -16,8 +16,9 @@
<string name="combov2_error_6">Erreur mécanique</string>
<string name="combov2_error_7">Erreur électronique</string>
<string name="combov2_error_8">Coupure de l\'alimentation</string>
<string name="combov2_error_9">Fin de la pompe de prêt</string>
<string name="combov2_error_9">Fin de fonctionnement de la pompe de prêt</string>
<string name="combov2_error_10">Erreur de réservoir</string>
<string name="combov2_error_11">Ensemble d\'infusion non amorcé</string>
<string name="combov2_extended_bolus_not_supported">Le bolus étendu n\'est pas pris en charge</string>
<string name="combov2_title">Accu-Chek Combo v2</string>
<string name="combov2_pair_with_pump_title">Appairer la pompe</string>
@ -58,17 +59,59 @@
<string name="combov2_setting_tbr_cmddesc">Réglage du DBT %1$d%% pendant %2$d minutes</string>
<string name="combov2_cancelling_tbr">Annulation du DBT en cours</string>
<string name="combov2_delivering_bolus_cmddesc">Injection de %1$.1fU de bolus en cours</string>
<string name="combov2_fetching_tdd_history_cmddesc">Récupération de l\'historique DTI</string>
<string name="combov2_fetching_tdd_history_cmddesc">Récupération de l\'historique DTQ</string>
<string name="combov2_updating_pump_datetime_cmddesc">Mise à jour date et heure de la pompe</string>
<string name="combov2_updating_pump_status_cmddesc">Mise à jour de l\'état pompe</string>
<string name="combov2_pairing_pin_failure">Le code PIN n\'a pas fonctionné. Vérifiez s\'il y a eu une faute de frappe. Si cela persiste, annulez et recommencez l\'appairage.</string>
<string name="combov2_discovery_duration">Durée de recherche (en secondes)</string>
<string name="combov2_verbose_logging">Activer les informations log détaillées de la Combo</string>
<string name="combov2_getting_basal_profile">Récupération du profil basal, %1$d valeure(s) lue(s)</string>
<string name="combov2_setting_basal_profile">Paramétrage du profil basal, %1$d valeure(s) écrite(s)</string>
<string name="combov2_delivering_bolus">Injection du bolus (%1$.1f sur %2$.1f U injectés)</string>
<string name="combov2_cannot_deliver_pump_suspended">Impossible d\'injecter le traitement - la pompe est suspendue</string>
<string name="combov2_insufficient_insulin_in_reservoir">Insuline insuffisante dans le réservoir</string>
<string name="combov2_bolus_cancelled">Bolus annulé</string>
<string name="combov2_bolus_delivery_failed">Administration bolus échouée. Il semble quaucun bolus na été administré. Pour être sûr, veuillez vérifier la pompe pour éviter un double bolus ensuite refaire le bolus une nouvelle fois.</string>
<string name="combov2_bolus_not_delivered">Bolus non injecté</string>
<string name="combov2_cannot_access_pump_data">Impossible d\'accéder aux données de la pompe, la pompe doit être à nouveau appairée</string>
<string name="combov2_unaccounted_bolus_detected_cancelling_bolus">Détection de bolus non comptabilisés. Annulation du bolus pour des raisons de sécurité.</string>
<string name="combov2_incorrect_active_basal_profile">Profil actif incorrect, le profil 1 doit être actif et non le profil %1$d</string>
<string name="combov2_unrecognized_alert">Alerte Combo inconnue</string>
<string name="combov2_combo_alert">Alerte Combo</string>
<string name="combov2_last_bolus">%1$.1f %2$s (%3$s)</string>
<string name="combov2_current_tbr">%1$d%% (%2$d min restantes)</string>
<string name="combov2_current_tbr_less_than_1min">%1$d%% (moins de 1 min restantes)</string>
<string name="combov2_load_tdds_cancelled">Chargement des DTQ annulé</string>
<string name="combov2_retrieving_tdds_failed">Échec de la récupération des DTQ</string>
<string name="combov2_no_activity">{fa-bed}</string>
<string name="combov2_battery_empty_indicator">{fa-battery-empty}</string>
<string name="combov2_battery_low_indicator">{fa-battery-quarter}</string>
<string name="combov2_battery_full_indicator">{fa-battery-full}</string>
<string name="combov2_battery_low_warning">Pile pompe faible</string>
<string name="combov2_reservoir_low_warning">Niveau réservoir pompe bas</string>
<string name="combov2_setting_tbr_succeeded">Paramétrage du DBT réussi</string>
<string name="combov2_setting_tbr_failed">Échec du réglage du DBT</string>
<string name="combov2_hit_unexpected_tbr_limit">Limite inattendue lors de lajustement du DBT: le pourcentage cible de %1$d%%, a dépassé la limite de %1$d%%</string>
<string name="combov2_cannot_set_absolute_tbr_if_basal_zero">Impossible de définir le DBT absolu si le débit de basal est zéro</string>
<string name="combov2_pair_with_pump_summary">Appairer AndroidAPS et Android avec une pompe Accu-Chek Combo non appariée</string>
<string name="combov2_unpair_pump_summary">Dissocier AndroidAPS et Android de la pompe Accu-Chek Combo actuelle</string>
<string name="combov2_unknown_tbr_detected">Un DBT inconnu a été détecté et arrêté, pourcentage: %1$d%%, durée restante: %2$s</string>
<string name="combov2_connection_error">Erreur de connexion: %1$s</string>
<string name="combov2_short_status_last_connection">Dernière connexion : il y a %1$d min</string>
<string name="combov2_short_status_alert">Alerte: %s</string>
<string name="combov2_short_status_last_bolus">Dernier bolus: %1$sU @ %2$s</string>
<string name="combov2_short_status_temp_basal">Temps : %s</string>
<string name="combov2_short_status_reservoir">Réserve : %dU</string>
<string name="combov2_short_status_battery_state_empty">vide</string>
<string name="combov2_short_status_battery_state_low">basse</string>
<string name="combov2_short_status_battery_state_full">plein</string>
<string name="combov2_short_status_battery_state">Pile: %s</string>
<string name="combov2_automatic_reservoir_entry">Détection et enregistrement automatique du changement du réservoir</string>
<string name="combov2_automatic_battery_entry">Détection et enregistrement automatique du changement de pile</string>
<string name="combov2_note_reservoir_change">Changement de réservoir détecté automatiquement par le pilote ComboV2</string>
<string name="combov2_note_battery_change">Changement de pile détecté automatiquement par le pilote ComboV2</string>
<string name="combov2_timezone_changed">Fuseau horaire modifié</string>
<string name="combov2_datetime_changed">Date et/ou heure modifiée(s)</string>
<string name="combov2_dst_started">Changement d\'heure commencé</string>
<string name="combov2_dst_ended">Changement d\'heure terminée</string>
</resources>

View file

@ -1,23 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="combov2_plugin_name">Accu Chek Combo</string>
<string name="combov2_plugin_description">Нативная интеграция с помпами Accu-Chek Combo</string>
<string name="combov2_could_not_connect">Не удалось подключиться к помпе</string>
<string name="combov2_not_paired">Нет сопряжения с помпой</string>
<string name="combov2_pump_terminated_connection">Помпа прекратила подключение</string>
<string name="combov2_warning">Предупреждение от Combo</string>
<string name="combov2_error">Ошибка Combo</string>
<string name="combov2_warning_4">Позвонить на Горячую линию для обновления</string>
<string name="combov2_warning_10">Сбой Bluetooth; повторить сопряжение</string>
<string name="combov2_error_1">Резервуар помпы пуст</string>
<string name="combov2_error_2">Батарея разряжена</string>
<string name="combov2_error_4">закупорка</string>
<string name="combov2_error_5">Завершение резервирования данных помпы</string>
<string name="combov2_error_6">Механическая ошибка</string>
<string name="combov2_error_7">Ошибка электроники</string>
<string name="combov2_error_8">Прерывание подачи электропитания</string>
<string name="combov2_error_9">Конец операции по сдаче</string>
<string name="combov2_error_10">Ошибка резервуара</string>
<string name="combov2_error_11">Инфузионный набор не заполнен</string>
<string name="combov2_extended_bolus_not_supported">Пролонгированный болюс не поддерживается</string>
<string name="combov2_title">Accu Chek Combo v2</string>
<string name="combov2_pair_with_pump_title">Сопряжение с помпой</string>
<string name="combov2_unpair_pump_title">Разорвать сопряжение с помпой</string>
<string name="combov2_driver_state_label">Статус драйвера помпы</string>
<string name="combov2_current_activity_label">Текущие действия</string>
<string name="bluetooth_address">Адрес Bluetooth</string>
<string name="combov2_start_pairing">Начните сопряжение</string>
<string name="combov2_pairing_in_progress">Идёт сопряжение с Combo</string>
<string name="combov2_pairing_start_steps">Для выполнения сопряжения с Combo:\n\n
1. На помпе перейдите в настройки Bluetooth\n
2. Проверьте, есть ли здесь ранее сопряженное устройство; если да, то перейдите на экран «Удалить устройство» и удалите его\n
3. Перейдите на экран помпы «Добавить устройство» и запустите процесс сопряжение\n
4. Нажмите на кнопку «Начать подключение» ниже, чтобы начать сопряжение в AndroidAPS\n</string>
<string name="combov2_steps_if_no_connection_during_pairing">Через некоторое время имя телефона отображается на экране насоса, нажмите кнопку-галочку CHECK для подтверждения.\n\n
При успешно завершенном подключении, подтвердите это на помпе и вернитесь в главное окно помпы дважды нажав кнопку CHECK.\n\n
Если соединение не установлено более чем через ~5 минут:\n\n
1. Нажмите кнопку \"Назад\" или кнопку \"Отменить сопряжение\"\n
2. Отмените сопряжение на Combo (нажав кнопку ВВЕРХ и кнопку МЕНЮ одновременно)\n
3. Повторите процедуру сопряжения заново</string>
<string name="combov2_pin_entry_hint">0123456789</string>
<string name="combov2_enter_pin">Введите PIN-код</string>
<string name="combov2_cancel_pairing">Отменить сопряжение</string>
<string name="combov2_pin_hint">10-значный PIN-код</string>
<string name="combov2_pairing_finished_successfully">Сопряжение с Combo завершено успешно</string>
<string name="combov2_pairing_cancelled">Сопряжение с Combo отменено пользователем</string>
<string name="combov2_pairing_combo_scan_timeout_reached">Тайм-аут сканирования Combo</string>
<string name="combov2_pairing_failed_due_to_error">Сопряжение не состоялось из-за ошибки: %1$s</string>
<string name="combov2_pairing_aborted_unknown_reasons">Сопряжение прервано по неизвестной причине</string>
<string name="combov2_scanning_for_pump">Поиск помпы</string>
<string name="combov2_establishing_bt_connection">Установка Bluetooth-соединения (попытка № %1$d)</string>
<string name="combov2_pairing_performing_handshake">Cинхронизация связи с помпой</string>
<string name="combov2_pairing_pump_requests_pin">Помпа запрашивает 10-значный PIN-код</string>
<string name="combov2_pairing_finishing">Завершение сопряжения</string>
<string name="combov2_no_connection_for_n_mins">Нет соединения на протяжении %1$d минут</string>
<string name="combov2_less_than_one_minute_ago">Менее минуты назад</string>
<string name="combov2_setting_current_pump_time">Установка времени на помпе</string>
<string name="combov2_setting_current_pump_date">Установка даты на помпе</string>
<string name="combov2_not_initialized">Нет инициализации</string>
<string name="combov2_checking_pump">Проверка помпы</string>
<string name="combov2_ready">Помпа готова</string>
<string name="combov2_suspended">Помпа остановлена</string>
<string name="combov2_pump_is_suspended">Помпа остановлена</string>
<string name="combov2_executing_command">Выполнение команды</string>
<string name="combov2_getting_basal_profile_cmddesc">Получение базального профиля</string>
<string name="combov2_setting_basal_profile_cmddesc">Установка базального профиля</string>
<string name="combov2_setting_tbr_cmddesc">Установка %1$d%% врем базала TBR на %2$d минут</string>
<string name="combov2_cancelling_tbr">Отмена текущего врем базала TBR</string>
<string name="combov2_delivering_bolus_cmddesc">Подается болюс %1$.1f ед</string>
<string name="combov2_fetching_tdd_history_cmddesc">Получение суточной истории дозировок TDD</string>
<string name="combov2_updating_pump_datetime_cmddesc">Обновление даты и времени помпы</string>
<string name="combov2_updating_pump_status_cmddesc">Обновление статуса помпы</string>
<string name="combov2_pairing_pin_failure">PIN-код не принят. Проверьте наличие опечаток. Если
ошибка повторится, отмените сопряжение и повторите процесс.</string>
<string name="combov2_discovery_duration">Время обнаружения (в секундах)</string>
<string name="combov2_verbose_logging">Включить подробное журналирование Combo</string>
<string name="combov2_getting_basal_profile">Получение базового профиля; %1$d фактор(ов) прочитано</string>
<string name="combov2_setting_basal_profile">Получение базового профиля; %1$d фактор(ов) прочитано</string>
<string name="combov2_delivering_bolus">Подача болюса (введено %1$.1f из %2$.1f ед.)</string>
<string name="combov2_cannot_deliver_pump_suspended">Болюс не подан - помпа остановлена</string>
<string name="combov2_insufficient_insulin_in_reservoir">Недостаточно инсулина в резервуаре</string>
<string name="combov2_bolus_cancelled">Болюс отменен</string>
<string name="combov2_bolus_delivery_failed">Подача болюса не состоялась. Чтобы удостовериться, проверьте помпу во избежание двойного болюса и повторите подачу. Для защиты от ложных срабатываний болюсы не повторяются автоматически.</string>
<string name="combov2_bolus_not_delivered">Болюс не подан</string>
<string name="combov2_cannot_access_pump_data">Не удается получить данные с помпы; следует заново выполнить сопряжение</string>
<string name="combov2_unaccounted_bolus_detected_cancelling_bolus">Обнаружены неучтенные подачи болюса. Отмена болюса по соображениям безопасности.</string>
<string name="combov2_incorrect_active_basal_profile">Некорректный активный базальный профиль; должен быть активным профиль 1, а не %1$d</string>
<string name="combov2_unrecognized_alert">Неопознанное оповещение Combo</string>
<string name="combov2_combo_alert">Оповещение Combo</string>
<string name="combov2_last_bolus">%1$.1f%2$s(%3$s)</string>
<string name="combov2_current_tbr">%1$d%% (%2$d мин осталось)</string>
<string name="combov2_current_tbr_less_than_1min">%1$d%% (осталось меньше 1 минуты)</string>
<string name="combov2_load_tdds_cancelled">Загрузка TDD отменена</string>
<string name="combov2_retrieving_tdds_failed">Не удалось получить TDD</string>
<string name="combov2_no_activity">{fa-bed}</string>
<string name="combov2_battery_empty_indicator">{fa-battery-empty}</string>
<string name="combov2_battery_low_indicator">{fa-battery-quarter}</string>
<string name="combov2_battery_full_indicator">{fa-battery-full}</string>
<string name="combov2_battery_low_warning">Низкий заряд батареи помпы</string>
<string name="combov2_reservoir_low_warning">Низкий уровень инсулина в картридже помпы</string>
<string name="combov2_setting_tbr_succeeded">Настройки TBR выполнены</string>
<string name="combov2_setting_tbr_failed">Не удалось установить TBR</string>
<string name="combov2_hit_unexpected_tbr_limit">Непредвиденный предел, встретившийся при настройке TBR: целевой процент составил %1$d%%, а достиг предела %1$d%%</string>
<string name="combov2_cannot_set_absolute_tbr_if_basal_zero">Невозможно установить абсолютный TBR, если базовая скорость равна нулю</string>
<string name="combov2_pair_with_pump_summary">Выполнить сопряжение AndroidAPS и Android с помпой Accu-Chek Combo</string>
<string name="combov2_unpair_pump_summary">Отключить AndroidAPS и AndroidAPS от помпы Accu-Chek Combo</string>
<string name="combov2_unknown_tbr_detected">Обнаружена и остановлена неизвестная временная базальная скоростьTBR; в процентах: %1$d%%; оставшаяся продолжительность: %2$s</string>
<string name="combov2_connection_error">Ошибка соединения: %1$s</string>
<string name="combov2_short_status_last_connection">Предыдущее соединение: %1$d мин. назад</string>
<string name="combov2_short_status_alert">Предупреждение: %s</string>
<string name="combov2_short_status_last_bolus">Предыдущий болюс: %1$s ед. @ %2$s</string>
<string name="combov2_short_status_temp_basal">Временн %s</string>
<string name="combov2_short_status_reservoir">Резервуар: %dед</string>
<string name="combov2_short_status_battery_state_empty">пусто</string>
<string name="combov2_short_status_battery_state_low">низкая</string>
<string name="combov2_short_status_battery_state_full">заряжена полностью</string>
<string name="combov2_short_status_battery_state">Батарея: %s</string>
<string name="combov2_automatic_reservoir_entry">Автоматически определять и вносить запись о замене резервуара инсулина</string>
<string name="combov2_automatic_battery_entry">Автоматически определять и вносить запись о замене батареи</string>
<string name="combov2_note_reservoir_change">Запись о замене резервуара инсулина автоматически вносится драйвером combov2</string>
<string name="combov2_note_battery_change">Запись о замене батареи автоматически вносится драйвером combov2</string>
<string name="combov2_timezone_changed">Часовой пояс изменен</string>
<string name="combov2_datetime_changed">Дата и/или время изменены</string>
<string name="combov2_dst_started">Начато летнее/зимнее время (ДСТ)</string>
<string name="combov2_dst_ended">Летнее/зимнее время окончено (ДСТ)</string>
</resources>

View file

@ -12,9 +12,6 @@
android:title="@string/combov2_pair_with_pump_title"
android:summary="@string/combov2_pair_with_pump_summary"
android:shouldDisableView="true">
<intent
android:targetClass="info.nightscout.pump.combov2.activities.ComboV2PairingActivity"
android:targetPackage="info.nightscout.androidaps" />
</Preference>
<Preference

View file

@ -45,7 +45,7 @@
<string name="diaconn_g8_useextended_title">Utiliser les bolus étendus pour &gt; 200%%</string>
<string name="diaconn_g8_visualizeextendedaspercentage_title">Afficher le bolus étendu en %%</string>
<string name="diaconn_g8_bluetooth_status">État Bluetooth</string>
<string name="diagonn_g8_tdd_label">DTI</string>
<string name="diagonn_g8_tdd_label">DTQ</string>
<string name="bolus_step">Incrément Bolus</string>
<string name="basal_step">Incrément Basal</string>
<string name="pump_firmware_label">Firmware</string>

View file

@ -37,18 +37,14 @@ import info.nightscout.androidaps.plugins.pump.eopatch.vo.PatchConfig;
import info.nightscout.androidaps.plugins.pump.eopatch.vo.PatchLifecycleEvent;
import info.nightscout.androidaps.plugins.pump.eopatch.vo.PatchState;
import info.nightscout.androidaps.plugins.pump.eopatch.vo.TempBasal;
import info.nightscout.interfaces.plugin.ActivePlugin;
import info.nightscout.interfaces.profile.ProfileFunction;
import info.nightscout.interfaces.pump.DetailedBolusInfo;
import info.nightscout.interfaces.pump.PumpSync;
import info.nightscout.interfaces.pump.defs.PumpType;
import info.nightscout.interfaces.queue.CommandQueue;
import info.nightscout.rx.AapsSchedulers;
import info.nightscout.rx.bus.RxBus;
import info.nightscout.rx.events.EventCustomActionsChanged;
import info.nightscout.rx.events.EventPumpStatusChanged;
import info.nightscout.rx.events.EventRefreshOverview;
import info.nightscout.rx.logging.AAPSLogger;
import info.nightscout.shared.interfaces.ResourceHelper;
import info.nightscout.shared.sharedPreferences.SP;
import info.nightscout.shared.utils.DateUtil;
@ -63,10 +59,6 @@ public class PatchManager implements IPatchManager {
@Inject PatchManagerImpl patchManager;
@Inject IPreferenceManager pm;
@Inject ProfileFunction profileFunction;
@Inject ActivePlugin activePlugin;
@Inject CommandQueue commandQueue;
@Inject AAPSLogger aapsLogger;
@Inject ResourceHelper resourceHelper;
@Inject RxBus rxBus;
@Inject Context context;

View file

@ -54,7 +54,6 @@ import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.StopComboBolusTa
import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.StopExtBolusTask;
import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.StopNowBolusTask;
import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.StopTempBasalTask;
import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.SyncBasalHistoryTask;
import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.TaskBase;
import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.TaskFunc;
import info.nightscout.androidaps.plugins.pump.eopatch.ble.task.UpdateConnectionTask;
@ -91,8 +90,6 @@ import info.nightscout.androidaps.plugins.pump.eopatch.vo.PatchConfig;
import info.nightscout.androidaps.plugins.pump.eopatch.vo.PatchState;
import info.nightscout.androidaps.plugins.pump.eopatch.vo.TempBasal;
import info.nightscout.interfaces.pump.DetailedBolusInfo;
import info.nightscout.interfaces.pump.PumpSync;
import info.nightscout.interfaces.pump.defs.PumpType;
import info.nightscout.rx.AapsSchedulers;
import info.nightscout.rx.logging.AAPSLogger;
import info.nightscout.rx.logging.LTag;
@ -111,7 +108,6 @@ public class PatchManagerImpl {
@Inject SP sp;
@Inject AAPSLogger aapsLogger;
@Inject AapsSchedulers aapsSchedulers;
@Inject PumpSync pumpSync;
@Inject StartBondTask START_BOND;
@Inject GetPatchInfoTask GET_PATCH_INFO;
@ -562,9 +558,6 @@ public class PatchManagerImpl {
@Inject
PatchStateManager patchStateManager;
@Inject
SyncBasalHistoryTask syncBasalHistoryTask;
void onAlarmNotification(AlarmNotification notification) throws Throwable {
patchStateManager.updatePatchState(PatchState.create(notification.patchState, System.currentTimeMillis()));

View file

@ -80,10 +80,10 @@ public class PatchStateManager {
// Resume --> onBasalResume
onBasalResumeState();
} else if (oldState.isNormalBasalAct() == false) {
} else if (!oldState.isNormalBasalAct()) {
// Start --> onBasalStarted
}
} else if (oldState.isNormalBasalPaused() == false && newState.isNormalBasalPaused()) {
} else if (!oldState.isNormalBasalPaused() && newState.isNormalBasalPaused()) {
if (newState.isTempBasalAct()) {
} else {
// pause
@ -93,25 +93,21 @@ public class PatchStateManager {
/* Temp Basal ------------------------------------------------------------------------------------------- */
if (newState.isTempBasalAct()) {
if (oldState.isTempBasalAct() == false) {
if (!oldState.isTempBasalAct()) {
// Start
onTempBasalStartState();
}
}
boolean tempBasalStopped = false;
boolean tempBasalFinished = false;
boolean tempBasalFinished = newState.isTempBasalDone() && !newState.isPatchInternalSuspended();
if (newState.isTempBasalDone() && !newState.isPatchInternalSuspended()) {
tempBasalFinished = true;
}
if (oldState.isTempBasalDone() == false) {
if (!oldState.isTempBasalDone()) {
if (newState.isTempBasalDone()) {
tempBasalStopped = true;
onTempBasalDoneState();
} else if (oldState.isTempBasalAct() && newState.isTempBasalAct() == false) {
} else if (oldState.isTempBasalAct() && !newState.isTempBasalAct()) {
tempBasalStopped = true;
onTempBasalCancelState();
@ -126,15 +122,15 @@ public class PatchStateManager {
}
}
if (newState.isTempBasalAct() == false && pm.getTempBasalManager().getStartedBasal() != null) {
if (!newState.isTempBasalAct() && pm.getTempBasalManager().getStartedBasal() != null) {
pm.getTempBasalManager().updateBasalStopped();
}
/* Now Bolus -------------------------------------------------------------------------------------------- */
if (oldState.isNowBolusRegAct() == false && newState.isNowBolusRegAct() == true) {
if (!oldState.isNowBolusRegAct() && newState.isNowBolusRegAct()) {
// Start
} else if (oldState.isNowBolusDone() == false) {
if (oldState.isNowBolusRegAct() && newState.isNowBolusRegAct() == false) {
} else if (!oldState.isNowBolusDone()) {
if (oldState.isNowBolusRegAct() && !newState.isNowBolusRegAct()) {
// Cancel
} else if (newState.isNowBolusDone()) {
// Done
@ -143,23 +139,23 @@ public class PatchStateManager {
BolusCurrent bolusCurrent = pm.getBolusCurrent();
if (newState.isNowBolusRegAct() == false && bolusCurrent.historyId(BolusType.NOW) > 0
if (!newState.isNowBolusRegAct() && bolusCurrent.historyId(BolusType.NOW) > 0
&& bolusCurrent.endTimeSynced(BolusType.NOW)) {
bolusCurrent.clearBolus(BolusType.NOW);
}
/* Extended Bolus --------------------------------------------------------------------------------------- */
if (oldState.isExtBolusRegAct() == false && newState.isExtBolusRegAct() == true) {
if (!oldState.isExtBolusRegAct() && newState.isExtBolusRegAct()) {
// Start
} else if (oldState.isExtBolusDone() == false) {
if (oldState.isExtBolusRegAct() && newState.isExtBolusRegAct() == false) {
} else if (!oldState.isExtBolusDone()) {
if (oldState.isExtBolusRegAct() && !newState.isExtBolusRegAct()) {
// Cancel
} else if (newState.isExtBolusDone()) {
// Done
}
}
if (newState.isExtBolusRegAct() == false && bolusCurrent.historyId(BolusType.EXT) > 0
if (!newState.isExtBolusRegAct() && bolusCurrent.historyId(BolusType.EXT) > 0
&& bolusCurrent.endTimeSynced(BolusType.EXT)) {
bolusCurrent.clearBolus(BolusType.EXT);
}
@ -243,7 +239,7 @@ public class PatchStateManager {
if (normalBasal != null) {
pm.getNormalBasalManager().updateBasalStarted();
normalBasal.updateNormalBasalIndex();
pm.flushNormalBasalManager();;
pm.flushNormalBasalManager();
}
}

View file

@ -101,7 +101,7 @@ public class SyncBasalHistoryTask extends TaskBase {
}
public synchronized int updateInjected(float[] normal, float[] temp, int start, int end) {
if (pm.getPatchState().isPatchInternalSuspended() && pm.getPatchConfig().isInBasalPausedTime() == false) {
if (pm.getPatchState().isPatchInternalSuspended() && !pm.getPatchConfig().isInBasalPausedTime()) {
return -1;
}

View file

@ -16,7 +16,7 @@ import io.reactivex.rxjava3.core.Single;
public class UpdateConnectionTask extends TaskBase {
@Inject PatchStateManager patchStateManager;
private UpdateConnection UPDATE_CONNECTION;
private final UpdateConnection UPDATE_CONNECTION;
@Inject
public UpdateConnectionTask() {

View file

@ -10,7 +10,7 @@ import kotlin.reflect.KClass
@MustBeDocumented
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)

View file

@ -21,7 +21,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject
* BolusCurrent : 현재 패치에서 진행 중인 '볼루스의 정보' 표현한 클래스.
*/
class BolusCurrent(): IPreference<BolusCurrent> {
class BolusCurrent : IPreference<BolusCurrent> {
@Transient
private val subject: BehaviorSubject<BolusCurrent> = BehaviorSubject.create()

View file

@ -22,8 +22,7 @@ class PatchState: IPreference<PatchState> {
private val stateBytes: ByteArray
var updatedTimestamp: Long = 0
constructor(): this(ByteArray(SIZE), 0) {
}
constructor(): this(ByteArray(SIZE), 0)
constructor(stateBytes: ByteArray, updatedTimestamp: Long) {
this.stateBytes = stateBytes

View file

@ -92,6 +92,7 @@
<string name="patch_communication_succeed_message">Подключено к Patch.</string>
<string name="patch_cancel_pairing">Отменить сопряжение</string>
<string name="symbol_days">дней</string>
<string name="all_dose_unit">&#160; ед</string>
<string name="insulin_suspend_msg1">После приостановки текущий болюс &amp; Временный базал будет отменен. \n\nСкорость базала: %1$s ед/ч\nОсталось времени: %2$s\n&amp; инсулина: %3$.2f U</string>
<string name="insulin_suspend_msg2">После приостановки текущий болюс будет отменен. \n\n Осталось инсулина: %1$.2f U</string>
<string name="insulin_suspend_msg3">После приостановки текущий Временный базал будет отменен.\n\n Скорость базала: %1$s ед/ч\n Осталось времени: %2$s</string>

View file

@ -79,10 +79,8 @@ class MedtronicUITask {
MedtronicCommandType.SetTemporaryBasal -> {
val tbr = getTbrSettings()
if (tbr != null) {
result = communicationManager.setTemporaryBasal(tbr)
}
}
MedtronicCommandType.ReadTemporaryBasal -> {
result = communicationManager.getTemporaryBasal()
@ -128,7 +126,7 @@ class MedtronicUITask {
}
}
private fun getTbrSettings(): TempBasalPair? {
private fun getTbrSettings(): TempBasalPair {
return TempBasalPair(getDoubleFromParameters(0)!!, //
false, //
getIntegerFromParameters(1))

View file

@ -13,7 +13,7 @@ import kotlin.reflect.KClass
annotation class OmnipodPluginQualifier
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ViewModelKey(val value: KClass<out ViewModel>)

View file

@ -309,7 +309,7 @@ class OmnipodDashManagerImpl @Inject constructor(
.setUniqueId(podStateManager.uniqueId!!.toInt())
.setSequenceNumber(podStateManager.messageSequenceNumber)
.setNonce(NONCE)
.setNumberOfUnits(Round.roundTo(podStateManager.firstPrimeBolusVolume!! * PodConstants.POD_PULSE_BOLUS_UNITS, POD_PULSE_BOLUS_UNITS))
.setNumberOfUnits(Round.roundTo(podStateManager.firstPrimeBolusVolume!! * POD_PULSE_BOLUS_UNITS, POD_PULSE_BOLUS_UNITS))
.setDelayBetweenPulsesInEighthSeconds(podStateManager.primePulseRate!!.toByte())
.setProgramReminder(ProgramReminder(atStart = false, atEnd = false, atInterval = 0))
.build(),
@ -412,7 +412,7 @@ class OmnipodDashManagerImpl @Inject constructor(
)
observables.add(
observeSendProgramBolusCommand(
Round.roundTo(podStateManager.secondPrimeBolusVolume!! * PodConstants.POD_PULSE_BOLUS_UNITS, PodConstants.POD_PULSE_BOLUS_UNITS),
Round.roundTo(podStateManager.secondPrimeBolusVolume!! * POD_PULSE_BOLUS_UNITS, POD_PULSE_BOLUS_UNITS),
podStateManager.primePulseRate!!.toByte(),
confirmationBeeps = false,
completionBeeps = false

View file

@ -75,7 +75,6 @@ abstract class PumpPluginAbstract protected constructor(
protected var displayConnectionMessages = false
var pumpType: PumpType = PumpType.GENERIC_AAPS
get() = field
set(value) {
field = value
pumpDescription.fillFor(value)

View file

@ -9,6 +9,5 @@ public enum BasalProfileStatus {
NotInitialized, //
ProfileOK, //
ProfileChanged, //
;
}

View file

@ -65,11 +65,11 @@ enum class PumpHistoryEntryGroup(val resourceId: Int, val pumpTypeGroupConfig: P
if (pumpTypeGroupConfig == PumpTypeGroupConfig.All) {
outList = translatedList!!.stream()
.filter { pre -> pre.pumpTypeGroupConfig == PumpTypeGroupConfig.All }
.toList();
.toList()
} else {
outList = translatedList!!.stream()
.filter { pre -> (pre.pumpTypeGroupConfig == PumpTypeGroupConfig.All || pre.pumpTypeGroupConfig == pumpTypeGroupConfig) }
.toList();
.toList()
}
return outList

View file

@ -28,22 +28,21 @@ enum class PumpUpdateFragmentType {
Custom_8
;
final var children: List<PumpUpdateFragmentType>? = null
var children: List<PumpUpdateFragmentType>? = null
constructor() {
}
constructor()
constructor(children: List<PumpUpdateFragmentType>) {
this.children = children;
this.children = children
}
fun isOptionIncluded(type: PumpUpdateFragmentType): Boolean {
if (this == type)
return true
else if (this.children != null && this.children!!.contains(type))
return true;
return true
return false;
return false
}
}

View file

@ -1,4 +1,3 @@
package info.nightscout.pump.common.driver.history
interface PumpDataConverter {
}
interface PumpDataConverter

View file

@ -7,7 +7,7 @@ import java.util.GregorianCalendar
abstract class PumpHistoryDataProviderAbstract : PumpHistoryDataProvider {
override fun getInitialData(): List<PumpHistoryEntry> {
return getData(getInitialPeriod());
return getData(getInitialPeriod())
}
override fun getSpinnerWidthInPixels(): Int {

View file

@ -4,5 +4,4 @@ import info.nightscout.rx.events.Event
class EventPumpChanged(var serialNumber: String,
var connectionAddress: String,
var parameters: MutableMap<String, Any>? = null) : Event() {
}
var parameters: MutableMap<String, Any>? = null) : Event()

View file

@ -2,5 +2,4 @@ package info.nightscout.pump.common.events
import info.nightscout.rx.events.Event
class EventPumpConnectionParametersChanged : Event() {
}
class EventPumpConnectionParametersChanged : Event()

View file

@ -77,7 +77,7 @@ data class PumpDbEntryCarbs(var date: Long,
var pumpId: Long? = null) {
constructor(detailedBolusInfo: DetailedBolusInfo,
creator: info.nightscout.pump.common.sync.PumpSyncEntriesCreator
creator: PumpSyncEntriesCreator
) : this(detailedBolusInfo.timestamp,
detailedBolusInfo.carbs,
creator.model(),

View file

@ -110,7 +110,7 @@ class PumpSyncStorage @Inject constructor(
return pumpSyncStorageTBR
}
fun addBolusWithTempId(detailedBolusInfo: DetailedBolusInfo, writeToInternalHistory: Boolean, creator: info.nightscout.pump.common.sync.PumpSyncEntriesCreator): Boolean {
fun addBolusWithTempId(detailedBolusInfo: DetailedBolusInfo, writeToInternalHistory: Boolean, creator: PumpSyncEntriesCreator): Boolean {
val temporaryId = creator.generateTempId(detailedBolusInfo.timestamp)
val result = pumpSync.addBolusWithTempId(
detailedBolusInfo.timestamp,
@ -157,7 +157,7 @@ class PumpSyncStorage @Inject constructor(
"carbs=${carbsDto.carbs}, pumpSerial=${carbsDto.serialNumber}] - Result: $result")
}
fun addTemporaryBasalRateWithTempId(temporaryBasal: PumpDbEntryTBR, writeToInternalHistory: Boolean, creator: info.nightscout.pump.common.sync.PumpSyncEntriesCreator): Boolean {
fun addTemporaryBasalRateWithTempId(temporaryBasal: PumpDbEntryTBR, writeToInternalHistory: Boolean, creator: PumpSyncEntriesCreator): Boolean {
val timeNow: Long = System.currentTimeMillis()
val temporaryId = creator.generateTempId(timeNow)

View file

@ -72,14 +72,6 @@ class PumpHistoryActivity : DaggerAppCompatActivity() {
}
override fun onResume() {
super.onResume()
//filterHistory(selectedGroup)
//setHistoryTypeSpinner()
//aapsLogger.info(LTag.PUMP, "onResume")
//binding.pumpHistoryRoot.requestLayout()
}
private fun setHistoryTypeSpinner() {
manualChange = true
for (i in typeListFull!!.indices) {
@ -119,12 +111,12 @@ class PumpHistoryActivity : DaggerAppCompatActivity() {
binding.pumpHistoryText.text = historyDataProvider.getText(PumpHistoryText.PUMP_HISTORY)
binding.pumpHistoryType.adapter = spinnerAdapter
binding.pumpHistoryType.getLayoutParams().width = fromDpToSize(historyDataProvider.getSpinnerWidthInPixels())
binding.pumpHistoryType.requestLayout();
binding.pumpHistoryType.setOnItemSelectedListener(object : AdapterView.OnItemSelectedListener {
binding.pumpHistoryType.layoutParams.width = fromDpToSize(historyDataProvider.getSpinnerWidthInPixels())
binding.pumpHistoryType.requestLayout()
binding.pumpHistoryType.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View, position: Int, id: Long) {
if (manualChange) return
val selected = binding.pumpHistoryType.getSelectedItem() as TypeList
val selected = binding.pumpHistoryType.selectedItem as TypeList
showingType = selected
selectedGroup = selected.entryGroup
filterHistory(selectedGroup)
@ -138,7 +130,7 @@ class PumpHistoryActivity : DaggerAppCompatActivity() {
if (manualChange) return
filterHistory(PumpHistoryEntryGroup.All)
}
})
}
binding.pumpHistoryTypeText.requestLayout()
}

View file

@ -32,7 +32,7 @@ object ProfileUtil {
return if (stringBuilder.length > 3) stringBuilder.substring(0, stringBuilder.length - 2) else stringBuilder.toString()
}
fun getBasalProfilesDisplayableAsStringOfArray(profile: Profile, pumpType: PumpType): String? {
fun getBasalProfilesDisplayableAsStringOfArray(profile: Profile, pumpType: PumpType): String {
val stringBuilder = java.lang.StringBuilder()
// for (basalValue in profiles) {
// val basalValueValue = pumpType.determineCorrectBasalSize(basalValue.value)

View file

@ -157,7 +157,7 @@ public abstract class RileyLinkCommunicationManager<T extends RLMessage> {
// FIXME wakeUp successful !!!!!!!!!!!!!!!!!!
nextWakeUpRequired = System.currentTimeMillis() + (receiverDeviceAwakeForMinutes * 60 * 1000);
nextWakeUpRequired = System.currentTimeMillis() + ((long) receiverDeviceAwakeForMinutes * 60 * 1000);
} else {
aapsLogger.debug(LTag.PUMPBTCOMM, "Last pump communication was recent, not waking pump.");
}

View file

@ -40,3 +40,4 @@ include ':pump:pump-common'
include ':pump:pump-core'
include ':pump:rileylink'
include ':plugins:sync'
include ':workflow'

View file

@ -17,6 +17,7 @@
<!-- Activities-->
<string name="activity_monitor">Moniteur d\'activité</string>
<string name="do_you_want_reset_stats">Voulez-vous réinitialiser les statistiques d\'activité ?</string>
<string name="do_you_want_reset_tdd_stats">Voulez-vous réinitialiser les statistiques de DTQ ?</string>
<string name="statistics">Statistiques</string>
<string name="calculation_in_progress">Calcul en cours</string>
<string name="invalid_age">Âge invalide</string>
@ -117,8 +118,8 @@
<string name="motol_default_profile">Profil par défaut</string>
<string name="current_profile">Profil actuel</string>
<string name="available_profile">Profils disponibles</string>
<string name="format_with_tdd">Âge: %1$d DTI: %2$.0f U</string>
<string name="format_with_tdd_and_pct">Âge: %1$d DTI: %2$.0f U %3$d%%</string>
<string name="format_with_tdd">Âge: %1$d DTQ: %2$.0f U</string>
<string name="format_with_tdd_and_pct">Âge: %1$d DTQ: %2$.0f U %3$d%%</string>
<string name="format_with_weight">Âge: %1$d Poids: %2$.0f kg</string>
<string name="dpv_default_profile">Profil par défaut DPV</string>
<string name="invalid_pct">% saisi invalide</string>

View file

@ -102,6 +102,10 @@
<string name="careportal_remove_started_events">Удалить записи о начале работы AAPS</string>
<string name="hide_loop">Скрыть цикл</string>
<string name="show_loop">Показать цикл</string>
<string name="user_entry">Запись пользователя</string>
<string name="clone_label">Клонировать</string>
<string name="show_loop_records">Показать записи цикла</string>
<string name="show_hide_records">Скрыть записи цикла</string>
<!-- ProfileHelperActivity -->
<string name="profile1">Профиль 1</string>
<string name="profile2">Профиль 2</string>

View file

@ -58,10 +58,6 @@ class DataLayerListenerServiceWear : WearableListenerService() {
}
}
override fun onPeerConnected(p0: Node) {
super.onPeerConnected(p0)
}
override fun onCapabilityChanged(p0: CapabilityInfo) {
super.onCapabilityChanged(p0)
handler.post { updateTranscriptionCapability() }

View file

@ -113,7 +113,7 @@
<string name="status_pump">Pompe</string>
<string name="status_loop">Boucle</string>
<string name="status_profile_switch">Changement de profil</string>
<string name="status_tdd">DTI</string>
<string name="status_tdd">DTQ</string>
<string name="activity_carb">GA</string>
<string name="activity_IOB">IA</string>
<string name="activity_no_status">aucun statut</string>

1
workflow/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/build

29
workflow/build.gradle Normal file
View file

@ -0,0 +1,29 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-kapt'
id 'kotlin-allopen'
id 'com.hiya.jacoco-android'
}
apply from: "${project.rootDir}/core/core-main/android_dependencies.gradle"
apply from: "${project.rootDir}/core/core-main/android_module_dependencies.gradle"
apply from: "${project.rootDir}/core/core-main/test_dependencies.gradle"
apply from: "${project.rootDir}/core/core-main/jacoco_global.gradle"
android {
namespace 'info.nightscout.workflow'
}
dependencies {
implementation project(':core:libraries')
implementation project(':core:graphview')
implementation project(':app-wear-shared:shared')
implementation project(':database:entities')
implementation project(':database:impl')
implementation project(':core:core-main')
implementation project(':core:interfaces')
implementation project(':core:graph')
implementation project(':core:ui')
implementation project(':core:utils')
}

View file

21
workflow/proguard-rules.pro vendored Normal file
View file

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest>
</manifest>

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import androidx.work.Worker

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import androidx.work.Worker

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import androidx.work.Worker

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import android.graphics.DashPathEffect
@ -8,14 +8,13 @@ import androidx.work.WorkerParameters
import androidx.work.workDataOf
import com.jjoe64.graphview.series.LineGraphSeries
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.core.events.EventIobCalculationProgress
import info.nightscout.core.graph.OverviewData
import info.nightscout.core.graph.data.ScaledDataPoint
import info.nightscout.core.utils.receivers.DataWorkerStorage
import info.nightscout.core.workflow.CalculationWorkflow
import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.rx.bus.RxBus
import info.nightscout.shared.interfaces.ResourceHelper
import javax.inject.Inject

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import androidx.work.Worker

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import androidx.work.Worker

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import android.graphics.DashPathEffect
@ -9,8 +9,7 @@ import androidx.work.workDataOf
import com.jjoe64.graphview.series.BarGraphSeries
import com.jjoe64.graphview.series.LineGraphSeries
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.core.iob.iobCobCalculator.data.AutosensDataObject
import info.nightscout.core.events.EventIobCalculationProgress
import info.nightscout.core.graph.OverviewData
import info.nightscout.core.graph.data.DataPointWithLabelInterface
import info.nightscout.core.graph.data.DeviationDataPoint
@ -20,6 +19,7 @@ import info.nightscout.core.graph.data.Scale
import info.nightscout.core.graph.data.ScaledDataPoint
import info.nightscout.core.iob.combine
import info.nightscout.core.iob.copy
import info.nightscout.core.iob.iobCobCalculator.data.AutosensDataObject
import info.nightscout.core.utils.receivers.DataWorkerStorage
import info.nightscout.core.workflow.CalculationWorkflow
import info.nightscout.database.ValueWrapper
@ -28,10 +28,9 @@ import info.nightscout.interfaces.aps.AutosensResult
import info.nightscout.interfaces.aps.SMBDefaults
import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.iob.IobTotal
import info.nightscout.interfaces.overview.OverviewMenus
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.utils.DecimalFormatter
import info.nightscout.plugins.general.overview.OverviewMenus
import info.nightscout.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.logging.LTag

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.workflow
package info.nightscout.workflow
import android.content.Context
import androidx.work.Worker
@ -14,9 +14,9 @@ import info.nightscout.database.impl.AppRepository
import info.nightscout.interfaces.Config
import info.nightscout.interfaces.aps.Loop
import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData
import info.nightscout.interfaces.overview.OverviewMenus
import info.nightscout.interfaces.profile.DefaultValueHelper
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.plugins.general.overview.OverviewMenus
import info.nightscout.rx.bus.RxBus
import info.nightscout.shared.interfaces.ResourceHelper
import info.nightscout.shared.utils.T

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