From b5a64f4d859d579bd3d2f77f223945e366daf15f Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sun, 2 Feb 2020 22:12:54 +0100 Subject: [PATCH] better timestamps on Loop tab --- .../plugins/aps/loop/LoopFragment.kt | 12 +- .../plugins/aps/loop/LoopPlugin.java | 30 ++- .../general/overview/OverviewFragment.java | 2 +- .../general/wear/ActionStringHandler.java | 4 +- .../wearintegration/WatchUpdaterService.java | 2 +- .../nightscout/androidaps/utils/DateUtil.java | 13 + app/src/main/res/layout/loop_fragment.xml | 225 ++++++++++++++---- app/src/main/res/values/strings.xml | 4 + 8 files changed, 231 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopFragment.kt index e7dbacb891..5625fd978f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopFragment.kt @@ -77,8 +77,11 @@ class LoopFragment : Fragment() { loop_source?.text = it.source ?: "" loop_lastrun?.text = it.lastAPSRun?.let { lastRun -> DateUtil.dateAndTimeString(lastRun.time) } ?: "" - loop_lastenact?.text = it.lastAPSRun?.let { lastEnact -> DateUtil.dateAndTimeString(lastEnact.time) } - ?: "" + loop_smbrequest_time?.text = DateUtil.dateAndTimeAndSecondsString(it.lastSMBRequest) + loop_smbexecution_time?.text = DateUtil.dateAndTimeAndSecondsString(it.lastSMBEnact) + loop_tbrrequest_time?.text = DateUtil.dateAndTimeAndSecondsString(it.lastTBRRequest) + loop_tbrexecution_time?.text = DateUtil.dateAndTimeAndSecondsString(it.lastTBREnact) + loop_tbrsetbypump?.text = it.tbrSetByPump?.let { tbrSetByPump -> HtmlHelper.fromHtml(tbrSetByPump.toHtml()) } ?: "" loop_smbsetbypump?.text = it.smbSetByPump?.let { smbSetByPump -> HtmlHelper.fromHtml(smbSetByPump.toHtml()) } @@ -102,7 +105,10 @@ class LoopFragment : Fragment() { loop_constraintsprocessed?.text = "" loop_source?.text = "" loop_lastrun?.text = "" - loop_lastenact?.text = "" + loop_smbrequest_time?.text = "" + loop_smbexecution_time?.text = "" + loop_tbrrequest_time?.text = "" + loop_tbrexecution_time?.text = "" loop_tbrsetbypump?.text = "" loop_smbsetbypump?.text = "" } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java index 7492dc64dd..b0d6f89065 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.java @@ -57,6 +57,7 @@ import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin; import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; import info.nightscout.androidaps.queue.Callback; import info.nightscout.androidaps.queue.commands.Command; +import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.FabricPrivacy; import info.nightscout.androidaps.utils.SP; import info.nightscout.androidaps.utils.T; @@ -84,9 +85,9 @@ public class LoopPlugin extends PluginBase { return loopPlugin; } - private long loopSuspendedTill = 0L; // end of manual loop suspend - private boolean isSuperBolus = false; - private boolean isDisconnected = false; + private long loopSuspendedTill; // end of manual loop suspend + private boolean isSuperBolus; + private boolean isDisconnected; public class LastRun { public APSResult request = null; @@ -95,8 +96,11 @@ public class LoopPlugin extends PluginBase { public PumpEnactResult smbSetByPump = null; public String source = null; public Date lastAPSRun = null; - public Date lastEnact = null; - public Date lastOpenModeAccept; + public long lastTBREnact = 0; + public long lastSMBEnact = 0; + public long lastTBRRequest = 0; + public long lastSMBRequest = 0; + public long lastOpenModeAccept; } static public LastRun lastRun = null; @@ -342,6 +346,10 @@ public class LoopPlugin extends PluginBase { lastRun.source = ((PluginBase) usedAPS).getName(); lastRun.tbrSetByPump = null; lastRun.smbSetByPump = null; + lastRun.lastTBREnact = 0; + lastRun.lastTBRRequest = 0; + lastRun.lastSMBEnact = 0; + lastRun.lastSMBRequest = 0; NSUpload.uploadDeviceStatus(); @@ -378,14 +386,17 @@ public class LoopPlugin extends PluginBase { public void run() { if (result.enacted || result.success) { lastRun.tbrSetByPump = result; - lastRun.lastEnact = lastRun.lastAPSRun; + lastRun.lastTBRRequest = lastRun.lastAPSRun.getTime(); + lastRun.lastTBREnact = DateUtil.now(); + RxBus.INSTANCE.send(new EventLoopUpdateGui()); applySMBRequest(resultAfterConstraints, new Callback() { @Override public void run() { //Callback is only called if a bolus was acutally requested if (result.enacted || result.success) { lastRun.smbSetByPump = result; - lastRun.lastEnact = lastRun.lastAPSRun; + lastRun.lastSMBRequest = lastRun.lastAPSRun.getTime(); + lastRun.lastSMBEnact = DateUtil.now(); } else { new Thread(() -> { SystemClock.sleep(1000); @@ -465,8 +476,9 @@ public class LoopPlugin extends PluginBase { public void run() { if (result.enacted) { lastRun.tbrSetByPump = result; - lastRun.lastEnact = new Date(); - lastRun.lastOpenModeAccept = new Date(); + lastRun.lastTBRRequest = lastRun.lastAPSRun.getTime(); + lastRun.lastTBREnact = DateUtil.now(); + lastRun.lastOpenModeAccept = DateUtil.now(); NSUpload.uploadDeviceStatus(); SP.incInt(R.string.key_ObjectivesmanualEnacts); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java index dcce040759..be963d7a9a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java @@ -1113,7 +1113,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, if (acceptTempButton != null) { boolean showAcceptButton = !closedLoopEnabled.value(); // Open mode needed showAcceptButton = showAcceptButton && finalLastRun != null && finalLastRun.lastAPSRun != null; // aps result must exist - showAcceptButton = showAcceptButton && (finalLastRun.lastOpenModeAccept == null || finalLastRun.lastOpenModeAccept.getTime() < finalLastRun.lastAPSRun.getTime()); // never accepted or before last result + showAcceptButton = showAcceptButton && (finalLastRun.lastOpenModeAccept == 0 || finalLastRun.lastOpenModeAccept < finalLastRun.lastAPSRun.getTime()); // never accepted or before last result showAcceptButton = showAcceptButton && finalLastRun.constraintsProcessed.isChangeRequested(); // change is requested if (showAcceptButton && pump.isInitialized() && !pump.isSuspended() && LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java index cae9817a55..0fd820a4da 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java @@ -502,8 +502,8 @@ public class ActionStringHandler { if (LoopPlugin.lastRun.lastAPSRun != null) ret += "\nLast Run: " + DateUtil.timeString(LoopPlugin.lastRun.lastAPSRun); - if (LoopPlugin.lastRun.lastEnact != null) - ret += "\nLast Enact: " + DateUtil.timeString(LoopPlugin.lastRun.lastEnact); + if (LoopPlugin.lastRun.lastTBREnact != 0) + ret += "\nLast Enact: " + DateUtil.timeString(LoopPlugin.lastRun.lastTBREnact); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java index 39676f17b4..2293473338 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/WatchUpdaterService.java @@ -735,7 +735,7 @@ public class WatchUpdaterService extends WearableListenerService implements Goog //OpenAPS status if (Config.APS) { //we are AndroidAPS - openApsStatus = LoopPlugin.lastRun != null && LoopPlugin.lastRun.lastEnact != null && LoopPlugin.lastRun.lastEnact.getTime() != 0 ? LoopPlugin.lastRun.lastEnact.getTime() : -1; + openApsStatus = LoopPlugin.lastRun != null && LoopPlugin.lastRun.lastTBREnact != 0 ? LoopPlugin.lastRun.lastTBREnact : -1; } else { //NSClient or remote openApsStatus = NSDeviceStatus.getOpenApsTimestamp(); diff --git a/app/src/main/java/info/nightscout/androidaps/utils/DateUtil.java b/app/src/main/java/info/nightscout/androidaps/utils/DateUtil.java index b03d8cb43f..aa228b96ca 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/DateUtil.java +++ b/app/src/main/java/info/nightscout/androidaps/utils/DateUtil.java @@ -141,6 +141,14 @@ public class DateUtil { return new DateTime(mills).toString(DateTimeFormat.forPattern(format)); } + public static String timeStringWithSeconds(long mills) { + String format = "hh:mm:ssa"; + if (android.text.format.DateFormat.is24HourFormat(MainApp.instance())) { + format = "HH:mm:ss"; + } + return new DateTime(mills).toString(DateTimeFormat.forPattern(format)); + } + public static String timeFullString(long mills) { return new DateTime(mills).toString(DateTimeFormat.fullTime()); } @@ -158,6 +166,11 @@ public class DateUtil { return dateString(mills) + " " + timeString(mills); } + public static String dateAndTimeAndSecondsString(long mills) { + if (mills == 0) return ""; + return dateString(mills) + " " + timeStringWithSeconds(mills); + } + public static String dateAndTimeFullString(long mills) { return dateString(mills) + " " + timeFullString(mills); } diff --git a/app/src/main/res/layout/loop_fragment.xml b/app/src/main/res/layout/loop_fragment.xml index ef24280345..3b5066e533 100644 --- a/app/src/main/res/layout/loop_fragment.xml +++ b/app/src/main/res/layout/loop_fragment.xml @@ -57,51 +57,6 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \"PhoneChecker\" Chart menu AS + SMB request time + SMB execution time + Temp basal request time + Temp basal execution time