diff --git a/core/src/main/java/info/nightscout/androidaps/data/Profile.java b/core/src/main/java/info/nightscout/androidaps/data/Profile.java index 9fe8c7846e..f71e53e9b6 100644 --- a/core/src/main/java/info/nightscout/androidaps/data/Profile.java +++ b/core/src/main/java/info/nightscout/androidaps/data/Profile.java @@ -544,6 +544,10 @@ public class Profile { return getValueToTime(targetLow_v, timeAsSeconds); } + public double getTargetLowMgdlTimeFromMidnight(int timeAsSeconds) { + return toMgdl(getTargetLowTimeFromMidnight(timeAsSeconds), units); + } + public double getTargetHighMgdl() { return toMgdl(getTargetHighTimeFromMidnight(secondsFromMidnight()), units); } @@ -558,6 +562,10 @@ public class Profile { return getValueToTime(targetHigh_v, timeAsSeconds); } + public double getTargetHighMgdlTimeFromMidnight(int timeAsSeconds) { + return toMgdl(getTargetHighTimeFromMidnight(timeAsSeconds), units); + } + public class TargetValue { TargetValue(int timeAsSeconds, double low, double high) { this.timeAsSeconds = timeAsSeconds; diff --git a/core/src/main/java/info/nightscout/androidaps/dialogs/ProfileViewerDialog.kt b/core/src/main/java/info/nightscout/androidaps/dialogs/ProfileViewerDialog.kt index b3286cb590..007a652771 100644 --- a/core/src/main/java/info/nightscout/androidaps/dialogs/ProfileViewerDialog.kt +++ b/core/src/main/java/info/nightscout/androidaps/dialogs/ProfileViewerDialog.kt @@ -15,6 +15,7 @@ import info.nightscout.androidaps.data.Profile import info.nightscout.androidaps.interfaces.ActivePluginProvider import info.nightscout.androidaps.interfaces.DatabaseHelperInterface import info.nightscout.androidaps.utils.DateUtil +import info.nightscout.androidaps.utils.DecimalFormatter import info.nightscout.androidaps.utils.HtmlHelper import info.nightscout.androidaps.utils.resources.ResourceHelper import kotlinx.android.synthetic.main.close.* @@ -85,7 +86,7 @@ class ProfileViewerDialog : DaggerDialogFragment() { profileview_datelayout.visibility = View.VISIBLE } - Mode.CUSTOM_PROFILE -> { + Mode.CUSTOM_PROFILE -> { profile = Profile(injector, JSONObject(customProfileJson), customProfileUnits) profile2 = null profileName = customProfileName @@ -102,7 +103,7 @@ class ProfileViewerDialog : DaggerDialogFragment() { profileview_datelayout.visibility = View.GONE } - Mode.DB_PROFILE -> { + Mode.DB_PROFILE -> { val profileList = databaseHelper.getProfileSwitchData(time, true) profile = if (profileList.isNotEmpty()) profileList[0].profileObject else null profile2 = null @@ -124,7 +125,7 @@ class ProfileViewerDialog : DaggerDialogFragment() { profileview_ic.text = ics(profile1, profile2) profileview_isf.text = isfs(profile1, profile2) profileview_basal.text = basals(profile1, profile2) - profileview_target.text = HtmlHelper.fromHtml(formatColors("", profile1.targetList.replace("\n","
") + "
", profile2.targetList.replace("\n","
"), "")) + profileview_target.text = targets(profile1, profile2) basal_graph.show(profile1, profile2) } @@ -229,12 +230,13 @@ class ProfileViewerDialog : DaggerDialogFragment() { private fun isfs(profile1: Profile, profile2: Profile): Spanned { var prev1 = 0.0 var prev2 = 0.0 + val units = profile1.units val s = StringBuilder() for (hour in 0..23) { - val val1 = Profile.fromMgdlToUnits(profile1.getIsfMgdlTimeFromMidnight(hour * 60 * 60), profile1.units) - val val2 = Profile.fromMgdlToUnits(profile2.getIsfMgdlTimeFromMidnight(hour * 60 * 60), profile1.units) + val val1 = Profile.fromMgdlToUnits(profile1.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units) + val val2 = Profile.fromMgdlToUnits(profile2.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units) if (val1 != prev1 || val2 != prev2) { - s.append(formatColors(Profile.format_HH_MM(hour * 60 * 60), val1, val2, DecimalFormat("0.0"), profile1.units + " " + resourceHelper.gs(R.string.profile_per_unit))) + s.append(formatColors(Profile.format_HH_MM(hour * 60 * 60), val1, val2, DecimalFormat("0.0"), units + " " + resourceHelper.gs(R.string.profile_per_unit))) s.append("
") } prev1 = val1 @@ -242,4 +244,35 @@ class ProfileViewerDialog : DaggerDialogFragment() { } return HtmlHelper.fromHtml(s.toString()) } + + private fun targets(profile1: Profile, profile2: Profile):Spanned { + var prev1l = 0.0 + var prev1h = 0.0 + var prev2l = 0.0 + var prev2h = 0.0 + val units = profile1.units + val s = StringBuilder() + for (hour in 0..23) { + val val1l = profile1.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60) + val val1h = profile1.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60) + val val2l = profile2.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60) + val val2h = profile2.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60) + val txt1 = Profile.format_HH_MM(hour * 60 * 60) + " " + valueToUnitsToString(val1l, units) + " - " + valueToUnitsToString(val1h, units) + " " + units + val txt2 = Profile.format_HH_MM(hour * 60 * 60) + " " + valueToUnitsToString(val2l, units) + " - " + valueToUnitsToString(val2h, units) + " " + units + if (val1l != prev1l || val1h != prev1h || val2l != prev2l || val2h != prev2h ) { + s.append(formatColors(txt1, txt2)) + s.append("
") + } + prev1l = val1l + prev1h = val1h + prev2l = val2l + prev2h = val2h + } + return HtmlHelper.fromHtml(s.toString()) + } + + private fun valueToUnitsToString(value: Double, units: String): String? { + return if (units == Constants.MGDL) DecimalFormatter.to0Decimal(value) else DecimalFormatter.to1Decimal(value * Constants.MGDL_TO_MMOLL) + } + }