From 02d8e9928e848d6491b9cf82bea8a9d66c91646c Mon Sep 17 00:00:00 2001 From: Philoul Date: Mon, 6 Jun 2022 12:53:00 +0200 Subject: [PATCH 1/5] Save Autotune lastRun and Load LastRun after AAPS restart --- .../general/autotune/AutotuneFragment.kt | 4 +- .../general/autotune/AutotunePlugin.kt | 51 ++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt index b968c7fc88..85e7d2fb87 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt @@ -79,7 +79,7 @@ class AutotuneFragment : DaggerFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) sp.putBoolean(R.string.key_autotune_tune_insulin_curve, false) // put to false tune insulin curve - autotunePlugin.lastRun = sp.getLong(R.string.key_autotune_last_run, 0) + autotunePlugin.loadLastRun() if (autotunePlugin.lastNbDays.isEmpty()) autotunePlugin.lastNbDays = sp.getInt(R.string.key_autotune_default_tune_days, 5).toString() val defaultValue = sp.getInt(R.string.key_autotune_default_tune_days, 5).toDouble() @@ -144,6 +144,7 @@ class AutotuneFragment : DaggerFragment() { autotunePlugin.tunedProfile?.profilename = localName autotunePlugin.updateProfile(autotunePlugin.tunedProfile) autotunePlugin.updateButtonVisibility = View.GONE + autotunePlugin.saveLastRun() uel.log( UserEntry.Action.STORE_PROFILE, UserEntry.Sources.Autotune, @@ -163,6 +164,7 @@ class AutotuneFragment : DaggerFragment() { autotunePlugin.tunedProfile?.profilename = "" autotunePlugin.updateProfile(autotunePlugin.pumpProfile) autotunePlugin.updateButtonVisibility = View.VISIBLE + autotunePlugin.saveLastRun() uel.log( UserEntry.Action.STORE_PROFILE, UserEntry.Sources.Autotune, diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt index 9a7839f600..948904944c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt @@ -7,6 +7,7 @@ import info.nightscout.androidaps.data.LocalInsulin import info.nightscout.androidaps.data.ProfileSealed import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.ValueWithUnit +import info.nightscout.androidaps.extensions.pureProfileFromJson import info.nightscout.androidaps.interfaces.* import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.plugins.bus.RxBus @@ -16,6 +17,7 @@ import info.nightscout.androidaps.plugins.general.autotune.events.EventAutotuneU import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged import info.nightscout.androidaps.utils.DateUtil +import info.nightscout.androidaps.utils.JsonHelper import info.nightscout.androidaps.utils.MidnightTime import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.buildHelper.BuildHelper @@ -187,7 +189,7 @@ class AutotunePlugin @Inject constructor( } } lastRunSuccess = true - sp.putLong(R.string.key_autotune_last_run, lastRun) + saveLastRun() rxBus.send(EventAutotuneUpdateGui()) calculationRunning = false tunedProfile?.let { @@ -296,6 +298,53 @@ class AutotunePlugin @Inject constructor( localProfilePlugin.storeSettings() } + fun saveLastRun() { + val json = JSONObject() + json.put("lastNbDays", lastNbDays) + json.put("lastRun",lastRun) + json.put("pumpProfile", pumpProfile.profile.toPureNsJson(dateUtil)) + json.put("pumpProfileName", pumpProfile.profilename) + json.put("pumpPeak", pumpProfile.peak) + json.put("pumpDia", pumpProfile.dia) + json.put("tunedProfile", tunedProfile?.profile?.toPureNsJson(dateUtil)) + json.put("tunedCircadianProfile", tunedProfile?.circadianProfile?.toPureNsJson(dateUtil)) + json.put("tunedProfileName", tunedProfile?.profilename) + json.put("tunedPeak", tunedProfile?.peak) + json.put("tunedDia", tunedProfile?.dia) + json.put("result", result) + json.put("updateButtonVisibility", updateButtonVisibility) + sp.putString(R.string.key_autotune_last_run, json.toString()) + } + + fun loadLastRun() { + result = "" + lastRunSuccess = false + val json = JSONObject(sp.getString(R.string.key_autotune_last_run, "")) + lastNbDays = JsonHelper.safeGetString(json, "lastNbDays", "") + lastRun = JsonHelper.safeGetLong(json, "lastRun") + val pumpPeak = JsonHelper.safeGetInt(json, "pumpPeak") + val pumpDia = JsonHelper.safeGetDouble(json, "pumpDia") + var localInsulin = LocalInsulin("PumpInsulin", pumpPeak, pumpDia) + selectedProfile = JsonHelper.safeGetString(json, "pumpProfileName", "") + val profile = JsonHelper.safeGetJSONObject(json, "pumpProfile", null)?.let { pureProfileFromJson(it, dateUtil) } + ?:return + pumpProfile = ATProfile(ProfileSealed.Pure(profile), localInsulin, injector).also { it.profilename = selectedProfile } + val tunedPeak = JsonHelper.safeGetInt(json, "tunedPeak") + val tunedDia = JsonHelper.safeGetDouble(json, "tunedDia") + localInsulin = LocalInsulin("PumpInsulin", tunedPeak, tunedDia) + val tunedProfileName = JsonHelper.safeGetString(json, "tunedProfileName", "") + val tuned = JsonHelper.safeGetJSONObject(json, "tunedProfile", null)?.let { pureProfileFromJson(it, dateUtil) } + ?: return + val circadianTuned = JsonHelper.safeGetJSONObject(json, "tunedCircadianProfile", null)?.let { pureProfileFromJson(it, dateUtil) } + ?: return + tunedProfile = ATProfile(ProfileSealed.Pure(tuned), localInsulin, injector).also { atProfile -> + atProfile.profilename = tunedProfileName + atProfile.circadianProfile = ProfileSealed.Pure(circadianTuned) + } + result = JsonHelper.safeGetString(json, "result", "") + updateButtonVisibility = JsonHelper.safeGetInt(json, "updateButtonVisibility") + lastRunSuccess = true + } private fun log(message: String) { atLog("[Plugin] $message") From e89e5102f748f59de29dbb408b8797c3ef9e1d16 Mon Sep 17 00:00:00 2001 From: Philoul Date: Mon, 6 Jun 2022 18:30:01 +0200 Subject: [PATCH 2/5] Restore LastRun results with click on LastRun date --- .../plugins/general/autotune/AutotuneFragment.kt | 9 ++++++++- app/src/main/res/layout/autotune_fragment.xml | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt index 85e7d2fb87..5ab8cb1dcf 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt @@ -1,5 +1,6 @@ package info.nightscout.androidaps.plugins.general.autotune +import android.graphics.Paint import android.graphics.Typeface import android.os.Bundle import android.text.Editable @@ -253,6 +254,12 @@ class AutotuneFragment : DaggerFragment() { } } } + + binding.tuneLastrun.setOnClickListener { + autotunePlugin.loadLastRun() + updateGui() + } + binding.tuneLastrun.paintFlags = binding.tuneLastrun.paintFlags or Paint.UNDERLINE_TEXT_FLAG } @Synchronized @@ -265,7 +272,6 @@ class AutotuneFragment : DaggerFragment() { updateGui() }, { fabricPrivacy.logException(it) }) checkNewDay() - binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble() updateGui() } @@ -278,6 +284,7 @@ class AutotuneFragment : DaggerFragment() { @Synchronized private fun updateGui() { _binding ?: return + binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble() profileStore = activePlugin.activeProfileSource.profile ?: ProfileStore(injector, JSONObject(), dateUtil) profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString() profileFunction.getProfile()?.let { currentProfile -> diff --git a/app/src/main/res/layout/autotune_fragment.xml b/app/src/main/res/layout/autotune_fragment.xml index 003699e6ba..744b9a260e 100644 --- a/app/src/main/res/layout/autotune_fragment.xml +++ b/app/src/main/res/layout/autotune_fragment.xml @@ -140,7 +140,8 @@ android:gravity="start" android:paddingStart="5dp" android:paddingEnd="5dp" - android:textSize="14sp" /> + android:textSize="14sp" + android:textColor="@color/colorCalculatorButton"/> From 636bdb0e94a0d2ef72bb3be57061ed333e2d8b22 Mon Sep 17 00:00:00 2001 From: Philoul Date: Wed, 8 Jun 2022 07:42:00 +0200 Subject: [PATCH 3/5] Fix loadLastRun --- .../general/autotune/AutotunePlugin.kt | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt index 948904944c..c46edcbfca 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt @@ -319,31 +319,34 @@ class AutotunePlugin @Inject constructor( fun loadLastRun() { result = "" lastRunSuccess = false - val json = JSONObject(sp.getString(R.string.key_autotune_last_run, "")) - lastNbDays = JsonHelper.safeGetString(json, "lastNbDays", "") - lastRun = JsonHelper.safeGetLong(json, "lastRun") - val pumpPeak = JsonHelper.safeGetInt(json, "pumpPeak") - val pumpDia = JsonHelper.safeGetDouble(json, "pumpDia") - var localInsulin = LocalInsulin("PumpInsulin", pumpPeak, pumpDia) - selectedProfile = JsonHelper.safeGetString(json, "pumpProfileName", "") - val profile = JsonHelper.safeGetJSONObject(json, "pumpProfile", null)?.let { pureProfileFromJson(it, dateUtil) } - ?:return - pumpProfile = ATProfile(ProfileSealed.Pure(profile), localInsulin, injector).also { it.profilename = selectedProfile } - val tunedPeak = JsonHelper.safeGetInt(json, "tunedPeak") - val tunedDia = JsonHelper.safeGetDouble(json, "tunedDia") - localInsulin = LocalInsulin("PumpInsulin", tunedPeak, tunedDia) - val tunedProfileName = JsonHelper.safeGetString(json, "tunedProfileName", "") - val tuned = JsonHelper.safeGetJSONObject(json, "tunedProfile", null)?.let { pureProfileFromJson(it, dateUtil) } - ?: return - val circadianTuned = JsonHelper.safeGetJSONObject(json, "tunedCircadianProfile", null)?.let { pureProfileFromJson(it, dateUtil) } - ?: return - tunedProfile = ATProfile(ProfileSealed.Pure(tuned), localInsulin, injector).also { atProfile -> - atProfile.profilename = tunedProfileName - atProfile.circadianProfile = ProfileSealed.Pure(circadianTuned) + try { + val json = JSONObject(sp.getString(R.string.key_autotune_last_run, "")) + lastNbDays = JsonHelper.safeGetString(json, "lastNbDays", "") + lastRun = JsonHelper.safeGetLong(json, "lastRun") + val pumpPeak = JsonHelper.safeGetInt(json, "pumpPeak") + val pumpDia = JsonHelper.safeGetDouble(json, "pumpDia") + var localInsulin = LocalInsulin("PumpInsulin", pumpPeak, pumpDia) + selectedProfile = JsonHelper.safeGetString(json, "pumpProfileName", "") + val profile = JsonHelper.safeGetJSONObject(json, "pumpProfile", null)?.let { pureProfileFromJson(it, dateUtil) } + ?: return + pumpProfile = ATProfile(ProfileSealed.Pure(profile), localInsulin, injector).also { it.profilename = selectedProfile } + val tunedPeak = JsonHelper.safeGetInt(json, "tunedPeak") + val tunedDia = JsonHelper.safeGetDouble(json, "tunedDia") + localInsulin = LocalInsulin("PumpInsulin", tunedPeak, tunedDia) + val tunedProfileName = JsonHelper.safeGetString(json, "tunedProfileName", "") + val tuned = JsonHelper.safeGetJSONObject(json, "tunedProfile", null)?.let { pureProfileFromJson(it, dateUtil) } + ?: return + val circadianTuned = JsonHelper.safeGetJSONObject(json, "tunedCircadianProfile", null)?.let { pureProfileFromJson(it, dateUtil) } + ?: return + tunedProfile = ATProfile(ProfileSealed.Pure(tuned), localInsulin, injector).also { atProfile -> + atProfile.profilename = tunedProfileName + atProfile.circadianProfile = ProfileSealed.Pure(circadianTuned) + } + result = JsonHelper.safeGetString(json, "result", "") + updateButtonVisibility = JsonHelper.safeGetInt(json, "updateButtonVisibility") + lastRunSuccess = true + } catch (e: Exception) { } - result = JsonHelper.safeGetString(json, "result", "") - updateButtonVisibility = JsonHelper.safeGetInt(json, "updateButtonVisibility") - lastRunSuccess = true } private fun log(message: String) { From a9b424b2f3b2ec1f065871aba4e5a4ea2ce59df5 Mon Sep 17 00:00:00 2001 From: Philoul Date: Wed, 8 Jun 2022 08:00:01 +0200 Subject: [PATCH 4/5] Autotune fix load result during calculation running --- .../androidaps/plugins/general/autotune/AutotuneFragment.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt index 52aefc5560..2b467cb500 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt @@ -257,8 +257,10 @@ class AutotuneFragment : DaggerFragment() { } binding.tuneLastrun.setOnClickListener { - autotunePlugin.loadLastRun() - updateGui() + if (!autotunePlugin.calculationRunning) { + autotunePlugin.loadLastRun() + updateGui() + } } binding.tuneLastrun.paintFlags = binding.tuneLastrun.paintFlags or Paint.UNDERLINE_TEXT_FLAG } From b0891ef2c1a2bb35836541f32e9134c87c2c6138 Mon Sep 17 00:00:00 2001 From: Philoul Date: Wed, 8 Jun 2022 09:03:44 +0200 Subject: [PATCH 5/5] Replace hardcoded text by string --- .../androidaps/plugins/general/autotune/AutotunePlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt index 69e7ccdecb..b0ec81d2d5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt @@ -199,7 +199,7 @@ class AutotunePlugin @Inject constructor( calculationRunning = false return result } - return "No Result" // should never occurs + return rh.gs(R.string.autotune_error) } private fun showResults(tunedProfile: ATProfile?, pumpProfile: ATProfile): String {