From 5208f2366149eac1d94cdeb534e8757c1a5a4080 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 23 May 2017 23:56:53 +0200 Subject: [PATCH] Temptargets under treatments --- .../info/nightscout/androidaps/MainApp.java | 36 +++-- .../androidaps/db/DatabaseHelper.java | 32 ++++- .../nightscout/androidaps/db/TempTarget.java | 2 - .../events/EventTempTargetChange.java | 8 ++ .../interfaces/TreatmentsInterface.java | 4 + .../ConfigBuilder/ConfigBuilderPlugin.java | 11 ++ .../plugins/OpenAPSAMA/OpenAPSAMAPlugin.java | 34 +++-- .../plugins/OpenAPSMA/OpenAPSMAPlugin.java | 16 +-- .../plugins/Overview/OverviewFragment.java | 48 +++---- .../TempTargetRangePlugin.java | 124 ------------------ .../events/EventTempTargetRangeChange.java | 8 -- .../TreatmentsFromHistoryFragment.java | 8 +- .../TreatmentsFromHistoryPlugin.java | 27 ++++ .../fragments/TreatmentsBolusFragment.java | 33 +++-- .../TreatmentsTempTargetFragment.java} | 70 ++++------ .../plugins/Wear/ActionStringHandler.java | 19 +-- .../main/res/layout/treatments_fragment.xml | 10 +- ...xml => treatments_temptarget_fragment.xml} | 2 +- ...tem.xml => treatments_temptarget_item.xml} | 0 app/src/main/res/values-bg/strings.xml | 3 - app/src/main/res/values-cs/strings.xml | 3 - app/src/main/res/values-de/strings.xml | 2 - app/src/main/res/values-es/strings.xml | 3 - app/src/main/res/values-it/strings.xml | 2 - app/src/main/res/values-ko/strings.xml | 3 - app/src/main/res/values/strings.xml | 5 +- 26 files changed, 204 insertions(+), 309 deletions(-) create mode 100644 app/src/main/java/info/nightscout/androidaps/events/EventTempTargetChange.java delete mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/TempTargetRangePlugin.java delete mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/events/EventTempTargetRangeChange.java rename app/src/main/java/info/nightscout/androidaps/plugins/{TempTargetRange/TempTargetRangeFragment.java => TreatmentsFromHistory/fragments/TreatmentsTempTargetFragment.java} (76%) rename app/src/main/res/layout/{temptargetrange_fragment.xml => treatments_temptarget_fragment.xml} (95%) rename app/src/main/res/layout/{temptargetrange_item.xml => treatments_temptarget_item.xml} (100%) diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index bf7939ca00..dd23c31167 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -23,39 +23,38 @@ import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.Actions.ActionsFragment; import info.nightscout.androidaps.plugins.Careportal.CareportalFragment; -import info.nightscout.androidaps.plugins.InsulinFastactingProlonged.InsulinFastactingProlongedFragment; -import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorFragment; -import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfileFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; +import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesFragment; +import info.nightscout.androidaps.plugins.ConstraintsSafety.SafetyFragment; +import info.nightscout.androidaps.plugins.InsulinFastacting.InsulinFastactingFragment; +import info.nightscout.androidaps.plugins.InsulinFastactingProlonged.InsulinFastactingProlongedFragment; +import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorFragment; +import info.nightscout.androidaps.plugins.Loop.LoopFragment; +import info.nightscout.androidaps.plugins.NSClientInternal.NSClientInternalFragment; +import info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAFragment; +import info.nightscout.androidaps.plugins.OpenAPSMA.OpenAPSMAFragment; +import info.nightscout.androidaps.plugins.Overview.OverviewFragment; +import info.nightscout.androidaps.plugins.Persistentnotification.PersistentNotificationPlugin; +import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfileFragment; +import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfileFragment; +import info.nightscout.androidaps.plugins.ProfileNS.NSProfileFragment; +import info.nightscout.androidaps.plugins.ProfileSimple.SimpleProfileFragment; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRFragment; import info.nightscout.androidaps.plugins.PumpDanaR.services.DanaRExecutionService; import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanFragment; -import info.nightscout.androidaps.plugins.InsulinFastacting.InsulinFastactingFragment; -import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfileFragment; -import info.nightscout.androidaps.plugins.Loop.LoopFragment; import info.nightscout.androidaps.plugins.PumpDanaRKorean.services.DanaRKoreanExecutionService; import info.nightscout.androidaps.plugins.PumpDanaRv2.DanaRv2Fragment; import info.nightscout.androidaps.plugins.PumpDanaRv2.services.DanaRv2ExecutionService; import info.nightscout.androidaps.plugins.PumpMDI.MDIFragment; -import info.nightscout.androidaps.plugins.NSClientInternal.NSClientInternalFragment; -import info.nightscout.androidaps.plugins.ProfileNS.NSProfileFragment; -import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesFragment; -import info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAFragment; -import info.nightscout.androidaps.plugins.OpenAPSMA.OpenAPSMAFragment; -import info.nightscout.androidaps.plugins.Overview.OverviewFragment; -import info.nightscout.androidaps.plugins.ConstraintsSafety.SafetyFragment; -import info.nightscout.androidaps.plugins.ProfileSimple.SimpleProfileFragment; +import info.nightscout.androidaps.plugins.PumpVirtual.VirtualPumpFragment; import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorFragment; import info.nightscout.androidaps.plugins.SourceGlimp.SourceGlimpFragment; import info.nightscout.androidaps.plugins.SourceMM640g.SourceMM640gFragment; import info.nightscout.androidaps.plugins.SourceNSClient.SourceNSClientFragment; import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripFragment; -import info.nightscout.androidaps.plugins.TempTargetRange.TempTargetRangeFragment; -import info.nightscout.androidaps.plugins.PumpVirtual.VirtualPumpFragment; import info.nightscout.androidaps.plugins.TreatmentsFromHistory.TreatmentsFromHistoryFragment; import info.nightscout.androidaps.plugins.Wear.WearFragment; -import info.nightscout.androidaps.plugins.Persistentnotification.PersistentNotificationPlugin; import info.nightscout.androidaps.plugins.XDripStatusline.StatuslineFragment; import info.nightscout.androidaps.receivers.KeepAliveReceiver; import io.fabric.sdk.android.Fabric; @@ -111,7 +110,6 @@ public class MainApp extends Application { if (Config.OTHERPROFILES) pluginsList.add(LocalProfileFragment.getPlugin()); if (Config.OTHERPROFILES) pluginsList.add(CircadianPercentageProfileFragment.getPlugin()); - if (Config.APS) pluginsList.add(TempTargetRangeFragment.getPlugin()); pluginsList.add(TreatmentsFromHistoryFragment.getPlugin()); if (Config.SAFETY) pluginsList.add(SafetyFragment.getPlugin()); if (Config.APS) pluginsList.add(ObjectivesFragment.getPlugin()); @@ -217,7 +215,7 @@ public class MainApp extends Application { if (pluginsList != null) { for (PluginBase p : pluginsList) { - if (p.getType() == PluginBase.INSULIN && ((InsulinInterface)p).getId() == id) + if (p.getType() == PluginBase.INSULIN && ((InsulinInterface) p).getId() == id) return (InsulinInterface) p; } } else { diff --git a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java index baf4d595a0..ddf2081ade 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java +++ b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java @@ -34,11 +34,11 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.events.EventExtendedBolusChange; import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventTempBasalChange; +import info.nightscout.androidaps.events.EventTempTargetChange; import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventNewHistoryData; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync; -import info.nightscout.androidaps.plugins.TempTargetRange.events.EventTempTargetRangeChange; public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static Logger log = LoggerFactory.getLogger(DatabaseHelper.class); @@ -65,6 +65,9 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final ScheduledExecutorService tempBasalsWorker = Executors.newSingleThreadScheduledExecutor(); private static ScheduledFuture scheduledTemBasalsPost = null; + private static final ScheduledExecutorService tempTargetWorker = Executors.newSingleThreadScheduledExecutor(); + private static ScheduledFuture scheduledTemTargetPost = null; + private static final ScheduledExecutorService extendedBolusWorker = Executors.newSingleThreadScheduledExecutor(); private static ScheduledFuture scheduledExtendedBolusPost = null; @@ -173,6 +176,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { scheduleTemporaryBasalChange(); scheduleTreatmentChange(); scheduleExtendedBolusChange(); + scheduleTemporaryTargetChange(); } public void resetTreatments() { @@ -193,6 +197,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { } catch (SQLException e) { e.printStackTrace(); } + scheduleTemporaryTargetChange(); } public void resetTemporaryBasals() { @@ -586,7 +591,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { tempTarget.date = tempTarget.date - tempTarget.date % 1000; try { getDaoTempTargets().createOrUpdate(tempTarget); - MainApp.bus().post(new EventTempTargetRangeChange()); + scheduleTemporaryTargetChange(); } catch (SQLException e) { e.printStackTrace(); } @@ -595,12 +600,29 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { public void delete(TempTarget tempTarget) { try { getDaoTempTargets().delete(tempTarget); - MainApp.bus().post(new EventTempTargetRangeChange()); + scheduleTemporaryTargetChange(); } catch (SQLException e) { e.printStackTrace(); } } + static public void scheduleTemporaryTargetChange() { + class PostRunnable implements Runnable { + public void run() { + MainApp.bus().post(new EventTempTargetChange()); + scheduledTemTargetPost = null; + } + } + // prepare task for execution in 1 sec + // cancel waiting task to prevent sending multiple posts + if (scheduledTemTargetPost != null) + scheduledTemTargetPost.cancel(false); + Runnable task = new PostRunnable(); + final int sec = 1; + scheduledTemTargetPost = tempTargetWorker.schedule(task, sec, TimeUnit.SECONDS); + + } + /* { "_id": "58795998aa86647ba4d68ce7", @@ -648,7 +670,6 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { tempTarget.reason = trJson.getString("reason"); tempTarget._id = trJson.getString("_id"); createOrUpdate(tempTarget); - MainApp.bus().post(new EventTempTargetRangeChange()); } catch (SQLException e) { e.printStackTrace(); } catch (JSONException e) { @@ -669,7 +690,6 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { if (Config.logIncommingData) log.debug("Removing TempTarget record from database: " + record.log()); getDaoTempTargets().delete(record); - MainApp.bus().post(new EventTempTargetRangeChange()); } else { if (Config.logIncommingData) log.debug("TempTarget not found database: " + _id); @@ -876,7 +896,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { if (Config.logIncommingData) log.debug("Removing TempBasal record from database: " + record.log()); getDaoTemporaryBasal().delete(record); - MainApp.bus().post(new EventTempTargetRangeChange()); + MainApp.bus().post(new EventTempTargetChange()); } else { if (Config.logIncommingData) log.debug("TempBasal not found database: " + _id); diff --git a/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java b/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java index 655d434f5a..60d53b96f8 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java +++ b/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java @@ -9,9 +9,7 @@ import org.slf4j.LoggerFactory; import java.util.Date; import info.nightscout.androidaps.Constants; -import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.interfaces.Interval; -import info.nightscout.androidaps.plugins.TempTargetRange.TempTargetRangePlugin; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; diff --git a/app/src/main/java/info/nightscout/androidaps/events/EventTempTargetChange.java b/app/src/main/java/info/nightscout/androidaps/events/EventTempTargetChange.java new file mode 100644 index 0000000000..d0ef42d830 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/events/EventTempTargetChange.java @@ -0,0 +1,8 @@ +package info.nightscout.androidaps.events; + +/** + * Created by mike on 13.01.2017. + */ + +public class EventTempTargetChange { +} diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java index 804a6a05be..3e2131ce9d 100644 --- a/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java @@ -5,6 +5,7 @@ import java.util.List; import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.db.ExtendedBolus; +import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.Treatment; import info.nightscout.utils.OverlappingIntervals; @@ -47,6 +48,9 @@ public interface TreatmentsInterface { void extendedBolusStop(long time); OverlappingIntervals getExtendedBoluses(); + TempTarget getTempTarget (long time); + OverlappingIntervals getTempTargets(); + long oldestDataAvaialable(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java index a2c827c4da..2006d23baf 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java @@ -26,6 +26,7 @@ import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.db.ExtendedBolus; +import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventBolusRequested; @@ -1230,6 +1231,16 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain return activeTreatments.getExtendedBoluses(); } + @Override + public TempTarget getTempTarget(long time) { + return activeTreatments.getTempTarget(time); + } + + @Override + public OverlappingIntervals getTempTargets() { + return activeTreatments.getTempTargets(); + } + @Override public long oldestDataAvaialable() { return activeTreatments.oldestDataAvaialable(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java index 7a379b5ab2..dac0a2b5f8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java @@ -12,6 +12,7 @@ import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.GlucoseStatus; +import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.interfaces.APSInterface; @@ -21,11 +22,9 @@ import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensResult; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.ScriptReader; -import info.nightscout.androidaps.data.IobTotal; +import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui; -import info.nightscout.androidaps.plugins.TempTargetRange.TempTargetRangePlugin; -import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.utils.DateUtil; import info.nightscout.utils.Profiler; import info.nightscout.utils.Round; @@ -56,7 +55,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { @Override public String getNameShort() { String name = MainApp.sResources.getString(R.string.oaps_shortname); - if (!name.trim().isEmpty()){ + if (!name.trim().isEmpty()) { //only if translation exists return name; } @@ -149,7 +148,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { return; } - if (profile == null || profile.getIc(NSProfile.secondsFromMidnight()) == null || profile.getIsf(NSProfile.secondsFromMidnight()) == null || profile.getBasal(NSProfile.secondsFromMidnight()) == null ) { + if (profile == null || profile.getIc(NSProfile.secondsFromMidnight()) == null || profile.getIsf(NSProfile.secondsFromMidnight()) == null || profile.getBasal(NSProfile.secondsFromMidnight()) == null) { MainApp.bus().post(new EventOpenAPSUpdateResultGui(MainApp.instance().getString(R.string.openapsma_noprofile))); if (Config.logAPSResult) log.debug(MainApp.instance().getString(R.string.openapsma_noprofile)); @@ -201,15 +200,12 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { targetBg = verifyHardLimits(targetBg, "targetBg", Constants.VERY_HARD_LIMIT_TARGET_BG[0], Constants.VERY_HARD_LIMIT_TARGET_BG[1]); boolean isTempTarget = false; - TempTargetRangePlugin tempTargetRangePlugin = (TempTargetRangePlugin) MainApp.getSpecificPlugin(TempTargetRangePlugin.class); - if (tempTargetRangePlugin != null && tempTargetRangePlugin.isEnabled(PluginBase.GENERAL)) { - TempTarget tempTarget = tempTargetRangePlugin.getTempTargetInProgress(new Date().getTime()); - if (tempTarget != null) { - isTempTarget = true; - minBg = verifyHardLimits(tempTarget.low, "minBg", Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[1]); - maxBg = verifyHardLimits(tempTarget.high, "maxBg", Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[1]); - targetBg = verifyHardLimits((tempTarget.low + tempTarget.high) / 2, "targetBg", Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); - } + TempTarget tempTarget = MainApp.getConfigBuilder().getTempTarget(new Date().getTime()); + if (tempTarget != null) { + isTempTarget = true; + minBg = verifyHardLimits(tempTarget.low, "minBg", Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[1]); + maxBg = verifyHardLimits(tempTarget.high, "maxBg", Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[1]); + targetBg = verifyHardLimits((tempTarget.low + tempTarget.high) / 2, "targetBg", Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); } @@ -217,8 +213,10 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { maxBasal = verifyHardLimits(maxBasal, "max_basal", 0.1, 10); if (!checkOnlyHardLimits(profile.getDia(), "dia", 2, 7)) return; - if (!checkOnlyHardLimits(profile.getIc(profile.secondsFromMidnight()), "carbratio", 2, 100)) return; - if (!checkOnlyHardLimits(NSProfile.toMgdl(profile.getIsf(NSProfile.secondsFromMidnight()).doubleValue(), units), "sens", 2, 900)) return; + if (!checkOnlyHardLimits(profile.getIc(profile.secondsFromMidnight()), "carbratio", 2, 100)) + return; + if (!checkOnlyHardLimits(NSProfile.toMgdl(profile.getIsf(NSProfile.secondsFromMidnight()).doubleValue(), units), "sens", 2, 900)) + return; if (!checkOnlyHardLimits(profile.getMaxDailyBasal(), "max_daily_basal", 0.1, 10)) return; if (!checkOnlyHardLimits(pump.getBaseBasalRate(), "current_basal", 0.01, 5)) return; @@ -227,7 +225,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { log.debug("Limiting data to oldest available temps: " + new Date(oldestDataAvailable).toString()); startPart = new Date(); - if(MainApp.getConfigBuilder().isAMAModeEnabled()){ + if (MainApp.getConfigBuilder().isAMAModeEnabled()) { //lastAutosensResult = Autosens.detectSensitivityandCarbAbsorption(getBGDataFrom, null); lastAutosensResult = IobCobCalculatorPlugin.detectSensitivity(getBGDataFrom); } else { @@ -241,7 +239,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { lastAutosensResult.ratio, //autosensDataRatio isTempTarget, SafeParse.stringToDouble(SP.getString("openapsama_min_5m_carbimpact", "3.0"))//min_5m_carbimpact - ); + ); DetermineBasalResultAMA determineBasalResultAMA = determineBasalAdapterAMAJS.invoke(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java index 9dd41bc304..d0f030b53f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java @@ -24,7 +24,6 @@ import info.nightscout.androidaps.plugins.Loop.ScriptReader; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui; -import info.nightscout.androidaps.plugins.TempTargetRange.TempTargetRangePlugin; import info.nightscout.utils.DateUtil; import info.nightscout.utils.Profiler; import info.nightscout.utils.Round; @@ -201,15 +200,12 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface { minBg = verifyHardLimits(minBg, "minBg", Constants.VERY_HARD_LIMIT_MIN_BG[0], Constants.VERY_HARD_LIMIT_MIN_BG[1]); maxBg = verifyHardLimits(maxBg, "maxBg", Constants.VERY_HARD_LIMIT_MAX_BG[0], Constants.VERY_HARD_LIMIT_MAX_BG[1]); targetBg = verifyHardLimits(targetBg, "targetBg", Constants.VERY_HARD_LIMIT_TARGET_BG[0], Constants.VERY_HARD_LIMIT_TARGET_BG[1]); - - TempTargetRangePlugin tempTargetRangePlugin = (TempTargetRangePlugin) MainApp.getSpecificPlugin(TempTargetRangePlugin.class); - if (tempTargetRangePlugin != null && tempTargetRangePlugin.isEnabled(PluginBase.GENERAL)) { - TempTarget tempTarget = tempTargetRangePlugin.getTempTargetInProgress(new Date().getTime()); - if (tempTarget != null) { - minBg = verifyHardLimits(tempTarget.low, "minBg", Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[1]); - maxBg = verifyHardLimits(tempTarget.high, "maxBg", Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[1]); - targetBg = verifyHardLimits((tempTarget.low + tempTarget.high) / 2, "targetBg", Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); - } + + TempTarget tempTarget = MainApp.getConfigBuilder().getTempTarget(new Date().getTime()); + if (tempTarget != null) { + minBg = verifyHardLimits(tempTarget.low, "minBg", Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MIN_BG[1]); + maxBg = verifyHardLimits(tempTarget.high, "maxBg", Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[0], Constants.VERY_HARD_LIMIT_TEMP_MAX_BG[1]); + targetBg = verifyHardLimits((tempTarget.low + tempTarget.high) / 2, "targetBg", Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], Constants.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); } maxIob = verifyHardLimits(maxIob, "maxIob", 0, 7); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index 00af481001..7383f2b3c9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -78,6 +78,7 @@ import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventRefreshGui; import info.nightscout.androidaps.events.EventTempBasalChange; +import info.nightscout.androidaps.events.EventTempTargetChange; import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PumpInterface; @@ -104,8 +105,6 @@ import info.nightscout.androidaps.plugins.Overview.graphExtensions.FixedLineGrap import info.nightscout.androidaps.plugins.Overview.graphExtensions.PointsWithLabelGraphSeries; import info.nightscout.androidaps.plugins.Overview.graphExtensions.TimeAsXAxisLabelFormatter; import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripPlugin; -import info.nightscout.androidaps.plugins.TempTargetRange.TempTargetRangePlugin; -import info.nightscout.androidaps.plugins.TempTargetRange.events.EventTempTargetRangeChange; import info.nightscout.utils.BolusWizard; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; @@ -196,7 +195,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, View view; - if(smallHeight){ + if (smallHeight) { view = inflater.inflate(R.layout.overview_fragment_smallheight, container, false); } else { view = inflater.inflate(R.layout.overview_fragment, container, false); @@ -763,8 +762,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, } @Subscribe - public void onStatusEvent(final EventTempTargetRangeChange ev) { - scheduleUpdateGUI("EventTempTargetRangeChange"); + public void onStatusEvent(final EventTempTargetChange ev) { + scheduleUpdateGUI("EventTempTargetChange"); } @Subscribe @@ -898,29 +897,24 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, // temp target NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); - TempTargetRangePlugin tempTargetRangePlugin = (TempTargetRangePlugin) MainApp.getSpecificPlugin(TempTargetRangePlugin.class); - if (Config.APS && tempTargetRangePlugin != null && tempTargetRangePlugin.isEnabled(PluginBase.GENERAL)) { - TempTarget tempTarget = tempTargetRangePlugin.getTempTargetInProgress(new Date().getTime()); - if (tempTarget != null) { - tempTargetView.setTextColor(Color.BLACK); - tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground)); - tempTargetView.setVisibility(View.VISIBLE); - tempTargetView.setText(NSProfile.toUnitsString(tempTarget.low, NSProfile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + NSProfile.toUnitsString(tempTarget.high, NSProfile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits())); - } else { - - Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL; - Double minBgDefault = Constants.MIN_BG_DEFAULT_MGDL; - if (!profile.getUnits().equals(Constants.MGDL)) { - maxBgDefault = Constants.MAX_BG_DEFAULT_MMOL; - minBgDefault = Constants.MIN_BG_DEFAULT_MMOL; - } - tempTargetView.setTextColor(Color.WHITE); - tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetDisabledBackground)); - tempTargetView.setText(SP.getDouble("openapsma_min_bg", minBgDefault) + " - " + SP.getDouble("openapsma_max_bg", maxBgDefault)); - tempTargetView.setVisibility(View.VISIBLE); - } + TempTarget tempTarget = MainApp.getConfigBuilder().getTempTarget(new Date().getTime()); + if (tempTarget != null) { + tempTargetView.setTextColor(Color.BLACK); + tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground)); + tempTargetView.setVisibility(View.VISIBLE); + tempTargetView.setText(NSProfile.toUnitsString(tempTarget.low, NSProfile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + NSProfile.toUnitsString(tempTarget.high, NSProfile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits())); } else { - tempTargetView.setVisibility(View.GONE); + + Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL; + Double minBgDefault = Constants.MIN_BG_DEFAULT_MGDL; + if (!profile.getUnits().equals(Constants.MGDL)) { + maxBgDefault = Constants.MAX_BG_DEFAULT_MMOL; + minBgDefault = Constants.MIN_BG_DEFAULT_MMOL; + } + tempTargetView.setTextColor(Color.WHITE); + tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetDisabledBackground)); + tempTargetView.setText(SP.getDouble("openapsma_min_bg", minBgDefault) + " - " + SP.getDouble("openapsma_max_bg", maxBgDefault)); + tempTargetView.setVisibility(View.VISIBLE); } // **** Temp button **** diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/TempTargetRangePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/TempTargetRangePlugin.java deleted file mode 100644 index 963dfb48a7..0000000000 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/TempTargetRangePlugin.java +++ /dev/null @@ -1,124 +0,0 @@ -package info.nightscout.androidaps.plugins.TempTargetRange; - -import android.support.annotation.Nullable; - -import com.squareup.otto.Subscribe; - -import java.util.Date; -import java.util.List; - -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.db.TempTarget; -import info.nightscout.androidaps.interfaces.PluginBase; -import info.nightscout.androidaps.plugins.TempTargetRange.events.EventTempTargetRangeChange; - -/** - * Created by mike on 13/01/17. - */ - -public class TempTargetRangePlugin implements PluginBase { - - static boolean fragmentEnabled = false; - static boolean fragmentVisible = true; - - private static List tempTargets; - - TempTargetRangePlugin() { - initializeData(); - MainApp.bus().register(this); - } - - @Override - public int getType() { - return PluginBase.GENERAL; - } - - @Override - public String getFragmentClass() { - return TempTargetRangeFragment.class.getName(); - } - - @Override - public String getName() { - return MainApp.sResources.getString(R.string.temptargetrange); - } - - @Override - public String getNameShort() { - String name = MainApp.sResources.getString(R.string.temptargetrange_shortname); - if (!name.trim().isEmpty()){ - //only if translation exists - return name; - } - // use long name as fallback - return getName(); - } - - @Override - public boolean isEnabled(int type) { - return type == GENERAL && fragmentEnabled; - } - - @Override - public boolean isVisibleInTabs(int type) { - return type == GENERAL && fragmentVisible; - } - - @Override - public boolean canBeHidden(int type) { - return true; - } - - @Override - public boolean hasFragment() { - return true; - } - - @Override - public boolean showInList(int type) { - return true; - } - - @Override - public void setFragmentEnabled(int type, boolean fragmentEnabled) { - if (type == GENERAL) { - this.fragmentEnabled = fragmentEnabled; - } - } - - @Override - public void setFragmentVisible(int type, boolean fragmentVisible) { - if (type == GENERAL) this.fragmentVisible = fragmentVisible; - } - - public static boolean isEnabled() { - return fragmentEnabled; - } - - @Subscribe - public void onStatusEvent(final EventTempTargetRangeChange ev) { - initializeData(); - } - - public void initializeData() { - long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * 24); - tempTargets = MainApp.getDbHelper().getTemptargetsDataFromTime(fromMills, false); - } - - public List getList() { - return tempTargets; - } - - @Nullable - public TempTarget getTempTargetInProgress(long time) { - for (int i = 0; i < tempTargets.size(); i++) { - // a zero-duration temp target will cancel all prior targets - if (tempTargets.get(i).durationInMinutes == 0) return null; - - if (tempTargets.get(i).date > time) continue; - if (tempTargets.get(i).date >= time) return tempTargets.get(i); - } - return null; - } -} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/events/EventTempTargetRangeChange.java b/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/events/EventTempTargetRangeChange.java deleted file mode 100644 index 8d5f537fec..0000000000 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/events/EventTempTargetRangeChange.java +++ /dev/null @@ -1,8 +0,0 @@ -package info.nightscout.androidaps.plugins.TempTargetRange.events; - -/** - * Created by mike on 13.01.2017. - */ - -public class EventTempTargetRangeChange { -} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java index 5b5d7861a0..7f4695d97e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java @@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.R; import info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsBolusFragment; import info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsExtendedBolusesFragment; +import info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsTempTargetFragment; import info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsTemporaryBasalsFragment; public class TreatmentsFromHistoryFragment extends Fragment implements View.OnClickListener { @@ -30,6 +31,7 @@ public class TreatmentsFromHistoryFragment extends Fragment implements View.OnCl TextView treatmentsTab; TextView extendedBolusesTab; TextView tempBasalsTab; + TextView tempTargetTab; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -39,9 +41,11 @@ public class TreatmentsFromHistoryFragment extends Fragment implements View.OnCl treatmentsTab = (TextView) view.findViewById(R.id.treatments_treatments); extendedBolusesTab = (TextView) view.findViewById(R.id.treatments_extendedboluses); tempBasalsTab = (TextView) view.findViewById(R.id.treatments_tempbasals); + tempTargetTab = (TextView) view.findViewById(R.id.treatments_temptargets); treatmentsTab.setOnClickListener(this); extendedBolusesTab.setOnClickListener(this); tempBasalsTab.setOnClickListener(this); + tempTargetTab.setOnClickListener(this); context = getContext(); setFragment(new TreatmentsBolusFragment()); @@ -62,7 +66,9 @@ public class TreatmentsFromHistoryFragment extends Fragment implements View.OnCl case R.id.treatments_tempbasals: setFragment(new TreatmentsTemporaryBasalsFragment()); break; - + case R.id.treatments_temptargets: + setFragment(new TreatmentsTempTargetFragment()); + break; } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java index 768fc310ee..08d9231412 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java @@ -18,10 +18,12 @@ import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.db.ExtendedBolus; +import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventExtendedBolusChange; import info.nightscout.androidaps.events.EventTempBasalChange; +import info.nightscout.androidaps.events.EventTempTargetChange; import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PumpInterface; @@ -45,6 +47,7 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf public static List treatments; private static OverlappingIntervals tempBasals = new OverlappingIntervals<>(); private static OverlappingIntervals extendedBoluses = new OverlappingIntervals<>(); + private static OverlappingIntervals tempTargets = new OverlappingIntervals<>(); private static boolean fragmentEnabled = true; private static boolean fragmentVisible = true; @@ -123,6 +126,7 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf initializeTempBasalData(); initializeTreatmentData(); initializeExtendedBolusData(); + initializeTempTargetData(); } public static void initializeTreatmentData() { @@ -157,6 +161,11 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf } + public void initializeTempTargetData() { + long fromMills = new Date().getTime() - 60 * 60 * 1000L * 24; + tempTargets.reset().add(MainApp.getDbHelper().getTemptargetsDataFromTime(fromMills, false)); + } + @Override public IobTotal getLastCalculationTreatments() { return lastTreatmentCalculation; @@ -392,4 +401,22 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf return oldestTime; } + // TempTargets + @Subscribe + public void onStatusEvent(final EventTempTargetChange ev) { + initializeTempTargetData(); + } + + @Nullable + @Override + public TempTarget getTempTarget(long time) { + return (TempTarget) tempTargets.getValueByInterval(time); + } + + @Override + public OverlappingIntervals getTempTargets() { + return tempTargets; + } + + } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsBolusFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsBolusFragment.java index 045e8091e7..888abbc8f2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsBolusFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsBolusFragment.java @@ -170,6 +170,10 @@ public class TreatmentsBolusFragment extends Fragment implements View.OnClickLis refreshFromNS = (Button) view.findViewById(R.id.treatments_reshreshfromnightscout); refreshFromNS.setOnClickListener(this); + boolean nsUploadOnly = SP.getBoolean(R.string.key_ns_upload_only, false); + if (nsUploadOnly) + refreshFromNS.setVisibility(View.GONE); + context = getContext(); updateGUI(); @@ -180,23 +184,18 @@ public class TreatmentsBolusFragment extends Fragment implements View.OnClickLis public void onClick(View view) { switch (view.getId()) { case R.id.treatments_reshreshfromnightscout: - boolean nsUploadOnly = SP.getBoolean(R.string.key_ns_upload_only, false); - if (nsUploadOnly) { - ToastUtils.showToastInUiThread(getContext(), this.getContext().getString(R.string.ns_upload_only_enabled)); - } else { - AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext()); - builder.setTitle(this.getContext().getString(R.string.confirmation)); - builder.setMessage(this.getContext().getString(R.string.refreshtreatmentsfromnightscout)); - builder.setPositiveButton(this.getContext().getString(R.string.ok), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - MainApp.getDbHelper().resetTreatments(); - Intent restartNSClient = new Intent(Intents.ACTION_RESTART); - MainApp.instance().getApplicationContext().sendBroadcast(restartNSClient); - } - }); - builder.setNegativeButton(this.getContext().getString(R.string.cancel), null); - builder.show(); - } + AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext()); + builder.setTitle(this.getContext().getString(R.string.confirmation)); + builder.setMessage(this.getContext().getString(R.string.refreshtreatmentsfromnightscout)); + builder.setPositiveButton(this.getContext().getString(R.string.ok), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + MainApp.getDbHelper().resetTreatments(); + Intent restartNSClient = new Intent(Intents.ACTION_RESTART); + MainApp.instance().getApplicationContext().sendBroadcast(restartNSClient); + } + }); + builder.setNegativeButton(this.getContext().getString(R.string.cancel), null); + builder.show(); break; } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/TempTargetRangeFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsTempTargetFragment.java similarity index 76% rename from app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/TempTargetRangeFragment.java rename to app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsTempTargetFragment.java index 8dfa3643b1..95faa5c47c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TempTargetRange/TempTargetRangeFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsTempTargetFragment.java @@ -1,13 +1,11 @@ -package info.nightscout.androidaps.plugins.TempTargetRange; +package info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.SharedPreferences; import android.graphics.Paint; import android.os.Bundle; -import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; @@ -21,35 +19,25 @@ import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; -import com.j256.ormlite.dao.Dao; import com.squareup.otto.Subscribe; -import java.sql.SQLException; -import java.util.List; - import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.db.TempTarget; +import info.nightscout.androidaps.events.EventTempTargetChange; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; -import info.nightscout.androidaps.plugins.TempTargetRange.events.EventTempTargetRangeChange; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; +import info.nightscout.utils.OverlappingIntervals; import info.nightscout.utils.SP; -import info.nightscout.utils.ToastUtils; /** * Created by mike on 13/01/17. */ -public class TempTargetRangeFragment extends Fragment implements View.OnClickListener { - - private static TempTargetRangePlugin tempTargetRangePlugin = new TempTargetRangePlugin(); - - public static TempTargetRangePlugin getPlugin() { - return tempTargetRangePlugin; - } +public class TreatmentsTempTargetFragment extends Fragment implements View.OnClickListener { RecyclerView recyclerView; LinearLayoutManager llm; @@ -59,15 +47,15 @@ public class TempTargetRangeFragment extends Fragment implements View.OnClickLis public class RecyclerViewAdapter extends RecyclerView.Adapter { - List tempTargetList; + OverlappingIntervals tempTargetList; - RecyclerViewAdapter(List TempTargetList) { + RecyclerViewAdapter(OverlappingIntervals TempTargetList) { this.tempTargetList = TempTargetList; } @Override public TempTargetsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { - View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.temptargetrange_item, viewGroup, false); + View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.treatments_temptarget_item, viewGroup, false); TempTargetsViewHolder TempTargetsViewHolder = new TempTargetsViewHolder(v); return TempTargetsViewHolder; } @@ -166,14 +154,14 @@ public class TempTargetRangeFragment extends Fragment implements View.OnClickLis @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.temptargetrange_fragment, container, false); + View view = inflater.inflate(R.layout.treatments_temptarget_fragment, container, false); recyclerView = (RecyclerView) view.findViewById(R.id.temptargetrange_recyclerview); recyclerView.setHasFixedSize(true); llm = new LinearLayoutManager(view.getContext()); recyclerView.setLayoutManager(llm); - RecyclerViewAdapter adapter = new RecyclerViewAdapter(tempTargetRangePlugin.getList()); + RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainApp.getConfigBuilder().getTempTargets()); recyclerView.setAdapter(adapter); refreshFromNS = (Button) view.findViewById(R.id.temptargetrange_refreshfromnightscout); @@ -181,6 +169,10 @@ public class TempTargetRangeFragment extends Fragment implements View.OnClickLis context = getContext(); + boolean nsUploadOnly = SP.getBoolean(R.string.key_ns_upload_only, false); + if (nsUploadOnly) + refreshFromNS.setVisibility(View.GONE); + updateGUI(); return view; } @@ -189,27 +181,21 @@ public class TempTargetRangeFragment extends Fragment implements View.OnClickLis public void onClick(View view) { switch (view.getId()) { case R.id.temptargetrange_refreshfromnightscout: - boolean nsUploadOnly = SP.getBoolean(R.string.key_ns_upload_only, false); - if (nsUploadOnly) { - ToastUtils.showToastInUiThread(getContext(), this.getContext().getString(R.string.ns_upload_only_enabled)); - } else { - AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext()); - builder.setTitle(this.getContext().getString(R.string.confirmation)); - builder.setMessage(this.getContext().getString(R.string.refreshtemptargetsfromnightscout)); - builder.setPositiveButton(this.getContext().getString(R.string.ok), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - MainApp.getDbHelper().resetTempTargets(); - tempTargetRangePlugin.initializeData(); - updateGUI(); - Intent restartNSClient = new Intent(Intents.ACTION_RESTART); - MainApp.instance().getApplicationContext().sendBroadcast(restartNSClient); - } - }); - builder.setNegativeButton(this.getContext().getString(R.string.cancel), null); - builder.show(); - } + AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext()); + builder.setTitle(this.getContext().getString(R.string.confirmation)); + builder.setMessage(this.getContext().getString(R.string.refreshtemptargetsfromnightscout)); + builder.setPositiveButton(this.getContext().getString(R.string.ok), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + MainApp.getDbHelper().resetTempTargets(); + Intent restartNSClient = new Intent(Intents.ACTION_RESTART); + MainApp.instance().getApplicationContext().sendBroadcast(restartNSClient); + } + }); + builder.setNegativeButton(this.getContext().getString(R.string.cancel), null); + builder.show(); break; } + } @Override @@ -225,7 +211,7 @@ public class TempTargetRangeFragment extends Fragment implements View.OnClickLis } @Subscribe - public void onStatusEvent(final EventTempTargetRangeChange ev) { + public void onStatusEvent(final EventTempTargetChange ev) { updateGUI(); } @@ -235,7 +221,7 @@ public class TempTargetRangeFragment extends Fragment implements View.OnClickLis activity.runOnUiThread(new Runnable() { @Override public void run() { - recyclerView.swapAdapter(new RecyclerViewAdapter(tempTargetRangePlugin.getList()), false); + recyclerView.swapAdapter(new RecyclerViewAdapter(MainApp.getConfigBuilder().getTempTargets()), false); } }); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java index 1cbe738524..ed2ce5485d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java @@ -21,7 +21,6 @@ import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.plugins.Actions.dialogs.FillDialog; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; -import info.nightscout.androidaps.plugins.TempTargetRange.TempTargetRangePlugin; import info.nightscout.utils.BolusWizard; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; @@ -111,11 +110,6 @@ public class ActionStringHandler { boolean isMGDL = Boolean.parseBoolean(act[1]); NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); - TempTargetRangePlugin tempTargetRangePlugin = (TempTargetRangePlugin) MainApp.getSpecificPlugin(TempTargetRangePlugin.class); - if (!(Config.APS && tempTargetRangePlugin != null && tempTargetRangePlugin.isEnabled(PluginBase.GENERAL))) { - sendError("TempTargets not possible! Please check your configuration."); - return; - } if (profile == null) { sendError("No profile found!"); return; @@ -281,14 +275,11 @@ public class ActionStringHandler { } //Check for Temp-Target: - TempTargetRangePlugin tempTargetRangePlugin = (TempTargetRangePlugin) MainApp.getSpecificPlugin(TempTargetRangePlugin.class); - if (Config.APS && tempTargetRangePlugin != null && tempTargetRangePlugin.isEnabled(PluginBase.GENERAL)) { - TempTarget tempTarget = tempTargetRangePlugin.getTempTargetInProgress(new Date().getTime()); - if (tempTarget != null) { - ret += "Temp Target: " + NSProfile.toUnitsString(tempTarget.low, NSProfile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + NSProfile.toUnitsString(tempTarget.high, NSProfile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits()); - ret += "\nuntil: " + DateUtil.timeString(tempTarget.originalEnd()); - ret += "\n\n"; - } + TempTarget tempTarget = MainApp.getConfigBuilder().getTempTarget(new Date().getTime()); + if (tempTarget != null) { + ret += "Temp Target: " + NSProfile.toUnitsString(tempTarget.low, NSProfile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + NSProfile.toUnitsString(tempTarget.high, NSProfile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits()); + ret += "\nuntil: " + DateUtil.timeString(tempTarget.originalEnd()); + ret += "\n\n"; } //Default Range/Target diff --git a/app/src/main/res/layout/treatments_fragment.xml b/app/src/main/res/layout/treatments_fragment.xml index 0bcb3f2274..ab5b5eda44 100644 --- a/app/src/main/res/layout/treatments_fragment.xml +++ b/app/src/main/res/layout/treatments_fragment.xml @@ -37,7 +37,15 @@ android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_horizontal" - android:text="@string/tempbasals" /> + android:text="@string/tempbasal" /> + + diff --git a/app/src/main/res/layout/temptargetrange_fragment.xml b/app/src/main/res/layout/treatments_temptarget_fragment.xml similarity index 95% rename from app/src/main/res/layout/temptargetrange_fragment.xml rename to app/src/main/res/layout/treatments_temptarget_fragment.xml index 7b968b2a3f..93f2644db2 100644 --- a/app/src/main/res/layout/temptargetrange_fragment.xml +++ b/app/src/main/res/layout/treatments_temptarget_fragment.xml @@ -2,7 +2,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="info.nightscout.androidaps.plugins.Treatments.fragments.TreatmentsTempBasalsFragment"> + tools:context="info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsTempTargetFragment"> Задай нов удължен болусs: Приложи нов временен базал: Обикновен профил - Временен базал IOB: Общо IOB: Инс: @@ -344,7 +343,6 @@ Брой часове, с които ще бъде преместен профила! Мерни единици: NS upload only (изключва синхронизацията) - Моля изключете "NS upload only" за да използвате това. NS upload only. Not effective on SGV unless a local source like xDrip is selected. Not effective on Profiles while NS-Profiles is used. Моля рестартирайте телефона или AndroidAPS, в противен случай информацията за грешки няма да се запише(важно за да се потвърди, че алгоритъмът работи правилно) Край на временен базал @@ -420,7 +418,6 @@ Краткоср. Δ: Къси имена Bolus %.2fU delivered successfully - Временна цел Обнови временни цели от NS Експоненциално претеглена TDD Комулативна TDD diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 09f197227d..520a326ae0 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -129,7 +129,6 @@ Spustit nový kombo bolus: Spustit nový dočasný bazál: Jednoduchý profil - Dočasné bazály IOB: Celkové IOB: Inz: @@ -338,7 +337,6 @@ mg/dl mmol/l Pouze náhráváni do NS (zakázaná synchronizace) - Prosím deaktivujte \"Pouze nahrávání do NS\", abyste mohli použít tuto funkci. Pouze náhrávání dat do NS. Neplatí pro glykémie, dokud není vybraní místní zdroj dat jako xDrip. Neplatí pro profily, pokud se používá NS profil. Otevřít nastavení na hodinkách Wear Jiné @@ -393,7 +391,6 @@ Opravdu aktualizovat dočasné cíle z NS Odstranit záznam: Krátkodobý průměr - Dočasný cíl Obnovit dočasné cíle z NS "AKCE" "WEAR" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7d4cf11f31..6aa92454f9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -114,7 +114,6 @@ Max erlaubter Bolus Max erlaubte Kohlehydrate Tratments Sicherheit - Temp Basals Einfaches Profil Setze neuen extended Bolus: Akzeptiere neue temp Basalrate: @@ -278,7 +277,6 @@ Vorfüll-Standardmengen Bitte vergewissern Sie sich, dass die Menge der Spezifikation des Katheters entspricht. Zu NightScout nur hochladen (kein sync) - Bitte deaktivieren Sie \"Zu NightScout nur hochladen\" um dieses Feature zu nutzen. Zu NightScout nur hochladen. Nicht wirksam bei SGV wenn nicht eine lokale Quelle wie xDrip gewählt wird. Nicht wirksam bei Profilen, wenn NS-Profile verwendet werden. Andere Verstopfung diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 842c39a0ee..24e004cdf4 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -80,7 +80,6 @@ Sinopsis Perfil NS Perfil simple - Temp basales Tratamientos Bomba virtual Careportal @@ -327,7 +326,6 @@ AndroidAPS iniciado Español NS solo subida (sinc. inactiva) - Por favor desactiva \"NS solo subida\" para usar esta característica. NS solo subida. No efectivo con SGV salvo que este seleccionada una fuente local como xDrip. No efectivo en perfiles usando perfiles NS Otros ¡Bomba no iniciada! @@ -396,7 +394,6 @@ %dmin antes Bolo %.2fU enviado correctamente Rango Objetivo: - Objetivo Temp Actualizar objetivo temporal desde NS Unidades: diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 305388499f..4f1d38c55a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -386,7 +386,6 @@ Sincronizza profilo sul micro Target range: Adolescente - Basale temporanea IOB: Totale IOB: Ins: @@ -412,7 +411,6 @@ Data Pranzo Stoppato rapporto: - Target temp Aggiornare i target di temp da NS Errore di erogazione del bolo attività diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 2db6ee8087..0a1ff96a30 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -82,7 +82,6 @@ Overview NS 프로파일 Simple 프로파일 - 임시기초주입 Treatments 가상펌프 Careportal @@ -340,7 +339,6 @@ AndroidAPS 시작 NS upload only (disabled sync) NS upload only. 로컬소스(xDrip)가 선택되지 않으면 SGV에는 효력이 없습니다. NS프로파일이 사용중이라면 프로파일에는 효력이 없습니다. - 이 기능을 사용하시려면 "NS upload only"을 비활성화 하세요. 펌프가 초기화 되지 않았습니다! 펌프가 초기화와 프로파일 설정이 되지 않았습니다! 공기/채움 @@ -401,7 +399,6 @@ Autosens data Script debug AMA autosens 기능 사용하기 - Temp Target Refresh temp targets from NS Eating Soon Activity diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 650d715f9a..11722d7327 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -84,7 +84,7 @@ Overview NS Profile Simple profile - Temp Basals + TempBasal Treatments Virtual Pump Careportal @@ -354,7 +354,6 @@ AndroidAPS started NS upload only (disabled sync) NS upload only. Not effective on SGV unless a local source like xDrip is selected. Not effective on Profiles while NS-Profiles is used. - Please deactivate "NS upload only" to use this feature. Pump not initialized! Pump not initialized, profile not set! Prime/Fill @@ -415,7 +414,6 @@ Autosens data Script debug Use AMA autosens feature - Temp Target Refresh temp targets from NS Eating Soon Activity @@ -615,4 +613,5 @@ Bolus Step STOP ExtendedBolus + TempTarget