diff --git a/app/src/main/java/info/nightscout/androidaps/Constants.java b/app/src/main/java/info/nightscout/androidaps/Constants.java index 92833ac283..7f3b0b99b5 100644 --- a/app/src/main/java/info/nightscout/androidaps/Constants.java +++ b/app/src/main/java/info/nightscout/androidaps/Constants.java @@ -82,4 +82,11 @@ public class Constants { public static final double LOWMARK = 76.0; public static final double HIGHMARK = 180.0; + // STATISTICS + public static final double STATS_TARGET_LOW_MMOL = 3.9; + public static final double STATS_TARGET_HIGH_MMOL = 7.8; + public static final double STATS_RANGE_LOW_MMOL = 3.9; + public static final double STATS_RANGE_HIGH_MMOL = 10.0; + + } diff --git a/app/src/main/java/info/nightscout/androidaps/activities/StatsActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/StatsActivity.kt index b16f57fb02..d0ac8e3f6f 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/StatsActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/StatsActivity.kt @@ -9,7 +9,6 @@ import info.nightscout.androidaps.utils.TddCalculator import info.nightscout.androidaps.utils.TirCalculator import kotlinx.android.synthetic.main.stats_activity.* - class StatsActivity : NoSplashAppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/info/nightscout/androidaps/activities/SurveyActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/SurveyActivity.kt index 991ee72d0a..bf07eda9af 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/SurveyActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/SurveyActivity.kt @@ -10,7 +10,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions import info.nightscout.androidaps.dialogs.ProfileViewerDialog import info.nightscout.androidaps.utils.* -import kotlinx.android.synthetic.main.survey_fragment.* +import kotlinx.android.synthetic.main.survey_activity.* import org.slf4j.LoggerFactory class SurveyActivity : NoSplashAppCompatActivity() { @@ -18,7 +18,7 @@ class SurveyActivity : NoSplashAppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.survey_fragment) + setContentView(R.layout.survey_activity) survey_id.text = InstanceId.instanceId() @@ -81,21 +81,21 @@ class SurveyActivity : NoSplashAppCompatActivity() { val auth = FirebaseAuth.getInstance() auth.signInAnonymously() - .addOnCompleteListener(this) { task -> - if (task.isSuccessful) { - log.debug("signInAnonymously:success") - val user = auth.currentUser + .addOnCompleteListener(this) { task -> + if (task.isSuccessful) { + log.debug("signInAnonymously:success") + val user = auth.currentUser // TODO: do we need this, seems unused? - val database = FirebaseDatabase.getInstance().reference - database.child("survey").child(r.id).setValue(r) - } else { - log.error("signInAnonymously:failure", task.exception) - ToastUtils.showToastInUiThread(this, "Authentication failed.") - //updateUI(null) - } - - // ... + val database = FirebaseDatabase.getInstance().reference + database.child("survey").child(r.id).setValue(r) + } else { + log.error("signInAnonymously:failure", task.exception) + ToastUtils.showToastInUiThread(this, "Authentication failed.") + //updateUI(null) } + + // ... + } finish() } } diff --git a/app/src/main/java/info/nightscout/androidaps/data/ProfileStore.kt b/app/src/main/java/info/nightscout/androidaps/data/ProfileStore.kt index ca48a72296..9415a25f2c 100644 --- a/app/src/main/java/info/nightscout/androidaps/data/ProfileStore.kt +++ b/app/src/main/java/info/nightscout/androidaps/data/ProfileStore.kt @@ -47,7 +47,7 @@ class ProfileStore(val data: JSONObject) { if (profile == null) { JsonHelper.safeGetJSONObject(store, profileName, null)?.let { profileObject -> // take units from profile and if N/A from store - JsonHelper.safeGetStringAllowNull(profileObject, "units", JsonHelper.safeGetString(store, "units"))?.let { units -> + JsonHelper.safeGetStringAllowNull(profileObject, "units", JsonHelper.safeGetString(data, "units"))?.let { units -> profile = Profile(profileObject, units) cachedObjects[profileName] = profile } 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 b1fb199fc1..74f7ed234e 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java +++ b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java @@ -1602,15 +1602,14 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { queryBuilder.limit(100L); Where where = queryBuilder.where(); where.ge("date", from); - queryBuilder.setCountOf(true); PreparedQuery preparedQuery = queryBuilder.prepare(); - long count = daoProfileSwitch.countOf(preparedQuery); - // now do query of count + 1 - queryBuilder = daoProfileSwitch.queryBuilder(); - queryBuilder.orderBy("date", ascending); - queryBuilder.limit(count + 1); - preparedQuery = queryBuilder.prepare(); profileSwitches = daoProfileSwitch.query(preparedQuery); + //add last one without duration + ProfileSwitch last = getLastProfileSwitchWithoutDuration(); + if (last != null) { + if (!profileSwitches.contains(last)) + profileSwitches.add(last); + } return profileSwitches; } catch (SQLException e) { log.error("Unhandled exception", e); @@ -1618,6 +1617,28 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { return new ArrayList<>(); } + @Nullable + private ProfileSwitch getLastProfileSwitchWithoutDuration() { + try { + Dao daoProfileSwitch = getDaoProfileSwitch(); + List profileSwitches; + QueryBuilder queryBuilder = daoProfileSwitch.queryBuilder(); + queryBuilder.orderBy("date", false); + queryBuilder.limit(1L); + Where where = queryBuilder.where(); + where.eq("durationInMinutes", 0); + PreparedQuery preparedQuery = queryBuilder.prepare(); + profileSwitches = daoProfileSwitch.query(preparedQuery); + if (profileSwitches.size() > 0) + return profileSwitches.get(0); + else + return null; + } catch (SQLException e) { + log.error("Unhandled exception", e); + } + return null; + } + public List getProfileSwitchEventsFromTime(long mills, boolean ascending) { try { Dao daoProfileSwitch = getDaoProfileSwitch(); diff --git a/app/src/main/java/info/nightscout/androidaps/utils/ActivityMonitor.kt b/app/src/main/java/info/nightscout/androidaps/utils/ActivityMonitor.kt index deac4a2877..1b3ba7bec8 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/ActivityMonitor.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/ActivityMonitor.kt @@ -62,7 +62,7 @@ object ActivityMonitor : Application.ActivityLifecycleCallbacks { return result } - fun stats() :Spanned { + fun stats(): Spanned { return HtmlHelper.fromHtml("
" + MainApp.gs(R.string.activitymonitor) + ":
" + toText()) } diff --git a/app/src/main/java/info/nightscout/androidaps/utils/TddCalculator.kt b/app/src/main/java/info/nightscout/androidaps/utils/TddCalculator.kt index b119fe72b9..0210247eb3 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/TddCalculator.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/TddCalculator.kt @@ -19,7 +19,6 @@ object TddCalculator : TreatmentsPlugin() { val endTime = MidnightTime.calc(DateUtil.now()) initializeData(range) - val result = LongSparseArray() for (t in treatmentsFromHistory) { if (!t.isValid) continue @@ -65,10 +64,10 @@ object TddCalculator : TreatmentsPlugin() { val tdds = calculate(7) val averageTdd = averageTDD(tdds) return HtmlHelper.fromHtml( - "" + MainApp.gs(R.string.tdd) + ":
" + - toText(tdds) + - "" + MainApp.gs(R.string.average) + ":
" + - averageTdd.toText(tdds.size()) + "" + MainApp.gs(R.string.tdd) + ":
" + + toText(tdds) + + "" + MainApp.gs(R.string.average) + ":
" + + averageTdd.toText(tdds.size()) ) } diff --git a/app/src/main/java/info/nightscout/androidaps/utils/TirCalculator.kt b/app/src/main/java/info/nightscout/androidaps/utils/TirCalculator.kt index 52d303ea39..4e41f9a331 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/TirCalculator.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/TirCalculator.kt @@ -32,9 +32,11 @@ object TirCalculator { } fun averageTIR(tirs: LongSparseArray): TIR { - val totalTir = - if (tirs.size() > 0) TIR(tirs.valueAt(0).date, tirs.valueAt(0).lowThreshold, tirs.valueAt(0).highThreshold) - else TIR(7, 70.0, 180.0) + val totalTir = if (tirs.size() > 0) { + TIR(tirs.valueAt(0).date, tirs.valueAt(0).lowThreshold, tirs.valueAt(0).highThreshold) + } else { + TIR(7, 70.0, 180.0) + } for (i in 0 until tirs.size()) { val tir = tirs.valueAt(i) totalTir.below += tir.below @@ -47,10 +49,10 @@ object TirCalculator { } fun stats(): Spanned { - val lowTirMgdl = 3.9 * Constants.MMOLL_TO_MGDL - val highTirMgdl = 10.0 * Constants.MMOLL_TO_MGDL - val lowTitMgdl = 3.9 * Constants.MMOLL_TO_MGDL - val highTitMgdl = 7.8 * Constants.MMOLL_TO_MGDL + val lowTirMgdl = Constants.STATS_RANGE_LOW_MMOL * Constants.MMOLL_TO_MGDL + val highTirMgdl = Constants.STATS_RANGE_HIGH_MMOL * Constants.MMOLL_TO_MGDL + val lowTitMgdl = Constants.STATS_TARGET_LOW_MMOL * Constants.MMOLL_TO_MGDL + val highTitMgdl = Constants.STATS_TARGET_HIGH_MMOL * Constants.MMOLL_TO_MGDL val tir7 = calculate(7, lowTirMgdl, highTirMgdl) val averageTir7 = averageTIR(tir7) @@ -61,14 +63,14 @@ object TirCalculator { val tit30 = calculate(30, lowTitMgdl, highTitMgdl) val averageTit30 = averageTIR(tit30) return HtmlHelper.fromHtml( - "
" + MainApp.gs(R.string.tir) + ":
" + - toText(tir7) + - "
" + MainApp.gs(R.string.average) + " (" + Profile.toCurrentUnitsString(lowTirMgdl) + "-" + Profile.toCurrentUnitsString(highTirMgdl) + "):
" + - averageTir7.toText(tir7.size()) + "
" + - averageTir30.toText(tir30.size()) + - "
" + MainApp.gs(R.string.average) + " (" + Profile.toCurrentUnitsString(lowTitMgdl) + "-" + Profile.toCurrentUnitsString(highTitMgdl) + "):
" + - averageTit7.toText(tit7.size()) + "
" + - averageTit30.toText(tit30.size()) + "
" + MainApp.gs(R.string.tir) + ":
" + + toText(tir7) + + "
" + MainApp.gs(R.string.average) + " (" + Profile.toCurrentUnitsString(lowTirMgdl) + "-" + Profile.toCurrentUnitsString(highTirMgdl) + "):
" + + averageTir7.toText(tir7.size()) + "
" + + averageTir30.toText(tir30.size()) + + "
" + MainApp.gs(R.string.average) + " (" + Profile.toCurrentUnitsString(lowTitMgdl) + "-" + Profile.toCurrentUnitsString(highTitMgdl) + "):
" + + averageTit7.toText(tit7.size()) + "
" + + averageTit30.toText(tit30.size()) ) } diff --git a/app/src/main/res/layout/survey_fragment.xml b/app/src/main/res/layout/survey_activity.xml similarity index 100% rename from app/src/main/res/layout/survey_fragment.xml rename to app/src/main/res/layout/survey_activity.xml