diff --git a/database/impl/src/main/java/info/nightscout/database/impl/AppRepository.kt b/database/impl/src/main/java/info/nightscout/database/impl/AppRepository.kt index 3ac673c6af..5879064d62 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/AppRepository.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/AppRepository.kt @@ -127,7 +127,7 @@ import kotlin.math.roundToInt return ret.toString() } - fun clearCachedData(from: Long) { + fun clearCachedTddData(from: Long) { database.totalDailyDoseDao.deleteNewerThan(from, InterfaceIDs.PumpType.CACHE) } @@ -863,7 +863,7 @@ import kotlin.math.roundToInt .subscribeOn(Schedulers.io()) .toWrappedSingle() - fun createTotalDailyDose(tdd: TotalDailyDose) { + fun insertTotalDailyDose(tdd: TotalDailyDose) { database.totalDailyDoseDao.insert(tdd) } diff --git a/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt b/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt index 3908b9b07b..3bdb8dabb7 100644 --- a/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt @@ -41,7 +41,7 @@ class TddCalculatorImpl @Inject constructor( override fun calculate(days: Long): LongSparseArray { var startTime = MidnightTime.calc(dateUtil.now() - T.days(days).msecs()) val endTime = MidnightTime.calc(dateUtil.now()) - val stepSize = T.hours(24).msecs() + //val stepSize = T.hours(24).msecs() // this is not true on DST change val result = LongSparseArray() // Try to load cached values @@ -49,21 +49,24 @@ class TddCalculatorImpl @Inject constructor( val tdd = repository.getCalculatedTotalDailyDose(startTime).blockingGet() if (tdd is ValueWrapper.Existing) result.put(startTime, tdd.value) else break - startTime += stepSize + //startTime += stepSize + startTime = MidnightTime.calc(startTime + T.hours(27).msecs()) // be sure we find correct midnight } if (endTime > startTime) { - for (midnight in startTime until endTime step stepSize) { - val tdd = calculate(midnight, midnight + stepSize) + var midnight = startTime + while (midnight < endTime) { + val tdd = calculate(midnight, midnight + T.hours(24).msecs()) result.put(midnight, tdd) + midnight = MidnightTime.calc(midnight + T.hours(27).msecs()) // be sure we find correct midnight } } for (i in 0 until result.size()) { val tdd = result.valueAt(i) if (tdd.interfaceIDs.pumpType != InterfaceIDs.PumpType.CACHE) { tdd.interfaceIDs.pumpType = InterfaceIDs.PumpType.CACHE - aapsLogger.debug(LTag.CORE, "Storing TDD $tdd") - repository.createTotalDailyDose(tdd) + aapsLogger.debug(LTag.CORE, "Storing TDD ${tdd.timestamp}") + repository.insertTotalDailyDose(tdd) } } return result diff --git a/ui/src/main/java/info/nightscout/ui/activities/StatsActivity.kt b/ui/src/main/java/info/nightscout/ui/activities/StatsActivity.kt index 80724656da..a237278364 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/StatsActivity.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/StatsActivity.kt @@ -2,12 +2,15 @@ package info.nightscout.ui.activities import android.annotation.SuppressLint import android.os.Bundle +import android.os.Handler +import android.os.HandlerThread import android.widget.TextView import dagger.android.support.DaggerAppCompatActivity import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Sources +import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.stats.DexcomTirCalculator import info.nightscout.interfaces.stats.TddCalculator @@ -32,9 +35,11 @@ class StatsActivity : DaggerAppCompatActivity() { @Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var fabricPrivacy: FabricPrivacy @Inject lateinit var rh: ResourceHelper + @Inject lateinit var repository: AppRepository private lateinit var binding: ActivityStatsBinding private val disposable = CompositeDisposable() + private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) @SuppressLint("SetTextI18n") override fun onCreate(savedInstanceState: Bundle?) { @@ -75,14 +80,23 @@ class StatsActivity : DaggerAppCompatActivity() { binding.activity.addView(it) }, fabricPrivacy::logException) - binding.ok.setOnClickListener { finish() } - binding.reset.setOnClickListener { + binding.close.setOnClickListener { finish() } + binding.resetActivity.setOnClickListener { OKDialog.showConfirmation(this, rh.gs(R.string.do_you_want_reset_stats)) { uel.log(Action.STAT_RESET, Sources.Stats) activityMonitor.reset() recreate() } } + binding.resetTdd.setOnClickListener { + OKDialog.showConfirmation(this, rh.gs(R.string.do_you_want_reset_tdd_stats)) { + handler.post { + uel.log(Action.STAT_RESET, Sources.Stats) + repository.clearCachedTddData(0) + runOnUiThread { recreate() } + } + } + } } override fun onPause() { diff --git a/ui/src/main/res/layout/activity_stats.xml b/ui/src/main/res/layout/activity_stats.xml index 705a571bf9..fc1475cd5d 100644 --- a/ui/src/main/res/layout/activity_stats.xml +++ b/ui/src/main/res/layout/activity_stats.xml @@ -61,11 +61,36 @@ app:contentPadding="2dp"> + android:orientation="vertical"> + + + + + + + + + + @@ -130,40 +155,56 @@ app:contentPadding="2dp"> + android:orientation="vertical"> + + + + + + + + + + - + - + - - - + diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 4780c0004c..8da309140f 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -20,6 +20,7 @@ Activity monitor Do you want to reset activity stats? + Do you want to reset TDD stats? Statistics Calculation in progress Invalid age entry