From 3f77496c88cb155a2c2c2bf372e9ad581400de49 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 27 Nov 2020 16:46:33 +0100 Subject: [PATCH] automated copy of configuration AAPS -> NSCLIENT --- .../configBuilder/ConfigBuilderPlugin.kt | 2 +- .../general/nsclient/data/NSDeviceStatus.java | 18 ++++- .../plugins/insulin/InsulinFragment.kt | 6 +- .../plugins/insulin/InsulinLyumjevPlugin.kt | 10 ++- .../plugins/insulin/InsulinOrefBasePlugin.kt | 39 +++++----- .../insulin/InsulinOrefFreePeakPlugin.kt | 16 ++-- .../insulin/InsulinOrefRapidActingPlugin.kt | 18 ++--- .../InsulinOrefUltraRapidActingPlugin.kt | 10 ++- .../plugins/pump/virtual/VirtualPumpPlugin.kt | 2 +- .../sensitivity/SensitivityAAPSPlugin.java | 38 ++++++++++ .../sensitivity/SensitivityOref1Plugin.java | 36 +++++++++ .../SensitivityWeightedAveragePlugin.java | 37 +++++++++ app/src/main/res/values/strings.xml | 1 - .../insulin/InsulinLyumjevPluginTest.kt | 2 +- .../insulin/InsulinOrefBasePluginTest.kt | 8 +- .../insulin/InsulinOrefFreePeakPluginTest.kt | 2 +- .../InsulinOrefRapidActingPluginTest.kt | 2 +- .../InsulinOrefUltraRapidActingPluginTest.kt | 2 +- .../AbstractSensitivityPluginTest.kt | 9 +++ .../androidaps/db/ExtendedBolus.java | 2 +- .../nightscout/androidaps/db/Treatment.java | 2 +- .../interfaces/ConfigBuilderInterface.kt | 1 + .../interfaces/InsulinInterface.java | 24 ------ .../androidaps/interfaces/InsulinInterface.kt | 33 ++++++++ .../interfaces/SensitivityInterface.java | 16 ---- .../interfaces/SensitivityInterface.kt | 30 ++++++++ .../plugins/aps/loop/DeviceStatus.java | 2 + .../configBuilder/RunningConfiguration.kt | 75 +++++++++++++++++++ .../plugins/general/nsclient/NSUpload.java | 8 +- core/src/main/res/values/strings.xml | 1 + 30 files changed, 352 insertions(+), 100 deletions(-) delete mode 100644 core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.java create mode 100644 core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.kt delete mode 100644 core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java create mode 100644 core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.kt create mode 100644 core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/RunningConfiguration.kt diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ConfigBuilderPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ConfigBuilderPlugin.kt index 598ddf085f..771792c9b9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ConfigBuilderPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ConfigBuilderPlugin.kt @@ -147,7 +147,7 @@ class ConfigBuilderPlugin @Inject constructor( } } - fun performPluginSwitch(changedPlugin: PluginBase, enabled: Boolean, type: PluginType) { + override fun performPluginSwitch(changedPlugin: PluginBase, enabled: Boolean, type: PluginType) { changedPlugin.setPluginEnabled(type, enabled) changedPlugin.setFragmentVisible(type, enabled) processOnEnabledCategoryChanged(changedPlugin, type) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.java index 757692e655..39671df25f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.java @@ -15,10 +15,13 @@ import javax.inject.Inject; import javax.inject.Singleton; import dagger.android.HasAndroidInjector; +import info.nightscout.androidaps.Config; import info.nightscout.androidaps.R; +import info.nightscout.androidaps.interfaces.ConfigInterface; import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.plugins.aps.loop.APSResult; +import info.nightscout.androidaps.plugins.configBuilder.RunningConfiguration; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.HtmlHelper; import info.nightscout.androidaps.utils.Round; @@ -85,6 +88,8 @@ public class NSDeviceStatus { private final SP sp; private final ResourceHelper resourceHelper; private final NSSettingsStatus nsSettingsStatus; + private final ConfigInterface config; + private final RunningConfiguration runningConfiguration; private JSONObject data = null; @@ -93,12 +98,16 @@ public class NSDeviceStatus { AAPSLogger aapsLogger, SP sp, ResourceHelper resourceHelper, - NSSettingsStatus nsSettingsStatus + NSSettingsStatus nsSettingsStatus, + ConfigInterface config, + RunningConfiguration runningConfiguration ) { this.aapsLogger = aapsLogger; this.sp = sp; this.resourceHelper = resourceHelper; this.nsSettingsStatus = nsSettingsStatus; + this.config = config; + this.runningConfiguration = runningConfiguration; } public void handleNewData(JSONArray devicestatuses) { @@ -114,8 +123,13 @@ public class NSDeviceStatus { // Objectives 0 sp.putBoolean(R.string.key_ObjectivespumpStatusIsAvailableInNS, true); } + if (devicestatusJson.has("configuration") && config.getNSCLIENT()) { + // copy configuration of Insulin and Sensitivity from main AAPS + runningConfiguration.apply(devicestatusJson.getJSONObject("configuration")); + } } - } catch (JSONException ignored) { + } catch (JSONException jsonException) { + jsonException.printStackTrace(); } } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinFragment.kt index c2e61f19b9..5d90080113 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinFragment.kt @@ -22,9 +22,9 @@ class InsulinFragment : DaggerFragment() { override fun onResume() { super.onResume() - insulin_name?.setText(activePlugin.getActiveInsulin().getFriendlyName()) - insulin_comment?.setText(activePlugin.getActiveInsulin().getComment()) - insulin_dia?.text = resourceHelper.gs(R.string.dia) + ": " + activePlugin.getActiveInsulin().getDia() + "h" + insulin_name?.setText(activePlugin.getActiveInsulin().friendlyName) + insulin_comment?.setText(activePlugin.getActiveInsulin().comment) + insulin_dia?.text = resourceHelper.gs(R.string.dia) + ": " + activePlugin.getActiveInsulin().dia + "h" insulin_graph?.show(activePlugin.getActiveInsulin()) } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt index b5fa0fea3d..c9f2a6d96e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt @@ -3,10 +3,11 @@ package info.nightscout.androidaps.plugins.insulin import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.InsulinInterface +import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBusWrapper -import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.utils.resources.ResourceHelper +import org.json.JSONObject import javax.inject.Inject import javax.inject.Singleton @@ -18,10 +19,11 @@ class InsulinLyumjevPlugin @Inject constructor( rxBus: RxBusWrapper, aapsLogger: AAPSLogger ) : InsulinOrefBasePlugin(injector, resourceHelper, profileFunction, rxBus, aapsLogger) { + override val id get(): InsulinInterface.InsulinType = InsulinInterface.InsulinType.OREF_LYUMJEV + override val friendlyName get(): String = resourceHelper.gs(R.string.lyumjev) - override fun getId(): Int = InsulinInterface.OREF_LYUMJEV - - override fun getFriendlyName(): String = resourceHelper.gs(R.string.lyumjev) + override fun configuration(): JSONObject = JSONObject() + override fun applyConfiguration(configuration: JSONObject) {} override fun commentStandardText(): String = resourceHelper.gs(R.string.lyumjev) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt index 935fad3ccb..b074900398 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt @@ -3,16 +3,16 @@ package info.nightscout.androidaps.plugins.insulin import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.data.Iob +import info.nightscout.androidaps.db.Treatment import info.nightscout.androidaps.interfaces.InsulinInterface import info.nightscout.androidaps.interfaces.PluginBase import info.nightscout.androidaps.interfaces.PluginDescription import info.nightscout.androidaps.interfaces.PluginType +import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBusWrapper -import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification import info.nightscout.androidaps.plugins.general.overview.notifications.Notification -import info.nightscout.androidaps.db.Treatment import info.nightscout.androidaps.utils.resources.ResourceHelper /** @@ -35,15 +35,16 @@ abstract class InsulinOrefBasePlugin( ), InsulinInterface { private var lastWarned: Long = 0 - override fun getDia(): Double { - val dia = userDefinedDia - return if (dia >= MIN_DIA) { - dia - } else { - sendShortDiaNotification(dia) - MIN_DIA + override val dia + get(): Double { + val dia = userDefinedDia + return if (dia >= MIN_DIA) { + dia + } else { + sendShortDiaNotification(dia) + MIN_DIA + } } - } open fun sendShortDiaNotification(dia: Double) { if (System.currentTimeMillis() - lastWarned > 60 * 1000) { @@ -72,7 +73,7 @@ abstract class InsulinOrefBasePlugin( if (treatment.insulin != 0.0) { val bolusTime = treatment.date val t = (time - bolusTime) / 1000.0 / 60.0 - val td = getDia() * 60 //getDIA() always >= MIN_DIA + val td = dia * 60 //getDIA() always >= MIN_DIA val tp = peak.toDouble() // force the IOB to 0 if over DIA hours have passed if (t < td) { @@ -86,19 +87,21 @@ abstract class InsulinOrefBasePlugin( return result } - override fun getComment(): String { - var comment = commentStandardText() - val userDia = userDefinedDia - if (userDia < MIN_DIA) { - comment += "\n" + resourceHelper.gs(R.string.dia_too_short, userDia, MIN_DIA) + override val comment + get(): String { + var comment = commentStandardText() + val userDia = userDefinedDia + if (userDia < MIN_DIA) { + comment += "\n" + resourceHelper.gs(R.string.dia_too_short, userDia, MIN_DIA) + } + return comment } - return comment - } abstract val peak: Int abstract fun commentStandardText(): String companion object { + const val MIN_DIA = 5.0 } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt index f1804cbd43..72609822f2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt @@ -3,11 +3,12 @@ package info.nightscout.androidaps.plugins.insulin import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.InsulinInterface +import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBusWrapper -import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.sharedPreferences.SP +import org.json.JSONObject import javax.inject.Inject import javax.inject.Singleton @@ -23,12 +24,14 @@ class InsulinOrefFreePeakPlugin @Inject constructor( rxBus: RxBusWrapper, aapsLogger: AAPSLogger ) : InsulinOrefBasePlugin(injector, resourceHelper, profileFunction, rxBus, aapsLogger) { - override fun getId(): Int { - return InsulinInterface.OREF_FREE_PEAK - } + override val id get(): InsulinInterface.InsulinType = InsulinInterface.InsulinType.OREF_FREE_PEAK - override fun getFriendlyName(): String { - return resourceHelper.gs(R.string.free_peak_oref) + override val friendlyName get(): String = resourceHelper.gs(R.string.free_peak_oref) + + override fun configuration(): JSONObject = JSONObject().put(resourceHelper.gs(R.string.key_insulin_oref_peak), peak) + override fun applyConfiguration(configuration: JSONObject) { + if (configuration.has(resourceHelper.gs(R.string.key_insulin_oref_peak))) + sp.putInt(R.string.key_insulin_oref_peak, configuration.getInt(resourceHelper.gs(R.string.key_insulin_oref_peak))) } override fun commentStandardText(): String { @@ -39,6 +42,7 @@ class InsulinOrefFreePeakPlugin @Inject constructor( get() = sp.getInt(R.string.key_insulin_oref_peak, DEFAULT_PEAK) companion object { + private const val DEFAULT_PEAK = 75 } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt index a0241ff9c9..bcf526253c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt @@ -3,10 +3,11 @@ package info.nightscout.androidaps.plugins.insulin import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.InsulinInterface +import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBusWrapper -import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.utils.resources.ResourceHelper +import org.json.JSONObject import javax.inject.Inject import javax.inject.Singleton @@ -21,18 +22,13 @@ class InsulinOrefRapidActingPlugin @Inject constructor( rxBus: RxBusWrapper, aapsLogger: AAPSLogger ) : InsulinOrefBasePlugin(injector, resourceHelper, profileFunction, rxBus, aapsLogger) { + override val id get(): InsulinInterface.InsulinType = InsulinInterface.InsulinType.OREF_RAPID_ACTING + override val friendlyName get(): String = resourceHelper.gs(R.string.rapid_acting_oref) - override fun getId(): Int { - return InsulinInterface.OREF_RAPID_ACTING - } + override fun configuration(): JSONObject = JSONObject() + override fun applyConfiguration(configuration: JSONObject) {} - override fun getFriendlyName(): String { - return resourceHelper.gs(R.string.rapid_acting_oref) - } - - override fun commentStandardText(): String { - return resourceHelper.gs(R.string.fastactinginsulincomment) - } + override fun commentStandardText(): String = resourceHelper.gs(R.string.fastactinginsulincomment) override val peak = 75 diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt index a793c47e89..257ae10ffe 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt @@ -3,10 +3,11 @@ package info.nightscout.androidaps.plugins.insulin import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.InsulinInterface +import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBusWrapper -import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.utils.resources.ResourceHelper +import org.json.JSONObject import javax.inject.Inject import javax.inject.Singleton @@ -21,10 +22,11 @@ class InsulinOrefUltraRapidActingPlugin @Inject constructor( rxBus: RxBusWrapper, aapsLogger: AAPSLogger ) : InsulinOrefBasePlugin(injector, resourceHelper, profileFunction, rxBus, aapsLogger) { + override val id get(): InsulinInterface.InsulinType = InsulinInterface.InsulinType.OREF_ULTRA_RAPID_ACTING + override val friendlyName get(): String = resourceHelper.gs(R.string.ultrarapid_oref) - override fun getId(): Int = InsulinInterface.OREF_ULTRA_RAPID_ACTING - - override fun getFriendlyName(): String = resourceHelper.gs(R.string.ultrarapid_oref) + override fun configuration(): JSONObject = JSONObject() + override fun applyConfiguration(configuration: JSONObject) {} override fun commentStandardText(): String = resourceHelper.gs(R.string.ultrafastactinginsulincomment) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt index e954b886a8..1d6ab21c4e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt @@ -404,7 +404,7 @@ class VirtualPumpPlugin @Inject constructor( } fun refreshConfiguration() { - val pumptype = sp.getString(R.string.key_virtualpump_type, "Generic AAPS") + val pumptype = sp.getString(R.string.key_virtualpump_type, PumpType.GenericAAPS.description) val pumpTypeNew = PumpType.getByDescription(pumptype) aapsLogger.debug(LTag.PUMP, "Pump in configuration: $pumptype, PumpType object: $pumpTypeNew") if (pumpType == pumpTypeNew) return diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityAAPSPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityAAPSPlugin.java index 7e1ff541dd..35d6ec337e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityAAPSPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityAAPSPlugin.java @@ -3,6 +3,10 @@ package info.nightscout.androidaps.plugins.sensitivity; import androidx.annotation.NonNull; import androidx.collection.LongSparseArray; +import org.jetbrains.annotations.NotNull; +import org.json.JSONException; +import org.json.JSONObject; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -11,6 +15,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import dagger.android.HasAndroidInjector; +import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; @@ -22,6 +27,7 @@ import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.interfaces.ProfileFunction; +import info.nightscout.androidaps.plugins.aps.openAPSSMB.SMBDefaults; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensData; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin; @@ -179,4 +185,36 @@ public class SensitivityAAPSPlugin extends AbstractSensitivityPlugin { return output; } + + @NotNull @Override public SensitivityType getId() { + return SensitivityType.SENSITIVITY_AAPS; + } + + @NotNull @Override public JSONObject configuration() { + JSONObject c = new JSONObject(); + try { + c.put(getResourceHelper().gs(R.string.key_absorption_maxtime), getSp().getDouble(R.string.key_absorption_maxtime, Constants.DEFAULT_MAX_ABSORPTION_TIME)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_period), getSp().getInt(R.string.key_openapsama_autosens_period, 24)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_max), getSp().getDouble(R.string.key_openapsama_autosens_max, 1.2)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_min), getSp().getDouble(R.string.key_openapsama_autosens_min, 0.7)); + } catch (JSONException e) { + e.printStackTrace(); + } + return c; + } + + @Override public void applyConfiguration(@NotNull JSONObject configuration) { + try { + if (configuration.has(getResourceHelper().gs(R.string.key_absorption_maxtime))) + getSp().putDouble(R.string.key_absorption_maxtime, configuration.getDouble(getResourceHelper().gs(R.string.key_absorption_maxtime))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_period))) + getSp().putDouble(R.string.key_openapsama_autosens_period, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_period))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_max))) + getSp().getDouble(R.string.key_openapsama_autosens_max, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_max))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_min))) + getSp().getDouble(R.string.key_openapsama_autosens_min, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_min))); + } catch (JSONException e) { + e.printStackTrace(); + } + } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityOref1Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityOref1Plugin.java index 1283ef268a..f4da392efa 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityOref1Plugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityOref1Plugin.java @@ -3,6 +3,8 @@ package info.nightscout.androidaps.plugins.sensitivity; import androidx.collection.LongSparseArray; import org.jetbrains.annotations.NotNull; +import org.json.JSONException; +import org.json.JSONObject; import java.util.ArrayList; import java.util.Arrays; @@ -12,6 +14,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import dagger.android.HasAndroidInjector; +import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; @@ -23,6 +26,7 @@ import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.ProfileFunction; import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.LTag; +import info.nightscout.androidaps.plugins.aps.openAPSSMB.SMBDefaults; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensData; @@ -246,4 +250,36 @@ public class SensitivityOref1Plugin extends AbstractSensitivityPlugin { return output; } + + @NotNull @Override public JSONObject configuration() { + JSONObject c = new JSONObject(); + try { + c.put(getResourceHelper().gs(R.string.key_openapsama_min_5m_carbimpact), getSp().getDouble(R.string.key_openapsama_min_5m_carbimpact, SMBDefaults.min_5m_carbimpact)); + c.put(getResourceHelper().gs(R.string.key_absorption_cutoff), getSp().getDouble(R.string.key_absorption_cutoff, Constants.DEFAULT_MAX_ABSORPTION_TIME)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_max), getSp().getDouble(R.string.key_openapsama_autosens_max, 1.2)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_min), getSp().getDouble(R.string.key_openapsama_autosens_min, 0.7)); + } catch (JSONException e) { + e.printStackTrace(); + } + return c; + } + + @Override public void applyConfiguration(@NotNull JSONObject configuration) { + try { + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_min_5m_carbimpact))) + getSp().putDouble(R.string.key_openapsama_min_5m_carbimpact, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_min_5m_carbimpact))); + if (configuration.has(getResourceHelper().gs(R.string.key_absorption_cutoff))) + getSp().putDouble(R.string.key_absorption_cutoff, configuration.getDouble(getResourceHelper().gs(R.string.key_absorption_cutoff))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_max))) + getSp().getDouble(R.string.key_openapsama_autosens_max, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_max))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_min))) + getSp().getDouble(R.string.key_openapsama_autosens_min, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_min))); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + @NotNull @Override public SensitivityType getId() { + return SensitivityType.SENSITIVITY_OREF1; + } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityWeightedAveragePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityWeightedAveragePlugin.java index d38489ea3b..906a29266b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityWeightedAveragePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/sensitivity/SensitivityWeightedAveragePlugin.java @@ -2,12 +2,17 @@ package info.nightscout.androidaps.plugins.sensitivity; import androidx.collection.LongSparseArray; +import org.jetbrains.annotations.NotNull; +import org.json.JSONException; +import org.json.JSONObject; + import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import dagger.android.HasAndroidInjector; +import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; @@ -199,4 +204,36 @@ public class SensitivityWeightedAveragePlugin extends AbstractSensitivityPlugin return output; } + + @NotNull @Override public SensitivityType getId() { + return SensitivityType.SENSITIVITY_WEIGHTED; + } + + @NotNull @Override public JSONObject configuration() { + JSONObject c = new JSONObject(); + try { + c.put(getResourceHelper().gs(R.string.key_absorption_maxtime), getSp().getDouble(R.string.key_absorption_maxtime, Constants.DEFAULT_MAX_ABSORPTION_TIME)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_period), getSp().getInt(R.string.key_openapsama_autosens_period, 24)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_max), getSp().getDouble(R.string.key_openapsama_autosens_max, 1.2)); + c.put(getResourceHelper().gs(R.string.key_openapsama_autosens_min), getSp().getDouble(R.string.key_openapsama_autosens_min, 0.7)); + } catch (JSONException e) { + e.printStackTrace(); + } + return c; + } + + @Override public void applyConfiguration(@NotNull JSONObject configuration) { + try { + if (configuration.has(getResourceHelper().gs(R.string.key_absorption_maxtime))) + getSp().putDouble(R.string.key_absorption_maxtime, configuration.getDouble(getResourceHelper().gs(R.string.key_absorption_maxtime))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_period))) + getSp().putDouble(R.string.key_openapsama_autosens_period, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_period))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_max))) + getSp().getDouble(R.string.key_openapsama_autosens_max, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_max))); + if (configuration.has(getResourceHelper().gs(R.string.key_openapsama_autosens_min))) + getSp().getDouble(R.string.key_openapsama_autosens_min, configuration.getDouble(getResourceHelper().gs(R.string.key_openapsama_autosens_min))); + } catch (JSONException e) { + e.printStackTrace(); + } + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e40850f3ec..6c345adbe3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -932,7 +932,6 @@ Max daily safety multiplier Current basal safety multiplier n/a - virtualpump_type virtualpump_uploadstatus Virtual Pump Type Pump Definition diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt index 01ea1f9b8a..6bfea57ff9 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt @@ -47,7 +47,7 @@ class InsulinLyumjevPluginTest { @Test fun getIdTest() { - assertEquals(InsulinInterface.OREF_LYUMJEV, sut.id) + assertEquals(InsulinInterface.InsulinType.OREF_LYUMJEV, sut.id) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt index 646681c1dd..8c94878dbb 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt @@ -9,8 +9,10 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.plugins.insulin.InsulinOrefBasePlugin.Companion.MIN_DIA import info.nightscout.androidaps.db.Treatment +import info.nightscout.androidaps.interfaces.InsulinInterface import info.nightscout.androidaps.utils.DefaultValueHelper import info.nightscout.androidaps.utils.resources.ResourceHelper +import org.json.JSONObject import org.junit.Assert import org.junit.Before import org.junit.Rule @@ -46,8 +48,10 @@ class InsulinOrefBasePluginTest { get() = testPeak override fun commentStandardText(): String = "" - override fun getId(): Int = 0 - override fun getFriendlyName(): String = "" + override val id get(): InsulinInterface.InsulinType = InsulinInterface.InsulinType.UNKNOWN + override val friendlyName get(): String = "" + override fun configuration(): JSONObject = JSONObject() + override fun applyConfiguration(configuration: JSONObject) {} } @get:Rule diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt index 8c65f3339f..a172e98116 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt @@ -54,7 +54,7 @@ class InsulinOrefFreePeakPluginTest : TestBase() { @Test fun getIdTest() { - assertEquals(InsulinInterface.OREF_FREE_PEAK, sut.id) + assertEquals(InsulinInterface.InsulinType.OREF_FREE_PEAK, sut.id) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt index 7f1ec85ae9..e4a1b7a650 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt @@ -47,7 +47,7 @@ class InsulinOrefRapidActingPluginTest { @Test fun getIdTest() { - assertEquals(InsulinInterface.OREF_RAPID_ACTING, sut.id) + assertEquals(InsulinInterface.InsulinType.OREF_RAPID_ACTING, sut.id) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt index 16b5a6dbc3..2690a826aa 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt @@ -47,7 +47,7 @@ class InsulinOrefUltraRapidActingPluginTest { @Test fun getIdTest() { - assertEquals(InsulinInterface.OREF_ULTRA_RAPID_ACTING, sut.id) + assertEquals(InsulinInterface.InsulinType.OREF_ULTRA_RAPID_ACTING, sut.id) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/sensitivity/AbstractSensitivityPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/sensitivity/AbstractSensitivityPluginTest.kt index f410b29a94..3c0e5168bb 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/sensitivity/AbstractSensitivityPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/sensitivity/AbstractSensitivityPluginTest.kt @@ -5,11 +5,13 @@ import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.interfaces.IobCobCalculatorInterface import info.nightscout.androidaps.interfaces.PluginDescription +import info.nightscout.androidaps.interfaces.SensitivityInterface import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.sharedPreferences.SP +import org.json.JSONObject import org.junit.Assert import org.junit.Test import org.junit.runner.RunWith @@ -28,6 +30,13 @@ class AbstractSensitivityPluginTest : TestBase() { override fun detectSensitivity(plugin: IobCobCalculatorInterface, fromTime: Long, toTime: Long): AutosensResult { return AutosensResult() } + + override val id: SensitivityInterface.SensitivityType + get() = SensitivityInterface.SensitivityType.UNKNOWN + + override fun configuration(): JSONObject = JSONObject() + + override fun applyConfiguration(configuration: JSONObject) { } } @Test diff --git a/core/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java b/core/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java index cfee68be27..ccb83b9781 100644 --- a/core/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java +++ b/core/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java @@ -63,7 +63,7 @@ public class ExtendedBolus implements Interval, DataPointWithLabelInterface { public int durationInMinutes = 0; // duration == 0 means end of extended bolus @DatabaseField - public int insulinInterfaceID = InsulinInterface.OREF_RAPID_ACTING; + public int insulinInterfaceID = InsulinInterface.InsulinType.OREF_RAPID_ACTING.getValue(); @DatabaseField public double dia = Constants.defaultDIA; diff --git a/core/src/main/java/info/nightscout/androidaps/db/Treatment.java b/core/src/main/java/info/nightscout/androidaps/db/Treatment.java index 4aec4f1d56..9f179c168b 100644 --- a/core/src/main/java/info/nightscout/androidaps/db/Treatment.java +++ b/core/src/main/java/info/nightscout/androidaps/db/Treatment.java @@ -65,7 +65,7 @@ public class Treatment implements DataPointWithLabelInterface, DbObjectBase { public boolean isSMB = false; @DatabaseField - public int insulinInterfaceID = InsulinInterface.OREF_RAPID_ACTING; // currently unused, will be used in the future + public int insulinInterfaceID = InsulinInterface.InsulinType.OREF_RAPID_ACTING.getValue(); // currently unused, will be used in the future @DatabaseField public double dia = Constants.defaultDIA; // currently unused, will be used in the future @DatabaseField diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/ConfigBuilderInterface.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/ConfigBuilderInterface.kt index effafb788a..6b248fd7dc 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/ConfigBuilderInterface.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/ConfigBuilderInterface.kt @@ -2,4 +2,5 @@ package info.nightscout.androidaps.interfaces interface ConfigBuilderInterface { fun storeSettings(from: String) + fun performPluginSwitch(changedPlugin: PluginBase, enabled: Boolean, type: PluginType) } \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.java b/core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.java deleted file mode 100644 index caeb77de9a..0000000000 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.java +++ /dev/null @@ -1,24 +0,0 @@ -package info.nightscout.androidaps.interfaces; - -import info.nightscout.androidaps.data.Iob; -import info.nightscout.androidaps.db.Treatment; - -/** - * Created by mike on 17.04.2017. - */ - -public interface InsulinInterface { - // int FASTACTINGINSULIN = 0; // old model no longer available - // int FASTACTINGINSULINPROLONGED = 1; // old model no longer available - int OREF_RAPID_ACTING = 2; - int OREF_ULTRA_RAPID_ACTING = 3; - int OREF_FREE_PEAK = 4; - int OREF_LYUMJEV = 5; - - - int getId(); - String getFriendlyName(); - String getComment(); - double getDia(); - Iob iobCalcForTreatment(Treatment treatment, long time, double dia); -} diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.kt new file mode 100644 index 0000000000..8f823e88d8 --- /dev/null +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.kt @@ -0,0 +1,33 @@ +package info.nightscout.androidaps.interfaces + +import info.nightscout.androidaps.data.Iob +import info.nightscout.androidaps.db.Treatment +import org.json.JSONObject + +interface InsulinInterface { + + enum class InsulinType(val value: Int) { + UNKNOWN(-1), + // int FASTACTINGINSULIN = 0; // old model no longer available + // int FASTACTINGINSULINPROLONGED = 1; // old model no longer available + OREF_RAPID_ACTING(2), + OREF_ULTRA_RAPID_ACTING(3), + OREF_FREE_PEAK(4), + OREF_LYUMJEV(5); + + companion object { + private val map = values().associateBy(InsulinType::value) + fun fromInt(type: Int) = map[type] + } + } + + val id: InsulinType + val friendlyName: String + val comment: String + val dia: Double + + fun iobCalcForTreatment(treatment: Treatment, time: Long, dia: Double): Iob + + fun configuration(): JSONObject + fun applyConfiguration(configuration: JSONObject) +} \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java b/core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java deleted file mode 100644 index 04503c5690..0000000000 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java +++ /dev/null @@ -1,16 +0,0 @@ -package info.nightscout.androidaps.interfaces; - -import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult; - -/** - * Created by mike on 24.06.2017. - */ - -public interface SensitivityInterface { - - double MIN_HOURS = 1; - double MIN_HOURS_FULL_AUTOSENS = 4; - - AutosensResult detectSensitivity(IobCobCalculatorInterface plugin, long fromTime, long toTime); - -} diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.kt new file mode 100644 index 0000000000..bfa4403acd --- /dev/null +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.kt @@ -0,0 +1,30 @@ +package info.nightscout.androidaps.interfaces + +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensResult +import org.json.JSONObject + +interface SensitivityInterface { + + enum class SensitivityType(val value: Int) { + UNKNOWN(-1), + SENSITIVITY_AAPS(0), + SENSITIVITY_WEIGHTED(1), + SENSITIVITY_OREF1(2); + + companion object { + private val map = values().associateBy(SensitivityType::value) + fun fromInt(type: Int) = map[type] + } + } + + val id: SensitivityType + fun detectSensitivity(plugin: IobCobCalculatorInterface, fromTime: Long, toTime: Long): AutosensResult + + fun configuration(): JSONObject + fun applyConfiguration(configuration: JSONObject) + + companion object { + const val MIN_HOURS = 1.0 + const val MIN_HOURS_FULL_AUTOSENS = 4.0 + } +} \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/aps/loop/DeviceStatus.java b/core/src/main/java/info/nightscout/androidaps/plugins/aps/loop/DeviceStatus.java index e517ef1681..f883c49da7 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/aps/loop/DeviceStatus.java +++ b/core/src/main/java/info/nightscout/androidaps/plugins/aps/loop/DeviceStatus.java @@ -375,6 +375,7 @@ public class DeviceStatus { public JSONObject iob = null; public int uploaderBattery = 0; public String created_at = null; + public JSONObject configuration = null; public DeviceStatus(AAPSLogger aapsLogger) { this.aapsLogger = aapsLogger; @@ -393,6 +394,7 @@ public class DeviceStatus { record.put("openaps", openaps); if (uploaderBattery != 0) record.put("uploaderBattery", uploaderBattery); if (created_at != null) record.put("created_at", created_at); + if (configuration != null) record.put("configuration", configuration); } catch (JSONException e) { aapsLogger.error("Unhandled exception", e); } diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/RunningConfiguration.kt b/core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/RunningConfiguration.kt new file mode 100644 index 0000000000..c0ef45eb48 --- /dev/null +++ b/core/src/main/java/info/nightscout/androidaps/plugins/configBuilder/RunningConfiguration.kt @@ -0,0 +1,75 @@ +package info.nightscout.androidaps.plugins.configBuilder + +import info.nightscout.androidaps.core.R +import info.nightscout.androidaps.interfaces.ActivePluginProvider +import info.nightscout.androidaps.interfaces.ConfigBuilderInterface +import info.nightscout.androidaps.interfaces.InsulinInterface +import info.nightscout.androidaps.interfaces.PluginType +import info.nightscout.androidaps.interfaces.SensitivityInterface +import info.nightscout.androidaps.logging.AAPSLogger +import info.nightscout.androidaps.logging.LTag +import info.nightscout.androidaps.plugins.pump.common.defs.PumpType +import info.nightscout.androidaps.utils.JsonHelper +import info.nightscout.androidaps.utils.sharedPreferences.SP +import org.json.JSONException +import org.json.JSONObject +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class RunningConfiguration @Inject constructor( + private val activePlugin: ActivePluginProvider, + private val configBuilder: ConfigBuilderInterface, + private val sp: SP, + private val aapsLogger: AAPSLogger +) { + + // called in AAPS mode only + fun configuration(): JSONObject { + val json = JSONObject() + try { + val insulinInterface = activePlugin.activeInsulin + val sensitivityInterface = activePlugin.activeSensitivity + val pumpInterface = activePlugin.activePump + + json.put("insulin", insulinInterface.id.value) + json.put("insulinConfiguration", insulinInterface.configuration()) + json.put("sensitivity", sensitivityInterface.id.value) + json.put("sensitivityConfiguration", sensitivityInterface.configuration()) + json.put("pump", pumpInterface.model().description) + } catch (e: JSONException) { + aapsLogger.error("Unhandled exception", e) + } + return json + } + + // called in NSClient mode only + fun apply(configuration: JSONObject) { + val insulin = InsulinInterface.InsulinType.fromInt(JsonHelper.safeGetInt(configuration, "insulin", InsulinInterface.InsulinType.UNKNOWN.value)) + for (p in activePlugin.getSpecificPluginsListByInterface(InsulinInterface::class.java)) { + val insulinPlugin = p as InsulinInterface + if (insulinPlugin.id == insulin) { + if (!p.isEnabled()) { + aapsLogger.debug(LTag.CORE, "Changing insulin plugin to ${insulin.name}") + configBuilder.performPluginSwitch(p, true, PluginType.INSULIN) + } + insulinPlugin.applyConfiguration(configuration.getJSONObject("insulinConfiguration")) + } + } + + val sensitivity = SensitivityInterface.SensitivityType.fromInt(JsonHelper.safeGetInt(configuration, "sensitivity", SensitivityInterface.SensitivityType.UNKNOWN.value)) + for (p in activePlugin.getSpecificPluginsListByInterface(SensitivityInterface::class.java)) { + val sensitivityPlugin = p as SensitivityInterface + if (sensitivityPlugin.id == sensitivity) { + if (!p.isEnabled()) { + aapsLogger.debug(LTag.CORE, "Changing sensitivity plugin to ${sensitivity.name}") + configBuilder.performPluginSwitch(p, true, PluginType.SENSITIVITY) + } + sensitivityPlugin.applyConfiguration(configuration.getJSONObject("sensitivityConfiguration")) + } + } + val pumpType = JsonHelper.safeGetString(configuration, "pump", PumpType.GenericAAPS.description) + sp.putString(R.string.key_virtualpump_type, pumpType) + activePlugin.activePump.pumpDescription.setPumpDescription(PumpType.getByDescription(pumpType)) + } +} \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java b/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java index 199ef4014c..fde4728952 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java +++ b/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSUpload.java @@ -42,10 +42,10 @@ import info.nightscout.androidaps.interfaces.ProfileStore; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.UploadQueueInterface; import info.nightscout.androidaps.logging.AAPSLogger; -import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.plugins.aps.loop.APSResult; import info.nightscout.androidaps.plugins.aps.loop.DeviceStatus; +import info.nightscout.androidaps.plugins.configBuilder.RunningConfiguration; import info.nightscout.androidaps.receivers.ReceiverStatusStore; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.JsonHelper; @@ -65,6 +65,7 @@ public class NSUpload { private final Context context; private final UploadQueueInterface uploadQueue; private final DatabaseHelperInterface databaseHelper; + private final RunningConfiguration runningConfiguration; @Inject public NSUpload( @@ -74,6 +75,7 @@ public class NSUpload { SP sp, Context context, UploadQueueInterface uploadQueue, + RunningConfiguration runningConfiguration, DatabaseHelperInterface databaseHelper ) { this.injector = injector; @@ -82,6 +84,7 @@ public class NSUpload { this.sp = sp; this.context = context; this.uploadQueue = uploadQueue; + this.runningConfiguration = runningConfiguration; this.databaseHelper = databaseHelper; } @@ -249,6 +252,9 @@ public class NSUpload { deviceStatus.uploaderBattery = batteryLevel; deviceStatus.created_at = DateUtil.toISOString(new Date()); + + deviceStatus.configuration = runningConfiguration.configuration(); + uploadQueue.add(new DbRequest("dbAdd", "devicestatus", deviceStatus.mongoRecord())); } catch (JSONException e) { aapsLogger.error("Unhandled exception", e); diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 87e58a0b45..eb0fe79a3a 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -27,6 +27,7 @@ missed_bg_readings_threshold gradually_increase_notification_volume ns_sync_use_absolute + virtualpump_type Error