commit
3d4d27439a
74 changed files with 3744 additions and 280 deletions
|
@ -2,6 +2,7 @@ package info.nightscout.androidaps.activities
|
|||
|
||||
import android.os.Bundle
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.ActivityStatsBinding
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.utils.ActivityMonitor
|
||||
|
@ -31,7 +32,7 @@ class StatsActivity : NoSplashAppCompatActivity() {
|
|||
binding.ok.setOnClickListener { finish() }
|
||||
binding.reset.setOnClickListener {
|
||||
OKDialog.showConfirmation(this, resourceHelper.gs(R.string.doyouwantresetstats)) {
|
||||
uel.log("STATS RESET")
|
||||
uel.log(Action.STAT_RESET)
|
||||
activityMonitor.reset()
|
||||
recreate()
|
||||
}
|
||||
|
|
|
@ -9,10 +9,10 @@ import dagger.android.HasAndroidInjector
|
|||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogCalibrationBinding
|
||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
|
||||
import info.nightscout.androidaps.utils.HtmlHelper
|
||||
import info.nightscout.androidaps.utils.XdripCalibrations
|
||||
|
@ -79,7 +79,7 @@ class CalibrationDialog : DialogFragmentWithDate() {
|
|||
if (bg > 0) {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_calibration), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
uel.log("CALIBRATION", d1 = bg)
|
||||
uel.log(Action.CALIBRATION, ValueWithUnit(bg, units))
|
||||
xdripCalibrations.sendIntent(bg)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import info.nightscout.androidaps.data.Profile
|
|||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.transactions.InsertTemporaryTargetAndCancelCurrentTransaction
|
||||
import info.nightscout.androidaps.databinding.DialogCarbsBinding
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
|
@ -221,7 +222,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
|||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.carbs), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
when {
|
||||
activitySelected -> {
|
||||
uel.log("TT ACTIVITY", d1 = activityTT, i1 = activityTTDuration)
|
||||
uel.log(Action.TT, ValueWithUnit(TemporaryTarget.Reason.ACTIVITY.text, Units.TherapyEvent), ValueWithUnit(activityTT, units) , ValueWithUnit(activityTTDuration, Units.M))
|
||||
disposable += repository.runTransactionForResult(InsertTemporaryTargetAndCancelCurrentTransaction(
|
||||
timestamp = System.currentTimeMillis(),
|
||||
duration = TimeUnit.MINUTES.toMillis(activityTTDuration.toLong()),
|
||||
|
@ -237,7 +238,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
|
||||
eatingSoonSelected -> {
|
||||
uel.log("TT EATING SOON", d1 = eatingSoonTT, i1 = eatingSoonTTDuration)
|
||||
uel.log(Action.TT, ValueWithUnit(TemporaryTarget.Reason.EATING_SOON.text, Units.TherapyEvent), ValueWithUnit(eatingSoonTT, units) , ValueWithUnit(eatingSoonTTDuration, Units.M))
|
||||
disposable += repository.runTransactionForResult(InsertTemporaryTargetAndCancelCurrentTransaction(
|
||||
timestamp = System.currentTimeMillis(),
|
||||
duration = TimeUnit.MINUTES.toMillis(eatingSoonTTDuration.toLong()),
|
||||
|
@ -253,7 +254,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
|
||||
hypoSelected -> {
|
||||
uel.log("TT HYPO", d1 = hypoTT, i1 = hypoTTDuration)
|
||||
uel.log(Action.TT, ValueWithUnit(TemporaryTarget.Reason.HYPOGLYCEMIA.text, Units.TherapyEvent), ValueWithUnit(hypoTT, units) , ValueWithUnit(hypoTTDuration, Units.M))
|
||||
disposable += repository.runTransactionForResult(InsertTemporaryTargetAndCancelCurrentTransaction(
|
||||
timestamp = System.currentTimeMillis(),
|
||||
duration = TimeUnit.MINUTES.toMillis(hypoTTDuration.toLong()),
|
||||
|
@ -270,13 +271,12 @@ class CarbsDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
if (carbsAfterConstraints > 0) {
|
||||
if (duration == 0) {
|
||||
uel.log("CARBS", d1 = carbsAfterConstraints.toDouble(), i1 = timeOffset)
|
||||
carbsGenerator.createCarb(carbsAfterConstraints, time, TherapyEvent.Type.CARBS_CORRECTION.text, notes)
|
||||
} else {
|
||||
uel.log("CARBS", d1 = carbsAfterConstraints.toDouble(), i1 = timeOffset, i2 = duration)
|
||||
carbsGenerator.generateCarbs(carbsAfterConstraints, time, duration, notes)
|
||||
nsUpload.uploadEvent(TherapyEvent.Type.NOTE.text, DateUtil.now() - 2000, resourceHelper.gs(R.string.generated_ecarbs_note, carbsAfterConstraints, duration, timeOffset))
|
||||
}
|
||||
uel.log(Action.CARBS, notes, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged), ValueWithUnit(carbsAfterConstraints, Units.G), ValueWithUnit(timeOffset, Units.M, timeOffset != 0), ValueWithUnit(duration, Units.H, duration != 0))
|
||||
}
|
||||
if (useAlarm && carbs > 0 && timeOffset > 0) {
|
||||
carbTimer.scheduleReminder(dateUtil._now() + T.mins(timeOffset.toLong()).msecs())
|
||||
|
|
|
@ -16,6 +16,7 @@ import info.nightscout.androidaps.data.Profile
|
|||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogCareBinding
|
||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
|
@ -59,6 +60,7 @@ class CareDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
|
||||
private var options: EventType = EventType.BGCHECK
|
||||
private var valuesWithUnit = mutableListOf<ValueWithUnit>()
|
||||
|
||||
@StringRes
|
||||
private var event: Int = R.string.none
|
||||
|
@ -200,10 +202,13 @@ class CareDialog : DialogFragmentWithDate() {
|
|||
actions.add(resourceHelper.gs(R.string.treatments_wizard_bg_label) + ": " + Profile.toCurrentUnitsString(profileFunction, binding.bg.value) + " " + resourceHelper.gs(unitResId))
|
||||
therapyEvent.glucoseType = meterType
|
||||
therapyEvent.glucose = binding.bg.value
|
||||
valuesWithUnit.add(ValueWithUnit(binding.bg.value.toDouble(), profileFunction.getUnits()))
|
||||
valuesWithUnit.add(ValueWithUnit(meterType.text, Units.TherapyEvent))
|
||||
}
|
||||
if (options == EventType.NOTE || options == EventType.EXERCISE) {
|
||||
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_duration_label) + ": " + resourceHelper.gs(R.string.format_mins, binding.duration.value.toInt()))
|
||||
therapyEvent.duration = T.mins(binding.duration.value.toLong()).msecs()
|
||||
valuesWithUnit.add(ValueWithUnit(binding.duration.value.toInt(), Units.M, !binding.duration.value.equals(0.0)))
|
||||
}
|
||||
val notes = binding.notesLayout.notes.text.toString()
|
||||
if (notes.isNotEmpty()) {
|
||||
|
@ -211,8 +216,7 @@ class CareDialog : DialogFragmentWithDate() {
|
|||
therapyEvent.note = notes
|
||||
}
|
||||
|
||||
if (eventTimeChanged)
|
||||
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime))
|
||||
if (eventTimeChanged) actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime))
|
||||
|
||||
therapyEvent.enteredBy = enteredBy
|
||||
|
||||
|
@ -223,8 +227,9 @@ class CareDialog : DialogFragmentWithDate() {
|
|||
}, {
|
||||
aapsLogger.error(LTag.BGSOURCE, "Error while saving therapy event", it)
|
||||
})
|
||||
|
||||
uel.log("CAREPORTAL", therapyEvent.type.text)
|
||||
valuesWithUnit.add(0, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged))
|
||||
valuesWithUnit.add(1, ValueWithUnit(therapyEvent.type.text, Units.TherapyEvent))
|
||||
uel.log(Action.CAREPORTAL, notes, valuesWithUnit)
|
||||
}, null)
|
||||
}
|
||||
return true
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.view.ViewGroup
|
|||
import com.google.common.base.Joiner
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogExtendedbolusBinding
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
|
@ -87,7 +88,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
|
|||
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.extended_bolus), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
uel.log("EXTENDED BOLUS", d1 = insulinAfterConstraint, i1 = durationInMinutes)
|
||||
uel.log(Action.EXTENDED_BOLUS, ValueWithUnit(insulinAfterConstraint, Units.U), ValueWithUnit(durationInMinutes, Units.M))
|
||||
commandQueue.extendedBolus(insulinAfterConstraint, durationInMinutes, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
|
|
|
@ -12,6 +12,7 @@ import info.nightscout.androidaps.data.DetailedBolusInfo
|
|||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogFillBinding
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
|
@ -135,11 +136,11 @@ class FillDialog : DialogFragmentWithDate() {
|
|||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.primefill), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
if (insulinAfterConstraints > 0) {
|
||||
uel.log("PRIME BOLUS", d1 = insulinAfterConstraints)
|
||||
uel.log(Action.PRIME_BOLUS, notes, ValueWithUnit(insulinAfterConstraints, Units.U, insulinAfterConstraints != 0.0))
|
||||
requestPrimeBolus(insulinAfterConstraints, notes)
|
||||
}
|
||||
if (siteChange) {
|
||||
uel.log("SITE CHANGE")
|
||||
uel.log(Action.CAREPORTAL, notes, ValueWithUnit(TherapyEvent.Type.CANNULA_CHANGE.text, Units.TherapyEvent))
|
||||
disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
|
||||
timestamp = eventTime,
|
||||
type = TherapyEvent.Type.CANNULA_CHANGE,
|
||||
|
@ -153,7 +154,7 @@ class FillDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
if (insulinChange) {
|
||||
// add a second for case of both checked
|
||||
uel.log("INSULIN CHANGE")
|
||||
uel.log(Action.CAREPORTAL, notes, ValueWithUnit(TherapyEvent.Type.INSULIN_CHANGE.text, Units.TherapyEvent))
|
||||
disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
|
||||
timestamp = eventTime + 1000,
|
||||
type = TherapyEvent.Type.INSULIN_CHANGE,
|
||||
|
|
|
@ -17,6 +17,7 @@ import info.nightscout.androidaps.data.Profile
|
|||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.transactions.InsertTemporaryTargetAndCancelCurrentTransaction
|
||||
import info.nightscout.androidaps.databinding.DialogInsulinBinding
|
||||
import info.nightscout.androidaps.db.Source
|
||||
|
@ -188,7 +189,7 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.bolus), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
if (eatingSoonChecked) {
|
||||
uel.log("TT EATING SOON", d1 = eatingSoonTT, i1 = eatingSoonTTDuration)
|
||||
uel.log(Action.TT, notes, ValueWithUnit(TemporaryTarget.Reason.EATING_SOON.text, Units.TherapyEvent), ValueWithUnit(eatingSoonTT, units), ValueWithUnit(eatingSoonTTDuration, Units.M))
|
||||
disposable += repository.runTransactionForResult(InsertTemporaryTargetAndCancelCurrentTransaction(
|
||||
timestamp = System.currentTimeMillis(),
|
||||
duration = TimeUnit.MINUTES.toMillis(eatingSoonTTDuration.toLong()),
|
||||
|
@ -210,11 +211,11 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
detailedBolusInfo.source = Source.USER
|
||||
detailedBolusInfo.notes = notes
|
||||
if (recordOnlyChecked) {
|
||||
uel.log("BOLUS RECORD", d1 = insulinAfterConstraints, i1 = timeOffset)
|
||||
uel.log(Action.BOLUS_RECORD, notes, ValueWithUnit(insulinAfterConstraints, Units.U), ValueWithUnit(timeOffset, Units.M, timeOffset!= 0))
|
||||
detailedBolusInfo.date = time
|
||||
activePlugin.activeTreatments.addToHistoryTreatment(detailedBolusInfo, false)
|
||||
} else {
|
||||
uel.log("BOLUS", d1 = insulinAfterConstraints)
|
||||
uel.log(Action.BOLUS, notes, ValueWithUnit(insulinAfterConstraints, Units.U))
|
||||
detailedBolusInfo.date = DateUtil.now()
|
||||
commandQueue.bolus(detailedBolusInfo, object : Callback() {
|
||||
override fun run() {
|
||||
|
|
|
@ -12,6 +12,7 @@ import androidx.fragment.app.FragmentManager
|
|||
import dagger.android.support.DaggerDialogFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogLoopBinding
|
||||
import info.nightscout.androidaps.events.EventPreferenceChange
|
||||
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||
|
@ -238,28 +239,28 @@ class LoopDialog : DaggerDialogFragment() {
|
|||
val profile = profileFunction.getProfile() ?: return true
|
||||
when (v.id) {
|
||||
R.id.overview_closeloop -> {
|
||||
uel.log("CLOSED LOOP MODE")
|
||||
uel.log(Action.CLOSED_LOOP_MODE)
|
||||
sp.putString(R.string.key_aps_mode, "closed")
|
||||
rxBus.send(EventPreferenceChange(resourceHelper.gs(R.string.closedloop)))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_lgsloop -> {
|
||||
uel.log("LGS LOOP MODE")
|
||||
uel.log(Action.LGS_LOOP_MODE)
|
||||
sp.putString(R.string.key_aps_mode, "lgs")
|
||||
rxBus.send(EventPreferenceChange(resourceHelper.gs(R.string.lowglucosesuspend)))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_openloop -> {
|
||||
uel.log("OPEN LOOP MODE")
|
||||
uel.log(Action.OPEN_LOOP_MODE)
|
||||
sp.putString(R.string.key_aps_mode, "open")
|
||||
rxBus.send(EventPreferenceChange(resourceHelper.gs(R.string.lowglucosesuspend)))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_disable -> {
|
||||
uel.log("LOOP DISABLED")
|
||||
uel.log(Action.LOOP_DISABLED)
|
||||
loopPlugin.setPluginEnabled(PluginType.LOOP, false)
|
||||
loopPlugin.setFragmentVisible(PluginType.LOOP, false)
|
||||
configBuilderPlugin.storeSettings("DisablingLoop")
|
||||
|
@ -276,7 +277,7 @@ class LoopDialog : DaggerDialogFragment() {
|
|||
}
|
||||
|
||||
R.id.overview_enable -> {
|
||||
uel.log("LOOP ENABLED")
|
||||
uel.log(Action.LOOP_ENABLED)
|
||||
loopPlugin.setPluginEnabled(PluginType.LOOP, true)
|
||||
loopPlugin.setFragmentVisible(PluginType.LOOP, true)
|
||||
configBuilderPlugin.storeSettings("EnablingLoop")
|
||||
|
@ -286,7 +287,7 @@ class LoopDialog : DaggerDialogFragment() {
|
|||
}
|
||||
|
||||
R.id.overview_resume, R.id.overview_reconnect -> {
|
||||
uel.log("RESUME")
|
||||
uel.log(if (v.id==R.id.overview_resume) Action.RESUME else Action.RECONNECT )
|
||||
loopPlugin.suspendTo(0L)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
|
@ -302,49 +303,49 @@ class LoopDialog : DaggerDialogFragment() {
|
|||
}
|
||||
|
||||
R.id.overview_suspend_1h -> {
|
||||
uel.log("SUSPEND 1h")
|
||||
uel.log(Action.SUSPEND, ValueWithUnit(1, Units.H))
|
||||
loopPlugin.suspendLoop(60)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_suspend_2h -> {
|
||||
uel.log("SUSPEND 2h")
|
||||
uel.log(Action.SUSPEND, ValueWithUnit(2, Units.H))
|
||||
loopPlugin.suspendLoop(120)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_suspend_3h -> {
|
||||
uel.log("SUSPEND 3h")
|
||||
uel.log(Action.SUSPEND, ValueWithUnit(3, Units.H))
|
||||
loopPlugin.suspendLoop(180)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_suspend_10h -> {
|
||||
uel.log("SUSPEND 10h")
|
||||
uel.log(Action.SUSPEND, ValueWithUnit(10, Units.H))
|
||||
loopPlugin.suspendLoop(600)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_disconnect_15m -> {
|
||||
uel.log("DISCONNECT 15m")
|
||||
uel.log(Action.DISCONNECT, ValueWithUnit(15, Units.M))
|
||||
loopPlugin.disconnectPump(15, profile)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_disconnect_30m -> {
|
||||
uel.log("DISCONNECT 30m")
|
||||
uel.log(Action.DISCONNECT, ValueWithUnit(30, Units.M))
|
||||
loopPlugin.disconnectPump(30, profile)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_disconnect_1h -> {
|
||||
uel.log("DISCONNECT 1h")
|
||||
uel.log(Action.DISCONNECT, ValueWithUnit(1, Units.H))
|
||||
loopPlugin.disconnectPump(60, profile)
|
||||
sp.putBoolean(R.string.key_objectiveusedisconnect, true)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
|
@ -352,14 +353,14 @@ class LoopDialog : DaggerDialogFragment() {
|
|||
}
|
||||
|
||||
R.id.overview_disconnect_2h -> {
|
||||
uel.log("DISCONNECT 2h")
|
||||
uel.log(Action.DISCONNECT, ValueWithUnit(2, Units.H))
|
||||
loopPlugin.disconnectPump(120, profile)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
}
|
||||
|
||||
R.id.overview_disconnect_3h -> {
|
||||
uel.log("DISCONNECT 3h")
|
||||
uel.log(Action.DISCONNECT, ValueWithUnit(3, Units.H))
|
||||
loopPlugin.disconnectPump(180, profile)
|
||||
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||
return true
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.widget.ArrayAdapter
|
|||
import com.google.common.base.Joiner
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogProfileswitchBinding
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||
|
@ -124,7 +125,7 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
|
|||
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_profileswitch), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
uel.log("PROFILE SWITCH", d1 = percent.toDouble(), i1 = timeShift, i2 = duration)
|
||||
uel.log(Action.PROFILE_SWITCH, notes, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged), ValueWithUnit(profile, Units.None), ValueWithUnit(percent, Units.Percent), ValueWithUnit(timeShift, Units.H, timeShift != 0), ValueWithUnit(duration, Units.M, duration != 0))
|
||||
treatmentsPlugin.doProfileSwitch(profileStore, profile, duration, percent, timeShift, eventTime)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.view.ViewGroup
|
|||
import com.google.common.base.Joiner
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogTempbasalBinding
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
|
@ -125,10 +126,10 @@ class TempBasalDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
}
|
||||
if (isPercentPump) {
|
||||
uel.log("TEMP BASAL", d1 = percent.toDouble(), i1 = durationInMinutes)
|
||||
uel.log(Action.TEMP_BASAL, ValueWithUnit(percent, Units.Percent), ValueWithUnit(durationInMinutes, Units.M))
|
||||
commandQueue.tempBasalPercent(percent, durationInMinutes, true, profile, callback)
|
||||
} else {
|
||||
uel.log("TEMP BASAL", d1 = absolute, i1 = durationInMinutes)
|
||||
uel.log(Action.TEMP_BASAL, ValueWithUnit(absolute, Units.U), ValueWithUnit(durationInMinutes, Units.M))
|
||||
commandQueue.tempBasalAbsolute(absolute, durationInMinutes, true, profile, callback)
|
||||
}
|
||||
})
|
||||
|
|
|
@ -13,6 +13,7 @@ import info.nightscout.androidaps.data.Profile
|
|||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.ValueWrapper
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.transactions.CancelCurrentTemporaryTargetIfAnyTransaction
|
||||
import info.nightscout.androidaps.database.transactions.InsertTemporaryTargetAndCancelCurrentTransaction
|
||||
import info.nightscout.androidaps.databinding.DialogTemptargetBinding
|
||||
|
@ -145,6 +146,10 @@ class TempTargetDialog : DialogFragmentWithDate() {
|
|||
binding.duration.value = defaultValueHelper.determineHypoTTDuration().toDouble()
|
||||
binding.reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.hypo)))
|
||||
}
|
||||
|
||||
R.id.cancel -> {
|
||||
binding.duration.value = 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,7 +162,7 @@ class TempTargetDialog : DialogFragmentWithDate() {
|
|||
override fun submit(): Boolean {
|
||||
if (_binding == null) return false
|
||||
val actions: LinkedList<String> = LinkedList()
|
||||
val reason = binding.reason.selectedItem?.toString() ?: return false
|
||||
var reason = binding.reason.selectedItem?.toString() ?: return false
|
||||
val unitResId = if (profileFunction.getUnits() == Constants.MGDL) R.string.mgdl else R.string.mmol
|
||||
val target = binding.temptarget.value
|
||||
val duration = binding.duration.value.toInt()
|
||||
|
@ -167,13 +172,21 @@ class TempTargetDialog : DialogFragmentWithDate() {
|
|||
actions.add(resourceHelper.gs(R.string.duration) + ": " + resourceHelper.gs(R.string.format_mins, duration))
|
||||
} else {
|
||||
actions.add(resourceHelper.gs(R.string.stoptemptarget))
|
||||
reason = resourceHelper.gs(R.string.stoptemptarget)
|
||||
}
|
||||
if (eventTimeChanged)
|
||||
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime))
|
||||
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_temporarytarget), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
uel.log("TT", d1 = target, i1 = duration)
|
||||
val units = profileFunction.getUnits()
|
||||
when(reason) {
|
||||
resourceHelper.gs(R.string.eatingsoon) -> uel.log(Action.TT, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged), ValueWithUnit(TemporaryTarget.Reason.EATING_SOON.text, Units.TherapyEvent), ValueWithUnit(target, units), ValueWithUnit(duration, Units.M))
|
||||
resourceHelper.gs(R.string.activity) -> uel.log(Action.TT, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged), ValueWithUnit(TemporaryTarget.Reason.ACTIVITY.text, Units.TherapyEvent), ValueWithUnit(target, units), ValueWithUnit(duration, Units.M))
|
||||
resourceHelper.gs(R.string.hypo) -> uel.log(Action.TT, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged), ValueWithUnit(TemporaryTarget.Reason.HYPOGLYCEMIA.text, Units.TherapyEvent), ValueWithUnit(target, units), ValueWithUnit(duration, Units.M))
|
||||
resourceHelper.gs(R.string.manual) -> uel.log(Action.TT, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged), ValueWithUnit(TemporaryTarget.Reason.CUSTOM.text, Units.TherapyEvent), ValueWithUnit(target, units), ValueWithUnit(duration, Units.M))
|
||||
resourceHelper.gs(R.string.stoptemptarget) -> uel.log(Action.CANCEL_TT, ValueWithUnit(eventTime, Units.Timestamp, eventTimeChanged))
|
||||
}
|
||||
if (target == 0.0 || duration == 0) {
|
||||
disposable += repository.runTransactionForResult(CancelCurrentTemporaryTargetIfAnyTransaction(eventTime))
|
||||
.subscribe({ result ->
|
||||
|
@ -200,6 +213,7 @@ class TempTargetDialog : DialogFragmentWithDate() {
|
|||
aapsLogger.error(LTag.BGSOURCE, "Error while saving temporary target", it)
|
||||
})
|
||||
}
|
||||
|
||||
if (duration == 10) sp.putBoolean(R.string.key_objectiveusetemptarget, true)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import info.nightscout.androidaps.R
|
|||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.data.DetailedBolusInfo
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.DialogTreatmentBinding
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
|
@ -129,7 +130,7 @@ class TreatmentDialog : DialogFragmentWithDate() {
|
|||
if (insulinAfterConstraints > 0 || carbsAfterConstraints > 0) {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_treatment_label), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||
uel.log("TREATMENT", d1 = insulin, i1 = carbs)
|
||||
uel.log(Action.TREATMENT, ValueWithUnit(insulin, Units.U, insulin != 0.0), ValueWithUnit(carbs, Units.G, carbs != 0))
|
||||
val detailedBolusInfo = DetailedBolusInfo()
|
||||
if (insulinAfterConstraints == 0.0) detailedBolusInfo.eventType = TherapyEvent.Type.CARBS_CORRECTION.text
|
||||
if (carbsAfterConstraints == 0) detailedBolusInfo.eventType = TherapyEvent.Type.CORRECTION_BOLUS.text
|
||||
|
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.configBuilder
|
|||
import androidx.fragment.app.FragmentActivity
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.events.EventAppInitialized
|
||||
import info.nightscout.androidaps.events.EventConfigBuilderChange
|
||||
import info.nightscout.androidaps.events.EventRebuildTabs
|
||||
|
@ -142,7 +143,7 @@ class ConfigBuilderPlugin @Inject constructor(
|
|||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.allow_hardware_pump_text), Runnable {
|
||||
performPluginSwitch(changedPlugin, newState, type)
|
||||
sp.putBoolean("allow_hardware_pump", true)
|
||||
uel.log("HW PUMP ALLOWED")
|
||||
uel.log(Action.HW_PUMP_ALLOWED)
|
||||
aapsLogger.debug(LTag.PUMP, "First time HW pump allowed!")
|
||||
}, Runnable {
|
||||
rxBus.send(EventConfigBuilderUpdateGui())
|
||||
|
|
|
@ -17,6 +17,7 @@ import androidx.recyclerview.widget.LinearSmoothScroller
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.ObjectivesFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.ObjectivesItemBinding
|
||||
import info.nightscout.androidaps.dialogs.NtpProgressDialog
|
||||
|
@ -307,7 +308,7 @@ class ObjectivesFragment : DaggerFragment() {
|
|||
holder.binding.unstart.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.objectives), resourceHelper.gs(R.string.doyouwantresetstart), Runnable {
|
||||
uel.log("OBJECTIVE UNSTARTED", i1 = position + 1)
|
||||
uel.log(Action.OBJECTIVE_UNSTARTED, ValueWithUnit(position + 1, Units.None))
|
||||
objective.startedOn = 0
|
||||
scrollToCurrentObjective()
|
||||
rxBus.send(EventObjectivesUpdateGui())
|
||||
|
|
|
@ -7,6 +7,7 @@ import dagger.android.HasAndroidInjector
|
|||
import info.nightscout.androidaps.BuildConfig
|
||||
import info.nightscout.androidaps.Config
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.interfaces.*
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
|
@ -142,7 +143,7 @@ class ObjectivesPlugin @Inject constructor(
|
|||
sp.putLong("Objectives_" + "auto" + "_accomplished", DateUtil.now())
|
||||
setupObjectives()
|
||||
OKDialog.show(activity, resourceHelper.gs(R.string.objectives), resourceHelper.gs(R.string.codeaccepted))
|
||||
uel.log("OBJECTIVES SKIPPED")
|
||||
uel.log(Action.OBJECTIVES_SKIPPED)
|
||||
} else {
|
||||
OKDialog.show(activity, resourceHelper.gs(R.string.objectives), resourceHelper.gs(R.string.codeinvalid))
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import info.nightscout.androidaps.Constants
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.activities.TDDStatsActivity
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.dialogs.*
|
||||
import info.nightscout.androidaps.events.*
|
||||
import info.nightscout.androidaps.historyBrowser.HistoryBrowseActivity
|
||||
|
@ -154,7 +155,7 @@ class ActionsFragment : DaggerFragment() {
|
|||
}
|
||||
extendedBolusCancel?.setOnClickListener {
|
||||
if (activePlugin.activeTreatments.isInHistoryExtendedBolusInProgress) {
|
||||
uel.log("CANCEL EXTENDED BOLUS")
|
||||
uel.log(Action.CANCEL_EXTENDED_BOLUS)
|
||||
commandQueue.cancelExtended(object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
|
@ -169,7 +170,7 @@ class ActionsFragment : DaggerFragment() {
|
|||
}
|
||||
cancelTempBasal?.setOnClickListener {
|
||||
if (activePlugin.activeTreatments.isTempBasalInProgress) {
|
||||
uel.log("CANCEL TEMP BASAL")
|
||||
uel.log(Action.CANCEL_TEMP_BASAL)
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
|
|
|
@ -15,6 +15,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.FoodFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.FoodItemBinding
|
||||
import info.nightscout.androidaps.events.EventFoodDatabaseChanged
|
||||
|
@ -216,7 +217,7 @@ class FoodFragment : DaggerFragment() {
|
|||
val food = v.tag as Food
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.confirmation), resourceHelper.gs(R.string.removerecord) + "\n" + food.name, DialogInterface.OnClickListener { _: DialogInterface?, _: Int ->
|
||||
uel.log("FOOD REMOVED", food.name)
|
||||
uel.log(Action.FOOD_REMOVED, food.name)
|
||||
if (food._id != null && food._id != "") {
|
||||
nsUpload.removeFoodFromNS(food._id)
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@ import info.nightscout.androidaps.BuildConfig
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.DaggerAppCompatActivityWithResult
|
||||
import info.nightscout.androidaps.activities.PreferencesActivity
|
||||
import info.nightscout.androidaps.database.entities.UserEntry
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.events.EventAppExit
|
||||
import info.nightscout.androidaps.interfaces.ConfigInterface
|
||||
import info.nightscout.androidaps.interfaces.ImportExportPrefsInterface
|
||||
|
@ -34,6 +36,7 @@ import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
|||
import info.nightscout.androidaps.utils.protection.PasswordCheck
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
import io.reactivex.Single
|
||||
import java.io.File
|
||||
import java.io.FileNotFoundException
|
||||
import java.io.IOException
|
||||
|
@ -344,7 +347,7 @@ class ImportExportPrefs @Inject constructor(
|
|||
private fun restartAppAfterImport(context: Context) {
|
||||
sp.putBoolean(R.string.key_setupwizard_processed, true)
|
||||
OKDialog.show(context, resourceHelper.gs(R.string.setting_imported), resourceHelper.gs(R.string.restartingapp), Runnable {
|
||||
uel.log("IMPORT")
|
||||
uel.log(Action.IMPORT_SETTINGS)
|
||||
log.debug(LTag.CORE, "Exiting")
|
||||
rxBus.send(EventAppExit())
|
||||
if (context is AppCompatActivity) {
|
||||
|
@ -354,4 +357,22 @@ class ImportExportPrefs @Inject constructor(
|
|||
exitProcess(0)
|
||||
})
|
||||
}
|
||||
|
||||
override fun exportUserEntriesCsv(activity: FragmentActivity, listEntries: Single<List<UserEntry>>) {
|
||||
val entries = listEntries.blockingGet()
|
||||
prefFileList.ensureExportDirExists()
|
||||
val newFile = prefFileList.newExportXmlFile()
|
||||
//log.debug("XXXXX " + classicPrefsFormat.UserEntriesToCsv(entries))
|
||||
|
||||
try {
|
||||
classicPrefsFormat.saveCsv(newFile, entries)
|
||||
ToastUtils.okToast(activity, resourceHelper.gs(R.string.ue_exported))
|
||||
} catch (e: FileNotFoundException) {
|
||||
ToastUtils.errorToast(activity, resourceHelper.gs(R.string.filenotfound) + " " + newFile)
|
||||
log.error(LTag.CORE, "Unhandled exception", e)
|
||||
} catch (e: IOException) {
|
||||
ToastUtils.errorToast(activity, e.message)
|
||||
log.error(LTag.CORE, "Unhandled exception", e)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ import android.view.ViewGroup
|
|||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.MaintenanceFragmentBinding
|
||||
import info.nightscout.androidaps.events.EventNewBG
|
||||
import info.nightscout.androidaps.interfaces.DatabaseHelperInterface
|
||||
|
@ -57,13 +58,13 @@ class MaintenanceFragment : DaggerFragment() {
|
|||
super.onViewCreated(view, savedInstanceState)
|
||||
binding.logSend.setOnClickListener { maintenancePlugin.sendLogs() }
|
||||
binding.logDelete.setOnClickListener {
|
||||
uel.log("DELETE LOGS")
|
||||
uel.log(Action.DELETE_LOGS)
|
||||
maintenancePlugin.deleteLogs()
|
||||
}
|
||||
binding.navResetdb.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.maintenance), resourceHelper.gs(R.string.reset_db_confirm), Runnable {
|
||||
uel.log("RESET DATABASES")
|
||||
uel.log(Action.RESET_DATABASES)
|
||||
compositeDisposable.add(
|
||||
fromAction {
|
||||
databaseHelper.resetDatabases()
|
||||
|
@ -84,20 +85,28 @@ class MaintenanceFragment : DaggerFragment() {
|
|||
}
|
||||
}
|
||||
binding.navExport.setOnClickListener {
|
||||
uel.log("EXPORT SETTINGS")
|
||||
uel.log(Action.EXPORT_SETTINGS)
|
||||
// start activity for checking permissions...
|
||||
importExportPrefs.verifyStoragePermissions(this) {
|
||||
importExportPrefs.exportSharedPreferences(this)
|
||||
}
|
||||
}
|
||||
binding.navImport.setOnClickListener {
|
||||
uel.log("IMPORT SETTINGS")
|
||||
uel.log(Action.IMPORT_SETTINGS)
|
||||
// start activity for checking permissions...
|
||||
importExportPrefs.verifyStoragePermissions(this) {
|
||||
importExportPrefs.importSharedPreferences(this)
|
||||
}
|
||||
}
|
||||
binding.navLogsettings.setOnClickListener { startActivity(Intent(activity, LogSettingActivity::class.java)) }
|
||||
binding.exportCsv.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.ue_export_to_csv) + "?") {
|
||||
uel.log(Action.EXPORT_CSV)
|
||||
importExportPrefs.exportUserEntriesCsv(activity, repository.getAllUserEntries())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
|
|
|
@ -16,6 +16,8 @@ import javax.inject.Inject;
|
|||
|
||||
import dagger.android.support.DaggerFragment;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.database.entities.UserEntry;
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*;
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientNewLog;
|
||||
|
@ -123,7 +125,7 @@ public class NSClientFragment extends DaggerFragment implements View.OnClickList
|
|||
break;
|
||||
case R.id.nsclientinternal_clearqueue:
|
||||
OKDialog.showConfirmation(getContext(), resourceHelper.gs(R.string.nsclientinternal), resourceHelper.gs(R.string.clearqueueconfirm), () -> {
|
||||
uel.log("NS QUEUE CLEARED", "", 0.0, 0.0, 0, 0);
|
||||
uel.log(Action.NS_QUEUE_CLEARED);
|
||||
uploadQueue.clearQueue();
|
||||
updateGui();
|
||||
fabricPrivacy.logCustom("NSClientClearQueue");
|
||||
|
@ -139,7 +141,7 @@ public class NSClientFragment extends DaggerFragment implements View.OnClickList
|
|||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
switch (buttonView.getId()) {
|
||||
case R.id.nsclientinternal_paused:
|
||||
uel.log("NS PAUSED", "", 0.0, 0.0, isChecked ? 1 : 0, 0);
|
||||
uel.log(isChecked ? Action.NS_PAUSED : Action.NS_RESUME);
|
||||
nsClientPlugin.pause(isChecked);
|
||||
updateGui();
|
||||
fabricPrivacy.logCustom("NSClientPause");
|
||||
|
|
|
@ -31,6 +31,7 @@ import info.nightscout.androidaps.R;
|
|||
import info.nightscout.androidaps.database.AppRepository;
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget;
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent;
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*;
|
||||
import info.nightscout.androidaps.database.transactions.SyncTemporaryTargetTransaction;
|
||||
import info.nightscout.androidaps.database.transactions.SyncTherapyEventTransaction;
|
||||
import info.nightscout.androidaps.events.EventAppExit;
|
||||
|
@ -427,12 +428,12 @@ public class NSClientPlugin extends PluginBase {
|
|||
// room Temporary target
|
||||
TemporaryTarget temporaryTarget = temporaryTargetFromNsIdForInvalidating(_id);
|
||||
disposable.add(repository.runTransactionForResult(new SyncTemporaryTargetTransaction(temporaryTarget)).subscribe(
|
||||
result -> result.getInvalidated().forEach(record -> uel.log("TT DELETED FROM NS", record.getReason().getText(), record.getLowTarget(), record.getHighTarget(), (int) record.getDuration(), 0)),
|
||||
result -> result.getInvalidated().forEach(record -> uel.log(Action.TT_DELETED_FROM_NS, new ValueWithUnit(record.getReason().getText(), Units.TherapyEvent), new ValueWithUnit(record.getLowTarget(), Units.Mg_Dl, true), new ValueWithUnit(record.getHighTarget(), Units.Mg_Dl, record.getLowTarget() != record.getHighTarget()), new ValueWithUnit((int) record.getDuration()/60000, Units.M, record.getDuration() != 0))),
|
||||
error -> aapsLogger.error(LTag.DATABASE, "Error while removing temporary target", error)));
|
||||
// room Therapy Event
|
||||
TherapyEvent therapyEvent = therapyEventFromNsIdForInvalidating(_id);
|
||||
disposable.add(repository.runTransactionForResult(new SyncTherapyEventTransaction(therapyEvent)).subscribe(
|
||||
result -> result.getInvalidated().forEach(record -> uel.log("CAREPORTAL EVENT DELETED FROM NS", record.getType().getText(), 0.0, 0.0, 0, 0)),
|
||||
result -> result.getInvalidated().forEach(record -> uel.log(Action.CAREPORTAL_DELETED_FROM_NS, record.getNote() , new ValueWithUnit(record.getTimestamp(), Units.Timestamp, true), new ValueWithUnit(record.getType().getText(), Units.TherapyEvent))),
|
||||
error -> aapsLogger.error(LTag.DATABASE, "Error while removing therapy event", error)));
|
||||
// new DB model
|
||||
EventNsTreatment evtTreatment = new EventNsTreatment(EventNsTreatment.Companion.getREMOVE(), json);
|
||||
|
@ -462,9 +463,9 @@ public class NSClientPlugin extends PluginBase {
|
|||
disposable.add(repository.runTransactionForResult(new SyncTemporaryTargetTransaction(temporaryTarget))
|
||||
.subscribe(
|
||||
result -> {
|
||||
result.getInserted().forEach(record -> uel.log("TT FROM NS", record.getReason().getText(), record.getLowTarget(), record.getHighTarget(), (int) record.getDuration(), 0));
|
||||
result.getInvalidated().forEach(record -> uel.log("TT DELETED FROM NS", record.getReason().getText(), record.getLowTarget(), record.getHighTarget(), (int) record.getDuration(), 0));
|
||||
result.getEnded().forEach(record -> uel.log("TT CANCELED FROM NS", record.getReason().getText(), record.getLowTarget(), record.getHighTarget(), (int) record.getDuration(), 0));
|
||||
result.getInserted().forEach(record -> uel.log(Action.TT_FROM_NS, new ValueWithUnit(record.getReason().getText(), Units.TherapyEvent), new ValueWithUnit(record.getLowTarget(), Units.Mg_Dl, true), new ValueWithUnit(record.getHighTarget(), Units.Mg_Dl, record.getLowTarget() != record.getHighTarget()), new ValueWithUnit((int) record.getDuration()/60000, Units.M, true)));
|
||||
result.getInvalidated().forEach(record -> uel.log(Action.TT_DELETED_FROM_NS, new ValueWithUnit(record.getReason().getText(), Units.TherapyEvent), new ValueWithUnit(record.getLowTarget(), Units.Mg_Dl, true), new ValueWithUnit(record.getHighTarget(), Units.Mg_Dl, record.getLowTarget() != record.getHighTarget()), new ValueWithUnit((int) record.getDuration()/60000, Units.M, true)));
|
||||
result.getEnded().forEach(record -> uel.log(Action.TT_CANCELED_FROM_NS, new ValueWithUnit(record.getReason().getText(), Units.TherapyEvent), new ValueWithUnit(record.getLowTarget(), Units.Mg_Dl, true), new ValueWithUnit(record.getHighTarget(), Units.Mg_Dl, record.getLowTarget() != record.getHighTarget()), new ValueWithUnit((int) record.getDuration()/60000, Units.M, true)));
|
||||
},
|
||||
error -> aapsLogger.error(LTag.DATABASE, "Error while saving temporary target", error)));
|
||||
} else {
|
||||
|
@ -492,8 +493,8 @@ public class NSClientPlugin extends PluginBase {
|
|||
disposable.add(repository.runTransactionForResult(new SyncTherapyEventTransaction(therapyEvent))
|
||||
.subscribe(
|
||||
result -> {
|
||||
result.getInserted().forEach(record -> uel.log("CAREPORTAL EVENT NS", record.getType().getText(), 0.0, 0.0, 0, 0));
|
||||
result.getInvalidated().forEach(record -> uel.log("CAREPORTAL EVENT DELETED FROM NS", "", 0.0, 0.0, (int) record.getTimestamp(), 0));
|
||||
result.getInserted().forEach(record -> uel.log(Action.CAREPORTAL_FROM_NS, record.getNote() , new ValueWithUnit(record.getTimestamp(), Units.Timestamp, true), new ValueWithUnit(record.getType().getText(), Units.TherapyEvent)));
|
||||
result.getInvalidated().forEach(record -> uel.log(Action.CAREPORTAL_DELETED_FROM_NS, record.getNote() , new ValueWithUnit(record.getTimestamp(), Units.Timestamp, true), new ValueWithUnit(record.getType().getText(), Units.TherapyEvent)));
|
||||
},
|
||||
error -> aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", error)));
|
||||
} else {
|
||||
|
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.general.nsclient.data
|
|||
import android.content.Context
|
||||
import info.nightscout.androidaps.Config
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
|
@ -235,7 +236,7 @@ class NSSettingsStatus @Inject constructor(
|
|||
getExtendedWarnValue("sage", "urgent")?.let { sp.putDouble(R.string.key_statuslights_sage_critical, it) }
|
||||
getExtendedWarnValue("bage", "warn")?.let { sp.putDouble(R.string.key_statuslights_bage_warning, it) }
|
||||
getExtendedWarnValue("bage", "urgent")?.let { sp.putDouble(R.string.key_statuslights_bage_critical, it) }
|
||||
uel.log("NS SETTINGS COPIED")
|
||||
uel.log(Action.NS_SETTINGS_COPIED)
|
||||
}
|
||||
|
||||
if (context != null) OKDialog.showConfirmation(context, resourceHelper.gs(R.string.statuslights), resourceHelper.gs(R.string.copyexistingvalues), action)
|
||||
|
|
|
@ -31,6 +31,7 @@ import info.nightscout.androidaps.data.Profile
|
|||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.ValueWrapper
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.interfaces.end
|
||||
import info.nightscout.androidaps.databinding.OverviewFragmentBinding
|
||||
import info.nightscout.androidaps.dialogs.*
|
||||
|
@ -350,7 +351,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
|||
protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable {
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.tempbasal_label), lastRun.constraintsProcessed?.toSpanned()
|
||||
?: "".toSpanned(), {
|
||||
uel.log("ACCEPT TEMP BASAL")
|
||||
uel.log(Action.ACCEPTS_TEMP_BASAL)
|
||||
binding.buttonsLayout.acceptTempButton.visibility = View.GONE
|
||||
(context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).cancel(Constants.notificationID)
|
||||
rxBus.send(EventWearInitiateAction("cancelChangeRequest"))
|
||||
|
|
|
@ -17,6 +17,7 @@ import info.nightscout.androidaps.data.DetailedBolusInfo
|
|||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.transactions.CancelCurrentTemporaryTargetIfAnyTransaction
|
||||
import info.nightscout.androidaps.database.transactions.InsertTemporaryTargetAndCancelCurrentTransaction
|
||||
import info.nightscout.androidaps.db.Source
|
||||
|
@ -348,7 +349,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
receivedSms.processed = true
|
||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||
override fun run() {
|
||||
uel.log("SMS LOOP DISABLE")
|
||||
uel.log(Action.SMS_LOOP_DISABLED)
|
||||
loopPlugin.setPluginEnabled(PluginType.LOOP, false)
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
override fun run() {
|
||||
|
@ -372,7 +373,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
receivedSms.processed = true
|
||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||
override fun run() {
|
||||
uel.log("SMS LOOP ENABLE")
|
||||
uel.log(Action.SMS_LOOP_ENABLED)
|
||||
loopPlugin.setPluginEnabled(PluginType.LOOP, true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_loophasbeenenabled)))
|
||||
rxBus.send(EventRefreshOverview("SMS_LOOP_START"))
|
||||
|
@ -399,7 +400,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
receivedSms.processed = true
|
||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||
override fun run() {
|
||||
uel.log("SMS LOOP RESUME")
|
||||
uel.log(Action.SMS_LOOP_RESUME)
|
||||
loopPlugin.suspendTo(0L)
|
||||
rxBus.send(EventRefreshOverview("SMS_LOOP_RESUME"))
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
|
@ -432,7 +433,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
receivedSms.processed = true
|
||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(duration) {
|
||||
override fun run() {
|
||||
uel.log("SMS LOOP SUSPEND")
|
||||
uel.log(Action.SMS_LOOP_SUSPEND)
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
override fun run() {
|
||||
if (result.success) {
|
||||
|
@ -516,7 +517,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
receivedSms.processed = true
|
||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||
override fun run() {
|
||||
uel.log("SMS PUMP CONNECT")
|
||||
uel.log(Action.SMS_PUMP_CONNECT)
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
|
@ -545,7 +546,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
receivedSms.processed = true
|
||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||
override fun run() {
|
||||
uel.log("SMS PUMP DISCONNECT")
|
||||
uel.log(Action.SMS_PUMP_DISCONNECT)
|
||||
val profile = profileFunction.getProfile()
|
||||
loopPlugin.disconnectPump(duration, profile)
|
||||
rxBus.send(EventRefreshOverview("SMS_PUMP_DISCONNECT"))
|
||||
|
@ -602,7 +603,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
activePlugin.activeTreatments.doProfileSwitch(store, list[pIndex - 1] as String, 0, finalPercentage, 0, DateUtil.now())
|
||||
val replyText = resourceHelper.gs(R.string.profileswitchcreated)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS PROFILE", replyText)
|
||||
uel.log(Action.SMS_PROFILE, ValueWithUnit(R.string.profileswitchcreated, Units.R_String))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -624,12 +625,12 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
var replyText = resourceHelper.gs(R.string.smscommunicator_tempbasalcanceled)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BASAL", replyText)
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalcanceled, Units.R_String))
|
||||
} else {
|
||||
var replyText = resourceHelper.gs(R.string.smscommunicator_tempbasalcancelfailed)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BASAL", replyText)
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalcancelfailed, Units.R_String))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -657,12 +658,15 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
var replyText = if (result.isPercent) String.format(resourceHelper.gs(R.string.smscommunicator_tempbasalset_percent), result.percent, result.duration) else String.format(resourceHelper.gs(R.string.smscommunicator_tempbasalset), result.absolute, result.duration)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BASAL", replyText)
|
||||
if (result.isPercent)
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalset_percent, 2), ValueWithUnit(result.percent, Units.Percent), ValueWithUnit(result.duration, Units.M))
|
||||
else
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalset, 2), ValueWithUnit(result.absolute, Units.U_H), ValueWithUnit(result.duration, Units.M))
|
||||
} else {
|
||||
var replyText = resourceHelper.gs(R.string.smscommunicator_tempbasalfailed)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BASAL", replyText)
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalfailed, Units.R_String))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -692,12 +696,15 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
else String.format(resourceHelper.gs(R.string.smscommunicator_tempbasalset), result.absolute, result.duration)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BASAL", replyText)
|
||||
if (result.isPercent)
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalset_percent, 2), ValueWithUnit(result.percent, Units.Percent), ValueWithUnit(result.duration, Units.M))
|
||||
else
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalset, 2), ValueWithUnit(result.absolute, Units.U_H), ValueWithUnit(result.duration, Units.M))
|
||||
} else {
|
||||
var replyText = resourceHelper.gs(R.string.smscommunicator_tempbasalfailed)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BASAL", replyText)
|
||||
uel.log(Action.SMS_BASAL, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_tempbasalfailed, Units.R_String))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -724,7 +731,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
var replyText = resourceHelper.gs(R.string.smscommunicator_extendedcancelfailed)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS EXTENDED", replyText)
|
||||
uel.log(Action.SMS_EXTENDED_BOLUS, activePlugin.activePump.shortStatus(true),ValueWithUnit(R.string.smscommunicator_extendedcanceled, Units.R_String))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -750,12 +757,15 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
if (config.APS) replyText += "\n" + resourceHelper.gs(R.string.loopsuspended)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS EXTENDED", replyText)
|
||||
if (config.APS)
|
||||
uel.log(Action.SMS_EXTENDED_BOLUS, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_extendedset, 2), ValueWithUnit(aDouble ?:0.0, Units.U), ValueWithUnit(duration, Units.M), ValueWithUnit(R.string.loopsuspended, Units.R_String))
|
||||
else
|
||||
uel.log(Action.SMS_EXTENDED_BOLUS, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_extendedset, 2), ValueWithUnit(aDouble ?:0.0, Units.U), ValueWithUnit(duration, Units.M))
|
||||
} else {
|
||||
var replyText = resourceHelper.gs(R.string.smscommunicator_extendedfailed)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS EXTENDED", replyText)
|
||||
uel.log(Action.SMS_EXTENDED_BOLUS, activePlugin.activePump.shortStatus(true),ValueWithUnit(R.string.smscommunicator_extendedfailed, Units.R_String))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -828,12 +838,12 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
}
|
||||
}
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BOLUS", replyText)
|
||||
uel.log(Action.SMS_BOLUS, replyText)
|
||||
} else {
|
||||
var replyText = resourceHelper.gs(R.string.smscommunicator_bolusfailed)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS BOLUS", replyText)
|
||||
uel.log(Action.SMS_BOLUS, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_bolusfailed, Units.R_String))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -873,12 +883,12 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
var replyText = String.format(resourceHelper.gs(R.string.smscommunicator_carbsset), anInteger)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS CARBS", replyText)
|
||||
uel.log(Action.SMS_CARBS, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_carbsset, 1), ValueWithUnit(anInteger ?:0,Units.G))
|
||||
} else {
|
||||
var replyText = resourceHelper.gs(R.string.smscommunicator_carbsfailed)
|
||||
var replyText = resourceHelper.gs(R.string.smscommunicator_carbsfailed, anInteger)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMS(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS CARBS", replyText)
|
||||
uel.log(Action.SMS_CARBS, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_carbsfailed, 1), ValueWithUnit(anInteger ?:0,Units.G))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -887,7 +897,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
var replyText = String.format(resourceHelper.gs(R.string.smscommunicator_carbsset), anInteger)
|
||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS CARBS", replyText)
|
||||
uel.log(Action.SMS_CARBS, activePlugin.activePump.shortStatus(true), ValueWithUnit(R.string.smscommunicator_carbsset, 1), ValueWithUnit(anInteger ?:0,Units.G))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -956,7 +966,8 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
val ttString = if (units == Constants.MMOL) DecimalFormatter.to1Decimal(tt) else DecimalFormatter.to0Decimal(tt)
|
||||
val replyText = String.format(resourceHelper.gs(R.string.smscommunicator_tt_set), ttString, ttDuration)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS TARGET", replyText)
|
||||
//uel.log(Action.SMS_TT, ValueWithUnit(R.string.smscommunicator_tt_set, 2), ValueWithUnit(tt, units), ValueWithUnit(ttDuration, Units.M))
|
||||
uel.log(Action.SMS_TT, ValueWithUnit(tt, units), ValueWithUnit(ttDuration, Units.M))
|
||||
}
|
||||
})
|
||||
} else if (isStop) {
|
||||
|
@ -973,7 +984,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
})
|
||||
val replyText = String.format(resourceHelper.gs(R.string.smscommunicator_tt_canceled))
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS TARGET", reply)
|
||||
uel.log(Action.SMS_TT, ValueWithUnit(R.string.smscommunicator_tt_canceled, Units.R_String))
|
||||
}
|
||||
})
|
||||
} else
|
||||
|
@ -992,7 +1003,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
sp.putBoolean(R.string.key_smscommunicator_remotecommandsallowed, false)
|
||||
val replyText = String.format(resourceHelper.gs(R.string.smscommunicator_stoppedsms))
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS SMS", replyText)
|
||||
uel.log(Action.SMS_SMS, ValueWithUnit(R.string.smscommunicator_stoppedsms, Units.R_String))
|
||||
}
|
||||
})
|
||||
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||
|
@ -1010,7 +1021,10 @@ class SmsCommunicatorPlugin @Inject constructor(
|
|||
val replyText =
|
||||
if (result) resourceHelper.gs(R.string.smscommunicator_calibrationsent) else resourceHelper.gs(R.string.smscommunicator_calibrationfailed)
|
||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||
uel.log("SMS CAL", replyText)
|
||||
if (result)
|
||||
uel.log(Action.SMS_CAL, ValueWithUnit(R.string.smscommunicator_calibrationsent, Units.R_String))
|
||||
else
|
||||
uel.log(Action.SMS_CAL, ValueWithUnit(R.string.smscommunicator_calibrationfailed, Units.R_String))
|
||||
}
|
||||
})
|
||||
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||
|
|
|
@ -14,6 +14,7 @@ import com.google.common.primitives.Ints.min
|
|||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.ActivitySmscommunicatorOtpBinding
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
|
@ -72,7 +73,7 @@ class SmsCommunicatorOtpActivity : NoSplashAppCompatActivity() {
|
|||
resourceHelper.gs(R.string.smscommunicator_otp_reset_title),
|
||||
resourceHelper.gs(R.string.smscommunicator_otp_reset_prompt),
|
||||
Runnable {
|
||||
uel.log("OTP RESET")
|
||||
uel.log(Action.OTP_RESET)
|
||||
otp.ensureKey(true)
|
||||
updateGui()
|
||||
ToastUtils.Long.infoToast(this, resourceHelper.gs(R.string.smscommunicator_otp_reset_successful))
|
||||
|
@ -88,7 +89,7 @@ class SmsCommunicatorOtpActivity : NoSplashAppCompatActivity() {
|
|||
val clip = ClipData.newPlainText("OTP Secret", otp.provisioningSecret())
|
||||
clipboard.primaryClip = clip
|
||||
ToastUtils.Long.infoToast(this, resourceHelper.gs(R.string.smscommunicator_otp_export_successful))
|
||||
uel.log("OTP EXPORT")
|
||||
uel.log(Action.OTP_EXPORT)
|
||||
})
|
||||
|
||||
true
|
||||
|
|
|
@ -12,6 +12,7 @@ import dagger.android.support.DaggerFragment
|
|||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.LocalprofileFragmentBinding
|
||||
import info.nightscout.androidaps.dialogs.ProfileSwitchDialog
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
|
@ -162,7 +163,7 @@ class LocalProfileFragment : DaggerFragment() {
|
|||
if (localProfilePlugin.isEdited) {
|
||||
activity?.let { OKDialog.show(it, "", resourceHelper.gs(R.string.saveorresetchangesfirst)) }
|
||||
} else {
|
||||
uel.log("NEW PROFILE")
|
||||
uel.log(Action.NEW_PROFILE)
|
||||
localProfilePlugin.addNewProfile()
|
||||
build()
|
||||
}
|
||||
|
@ -172,7 +173,7 @@ class LocalProfileFragment : DaggerFragment() {
|
|||
if (localProfilePlugin.isEdited) {
|
||||
activity?.let { OKDialog.show(it, "", resourceHelper.gs(R.string.saveorresetchangesfirst)) }
|
||||
} else {
|
||||
uel.log("CLONE PROFILE", localProfilePlugin.currentProfile()?.name ?: "")
|
||||
uel.log(Action.CLONE_PROFILE, localProfilePlugin.currentProfile()?.name ?: "")
|
||||
localProfilePlugin.cloneProfile()
|
||||
build()
|
||||
}
|
||||
|
@ -181,7 +182,7 @@ class LocalProfileFragment : DaggerFragment() {
|
|||
binding.profileRemove.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.deletecurrentprofile), {
|
||||
uel.log("REMOVE PROFILE", localProfilePlugin.currentProfile()?.name ?: "")
|
||||
uel.log(Action.PROFILE_REMOVED, localProfilePlugin.currentProfile()?.name ?: "")
|
||||
localProfilePlugin.removeCurrentProfile()
|
||||
build()
|
||||
}, null)
|
||||
|
|
|
@ -5,6 +5,7 @@ import dagger.android.HasAndroidInjector
|
|||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.events.EventProfileStoreChanged
|
||||
import info.nightscout.androidaps.interfaces.*
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
|
@ -115,7 +116,7 @@ class LocalProfilePlugin @Inject constructor(
|
|||
createAndStoreConvertedProfile()
|
||||
isEdited = false
|
||||
aapsLogger.debug(LTag.PROFILE, "Storing settings: " + rawProfile?.data.toString())
|
||||
uel.log("STORE PROFILE")
|
||||
uel.log(Action.STORE_PROFILE)
|
||||
rxBus.send(EventProfileStoreChanged())
|
||||
var namesOK = true
|
||||
profiles.forEach {
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.widget.AdapterView
|
|||
import android.widget.ArrayAdapter
|
||||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.NsprofileFragmentBinding
|
||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
|
@ -61,7 +62,7 @@ class NSProfileFragment : DaggerFragment() {
|
|||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.nsprofile),
|
||||
resourceHelper.gs(R.string.activate_profile) + ": " + name + " ?", Runnable {
|
||||
uel.log("PROFILE SWITCH", name, i1 = 100)
|
||||
uel.log(Action.PROFILE_SWITCH, ValueWithUnit(name, Units.None), ValueWithUnit(100.toInt(), Units.Percent))
|
||||
treatmentsPlugin.doProfileSwitch(store, name, 0, 100, 0, DateUtil.now())
|
||||
})
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import dagger.android.support.DaggerFragment
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.GlucoseValue
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.transactions.InvalidateGlucoseValueTransaction
|
||||
import info.nightscout.androidaps.databinding.BgsourceFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.BgsourceItemBinding
|
||||
|
@ -128,7 +129,7 @@ class BGSourceFragment : DaggerFragment() {
|
|||
activity?.let { activity ->
|
||||
val text = dateUtil.dateAndTimeString(glucoseValue.timestamp) + "\n" + glucoseValue.valueToUnitsString(profileFunction.getUnits())
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.removerecord), text, Runnable {
|
||||
uel.log("BG REMOVED", dateUtil.dateAndTimeString(glucoseValue.timestamp))
|
||||
uel.log(Action.BG_REMOVED, ValueWithUnit(glucoseValue.timestamp, Units.Timestamp))
|
||||
disposable += repository.runTransaction(InvalidateGlucoseValueTransaction(glucoseValue.id)).subscribe()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.TreatmentsBolusFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.TreatmentsBolusItemBinding
|
||||
import info.nightscout.androidaps.db.Source
|
||||
|
@ -68,7 +69,7 @@ class TreatmentsBolusFragment : DaggerFragment() {
|
|||
binding.refreshFromNightscout.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.refresheventsfromnightscout) + "?") {
|
||||
uel.log("TREAT NS REFRESH")
|
||||
uel.log(Action.TREATMENTS_NS_REFRESH)
|
||||
treatmentsPlugin.service.resetTreatments()
|
||||
rxBus.send(EventNSClientRestart())
|
||||
}
|
||||
|
@ -77,7 +78,7 @@ class TreatmentsBolusFragment : DaggerFragment() {
|
|||
binding.deleteFutureTreatments.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_treatment_label), resourceHelper.gs(R.string.deletefuturetreatments) + "?", Runnable {
|
||||
uel.log("DELETE FUTURE TREATMENTS")
|
||||
uel.log(Action.DELETE_FUTURE_TREATMENTS)
|
||||
val futureTreatments = treatmentsPlugin.service.getTreatmentDataFromTime(DateUtil.now() + 1000, true)
|
||||
for (treatment in futureTreatments) {
|
||||
if (NSUpload.isIdValid(treatment._id))
|
||||
|
@ -174,7 +175,7 @@ class TreatmentsBolusFragment : DaggerFragment() {
|
|||
resourceHelper.gs(R.string.carbs) + ": " + resourceHelper.gs(R.string.format_carbs, treatment.carbs.toInt()) + "\n" +
|
||||
resourceHelper.gs(R.string.date) + ": " + dateUtil.dateAndTimeString(treatment.date)
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.removerecord), text, Runnable {
|
||||
uel.log("REMOVED TREATMENT", text)
|
||||
uel.log(Action.TREATMENT_REMOVED, ValueWithUnit(treatment.date, Units.Timestamp), ValueWithUnit(treatment.insulin, Units.U, treatment.insulin != 0.0), ValueWithUnit(treatment.carbs.toInt(), Units.G, treatment.carbs != 0.0))
|
||||
if (treatment.source == Source.PUMP) {
|
||||
treatment.isValid = false
|
||||
treatmentsPlugin.service.update(treatment)
|
||||
|
|
|
@ -13,6 +13,7 @@ import info.nightscout.androidaps.database.AppRepository
|
|||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.transactions.InvalidateAAPSStartedTherapyEventTransaction
|
||||
import info.nightscout.androidaps.database.transactions.InvalidateTherapyEventTransaction
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.TreatmentsCareportalFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.TreatmentsCareportalItemBinding
|
||||
import info.nightscout.androidaps.events.EventTherapyEventChange
|
||||
|
@ -78,7 +79,7 @@ class TreatmentsCareportalFragment : DaggerFragment() {
|
|||
binding.refreshFromNightscout.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal), resourceHelper.gs(R.string.refresheventsfromnightscout) + " ?", Runnable {
|
||||
uel.log("CAREPORTAL NS REFRESH")
|
||||
uel.log(Action.CAREPORTAL_NS_REFRESH)
|
||||
disposable += Completable.fromAction { repository.deleteAllTherapyEventsEntries() }
|
||||
.subscribeOn(aapsSchedulers.io)
|
||||
.observeOn(aapsSchedulers.main)
|
||||
|
@ -93,7 +94,7 @@ class TreatmentsCareportalFragment : DaggerFragment() {
|
|||
binding.removeAndroidapsStartedEvents.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal), resourceHelper.gs(R.string.careportal_removestartedevents), Runnable {
|
||||
uel.log("REMOVED RESTART EVENTS")
|
||||
uel.log(Action.RESTART_EVENTS_REMOVED)
|
||||
// val events = databaseHelper.getCareportalEvents(false)
|
||||
repository.runTransactionForResult(InvalidateAAPSStartedTherapyEventTransaction())
|
||||
.subscribe({ result ->
|
||||
|
@ -195,7 +196,7 @@ class TreatmentsCareportalFragment : DaggerFragment() {
|
|||
resourceHelper.gs(R.string.notes_label) + ": " + (therapyEvent.note ?: "") + "\n" +
|
||||
resourceHelper.gs(R.string.date) + ": " + dateUtil.dateAndTimeString(therapyEvent.timestamp)
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.removerecord), text, Runnable {
|
||||
uel.log("REMOVED CAREPORTAL", text)
|
||||
uel.log(Action.CAREPORTAL_REMOVED, therapyEvent.note ?: "", ValueWithUnit(therapyEvent.type.text, Units.TherapyEvent), ValueWithUnit(therapyEvent.timestamp, Units.Timestamp))
|
||||
disposable += repository.runTransactionForResult(InvalidateTherapyEventTransaction(therapyEvent.id))
|
||||
.subscribe({
|
||||
val id = therapyEvent.interfaceIDs.nightscoutId
|
||||
|
|
|
@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Intervals
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.TreatmentsExtendedbolusFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.TreatmentsExtendedbolusItemBinding
|
||||
import info.nightscout.androidaps.db.ExtendedBolus
|
||||
|
@ -122,7 +123,7 @@ class TreatmentsExtendedBolusesFragment : DaggerFragment() {
|
|||
${resourceHelper.gs(R.string.extended_bolus)}
|
||||
${resourceHelper.gs(R.string.date)}: ${dateUtil.dateAndTimeString(extendedBolus.date)}
|
||||
""".trimIndent(), { _: DialogInterface, _: Int ->
|
||||
uel.log("REMOVED EB")
|
||||
uel.log(Action.EXTENDED_BOLUS_REMOVED)
|
||||
val id = extendedBolus._id
|
||||
if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
|
||||
else uploadQueue.removeID("dbAdd", id)
|
||||
|
|
|
@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.TreatmentsProfileswitchFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.TreatmentsProfileswitchItemBinding
|
||||
import info.nightscout.androidaps.db.ProfileSwitch
|
||||
|
@ -70,7 +71,7 @@ class TreatmentsProfileSwitchFragment : DaggerFragment() {
|
|||
|
||||
binding.refreshFromNightscout.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
uel.log("PROFILE SWITCH NS REFRESH")
|
||||
uel.log(Action.PROFILE_SWITCH_NS_REFRESH)
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.refresheventsfromnightscout) + "?") {
|
||||
databaseHelper.resetProfileSwitch()
|
||||
rxBus.send(EventNSClientRestart())
|
||||
|
@ -147,7 +148,7 @@ class TreatmentsProfileSwitchFragment : DaggerFragment() {
|
|||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.removerecord),
|
||||
resourceHelper.gs(R.string.careportal_profileswitch) + ": " + profileSwitch.profileName +
|
||||
"\n" + resourceHelper.gs(R.string.date) + ": " + dateUtil.dateAndTimeString(profileSwitch.date), Runnable {
|
||||
uel.log("REMOVED PROFILE SWITCH", profileSwitch.profileName + " " + dateUtil.dateAndTimeString(profileSwitch.date))
|
||||
uel.log(Action.PROFILE_SWITCH_REMOVED, profileSwitch.profileName, ValueWithUnit(profileSwitch.date, Units.Timestamp))
|
||||
val id = profileSwitch._id
|
||||
if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
|
||||
else uploadQueue.removeID("dbAdd", id)
|
||||
|
@ -160,7 +161,7 @@ class TreatmentsProfileSwitchFragment : DaggerFragment() {
|
|||
val profileSwitch = it.tag as ProfileSwitch
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_profileswitch), resourceHelper.gs(R.string.copytolocalprofile) + "\n" + profileSwitch.customizedName + "\n" + dateUtil.dateAndTimeString(profileSwitch.date), Runnable {
|
||||
profileSwitch.profileObject?.let {
|
||||
uel.log("PROFILE SWITCH CLONE", profileSwitch.profileName + " " + dateUtil.dateAndTimeString(profileSwitch.date))
|
||||
uel.log(Action.PROFILE_SWITCH_CLONED, ValueWithUnit(profileSwitch.date, Units.Timestamp), ValueWithUnit(profileSwitch.profileName, Units.None))
|
||||
val nonCustomized = it.convertToNonCustomizedProfile()
|
||||
if (nonCustomized.isValid(resourceHelper.gs(R.string.careportal_profileswitch, false))) {
|
||||
localProfilePlugin.addProfile(localProfilePlugin.copyFrom(nonCustomized, profileSwitch.customizedName + " " + dateUtil.dateAndTimeString(profileSwitch.date).replace(".", "_")))
|
||||
|
|
|
@ -14,6 +14,7 @@ import info.nightscout.androidaps.R
|
|||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.ValueWrapper
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.interfaces.end
|
||||
import info.nightscout.androidaps.database.transactions.InvalidateTemporaryTargetTransaction
|
||||
import info.nightscout.androidaps.databinding.TreatmentsTemptargetFragmentBinding
|
||||
|
@ -85,7 +86,7 @@ class TreatmentsTempTargetFragment : DaggerFragment() {
|
|||
binding.refreshFromNightscout.setOnClickListener {
|
||||
context?.let { context ->
|
||||
OKDialog.showConfirmation(context, resourceHelper.gs(R.string.refresheventsfromnightscout) + " ?", {
|
||||
uel.log("TT NS REFRESH")
|
||||
uel.log(Action.TT_NS_REFRESH)
|
||||
disposable += Completable.fromAction { repository.deleteAllTempTargetEntries() }
|
||||
.subscribeOn(aapsSchedulers.io)
|
||||
.observeOn(aapsSchedulers.main)
|
||||
|
@ -195,7 +196,7 @@ class TreatmentsTempTargetFragment : DaggerFragment() {
|
|||
${dateUtil.dateAndTimeString(tempTarget.timestamp)}
|
||||
""".trimIndent(),
|
||||
{ _: DialogInterface?, _: Int ->
|
||||
uel.log("TT REMOVE", tempTarget.friendlyDescription(profileFunction.getUnits(), resourceHelper))
|
||||
uel.log(Action.TT_REMOVED, ValueWithUnit(tempTarget.reason.text, Units.TherapyEvent), ValueWithUnit(tempTarget.timestamp, Units.Timestamp), ValueWithUnit(tempTarget.lowTarget, Units.Mg_Dl), ValueWithUnit(tempTarget.highTarget, Units.Mg_Dl, tempTarget.lowTarget != tempTarget.highTarget), ValueWithUnit(tempTarget.duration.toInt(), Units.M))
|
||||
disposable += repository.runTransactionForResult(InvalidateTemporaryTargetTransaction(tempTarget.id))
|
||||
.subscribe({
|
||||
val id = tempTarget.interfaceIDs.nightscoutId
|
||||
|
|
|
@ -12,6 +12,7 @@ import dagger.android.support.DaggerFragment
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Intervals
|
||||
import info.nightscout.androidaps.data.IobTotal
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.TreatmentsTempbasalsFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.TreatmentsTempbasalsItemBinding
|
||||
import info.nightscout.androidaps.db.Source
|
||||
|
@ -163,7 +164,7 @@ class TreatmentsTemporaryBasalsFragment : DaggerFragment() {
|
|||
${resourceHelper.gs(R.string.date)}: ${dateUtil.dateAndTimeString(tempBasal.date)}
|
||||
""".trimIndent(),
|
||||
{ _: DialogInterface?, _: Int ->
|
||||
uel.log("REMOVED TT", dateUtil.dateAndTimeString(tempBasal.date))
|
||||
uel.log(Action.TT_REMOVED, ValueWithUnit(tempBasal.date, Units.Timestamp))
|
||||
activePlugin.activeTreatments.removeTempBasal(tempBasal)
|
||||
}, null)
|
||||
}
|
||||
|
|
|
@ -7,22 +7,41 @@ import android.view.ViewGroup
|
|||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.UserEntry
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.databinding.TreatmentsUserEntryFragmentBinding
|
||||
import info.nightscout.androidaps.databinding.TreatmentsUserEntryItemBinding
|
||||
import info.nightscout.androidaps.events.EventPreferenceChange
|
||||
import info.nightscout.androidaps.interfaces.ImportExportPrefsInterface
|
||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||
import info.nightscout.androidaps.utils.Translator
|
||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||
import info.nightscout.androidaps.utils.extensions.*
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import io.reactivex.rxkotlin.plusAssign
|
||||
import javax.inject.Inject
|
||||
|
||||
class TreatmentsUserEntryFragment : DaggerFragment() {
|
||||
|
||||
@Inject lateinit var repository: AppRepository
|
||||
@Inject lateinit var aapsSchedulers: AapsSchedulers
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var dateUtil: DateUtil
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
@Inject lateinit var translator: Translator
|
||||
@Inject lateinit var importExportPrefs: ImportExportPrefsInterface
|
||||
@Inject lateinit var uel: UserEntryLogger
|
||||
|
||||
private val disposable = CompositeDisposable()
|
||||
|
||||
|
@ -39,11 +58,40 @@ class TreatmentsUserEntryFragment : DaggerFragment() {
|
|||
super.onViewCreated(view, savedInstanceState)
|
||||
binding.recyclerview.setHasFixedSize(true)
|
||||
binding.recyclerview.layoutManager = LinearLayoutManager(view.context)
|
||||
binding.ueExportToXml.setOnClickListener {
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.ue_export_to_csv) + "?") {
|
||||
uel.log(Action.EXPORT_CSV)
|
||||
importExportPrefs.exportUserEntriesCsv(activity, repository.getAllUserEntries())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
disposable += repository
|
||||
}
|
||||
|
||||
fun swapAdapter() {
|
||||
disposable.add( repository
|
||||
.getAllUserEntries()
|
||||
.observeOn(aapsSchedulers.main)
|
||||
.subscribe { list -> binding.recyclerview.swapAdapter(UserEntryAdapter(list), true) }
|
||||
)
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
swapAdapter()
|
||||
|
||||
disposable.add(rxBus
|
||||
.toObservable(EventPreferenceChange::class.java)
|
||||
.observeOn(aapsSchedulers.io)
|
||||
.subscribe({ swapAdapter() }, fabricPrivacy::logException))
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
disposable.clear()
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
|
@ -63,12 +111,44 @@ class TreatmentsUserEntryFragment : DaggerFragment() {
|
|||
override fun onBindViewHolder(holder: UserEntryViewHolder, position: Int) {
|
||||
val current = entries[position]
|
||||
holder.binding.date.text = dateUtil.dateAndTimeAndSecondsString(current.timestamp)
|
||||
holder.binding.action.text = current.action
|
||||
if (current.s != "") holder.binding.s.text = current.s else holder.binding.s.visibility = View.GONE
|
||||
if (current.d1 != 0.0) holder.binding.d1.text = current.d1.toString() else holder.binding.d1.visibility = View.GONE
|
||||
if (current.d2 != 0.0) holder.binding.d2.text = current.d2.toString() else holder.binding.d2.visibility = View.GONE
|
||||
if (current.i1 != 0) holder.binding.i1.text = current.i1.toString() else holder.binding.i1.visibility = View.GONE
|
||||
if (current.i2 != 0) holder.binding.i2.text = current.i2.toString() else holder.binding.i2.visibility = View.GONE
|
||||
holder.binding.action.text = translator.translate(current.action.name)
|
||||
holder.binding.action.setTextColor(resourceHelper.gc(current.action.colorGroup.colorId()))
|
||||
if (current.s != "") {
|
||||
holder.binding.s.text = current.s
|
||||
holder.binding.s.visibility = View.VISIBLE
|
||||
} else
|
||||
holder.binding.s.visibility = View.GONE
|
||||
var valuesWithUnitString = ""
|
||||
var rStringParam = 0
|
||||
val separator = " "
|
||||
for(v in current.values) {
|
||||
if (rStringParam >0)
|
||||
rStringParam--
|
||||
else
|
||||
when (v.unit) {
|
||||
Units.Timestamp -> valuesWithUnitString += dateUtil.dateAndTimeAndSecondsString(v.lValue) + separator
|
||||
Units.TherapyEvent -> valuesWithUnitString += translator.translate(v.sValue) + separator
|
||||
Units.R_String -> {
|
||||
rStringParam = v.lValue.toInt()
|
||||
when (rStringParam) { //
|
||||
0 -> valuesWithUnitString += resourceHelper.gs(v.iValue) + separator
|
||||
1 -> valuesWithUnitString += resourceHelper.gs(v.iValue, current.values[current.values.indexOf(v)+1].value()) + separator
|
||||
2 -> valuesWithUnitString += resourceHelper.gs(v.iValue, current.values[current.values.indexOf(v)+1].value(), current.values[current.values.indexOf(v)+2].value()) + separator
|
||||
3 -> valuesWithUnitString += resourceHelper.gs(v.iValue, current.values[current.values.indexOf(v)+1].value(), current.values[current.values.indexOf(v)+2].value(), current.values[current.values.indexOf(v)+3].value()) + separator
|
||||
4 -> rStringParam = 0
|
||||
}
|
||||
}
|
||||
Units.Mg_Dl -> valuesWithUnitString += if (profileFunction.getUnits()==Constants.MGDL) DecimalFormatter.to0Decimal(v.dValue) + translator.translate(Units.Mg_Dl.name) + separator else DecimalFormatter.to1Decimal(v.dValue/Constants.MMOLL_TO_MGDL) + translator.translate(Units.Mmol_L.name) + separator
|
||||
Units.Mmol_L -> valuesWithUnitString += if (profileFunction.getUnits()==Constants.MGDL) DecimalFormatter.to0Decimal(v.dValue*Constants.MMOLL_TO_MGDL) + translator.translate(Units.Mg_Dl.name) + separator else DecimalFormatter.to1Decimal(v.dValue) + translator.translate(Units.Mmol_L.name) + separator
|
||||
Units.U_H, Units.U
|
||||
-> valuesWithUnitString += DecimalFormatter.to2Decimal(v.dValue) + translator.translate(v.unit.name) + separator
|
||||
Units.G, Units.M, Units.H, Units.Percent
|
||||
-> valuesWithUnitString += v.iValue.toString() + translator.translate(v.unit.name) + separator
|
||||
else -> valuesWithUnitString += if (v.iValue != 0 || v.sValue != "") { v.value().toString() + separator } else ""
|
||||
}
|
||||
}
|
||||
holder.binding.values.text = valuesWithUnitString.trim()
|
||||
holder.binding.values.visibility = if (current.values.size > 0) View.VISIBLE else View.GONE
|
||||
}
|
||||
|
||||
inner class UserEntryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
|
|
|
@ -12,6 +12,7 @@ import info.nightscout.androidaps.data.DetailedBolusInfo
|
|||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||
import info.nightscout.androidaps.interfaces.*
|
||||
|
@ -348,7 +349,7 @@ class BolusWizard @Inject constructor(
|
|||
boluscalc = nsJSON()
|
||||
source = Source.USER
|
||||
notes = this@BolusWizard.notes
|
||||
uel.log("BOLUS ADVISOR", d1 = insulinAfterConstraints)
|
||||
uel.log(Action.BOLUS_ADVISOR, notes, ValueWithUnit(eventType, Units.TherapyEvent), ValueWithUnit(insulinAfterConstraints, Units.U))
|
||||
if (insulin > 0) {
|
||||
commandQueue.bolus(this, object : Callback() {
|
||||
override fun run() {
|
||||
|
@ -371,7 +372,7 @@ class BolusWizard @Inject constructor(
|
|||
OKDialog.showConfirmation(ctx, resourceHelper.gs(R.string.boluswizard), confirmMessage, {
|
||||
if (insulinAfterConstraints > 0 || carbs > 0) {
|
||||
if (useSuperBolus) {
|
||||
uel.log("SUPERBOLUS TBR")
|
||||
uel.log(Action.SUPERBOLUS_TBR)
|
||||
if (loopPlugin.isEnabled(PluginType.LOOP)) {
|
||||
loopPlugin.superBolusTo(System.currentTimeMillis() + 2 * 60L * 60 * 1000)
|
||||
rxBus.send(EventRefreshOverview("WizardDialog"))
|
||||
|
@ -412,7 +413,7 @@ class BolusWizard @Inject constructor(
|
|||
boluscalc = nsJSON()
|
||||
source = Source.USER
|
||||
notes = this@BolusWizard.notes
|
||||
uel.log("BOLUS WIZARD", "", insulinAfterConstraints, carbs)
|
||||
uel.log(Action.BOLUS, notes, ValueWithUnit(eventType,Units.TherapyEvent), ValueWithUnit(insulinAfterConstraints, Units.U), ValueWithUnit(this@BolusWizard.carbs, Units.G, this@BolusWizard.carbs != 0), ValueWithUnit(carbTime, Units.M, carbTime != 0))
|
||||
if (insulin > 0 || pump.pumpDescription.storesCarbInfo) {
|
||||
commandQueue.bolus(this, object : Callback() {
|
||||
override fun run() {
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
android:viewportHeight="24"
|
||||
android:viewportWidth="24"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#67DFE8" android:pathData="M15.714,7.697l0.353,-0.684c0.18,-0.348 0.043,-0.775 -0.305,-0.955c-0.351,-0.181 -0.775,-0.043 -0.955,0.305l-0.354,0.685c-0.379,-0.148 -0.772,-0.265 -1.18,-0.344V6.106c0.45,-0.061 0.802,-0.431 0.802,-0.897c0,-0.509 -0.412,-0.921 -0.921,-0.921h-2.313c-0.509,0 -0.921,0.413 -0.921,0.921c0,0.467 0.352,0.836 0.802,0.897v0.598c-3.125,0.599 -5.495,3.349 -5.495,6.646c0,3.732 3.037,6.77 6.77,6.77c3.732,0 6.77,-3.037 6.77,-6.77C18.768,10.989 17.551,8.909 15.714,7.697zM11.998,19.119c-3.182,0 -5.77,-2.588 -5.77,-5.77s2.588,-5.77 5.77,-5.77s5.77,2.588 5.77,5.77S15.18,19.119 11.998,19.119z"/>
|
||||
<path android:fillColor="#67DFE8" android:pathData="M12,8.814c-0.086,0 -0.169,0.035 -0.23,0.096s-0.096,0.144 -0.096,0.23v4.198c0,0.08 0.029,0.157 0.083,0.217l2.789,3.14c0.058,0.064 0.139,0.104 0.226,0.108c0.006,0.001 0.013,0.001 0.019,0.001c0.08,0 0.157,-0.029 0.217,-0.083c0.971,-0.866 1.527,-2.095 1.527,-3.372C16.533,10.85 14.5,8.816 12,8.814z"/>
|
||||
<path android:fillColor="@color/extendedBolus" android:pathData="M15.714,7.697l0.353,-0.684c0.18,-0.348 0.043,-0.775 -0.305,-0.955c-0.351,-0.181 -0.775,-0.043 -0.955,0.305l-0.354,0.685c-0.379,-0.148 -0.772,-0.265 -1.18,-0.344V6.106c0.45,-0.061 0.802,-0.431 0.802,-0.897c0,-0.509 -0.412,-0.921 -0.921,-0.921h-2.313c-0.509,0 -0.921,0.413 -0.921,0.921c0,0.467 0.352,0.836 0.802,0.897v0.598c-3.125,0.599 -5.495,3.349 -5.495,6.646c0,3.732 3.037,6.77 6.77,6.77c3.732,0 6.77,-3.037 6.77,-6.77C18.768,10.989 17.551,8.909 15.714,7.697zM11.998,19.119c-3.182,0 -5.77,-2.588 -5.77,-5.77s2.588,-5.77 5.77,-5.77s5.77,2.588 5.77,5.77S15.18,19.119 11.998,19.119z"/>
|
||||
<path android:fillColor="@color/extendedBolus" android:pathData="M12,8.814c-0.086,0 -0.169,0.035 -0.23,0.096s-0.096,0.144 -0.096,0.23v4.198c0,0.08 0.029,0.157 0.083,0.217l2.789,3.14c0.058,0.064 0.139,0.104 0.226,0.108c0.006,0.001 0.013,0.001 0.019,0.001c0.08,0 0.157,-0.029 0.217,-0.083c0.971,-0.866 1.527,-2.095 1.527,-3.372C16.533,10.85 14.5,8.816 12,8.814z"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M7.305,4.482c1.782,2.914 4.332,5.382 3.916,9.05c-0.256,2.254 -2.529,3.635 -4.783,3.199c-2.145,-0.415 -3.625,-2.546 -3.171,-4.728C3.858,9.168 5.537,6.894 7.305,4.482zM5.08,10.061c-0.212,0.638 -0.489,1.262 -0.621,1.916c-0.205,1.017 -0.065,1.994 0.764,2.731c0.297,0.264 0.68,0.354 1.038,0.077c0.242,-0.187 0.269,-0.46 0.096,-0.692C5.468,12.903 5.032,11.589 5.08,10.061z"
|
||||
android:fillColor="#E83258"/>
|
||||
android:fillColor="@color/calibration"/>
|
||||
<path
|
||||
android:pathData="M17.959,4.566c1.073,1.453 2.073,2.837 2.489,4.535c0.28,1.143 -0.069,2.1 -1.037,2.763c-0.943,0.645 -1.961,0.655 -2.904,0.009c-0.967,-0.662 -1.318,-1.635 -1.041,-2.769C15.88,7.408 16.875,6.019 17.959,4.566z"
|
||||
android:fillColor="#E83258"/>
|
||||
android:fillColor="@color/calibration"/>
|
||||
<path
|
||||
android:pathData="M14.82,14.425c0.797,1.094 1.535,2.104 1.819,3.355c0.188,0.826 -0.096,1.498 -0.784,1.965c-0.669,0.454 -1.393,0.467 -2.067,0.014c-0.688,-0.462 -0.985,-1.13 -0.8,-1.959C13.272,16.531 14.004,15.503 14.82,14.425z"
|
||||
android:fillColor="#E83258"/>
|
||||
android:fillColor="@color/calibration"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,5 +5,5 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156s-7.156,-3.204 -7.156,-7.156s3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.938,4.449 -9.938,9.938S6.574,22 12.063,22S22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156s-7.156,-3.204 -7.156,-7.156s3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.938,4.449 -9.938,9.938S6.574,22 12.063,22S22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||
android:fillColor="#FF1313"/>
|
||||
android:fillColor="@color/loopDisabled"/>
|
||||
<path
|
||||
android:pathData="M10.2429,8.7408l5.0162,5.0162l-1.5026,1.5026l-5.0162,-5.0162z"
|
||||
android:fillColor="#FF1313"/>
|
||||
android:fillColor="@color/loopDisabled"/>
|
||||
<path
|
||||
android:pathData="M8.7408,13.7571l5.0162,-5.0162l1.5026,1.5026l-5.0162,5.0162z"
|
||||
android:fillColor="#FF1313"/>
|
||||
android:fillColor="@color/loopDisabled"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M17.523,3.764c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.938,4.449 -9.938,9.938c0,1.803 0.484,3.49 1.325,4.945l-0.319,0.365c-0.001,0.842 0.325,1.681 1.01,2.277l2.416,2.103l0.872,-1.002l1.746,1.523l0.472,-0.542l-1.747,-1.523l1.272,-1.461l1.748,1.524l0.472,-0.542l-1.749,-1.525l0.872,-1.001l-2.416,-2.103c-0.684,-0.596 -1.557,-0.803 -2.39,-0.687l-0.277,0.318c-0.335,-0.825 -0.528,-1.723 -0.528,-2.67c0,-3.952 3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784L17.523,3.764z"
|
||||
android:fillColor="#939393"/>
|
||||
android:fillColor="@color/loopDisconnected"/>
|
||||
<path
|
||||
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,0.938 -0.183,1.833 -0.511,2.653l-0.263,-0.302c-0.833,-0.116 -1.706,0.091 -2.39,0.687l-2.416,2.103l3.96,4.549l2.416,-2.103c0.685,-0.596 1.011,-1.435 1.01,-2.277l-0.346,-0.397C21.51,15.526 22,13.855 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||
android:fillColor="#939393"/>
|
||||
android:fillColor="@color/loopDisconnected"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,20 +5,20 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6.349,7.767c0.408,-0.542 0.89,-1.022 1.433,-1.429L6.38,3.917C5.424,4.584 4.593,5.415 3.924,6.37L6.349,7.767z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
<path
|
||||
android:pathData="M9.258,5.478c0.613,-0.262 1.272,-0.436 1.959,-0.517l-0.003,-2.793c-1.191,0.101 -2.318,0.414 -3.352,0.898L9.258,5.478z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
<path
|
||||
android:pathData="M12.922,2.189l0.003,2.773c0.754,0.093 1.472,0.301 2.135,0.608c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538C16.182,2.88 14.61,2.336 12.922,2.189z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
<path
|
||||
android:pathData="M4.963,11.199c0.083,-0.687 0.259,-1.345 0.523,-1.958L3.072,7.85c-0.485,1.034 -0.801,2.16 -0.903,3.351L4.963,11.199z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
<path
|
||||
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156c-2.345,0 -4.42,-1.133 -5.725,-2.876l-2.421,1.401C5.712,20.315 8.689,22 12.063,22C17.551,22 22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
<path
|
||||
android:pathData="M5.478,14.867c-0.262,-0.614 -0.436,-1.272 -0.517,-1.96L2.168,12.91c0.101,1.191 0.414,2.319 0.898,3.353L5.478,14.867z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,23 +5,23 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6.349,7.767c0.408,-0.542 0.89,-1.022 1.433,-1.429L6.38,3.917C5.424,4.584 4.593,5.415 3.924,6.37L6.349,7.767z"
|
||||
android:fillColor="#4983D7"/>
|
||||
android:fillColor="@color/loopOpened"/>
|
||||
<path
|
||||
android:pathData="M3.072,7.85c-0.485,1.034 -0.801,2.16 -0.903,3.351l2.795,-0.003c0.083,-0.687 0.259,-1.345 0.523,-1.958L3.072,7.85z"
|
||||
android:fillColor="#4983D7"/>
|
||||
android:fillColor="@color/loopOpened"/>
|
||||
<path
|
||||
android:pathData="M21.059,7.862l-2.412,1.396c0.262,0.614 0.437,1.272 0.518,1.96l2.793,-0.003C21.856,10.024 21.543,8.896 21.059,7.862z"
|
||||
android:fillColor="#4983D7"/>
|
||||
android:fillColor="@color/loopOpened"/>
|
||||
<path
|
||||
android:pathData="M17.787,7.781l2.421,-1.401c-0.668,-0.956 -1.499,-1.787 -2.454,-2.456l-1.397,2.425C16.9,6.757 17.38,7.238 17.787,7.781z"
|
||||
android:fillColor="#4983D7"/>
|
||||
android:fillColor="@color/loopOpened"/>
|
||||
<path
|
||||
android:pathData="M19.162,12.926c-0.427,3.544 -3.44,6.293 -7.099,6.293c-3.666,0 -6.684,-2.758 -7.102,-6.312L2.168,12.91C2.599,18.001 6.86,22 12.063,22c5.198,0 9.457,-3.992 9.894,-9.077L19.162,12.926z"
|
||||
android:fillColor="#4983D7"/>
|
||||
android:fillColor="@color/loopOpened"/>
|
||||
<path
|
||||
android:pathData="M9.258,5.478c0.613,-0.262 1.272,-0.436 1.959,-0.517l-0.003,-2.793c-1.191,0.101 -2.318,0.414 -3.352,0.898L9.258,5.478z"
|
||||
android:fillColor="#4983D7"/>
|
||||
android:fillColor="@color/loopOpened"/>
|
||||
<path
|
||||
android:pathData="M12.925,4.963c0.687,0.083 1.345,0.259 1.958,0.522l1.391,-2.414c-1.034,-0.485 -2.161,-0.801 -3.352,-0.903L12.925,4.963z"
|
||||
android:fillColor="#4983D7"/>
|
||||
android:fillColor="@color/loopOpened"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156s-7.156,-3.204 -7.156,-7.156s3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.938,4.449 -9.938,9.938S6.574,22 12.063,22S22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||
android:fillColor="#FFFF13"/>
|
||||
android:fillColor="@color/loopSuspended"/>
|
||||
<path
|
||||
android:pathData="M8.813,8.453h2.125v7.094h-2.125z"
|
||||
android:fillColor="#FFFF13"/>
|
||||
android:fillColor="@color/loopSuspended"/>
|
||||
<path
|
||||
android:pathData="M13.063,8.453h2.125v7.094h-2.125z"
|
||||
android:fillColor="#FFFF13"/>
|
||||
android:fillColor="@color/loopSuspended"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156c-3.952,0 -7.156,-3.204 -7.156,-7.156c0,-3.952 3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.937,4.449 -9.937,9.938c0,5.488 4.449,9.937 9.937,9.937C17.551,22 22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||
android:fillColor="#939393"/>
|
||||
android:fillColor="@color/loopDisconnected"/>
|
||||
<path
|
||||
android:pathData="M14.868,22.154c0.794,0 1.49,-0.418 1.973,-1.054l-0.001,-3.926c-0.482,-0.634 -1.177,-1.052 -1.969,-1.052l-5.612,-0.001c-0.793,0 -1.487,0.416 -1.97,1.05l-0.004,3.926c0.482,0.636 1.178,1.055 1.972,1.055"
|
||||
android:fillColor="#939393"/>
|
||||
android:fillColor="@color/loopDisconnected"/>
|
||||
</vector>
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156c-3.952,0 -7.156,-3.204 -7.156,-7.156c0,-3.952 3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.937,4.449 -9.937,9.938c0,5.488 4.449,9.937 9.937,9.937C17.551,22 22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
<path
|
||||
android:pathData="M9.401,8.391l6.599,3.609l-6.599,3.609z"
|
||||
android:fillColor="#00C03E"/>
|
||||
android:fillColor="@color/loopClosed"/>
|
||||
</vector>
|
||||
|
|
|
@ -75,6 +75,20 @@
|
|||
android:text="@string/nav_import"
|
||||
android:textColor="@color/colorTreatmentButton" />
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/export_csv"
|
||||
style="?android:attr/buttonStyle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginTop="3dp"
|
||||
android:layout_weight="0.5"
|
||||
android:text="@string/ue_export_to_csv"
|
||||
android:textColor="@color/colorTreatmentButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/nav_resetdb"
|
||||
style="?android:attr/buttonStyle"
|
||||
|
|
|
@ -5,6 +5,15 @@
|
|||
android:orientation="vertical"
|
||||
tools:context=".plugins.treatments.fragments.TreatmentsUserEntryFragment">
|
||||
|
||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||
android:id="@+id/ue_export_to_xml"
|
||||
style="?android:attr/buttonStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:drawableStart="@drawable/ic_header_export"
|
||||
android:text="@string/ue_export_to_csv" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerview"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -1,70 +1,72 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:layout_gravity="center"
|
||||
card_view:cardBackgroundColor="?android:colorBackground">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/date"
|
||||
android:layout_width="wrap_content"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="5dp"
|
||||
android:text="1.1.2021 09:00"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/action"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="10dp"
|
||||
android:text="USER ENTRY"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:baselineAligned="true"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/s"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="10dp"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
<TextView
|
||||
android:id="@+id/date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="5dp"
|
||||
android:text="1.1.2021 09:00"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/d1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="10dp"
|
||||
android:text="0.0"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
<TextView
|
||||
android:id="@+id/action"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="10dp"
|
||||
android:text="USER ENTRY"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/d2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="10dp"
|
||||
android:text="0.0"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/i1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="10dp"
|
||||
android:text="0.0"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
<TextView
|
||||
android:id="@+id/values"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:paddingStart="20dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:textStyle="bold"
|
||||
android:visibility="gone"
|
||||
android:text="Values with units" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/i2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="10dp"
|
||||
android:text="0.0"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
<TextView
|
||||
android:id="@+id/s"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="20dp"
|
||||
android:visibility="gone"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
tools:ignore="HardcodedText,RtlSymmetry" />
|
||||
|
||||
</LinearLayout>
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="2dip"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:background="@color/list_delimiter" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="prediction">#ff00ff</color>
|
||||
<color name="basal">#00ffff</color>
|
||||
<color name="iobPred">#00d2d2</color>
|
||||
<color name="bolus">#1ea3e5</color>
|
||||
<color name="ratio">#FFFFFF</color>
|
||||
|
@ -22,7 +21,6 @@
|
|||
<color name="ok_background">#323232</color>
|
||||
|
||||
<color name="defaultbackground">#424242</color>
|
||||
<color name="defaulttext">#BBBBBB</color>
|
||||
<color name="defaulttextcolor">#B3FFFFFF</color>
|
||||
|
||||
<color name="tempTargetBackground">#77dd77</color>
|
||||
|
|
|
@ -179,6 +179,7 @@
|
|||
<string name="configbuilder_nightscoutversion_label">Nightscout version:</string>
|
||||
<string name="missing_carbs">Missing %1$d g</string>
|
||||
<string name="exported">Preferences exported</string>
|
||||
<string name="ue_exported">User Entries exported</string>
|
||||
<string name="export_to">Export settings to</string>
|
||||
<string name="import_from">Import settings from</string>
|
||||
<string name="setting_imported">Settings imported</string>
|
||||
|
@ -932,7 +933,6 @@
|
|||
<string name="format_carbs_ic">%1$.0fg IC: %2$.1f</string>
|
||||
<string name="format_cob_ic">%1$.1fg IC: %2$.1f</string>
|
||||
<string name="format_percent">%1$d%%</string>
|
||||
<string name="boluswizard">Bolus wizard</string>
|
||||
<string name="unit_minute_short">min</string>
|
||||
<string name="profile_name">Profile name:</string>
|
||||
<string name="selected_profile">Selected:</string>
|
||||
|
@ -1126,4 +1126,6 @@
|
|||
<string name="current_basal_value">Current basal value</string>
|
||||
<string name="profile_carbs_ratio_value">Profile carbs ratio value</string>
|
||||
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -20,6 +20,7 @@ import dagger.android.support.DaggerFragment
|
|||
import info.nightscout.androidaps.automation.R
|
||||
import info.nightscout.androidaps.automation.databinding.AutomationEventItemBinding
|
||||
import info.nightscout.androidaps.automation.databinding.AutomationFragmentBinding
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog
|
||||
|
@ -216,7 +217,7 @@ class AutomationFragment : DaggerFragment(), OnStartDragListener {
|
|||
holder.binding.iconTrash.setOnClickListener {
|
||||
OKDialog.showConfirmation(requireContext(), resourceHelper.gs(R.string.removerecord) + " " + automationPlugin.at(position).title,
|
||||
{
|
||||
uel.log("AUTOM REMOVED", automationPlugin.at(position).title)
|
||||
uel.log(Action.AUTOMATION_REMOVED, automationPlugin.at(position).title)
|
||||
automationPlugin.removeAt(position)
|
||||
notifyItemRemoved(position)
|
||||
}, {
|
||||
|
@ -239,7 +240,7 @@ class AutomationFragment : DaggerFragment(), OnStartDragListener {
|
|||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.removerecord) + " " + automationPlugin.at(position).title,
|
||||
Runnable {
|
||||
uel.log("AUTOM REMOVED", automationPlugin.at(position).title)
|
||||
uel.log(Action.AUTOMATION_REMOVED, automationPlugin.at(position).title)
|
||||
automationPlugin.removeAt(position)
|
||||
notifyItemRemoved(position)
|
||||
rxBus.send(EventAutomationDataChanged())
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
package info.nightscout.androidaps;
|
||||
|
||||
import info.nightscout.androidaps.utils.T;
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*;
|
||||
|
||||
/**
|
||||
* Created by mike on 07.06.2016.
|
||||
*/
|
||||
public class Constants {
|
||||
public static final String MGDL = "mg/dl"; // This is Nightscout's representation
|
||||
public static final String MMOL = "mmol";
|
||||
public static final String MGDL = Units.Mg_Dl.getText(); // This is Nightscout's representation
|
||||
public static final String MMOL = Units.Mmol_L.getText();
|
||||
|
||||
public static final double MMOLL_TO_MGDL = 18; // 18.0182;
|
||||
public static final double MGDL_TO_MMOLL = 1 / MMOLL_TO_MGDL;
|
||||
|
|
|
@ -11,6 +11,7 @@ import dagger.android.support.DaggerDialogFragment
|
|||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.core.R
|
||||
import info.nightscout.androidaps.core.databinding.DialogErrorBinding
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.services.AlarmSoundServiceHelper
|
||||
|
@ -58,15 +59,15 @@ class ErrorDialog : DaggerDialogFragment() {
|
|||
|
||||
binding.title.text = title
|
||||
binding.ok.setOnClickListener {
|
||||
uel.log("Error dialog ok button pressed")
|
||||
uel.log(Action.ERROR_DIALOG_OK)
|
||||
dismiss()
|
||||
}
|
||||
binding.mute.setOnClickListener {
|
||||
uel.log("Error dialog mute button pressed")
|
||||
uel.log(Action.ERROR_DIALOG_MUTE)
|
||||
stopAlarm()
|
||||
}
|
||||
binding.mute5min.setOnClickListener {
|
||||
uel.log("Error dialog mute 5 min button pressed")
|
||||
uel.log(Action.ERROR_DIALOG_MUTE_5MIN)
|
||||
stopAlarm()
|
||||
loopHandler.postDelayed(this::startAlarm, T.mins(5).msecs())
|
||||
}
|
||||
|
|
|
@ -2,7 +2,9 @@ package info.nightscout.androidaps.interfaces
|
|||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import info.nightscout.androidaps.database.entities.UserEntry
|
||||
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFile
|
||||
import io.reactivex.Single
|
||||
|
||||
interface ImportExportPrefsInterface {
|
||||
|
||||
|
@ -12,4 +14,5 @@ interface ImportExportPrefsInterface {
|
|||
fun prefsFileExists(): Boolean
|
||||
fun verifyStoragePermissions(fragment: Fragment, onGranted: Runnable)
|
||||
fun exportSharedPreferences(f: Fragment)
|
||||
fun exportUserEntriesCsv(activity: FragmentActivity, entries: Single<List<UserEntry>>)
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
package info.nightscout.androidaps.logging
|
||||
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.database.AppRepository
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.database.transactions.UserEntryTransaction
|
||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
|
@ -18,20 +20,66 @@ class UserEntryLogger @Inject constructor(
|
|||
|
||||
private val compositeDisposable = CompositeDisposable()
|
||||
|
||||
fun log(action: String, s: String = "", d1: Double = 0.0, d2: Double = 0.0, i1: Int = 0, i2: Int = 0) {
|
||||
fun log(action: Action, s: String, vararg listvalues: ValueWithUnit) {
|
||||
val values = mutableListOf<ValueWithUnit>()
|
||||
for (v in listvalues){
|
||||
if (v.condition) values.add(v)
|
||||
}
|
||||
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
||||
action = action,
|
||||
s = s,
|
||||
d1 = d1,
|
||||
d2 = d2,
|
||||
i1 = i1,
|
||||
i2 = i2
|
||||
values = values
|
||||
))
|
||||
.subscribeOn(aapsSchedulers.io)
|
||||
.observeOn(aapsSchedulers.io)
|
||||
.subscribeBy(
|
||||
onError = { aapsLogger.debug("ERRORED USER ENTRY: $action $s ${if (d1 == 0.0) d1 else ""} ${if (d2 == 0.0) d2 else ""} ${if (i1 == 0) i1 else ""} ${if (i2 == 0) i2 else ""}") },
|
||||
onComplete = { aapsLogger.debug("USER ENTRY: $action $s ${if (d1 == 0.0) d1 else ""} ${if (d2 == 0.0) d2 else ""} ${if (i1 == 0) i1 else ""} ${if (i2 == 0) i2 else ""}") }
|
||||
onError = { aapsLogger.debug("ERRORED USER ENTRY: $action $s $values") },
|
||||
onComplete = { aapsLogger.debug("USER ENTRY: $action $s $values") }
|
||||
)
|
||||
}
|
||||
|
||||
fun log(action: Action, vararg listvalues: ValueWithUnit) {
|
||||
val values = mutableListOf<ValueWithUnit>()
|
||||
for (v in listvalues){
|
||||
if (v.condition) values.add(v)
|
||||
}
|
||||
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
||||
action = action,
|
||||
s = "",
|
||||
values = values
|
||||
))
|
||||
.subscribeOn(aapsSchedulers.io)
|
||||
.observeOn(aapsSchedulers.io)
|
||||
.subscribeBy(
|
||||
onError = { aapsLogger.debug("ERRORED USER ENTRY: $action $values") },
|
||||
onComplete = { aapsLogger.debug("USER ENTRY: $action $values") }
|
||||
)
|
||||
}
|
||||
|
||||
fun log(action: Action, s: String = "") {
|
||||
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
||||
action = action,
|
||||
s = s
|
||||
))
|
||||
.subscribeOn(aapsSchedulers.io)
|
||||
.observeOn(aapsSchedulers.io)
|
||||
.subscribeBy(
|
||||
onError = { aapsLogger.debug("ERRORED USER ENTRY: $action") },
|
||||
onComplete = { aapsLogger.debug("USER ENTRY: $action") }
|
||||
)
|
||||
}
|
||||
|
||||
fun log(action: Action, s: String = "", values: MutableList<ValueWithUnit>) {
|
||||
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
||||
action = action,
|
||||
s = s,
|
||||
values = values
|
||||
))
|
||||
.subscribeOn(aapsSchedulers.io)
|
||||
.observeOn(aapsSchedulers.io)
|
||||
.subscribeBy(
|
||||
onError = { aapsLogger.debug("ERRORED USER ENTRY: $action $s $values") },
|
||||
onComplete = { aapsLogger.debug("USER ENTRY: $action $s $values") }
|
||||
)
|
||||
}
|
||||
}
|
|
@ -31,6 +31,7 @@ class PrefFileListProvider @Inject constructor(
|
|||
|
||||
private val path = File(Environment.getExternalStorageDirectory().toString())
|
||||
private val aapsPath = File(path, "AAPS" + File.separator + "preferences")
|
||||
private val exportsPath = File(path, "AAPS" + File.separator + "exports")
|
||||
private const val IMPORT_AGE_NOT_YET_OLD_DAYS = 60
|
||||
}
|
||||
|
||||
|
@ -93,6 +94,9 @@ class PrefFileListProvider @Inject constructor(
|
|||
if (!aapsPath.exists()) {
|
||||
aapsPath.mkdirs()
|
||||
}
|
||||
if (!exportsPath.exists()) {
|
||||
exportsPath.mkdirs()
|
||||
}
|
||||
}
|
||||
|
||||
fun newExportFile(): File {
|
||||
|
@ -100,6 +104,11 @@ class PrefFileListProvider @Inject constructor(
|
|||
return File(aapsPath, timeLocal + "_" + config.FLAVOR + ".json")
|
||||
}
|
||||
|
||||
fun newExportXmlFile(): File {
|
||||
val timeLocal = LocalDateTime.now().toString(DateTimeFormat.forPattern("yyyy-MM-dd'_'HHmmss"))
|
||||
return File(exportsPath, timeLocal + "_UserEntry.csv")
|
||||
}
|
||||
|
||||
// check metadata for known issues, change their status and add info with explanations
|
||||
fun checkMetadata(metadata: Map<PrefsMetadataKey, PrefMetadata>): Map<PrefsMetadataKey, PrefMetadata> {
|
||||
val meta = metadata.toMutableMap()
|
||||
|
|
|
@ -2,6 +2,12 @@ package info.nightscout.androidaps.plugins.general.maintenance.formats
|
|||
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.core.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.utils.Translator
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.storage.Storage
|
||||
import java.io.File
|
||||
|
@ -13,6 +19,9 @@ import javax.inject.Singleton
|
|||
@Singleton
|
||||
class ClassicPrefsFormat @Inject constructor(
|
||||
private var resourceHelper: ResourceHelper,
|
||||
private var dateUtil: DateUtil,
|
||||
private var translator: Translator,
|
||||
private var profileFunction: ProfileFunction,
|
||||
private var storage: Storage
|
||||
) : PrefsFormat {
|
||||
|
||||
|
@ -67,4 +76,57 @@ class ClassicPrefsFormat @Inject constructor(
|
|||
return metadata
|
||||
}
|
||||
|
||||
fun saveCsv(file: File, userEntries: List<UserEntry>) {
|
||||
try {
|
||||
val contents = UserEntriesToCsv(userEntries)
|
||||
storage.putFileContents(file, contents)
|
||||
} catch (e: FileNotFoundException) {
|
||||
throw PrefFileNotFoundError(file.absolutePath)
|
||||
} catch (e: IOException) {
|
||||
throw PrefIOError(file.absolutePath)
|
||||
}
|
||||
}
|
||||
|
||||
fun UserEntriesToCsv(userEntries: List<UserEntry>): String {
|
||||
val userEntryHeader = resourceHelper.gs(R.string.ue_csv_header) + "\n"
|
||||
return userEntryHeader + userEntries.joinToString("\n") { entry ->
|
||||
if (entry.values.size > 0) {
|
||||
entry.values.joinToString("\n") { value ->
|
||||
entry.timestamp.toString() + ";" +
|
||||
dateUtil.dateAndTimeAndSecondsString(entry.timestamp) + ";" +
|
||||
dateUtil.timeString(entry.utcOffset) + ";" +
|
||||
csvString(entry.action) + ";" +
|
||||
csvString(entry.s) + ";" +
|
||||
valueWithUnitToCsv(value)
|
||||
}
|
||||
} else {
|
||||
entry.timestamp.toString() + ";" +
|
||||
dateUtil.dateAndTimeAndSecondsString(entry.timestamp) + ";" +
|
||||
dateUtil.timeString(entry.utcOffset) + ";" +
|
||||
csvString(entry.action) + ";" +
|
||||
csvString(entry.s) + ";;"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun valueWithUnitToCsv(v: ValueWithUnit): String {
|
||||
return when (v.unit) {
|
||||
Units.Timestamp -> dateUtil.dateAndTimeAndSecondsString(v.lValue) + ";" + csvString(R.string.date)
|
||||
Units.TherapyEvent -> csvString(translator.translate(v.sValue)) + ";"
|
||||
Units.R_String -> if (v.lValue.toInt() == 0) csvString(v.iValue) + ";" else ";" //If lValue > 0 it's a formated string, so hidden for
|
||||
Units.Mg_Dl -> if (profileFunction.getUnits()==Constants.MGDL) DecimalFormatter.to0Decimal(v.dValue) + ";" + csvString(Units.Mg_Dl) else DecimalFormatter.to1Decimal(v.dValue/Constants.MMOLL_TO_MGDL) + ";" + csvString(Units.Mmol_L)
|
||||
Units.Mmol_L -> if (profileFunction.getUnits()==Constants.MGDL) DecimalFormatter.to0Decimal(v.dValue*Constants.MMOLL_TO_MGDL) + ";" + csvString(Units.Mg_Dl) else DecimalFormatter.to1Decimal(v.dValue) + ";" + csvString(Units.Mmol_L)
|
||||
Units.U_H, Units.U -> DecimalFormatter.to2Decimal(v.dValue) + ";" + csvString(v.unit)
|
||||
Units.G, Units.M, Units.H, Units.Percent
|
||||
-> v.iValue.toString() + ";" + csvString(v.unit)
|
||||
else -> if (v.sValue != "") { csvString(v.sValue) + ";" + csvString(v.unit)}
|
||||
else if (v.iValue != 0) { v.iValue.toString() + ";" + csvString(v.unit)}
|
||||
else ";"
|
||||
}
|
||||
}
|
||||
|
||||
private fun csvString(action: Action): String = "\"" + translator.translate(action.name).replace("\"", "\"\"") + "\""
|
||||
private fun csvString(unit: Units): String = "\"" + translator.translate(unit.name).replace("\"", "\"\"") + "\""
|
||||
private fun csvString(id: Int): String = if (id != 0) "\"" + resourceHelper.gs(id).replace("\"", "\"\"") + "\"" else ""
|
||||
private fun csvString(s: String): String = if (s != "") "\"" + s.replace("\"", "\"\"") + "\"" else ""
|
||||
}
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.utils
|
|||
import info.nightscout.androidaps.core.R
|
||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
||||
import info.nightscout.androidaps.database.entities.TherapyEvent
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
@ -19,6 +20,7 @@ class Translator @Inject internal constructor(
|
|||
TherapyEvent.Type.MEAL_BOLUS.text -> resourceHelper.gs(R.string.careportal_mealbolus)
|
||||
TherapyEvent.Type.CORRECTION_BOLUS.text -> resourceHelper.gs(R.string.careportal_correctionbolus)
|
||||
TherapyEvent.Type.CARBS_CORRECTION.text -> resourceHelper.gs(R.string.careportal_carbscorrection)
|
||||
TherapyEvent.Type.BOLUS_WIZARD.text -> resourceHelper.gs(R.string.boluswizard)
|
||||
TherapyEvent.Type.COMBO_BOLUS.text -> resourceHelper.gs(R.string.careportal_combobolus)
|
||||
TherapyEvent.Type.ANNOUNCEMENT.text -> resourceHelper.gs(R.string.careportal_announcement)
|
||||
TherapyEvent.Type.NOTE.text -> resourceHelper.gs(R.string.careportal_note)
|
||||
|
@ -41,12 +43,112 @@ class Translator @Inject internal constructor(
|
|||
TherapyEvent.MeterType.FINGER.text -> resourceHelper.gs(R.string.glucosetype_finger)
|
||||
TherapyEvent.MeterType.SENSOR.text -> resourceHelper.gs(R.string.glucosetype_sensor)
|
||||
TherapyEvent.MeterType.MANUAL.text -> resourceHelper.gs(R.string.manual)
|
||||
|
||||
TemporaryTarget.Reason.CUSTOM.text -> resourceHelper.gs(R.string.custom)
|
||||
TemporaryTarget.Reason.HYPOGLYCEMIA.text -> resourceHelper.gs(R.string.hypo)
|
||||
TemporaryTarget.Reason.EATING_SOON.text -> resourceHelper.gs(R.string.eatingsoon)
|
||||
TemporaryTarget.Reason.ACTIVITY.text -> resourceHelper.gs(R.string.activity)
|
||||
TemporaryTarget.Reason.AUTOMATION.text -> resourceHelper.gs(R.string.automation)
|
||||
TemporaryTarget.Reason.WEAR.text -> resourceHelper.gs(R.string.wear)
|
||||
|
||||
Action.BOLUS.name -> resourceHelper.gs(R.string.uel_bolus)
|
||||
Action.BOLUS_ADVISOR.name -> resourceHelper.gs(R.string.uel_bolus_advisor)
|
||||
Action.BOLUS_RECORD.name -> resourceHelper.gs(R.string.uel_bolus_record)
|
||||
Action.EXTENDED_BOLUS.name -> resourceHelper.gs(R.string.uel_extended_bolus)
|
||||
Action.SUPERBOLUS_TBR.name -> resourceHelper.gs(R.string.uel_superbolus_tbr)
|
||||
Action.CARBS.name -> resourceHelper.gs(R.string.uel_carbs)
|
||||
Action.EXTENDED_CARBS.name -> resourceHelper.gs(R.string.uel_extended_carbs)
|
||||
Action.TEMP_BASAL.name -> resourceHelper.gs(R.string.uel_temp_basal)
|
||||
Action.TT.name -> resourceHelper.gs(R.string.uel_tt)
|
||||
Action.NEW_PROFILE.name -> resourceHelper.gs(R.string.uel_new_profile)
|
||||
Action.CLONE_PROFILE.name -> resourceHelper.gs(R.string.uel_clone_profile)
|
||||
Action.STORE_PROFILE.name -> resourceHelper.gs(R.string.uel_store_profile)
|
||||
Action.PROFILE_SWITCH.name -> resourceHelper.gs(R.string.uel_profile_switch)
|
||||
Action.PROFILE_SWITCH_CLONED.name -> resourceHelper.gs(R.string.uel_profile_switch_cloned)
|
||||
Action.CLOSED_LOOP_MODE.name -> resourceHelper.gs(R.string.uel_closed_loop_mode)
|
||||
Action.LGS_LOOP_MODE.name -> resourceHelper.gs(R.string.uel_lgs_loop_mode)
|
||||
Action.OPEN_LOOP_MODE.name -> resourceHelper.gs(R.string.uel_open_loop_mode)
|
||||
Action.LOOP_DISABLED.name -> resourceHelper.gs(R.string.uel_loop_disabled)
|
||||
Action.LOOP_ENABLED.name -> resourceHelper.gs(R.string.uel_loop_enabled)
|
||||
Action.RECONNECT.name -> resourceHelper.gs(R.string.uel_reconnect)
|
||||
Action.DISCONNECT.name -> resourceHelper.gs(R.string.uel_disconnect)
|
||||
Action.RESUME.name -> resourceHelper.gs(R.string.uel_resume)
|
||||
Action.SUSPEND.name -> resourceHelper.gs(R.string.uel_suspend)
|
||||
Action.HW_PUMP_ALLOWED.name -> resourceHelper.gs(R.string.uel_hw_pump_allowed)
|
||||
Action.CLEAR_PAIRING_KEYS.name -> resourceHelper.gs(R.string.uel_clear_pairing_keys)
|
||||
Action.ACCEPTS_TEMP_BASAL.name -> resourceHelper.gs(R.string.uel_accepts_temp_basal)
|
||||
Action.CANCEL_TEMP_BASAL.name -> resourceHelper.gs(R.string.uel_cancel_temp_basal)
|
||||
Action.CANCEL_EXTENDED_BOLUS.name -> resourceHelper.gs(R.string.uel_cancel_extended_bolus)
|
||||
Action.CANCEL_TT.name -> resourceHelper.gs(R.string.uel_cancel_tt)
|
||||
Action.CAREPORTAL.name -> resourceHelper.gs(R.string.uel_careportal)
|
||||
Action.CALIBRATION.name -> resourceHelper.gs(R.string.uel_calibration)
|
||||
Action.PRIME_BOLUS.name -> resourceHelper.gs(R.string.uel_prime_bolus)
|
||||
Action.TREATMENT.name -> resourceHelper.gs(R.string.uel_treatment)
|
||||
Action.CAREPORTAL_NS_REFRESH.name -> resourceHelper.gs(R.string.uel_careportal_ns_refresh)
|
||||
Action.PROFILE_SWITCH_NS_REFRESH.name -> resourceHelper.gs(R.string.uel_profile_switch_ns_refresh)
|
||||
Action.TREATMENTS_NS_REFRESH.name -> resourceHelper.gs(R.string.uel_treatments_ns_refresh)
|
||||
Action.TT_NS_REFRESH.name -> resourceHelper.gs(R.string.uel_tt_ns_refresh)
|
||||
Action.AUTOMATION_REMOVED.name -> resourceHelper.gs(R.string.uel_automation_removed)
|
||||
Action.BG_REMOVED.name -> resourceHelper.gs(R.string.uel_bg_removed)
|
||||
Action.CAREPORTAL_REMOVED.name -> resourceHelper.gs(R.string.uel_careportal_removed)
|
||||
Action.EXTENDED_BOLUS_REMOVED.name -> resourceHelper.gs(R.string.uel_extended_bolus_removed)
|
||||
Action.FOOD_REMOVED.name -> resourceHelper.gs(R.string.uel_food_removed)
|
||||
Action.PROFILE_REMOVED.name -> resourceHelper.gs(R.string.uel_profile_removed)
|
||||
Action.PROFILE_SWITCH_REMOVED.name -> resourceHelper.gs(R.string.uel_profile_switch_removed)
|
||||
Action.RESTART_EVENTS_REMOVED.name -> resourceHelper.gs(R.string.uel_restart_events_removed)
|
||||
Action.TREATMENT_REMOVED.name -> resourceHelper.gs(R.string.uel_treatment_removed)
|
||||
Action.TT_REMOVED.name -> resourceHelper.gs(R.string.uel_tt_removed)
|
||||
Action.NS_PAUSED.name -> resourceHelper.gs(R.string.uel_ns_paused)
|
||||
Action.NS_RESUME.name -> resourceHelper.gs(R.string.uel_ns_resume)
|
||||
Action.NS_QUEUE_CLEARED.name -> resourceHelper.gs(R.string.uel_ns_queue_cleared)
|
||||
Action.NS_SETTINGS_COPIED.name -> resourceHelper.gs(R.string.uel_ns_settings_copied)
|
||||
Action.ERROR_DIALOG_OK.name -> resourceHelper.gs(R.string.uel_error_dialog_ok)
|
||||
Action.ERROR_DIALOG_MUTE.name -> resourceHelper.gs(R.string.uel_error_dialog_mute)
|
||||
Action.ERROR_DIALOG_MUTE_5MIN.name -> resourceHelper.gs(R.string.uel_error_dialog_mute_5min)
|
||||
Action.OBJECTIVE_STARTED.name -> resourceHelper.gs(R.string.uel_objective_started)
|
||||
Action.OBJECTIVE_UNSTARTED.name -> resourceHelper.gs(R.string.uel_objective_unstarted)
|
||||
Action.OBJECTIVES_SKIPPED.name -> resourceHelper.gs(R.string.uel_objectives_skipped)
|
||||
Action.STAT_RESET.name -> resourceHelper.gs(R.string.uel_stat_reset)
|
||||
Action.DELETE_LOGS.name -> resourceHelper.gs(R.string.uel_delete_logs)
|
||||
Action.DELETE_FUTURE_TREATMENTS.name -> resourceHelper.gs(R.string.uel_delete_future_treatments)
|
||||
Action.EXPORT_SETTINGS.name -> resourceHelper.gs(R.string.uel_export_settings)
|
||||
Action.IMPORT_SETTINGS.name -> resourceHelper.gs(R.string.uel_import_settings)
|
||||
Action.RESET_DATABASES.name -> resourceHelper.gs(R.string.uel_reset_databases)
|
||||
Action.EXPORT_DATABASES.name -> resourceHelper.gs(R.string.uel_export_databases)
|
||||
Action.IMPORT_DATABASES.name -> resourceHelper.gs(R.string.uel_import_databases)
|
||||
Action.OTP_EXPORT.name -> resourceHelper.gs(R.string.uel_otp_export)
|
||||
Action.OTP_RESET.name -> resourceHelper.gs(R.string.uel_otp_reset)
|
||||
Action.SMS_BASAL.name -> resourceHelper.gs(R.string.uel_sms_basal)
|
||||
Action.SMS_BOLUS.name -> resourceHelper.gs(R.string.uel_sms_bolus)
|
||||
Action.SMS_CAL.name -> resourceHelper.gs(R.string.uel_sms_cal)
|
||||
Action.SMS_CARBS.name -> resourceHelper.gs(R.string.uel_sms_carbs)
|
||||
Action.SMS_EXTENDED_BOLUS.name -> resourceHelper.gs(R.string.uel_sms_extended_bolus)
|
||||
Action.SMS_LOOP_DISABLED.name -> resourceHelper.gs(R.string.uel_sms_loop_disabled)
|
||||
Action.SMS_LOOP_ENABLED.name -> resourceHelper.gs(R.string.uel_sms_loop_enabled)
|
||||
Action.SMS_LOOP_RESUME.name -> resourceHelper.gs(R.string.uel_sms_loop_resume)
|
||||
Action.SMS_LOOP_SUSPEND.name -> resourceHelper.gs(R.string.uel_sms_loop_suspend)
|
||||
Action.SMS_PROFILE.name -> resourceHelper.gs(R.string.uel_sms_profile)
|
||||
Action.SMS_PUMP_CONNECT.name -> resourceHelper.gs(R.string.uel_sms_pump_connect)
|
||||
Action.SMS_PUMP_DISCONNECT.name -> resourceHelper.gs(R.string.uel_sms_pump_disconnect)
|
||||
Action.SMS_SMS.name -> resourceHelper.gs(R.string.uel_sms_sms)
|
||||
Action.SMS_TT.name -> resourceHelper.gs(R.string.uel_sms_tt)
|
||||
Action.TT_DELETED_FROM_NS.name -> resourceHelper.gs(R.string.uel_tt_deleted_from_ns)
|
||||
Action.TT_FROM_NS.name -> resourceHelper.gs(R.string.uel_tt_from_ns)
|
||||
Action.TT_CANCELED_FROM_NS.name -> resourceHelper.gs(R.string.uel_tt_canceleted_from_ns)
|
||||
Action.CAREPORTAL_DELETED_FROM_NS.name -> resourceHelper.gs(R.string.uel_careportal_deleted_from_ns)
|
||||
Action.CAREPORTAL_FROM_NS.name -> resourceHelper.gs(R.string.uel_careportal_from_ns)
|
||||
Action.EXPORT_CSV.name -> resourceHelper.gs(R.string.uel_export_csv)
|
||||
|
||||
Units.Mg_Dl.name -> resourceHelper.gs(R.string.mgdl)
|
||||
Units.Mmol_L.name -> resourceHelper.gs(R.string.mmol)
|
||||
Units.U.name -> resourceHelper.gs(R.string.insulin_unit_shortname)
|
||||
Units.U_H.name -> resourceHelper.gs(R.string.profile_ins_units_per_hour)
|
||||
Units.G.name -> resourceHelper.gs(R.string.shortgram)
|
||||
Units.M.name -> resourceHelper.gs(R.string.shortminute)
|
||||
Units.H.name -> resourceHelper.gs(R.string.shorthour)
|
||||
Units.Percent.name -> resourceHelper.gs(R.string.shortpercent)
|
||||
Units.None.name -> ""
|
||||
|
||||
else -> resourceHelper.gs(R.string.unknown)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package info.nightscout.androidaps.utils.extensions
|
||||
|
||||
import info.nightscout.androidaps.core.R
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
|
||||
fun ColorGroup.colorId(): Int {
|
||||
return when (this) {
|
||||
ColorGroup.InsulinTreatment -> R.color.basal
|
||||
ColorGroup.CarbTreatment -> R.color.carbs
|
||||
ColorGroup.TT -> R.color.tempTargetConfirmation
|
||||
ColorGroup.Profile -> R.color.white
|
||||
ColorGroup.Loop -> R.color.loopClosed
|
||||
ColorGroup.Careportal -> R.color.high
|
||||
ColorGroup.Pump -> R.color.iob
|
||||
ColorGroup.Aaps -> R.color.defaulttext
|
||||
else -> R.color.defaulttext
|
||||
}
|
||||
}
|
||||
|
|
@ -5,11 +5,11 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6.384,15.052c-0.018,-0.323 0.025,-0.625 0.418,-0.671c0.36,-0.042 0.49,0.218 0.531,0.516c0.155,1.131 0.771,1.799 1.92,1.948c0.336,0.043 0.592,0.192 0.528,0.573c-0.059,0.351 -0.373,0.388 -0.654,0.387C7.775,17.801 6.4,16.415 6.384,15.052z"
|
||||
android:fillColor="#E9375C"/>
|
||||
android:fillColor="@color/calibration"/>
|
||||
<path
|
||||
android:pathData="M18.817,9.875c-0.377,-1.485 -1.932,-3.719 -2.256,-3.719c-0.325,0 -1.884,2.238 -2.26,3.721c-0.251,0.991 0.067,1.842 0.943,2.421c0.855,0.565 1.778,0.556 2.632,-0.008C18.755,11.712 19.071,10.874 18.817,9.875zM17.437,11.623c-0.297,0.196 -0.595,0.295 -0.886,0.295c-0.286,0 -0.577,-0.097 -0.866,-0.287c-0.586,-0.387 -0.779,-0.882 -0.608,-1.558c0.236,-0.933 0.997,-2.169 1.484,-2.813c0.486,0.644 1.244,1.878 1.481,2.812C18.213,10.745 18.021,11.237 17.437,11.623z"
|
||||
android:fillColor="#E83258"/>
|
||||
android:fillColor="@color/calibration"/>
|
||||
<path
|
||||
android:pathData="M13.737,13.869c-0.726,-2.859 -3.893,-7.275 -4.343,-7.275c-0.45,0 -3.627,4.425 -4.349,7.278c-0.483,1.908 0.128,3.546 1.816,4.66c1.646,1.087 3.422,1.07 5.067,-0.015C13.617,17.403 14.225,15.791 13.737,13.869zM11.487,17.85c-0.694,0.457 -1.405,0.689 -2.112,0.689c-0.698,0 -1.396,-0.227 -2.074,-0.675c-1.389,-0.916 -1.887,-2.193 -1.481,-3.796c0.563,-2.22 3.332,-6.141 3.574,-6.141s3.003,3.917 3.568,6.138C13.368,15.663 12.871,16.937 11.487,17.85z"
|
||||
android:fillColor="#E83258"/>
|
||||
android:fillColor="@color/calibration"/>
|
||||
</vector>
|
||||
|
|
|
@ -25,22 +25,34 @@
|
|||
<color name="errorAlertBackground">#FFFF5555</color>
|
||||
<color name="errorAlertHeaderText">#FF000000</color>
|
||||
<color name="examinedProfile">#FFFF5555</color>
|
||||
<color name="defaulttext">#BBBBBB</color>
|
||||
|
||||
<!-- Treatment-->
|
||||
<color name="tempbasal">#C803A9F4</color>
|
||||
<color name="list_delimiter">#505050</color>
|
||||
<color name="basal">#00ffff</color>
|
||||
|
||||
|
||||
<!-- Loop -->
|
||||
<color name="loopDisconnected">#939393</color>
|
||||
<color name="loopClosed">#00C03E</color>
|
||||
<color name="loopSuspended">#FFFF13</color>
|
||||
<color name="loopOpened">#4983D7</color>
|
||||
<color name="loopDisabled">#FF1313</color>
|
||||
|
||||
<!-- BgReading-->
|
||||
<color name="inrange">#00FF00</color>
|
||||
<color name="low">#FF0000</color>
|
||||
<color name="high">#FFFF00</color>
|
||||
<color name="iob">#1e88e5</color>
|
||||
<color name="extendedBolus">#67DFE8</color>
|
||||
<color name="iobPredAS">#1ea3e5</color>
|
||||
<color name="cob">#FFFB8C00</color>
|
||||
<color name="carbs">#FFFB8C00</color>
|
||||
<color name="uam">#c9bd60</color>
|
||||
<color name="zt">#00d2d2</color>
|
||||
<color name="white">#ffffff</color>
|
||||
<color name="calibration">#E83258</color>
|
||||
|
||||
<color name="ribbonDefault">#5a595b</color>
|
||||
<color name="daySelected">#D000FF00</color>
|
||||
|
|
|
@ -118,6 +118,8 @@
|
|||
<string name="eventtype">Event type</string>
|
||||
<string name="mgdl">mg/dl</string>
|
||||
<string name="mmol">mmol/l</string>
|
||||
<string name="shortgram">g</string>
|
||||
<string name="shortpercent">%</string>
|
||||
<string name="advancedsettings_title">Advanced Settings</string>
|
||||
<string name="bluetooth">Bluetooth</string>
|
||||
<string name="btwatchdog_title">BT Watchdog</string>
|
||||
|
@ -263,6 +265,7 @@
|
|||
<string name="careportal_pumpbatterychange">Pump Battery Change</string>
|
||||
<string name="careportal_temporarytarget">Temporary target</string>
|
||||
<string name="careportal_temporarytargetcancel">Temporary target cancel</string>
|
||||
<string name="boluswizard">Bolus wizard</string>
|
||||
<string name="glucosetype_finger">Finger</string>
|
||||
<string name="glucosetype_sensor">Sensor</string>
|
||||
<string name="manual">Manual</string>
|
||||
|
@ -395,6 +398,99 @@
|
|||
<string name="saturday_short">S</string>
|
||||
<string name="sunday_short">S</string>
|
||||
|
||||
<!-- User Entry -->
|
||||
<string name="uel_bolus">BOLUS</string>
|
||||
<string name="uel_bolus_advisor">BOLUS ADVISOR</string>
|
||||
<string name="uel_bolus_record">BOLUS RECORD</string>
|
||||
<string name="uel_extended_bolus">EXTENDED BOLUS</string>
|
||||
<string name="uel_superbolus_tbr">SUPERBOLUS TBR</string>
|
||||
<string name="uel_carbs">CARBS</string>
|
||||
<string name="uel_extended_carbs">EXTENDED CARBS</string>
|
||||
<string name="uel_temp_basal">TEMP BASAL</string>
|
||||
<string name="uel_tt">TT</string>
|
||||
<string name="uel_new_profile">NEW PROFILE</string>
|
||||
<string name="uel_clone_profile">CLONE PROFILE</string>
|
||||
<string name="uel_store_profile">STORE PROFILE</string>
|
||||
<string name="uel_profile_switch">PROFILE SWITCH</string>
|
||||
<string name="uel_profile_switch_cloned">PROFILE SWITCH CLONED</string>
|
||||
<string name="uel_closed_loop_mode">CLOSED LOOP MODE</string>
|
||||
<string name="uel_lgs_loop_mode">LGS LOOP MODE</string>
|
||||
<string name="uel_open_loop_mode">OPEN LOOP MODE</string>
|
||||
<string name="uel_loop_disabled">LOOP DISABLED</string>
|
||||
<string name="uel_loop_enabled">LOOP ENABLED</string>
|
||||
<string name="uel_reconnect">RECONNECT</string>
|
||||
<string name="uel_disconnect">DISCONNECT</string>
|
||||
<string name="uel_resume">RESUME</string>
|
||||
<string name="uel_suspend">SUSPEND</string>
|
||||
<string name="uel_hw_pump_allowed">HW PUMP ALLOWED</string>
|
||||
<string name="uel_clear_pairing_keys">CLEAR PAIRING KEYS</string>
|
||||
<string name="uel_accepts_temp_basal">ACCEPTS TEMP BASAL</string>
|
||||
<string name="uel_cancel_temp_basal">CANCEL TEMP BASAL</string>
|
||||
<string name="uel_cancel_extended_bolus">CANCEL EXTENDED BOLUS</string>
|
||||
<string name="uel_cancel_tt">CANCEL TT</string>
|
||||
<string name="uel_careportal">CAREPORTAL</string>
|
||||
<string name="uel_calibration">CALIBRATION</string>
|
||||
<string name="uel_prime_bolus">PRIME BOLUS</string>
|
||||
<string name="uel_treatment">TREATMENT</string>
|
||||
<string name="uel_careportal_ns_refresh">CAREPORTAL NS REFRESH</string>
|
||||
<string name="uel_profile_switch_ns_refresh">PROFILE SWITCH NS REFRESH</string>
|
||||
<string name="uel_treatments_ns_refresh">TREATMENTS NS REFRESH</string>
|
||||
<string name="uel_tt_ns_refresh">TT NS REFRESH</string>
|
||||
<string name="uel_automation_removed">AUTOMATION REMOVED</string>
|
||||
<string name="uel_bg_removed">BG REMOVED</string>
|
||||
<string name="uel_careportal_removed">CAREPORTAL REMOVED</string>
|
||||
<string name="uel_extended_bolus_removed">EXTENDED BOLUS REMOVED</string>
|
||||
<string name="uel_food_removed">FOOD REMOVED</string>
|
||||
<string name="uel_profile_removed">PROFILE REMOVED</string>
|
||||
<string name="uel_profile_switch_removed">PROFILE SWITCH REMOVED</string>
|
||||
<string name="uel_restart_events_removed">RESTART EVENTS REMOVED</string>
|
||||
<string name="uel_treatment_removed">TREATMENT REMOVED</string>
|
||||
<string name="uel_tt_removed">TT REMOVED</string>
|
||||
<string name="uel_ns_paused">NS PAUSED</string>
|
||||
<string name="uel_ns_resume">NS RESUME</string>
|
||||
<string name="uel_ns_queue_cleared">NS QUEUE CLEARED</string>
|
||||
<string name="uel_ns_settings_copied">NS SETTINGS COPIED</string>
|
||||
<string name="uel_error_dialog_ok">ERROR DIALOG OK</string>
|
||||
<string name="uel_error_dialog_mute">ERROR DIALOG MUTE </string>
|
||||
<string name="uel_error_dialog_mute_5min">ERROR DIALOG MUTE 5MIN</string>
|
||||
<string name="uel_objective_started">OBJECTIVE STARTED</string>
|
||||
<string name="uel_objective_unstarted">OBJECTIVE UNSTARTED</string>
|
||||
<string name="uel_objectives_skipped">OBJECTIVES SKIPPED</string>
|
||||
<string name="uel_stat_reset">STAT RESET</string>
|
||||
<string name="uel_delete_logs">DELETE LOGS</string>
|
||||
<string name="uel_delete_future_treatments">DELETE FUTURE TREATMENTS</string>
|
||||
<string name="uel_export_settings">EXPORT SETTINGS</string>
|
||||
<string name="uel_import_settings">IMPORT SETTINGS</string>
|
||||
<string name="uel_reset_databases">RESET DATABASES</string>
|
||||
<string name="uel_export_databases">EXPORT DATABASES</string>
|
||||
<string name="uel_import_databases">IMPORT DATABASES</string>
|
||||
<string name="uel_otp_export">OTP EXPORT</string>
|
||||
<string name="uel_otp_reset">OTP RESET</string>
|
||||
<string name="uel_sms_basal">SMS BASAL</string>
|
||||
<string name="uel_sms_bolus">SMS BOLUS</string>
|
||||
<string name="uel_sms_cal">SMS CAL</string>
|
||||
<string name="uel_sms_carbs">SMS CARBS</string>
|
||||
<string name="uel_sms_extended_bolus">SMS EXTENDED BOLUS</string>
|
||||
<string name="uel_sms_loop_disabled">SMS LOOP DISABLED</string>
|
||||
<string name="uel_sms_loop_enabled">SMS LOOP ENABLED</string>
|
||||
<string name="uel_sms_loop_resume">SMS LOOP RESUME</string>
|
||||
<string name="uel_sms_loop_suspend">SMS LOOP SUSPEND</string>
|
||||
<string name="uel_sms_profile">SMS PROFILE</string>
|
||||
<string name="uel_sms_pump_connect">SMS PUMP CONNECT</string>
|
||||
<string name="uel_sms_pump_disconnect">SMS PUMP DISCONNECT</string>
|
||||
<string name="uel_sms_sms">SMS SMS</string>
|
||||
<string name="uel_sms_tt">SMS TT</string>
|
||||
<string name="uel_tt_deleted_from_ns">TT DELETED FROM NS</string>
|
||||
<string name="uel_careportal_deleted_from_ns">CAREPORTAL DELETED FROM NS</string>
|
||||
<string name="uel_careportal_from_ns">CAREPORTAL FROM NS</string>
|
||||
<string name="uel_tt_from_ns">TT FROM NS</string>
|
||||
<string name="uel_tt_canceleted_from_ns">TT CANCELED FROM NS</string>
|
||||
<string name="uel_export_csv">EXPORT USER ENTRIES</string>
|
||||
<string name="uel_unknown">UNKNOWN</string>
|
||||
<string name="formated_string">Formated string</string>
|
||||
<string name="ue_export_to_csv">Export User Entries to Excel (csv)</string>
|
||||
<string name="ue_csv_header">"Timestamp;Date;UTC Offset;Action;Note;Value;Unit"</string>
|
||||
|
||||
<plurals name="days">
|
||||
<item quantity="one">%1$d day</item>
|
||||
<item quantity="other">%1$d days</item>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
package info.nightscout.androidaps.plugins.general.maintenance.formats
|
||||
|
||||
import info.nightscout.androidaps.TestBase
|
||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.Translator
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
@ -13,19 +15,20 @@ import org.powermock.modules.junit4.PowerMockRunner
|
|||
import java.io.File
|
||||
|
||||
@RunWith(PowerMockRunner::class)
|
||||
@PrepareForTest(File::class)
|
||||
|
||||
@PrepareForTest(File::class, Translator::class)
|
||||
class ClassicPrefsFormatTest : TestBase() {
|
||||
|
||||
@Mock lateinit var resourceHelper: ResourceHelper
|
||||
@Mock lateinit var sp: SP
|
||||
@Mock lateinit var dateUtil: DateUtil
|
||||
@Mock lateinit var translator: Translator
|
||||
@Mock lateinit var profileFunction: ProfileFunction
|
||||
@Mock lateinit var file: MockedFile
|
||||
|
||||
@Test
|
||||
fun preferenceLoadingTest() {
|
||||
val test = "key1::val1\nkeyB::valB"
|
||||
|
||||
val classicFormat = ClassicPrefsFormat(resourceHelper, SingleStringStorage(test))
|
||||
val classicFormat = ClassicPrefsFormat(resourceHelper, dateUtil, translator, profileFunction, SingleStringStorage(test))
|
||||
val prefs = classicFormat.loadPreferences(getMockedFile(), "")
|
||||
|
||||
Assert.assertEquals(prefs.values.size, 2)
|
||||
|
@ -37,7 +40,7 @@ class ClassicPrefsFormatTest : TestBase() {
|
|||
@Test
|
||||
fun preferenceSavingTest() {
|
||||
val storage = SingleStringStorage("")
|
||||
val classicFormat = ClassicPrefsFormat(resourceHelper, storage)
|
||||
val classicFormat = ClassicPrefsFormat(resourceHelper, dateUtil, translator, profileFunction, storage)
|
||||
val prefs = Prefs(
|
||||
mapOf(
|
||||
"key1" to "A",
|
||||
|
|
|
@ -17,4 +17,5 @@ android {
|
|||
|
||||
dependencies {
|
||||
implementation project(':core')
|
||||
implementation project(':database')
|
||||
}
|
|
@ -10,6 +10,7 @@ import android.view.ViewGroup
|
|||
import dagger.android.support.DaggerFragment
|
||||
import info.nightscout.androidaps.activities.TDDStatsActivity
|
||||
import info.nightscout.androidaps.dana.databinding.DanarFragmentBinding
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import info.nightscout.androidaps.dialogs.ProfileViewerDialog
|
||||
import info.nightscout.androidaps.events.EventExtendedBolusChange
|
||||
import info.nightscout.androidaps.events.EventInitializationChanged
|
||||
|
@ -108,7 +109,7 @@ class DanaFragment : DaggerFragment() {
|
|||
binding.btconnection.setOnLongClickListener {
|
||||
activity?.let {
|
||||
OKDialog.showConfirmation(it, resourceHelper.gs(R.string.resetpairing)) {
|
||||
uel.log("CLEAR PAIRING KEYS")
|
||||
uel.log(Action.CLEAR_PAIRING_KEYS)
|
||||
(activePlugin.activePump as DanaPumpInterface).clearPairing()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 4,
|
||||
"identityHash": "e8b8785efbd1699431eef90a5b441ed3",
|
||||
"identityHash": "c6cb19c6cfa6d0fb738b3f58818172ff",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "apsResults",
|
||||
|
@ -2699,7 +2699,7 @@
|
|||
},
|
||||
{
|
||||
"tableName": "userEntry",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `timestamp` INTEGER NOT NULL, `utcOffset` INTEGER NOT NULL, `action` TEXT NOT NULL, `s` TEXT NOT NULL, `d1` REAL NOT NULL, `d2` REAL NOT NULL, `i1` INTEGER NOT NULL, `i2` INTEGER NOT NULL)",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `timestamp` INTEGER NOT NULL, `utcOffset` INTEGER NOT NULL, `action` TEXT NOT NULL, `s` TEXT NOT NULL, `values` TEXT NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
|
@ -2732,27 +2732,9 @@
|
|||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "d1",
|
||||
"columnName": "d1",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "d2",
|
||||
"columnName": "d2",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "i1",
|
||||
"columnName": "i1",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "i2",
|
||||
"columnName": "i2",
|
||||
"affinity": "INTEGER",
|
||||
"fieldPath": "values",
|
||||
"columnName": "values",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
|
@ -2769,7 +2751,7 @@
|
|||
"views": [],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e8b8785efbd1699431eef90a5b441ed3')"
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c6cb19c6cfa6d0fb738b3f58818172ff')"
|
||||
]
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -6,7 +6,7 @@ import androidx.room.TypeConverters
|
|||
import info.nightscout.androidaps.database.daos.*
|
||||
import info.nightscout.androidaps.database.entities.*
|
||||
|
||||
const val DATABASE_VERSION = 5
|
||||
const val DATABASE_VERSION = 6
|
||||
|
||||
@Database(version = DATABASE_VERSION,
|
||||
entities = [APSResult::class, Bolus::class, BolusCalculatorResult::class, Carbs::class,
|
||||
|
|
|
@ -5,11 +5,44 @@ import info.nightscout.androidaps.database.data.Block
|
|||
import info.nightscout.androidaps.database.data.TargetBlock
|
||||
import info.nightscout.androidaps.database.embedments.InterfaceIDs
|
||||
import info.nightscout.androidaps.database.entities.*
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
|
||||
class Converters {
|
||||
|
||||
@TypeConverter
|
||||
fun fromAction(action: Action?) = action?.name
|
||||
|
||||
@TypeConverter
|
||||
fun toAction(action: String?) = action?.let { Action.fromString(it) }
|
||||
|
||||
@TypeConverter
|
||||
fun fromMutableListOfValueWithUnit(values: MutableList<ValueWithUnit>?): String? {
|
||||
if (values == null) return null
|
||||
val jsonArray = JSONArray()
|
||||
values.forEach {
|
||||
if (it.condition) {
|
||||
val jsonObject = JSONObject()
|
||||
jsonObject.put("dValue", it.dValue).put("iValue", it.iValue).put("lValue", it.lValue).put("sValue", it.sValue).put("unit", it.unit.name)
|
||||
jsonArray.put(jsonObject)
|
||||
}
|
||||
}
|
||||
return jsonArray.toString()
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun toMutableListOfValueWithUnit(jsonString: String?): MutableList<ValueWithUnit>? {
|
||||
if (jsonString == null) return null
|
||||
val jsonArray = JSONArray(jsonString)
|
||||
val list = mutableListOf<ValueWithUnit>()
|
||||
for (i in 0 until jsonArray.length()) {
|
||||
val jsonObject = jsonArray.getJSONObject(i)
|
||||
list.add(ValueWithUnit(jsonObject.getDouble("dValue"), jsonObject.getInt("iValue"), jsonObject.getLong("lValue"), jsonObject.getString("sValue"), Units.fromString(jsonObject.getString("unit"))))
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun fromBolusType(bolusType: Bolus.Type?) = bolusType?.name
|
||||
|
||||
|
|
|
@ -21,16 +21,17 @@ open class DatabaseModule {
|
|||
internal fun provideAppDatabase(context: Context, @DbFileName fileName: String) =
|
||||
Room
|
||||
.databaseBuilder(context, AppDatabase::class.java, fileName)
|
||||
.addMigrations(migration1to2)
|
||||
.addMigrations(migration5to6)
|
||||
.fallbackToDestructiveMigration()
|
||||
.build()
|
||||
|
||||
@Qualifier
|
||||
annotation class DbFileName
|
||||
|
||||
private val migration1to2 = object : Migration(1, 2) {
|
||||
private val migration5to6 = object : Migration(5, 6) {
|
||||
override fun migrate(database: SupportSQLiteDatabase) {
|
||||
database.execSQL("CREATE TABLE IF NOT EXISTS userEntry (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `timestamp` INTEGER NOT NULL, `utcOffset` INTEGER NOT NULL, `action` TEXT NOT NULL, `s` TEXT NOT NULL, `d1` REAL NOT NULL, `d2` REAL NOT NULL, `i1` INTEGER NOT NULL, `i2` INTEGER NOT NULL)")
|
||||
database.execSQL("DROP TABLE IF EXISTS userEntry")
|
||||
database.execSQL("CREATE TABLE userEntry (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `timestamp` INTEGER NOT NULL, `utcOffset` INTEGER NOT NULL, `action` TEXT NOT NULL, `s` TEXT NOT NULL, `values` TEXT NOT NULL)")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@ package info.nightscout.androidaps.database.entities
|
|||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import info.nightscout.androidaps.database.TABLE_USER_ENTRY
|
||||
import info.nightscout.androidaps.database.interfaces.DBEntry
|
||||
import info.nightscout.androidaps.database.interfaces.DBEntryWithTime
|
||||
|
@ -13,10 +14,149 @@ data class UserEntry(
|
|||
override var id: Long = 0L,
|
||||
override var timestamp: Long,
|
||||
override var utcOffset: Long = TimeZone.getDefault().getOffset(timestamp).toLong(),
|
||||
var action: String,
|
||||
var action: Action,
|
||||
var s: String,
|
||||
var d1: Double,
|
||||
var d2: Double,
|
||||
var i1: Int,
|
||||
var i2: Int
|
||||
) : DBEntry, DBEntryWithTime
|
||||
var values: MutableList<ValueWithUnit>
|
||||
) : DBEntry, DBEntryWithTime {
|
||||
enum class Action (val colorGroup: ColorGroup) {
|
||||
@SerializedName("BOLUS") BOLUS (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("BOLUS_ADVISOR") BOLUS_ADVISOR (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("BOLUS_RECORD") BOLUS_RECORD (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("EXTENDED_BOLUS") EXTENDED_BOLUS (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("SUPERBOLUS_TBR") SUPERBOLUS_TBR (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("CARBS") CARBS (ColorGroup.CarbTreatment),
|
||||
@SerializedName("EXTENDED_CARBS") EXTENDED_CARBS (ColorGroup.CarbTreatment),
|
||||
@SerializedName("TEMP_BASAL") TEMP_BASAL (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("TT") TT (ColorGroup.TT),
|
||||
@SerializedName("NEW_PROFILE") NEW_PROFILE (ColorGroup.Profile),
|
||||
@SerializedName("CLONE_PROFILE") CLONE_PROFILE (ColorGroup.Profile),
|
||||
@SerializedName("STORE_PROFILE") STORE_PROFILE (ColorGroup.Profile),
|
||||
@SerializedName("PROFILE_SWITCH") PROFILE_SWITCH (ColorGroup.Profile),
|
||||
@SerializedName("PROFILE_SWITCH_CLONED") PROFILE_SWITCH_CLONED (ColorGroup.Profile),
|
||||
@SerializedName("CLOSED_LOOP_MODE") CLOSED_LOOP_MODE (ColorGroup.Loop),
|
||||
@SerializedName("LGS_LOOP_MODE") LGS_LOOP_MODE (ColorGroup.Loop),
|
||||
@SerializedName("OPEN_LOOP_MODE") OPEN_LOOP_MODE (ColorGroup.Loop),
|
||||
@SerializedName("LOOP_DISABLED") LOOP_DISABLED (ColorGroup.Loop),
|
||||
@SerializedName("LOOP_ENABLED") LOOP_ENABLED (ColorGroup.Loop),
|
||||
@SerializedName("RECONNECT") RECONNECT (ColorGroup.Pump),
|
||||
@SerializedName("DISCONNECT") DISCONNECT (ColorGroup.Pump),
|
||||
@SerializedName("RESUME") RESUME (ColorGroup.Loop),
|
||||
@SerializedName("SUSPEND") SUSPEND (ColorGroup.Loop),
|
||||
@SerializedName("HW_PUMP_ALLOWED") HW_PUMP_ALLOWED (ColorGroup.Pump),
|
||||
@SerializedName("CLEAR_PAIRING_KEYS") CLEAR_PAIRING_KEYS (ColorGroup.Pump),
|
||||
@SerializedName("ACCEPTS_TEMP_BASAL") ACCEPTS_TEMP_BASAL (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("CANCEL_TEMP_BASAL") CANCEL_TEMP_BASAL (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("CANCEL_EXTENDED_BOLUS") CANCEL_EXTENDED_BOLUS (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("CANCEL_TT") CANCEL_TT (ColorGroup.TT),
|
||||
@SerializedName("CAREPORTAL") CAREPORTAL (ColorGroup.Careportal),
|
||||
@SerializedName("CALIBRATION") CALIBRATION (ColorGroup.Careportal),
|
||||
@SerializedName("PRIME_BOLUS") PRIME_BOLUS (ColorGroup.Careportal),
|
||||
@SerializedName("TREATMENT") TREATMENT (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("CAREPORTAL_NS_REFRESH") CAREPORTAL_NS_REFRESH (ColorGroup.Aaps),
|
||||
@SerializedName("PROFILE_SWITCH_NS_REFRESH") PROFILE_SWITCH_NS_REFRESH (ColorGroup.Aaps),
|
||||
@SerializedName("TREATMENTS_NS_REFRESH") TREATMENTS_NS_REFRESH (ColorGroup.Aaps),
|
||||
@SerializedName("TT_NS_REFRESH") TT_NS_REFRESH (ColorGroup.Aaps),
|
||||
@SerializedName("AUTOMATION_REMOVED") AUTOMATION_REMOVED (ColorGroup.Aaps),
|
||||
@SerializedName("BG_REMOVED") BG_REMOVED (ColorGroup.Careportal),
|
||||
@SerializedName("CAREPORTAL_REMOVED") CAREPORTAL_REMOVED (ColorGroup.Careportal),
|
||||
@SerializedName("EXTENDED_BOLUS_REMOVED") EXTENDED_BOLUS_REMOVED (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("FOOD_REMOVED") FOOD_REMOVED (ColorGroup.Careportal),
|
||||
@SerializedName("PROFILE_REMOVED") PROFILE_REMOVED (ColorGroup.Profile),
|
||||
@SerializedName("PROFILE_SWITCH_REMOVED") PROFILE_SWITCH_REMOVED (ColorGroup.Profile),
|
||||
@SerializedName("RESTART_EVENTS_REMOVED") RESTART_EVENTS_REMOVED (ColorGroup.Aaps),
|
||||
@SerializedName("TREATMENT_REMOVED") TREATMENT_REMOVED (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("TT_REMOVED") TT_REMOVED (ColorGroup.TT),
|
||||
@SerializedName("NS_PAUSED") NS_PAUSED (ColorGroup.Aaps),
|
||||
@SerializedName("NS_RESUME") NS_RESUME (ColorGroup.Aaps),
|
||||
@SerializedName("NS_QUEUE_CLEARED") NS_QUEUE_CLEARED (ColorGroup.Aaps),
|
||||
@SerializedName("NS_SETTINGS_COPIED") NS_SETTINGS_COPIED (ColorGroup.Aaps),
|
||||
@SerializedName("ERROR_DIALOG_OK") ERROR_DIALOG_OK (ColorGroup.Aaps),
|
||||
@SerializedName("ERROR_DIALOG_MUTE") ERROR_DIALOG_MUTE (ColorGroup.Aaps),
|
||||
@SerializedName("ERROR_DIALOG_MUTE_5MIN") ERROR_DIALOG_MUTE_5MIN (ColorGroup.Aaps),
|
||||
@SerializedName("OBJECTIVE_STARTED") OBJECTIVE_STARTED (ColorGroup.Aaps),
|
||||
@SerializedName("OBJECTIVE_UNSTARTED") OBJECTIVE_UNSTARTED (ColorGroup.Aaps),
|
||||
@SerializedName("OBJECTIVES_SKIPPED") OBJECTIVES_SKIPPED (ColorGroup.Aaps),
|
||||
@SerializedName("STAT_RESET") STAT_RESET (ColorGroup.Aaps),
|
||||
@SerializedName("DELETE_LOGS") DELETE_LOGS (ColorGroup.Aaps),
|
||||
@SerializedName("DELETE_FUTURE_TREATMENTS") DELETE_FUTURE_TREATMENTS (ColorGroup.Aaps),
|
||||
@SerializedName("EXPORT_SETTINGS") EXPORT_SETTINGS (ColorGroup.Aaps),
|
||||
@SerializedName("IMPORT_SETTINGS") IMPORT_SETTINGS (ColorGroup.Aaps),
|
||||
@SerializedName("RESET_DATABASES") RESET_DATABASES (ColorGroup.Aaps),
|
||||
@SerializedName("EXPORT_DATABASES") EXPORT_DATABASES (ColorGroup.Aaps),
|
||||
@SerializedName("IMPORT_DATABASES") IMPORT_DATABASES (ColorGroup.Aaps),
|
||||
@SerializedName("OTP_EXPORT") OTP_EXPORT (ColorGroup.Aaps),
|
||||
@SerializedName("OTP_RESET") OTP_RESET (ColorGroup.Aaps),
|
||||
@SerializedName("SMS_BASAL") SMS_BASAL (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("SMS_BOLUS") SMS_BOLUS (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("SMS_CAL") SMS_CAL (ColorGroup.Careportal),
|
||||
@SerializedName("SMS_CARBS") SMS_CARBS (ColorGroup.CarbTreatment),
|
||||
@SerializedName("SMS_EXTENDED_BOLUS") SMS_EXTENDED_BOLUS (ColorGroup.InsulinTreatment),
|
||||
@SerializedName("SMS_LOOP_DISABLED") SMS_LOOP_DISABLED (ColorGroup.Loop),
|
||||
@SerializedName("SMS_LOOP_ENABLED") SMS_LOOP_ENABLED (ColorGroup.Loop),
|
||||
@SerializedName("SMS_LOOP_RESUME") SMS_LOOP_RESUME (ColorGroup.Loop),
|
||||
@SerializedName("SMS_LOOP_SUSPEND") SMS_LOOP_SUSPEND (ColorGroup.Loop),
|
||||
@SerializedName("SMS_PROFILE") SMS_PROFILE (ColorGroup.Profile),
|
||||
@SerializedName("SMS_PUMP_CONNECT") SMS_PUMP_CONNECT (ColorGroup.Pump),
|
||||
@SerializedName("SMS_PUMP_DISCONNECT") SMS_PUMP_DISCONNECT (ColorGroup.Pump),
|
||||
@SerializedName("SMS_SMS") SMS_SMS (ColorGroup.Aaps),
|
||||
@SerializedName("SMS_TT") SMS_TT (ColorGroup.TT),
|
||||
@SerializedName("TT_DELETED_FROM_NS") TT_DELETED_FROM_NS (ColorGroup.TT),
|
||||
@SerializedName("CAREPORTAL_DELETED_FROM_NS") CAREPORTAL_DELETED_FROM_NS (ColorGroup.Careportal),
|
||||
@SerializedName("CAREPORTAL_FROM_NS") CAREPORTAL_FROM_NS (ColorGroup.Careportal),
|
||||
@SerializedName("TT_FROM_NS") TT_FROM_NS (ColorGroup.TT),
|
||||
@SerializedName("TT_CANCELED_FROM_NS") TT_CANCELED_FROM_NS (ColorGroup.TT),
|
||||
@SerializedName("EXPORT_CSV") EXPORT_CSV (ColorGroup.Aaps),
|
||||
@SerializedName("UNKNOWN") UNKNOWN (ColorGroup.Aaps)
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun fromString(source: String?) = values().firstOrNull { it.name == source } ?: UNKNOWN
|
||||
}
|
||||
}
|
||||
data class ValueWithUnit (val dValue: Double=0.0, val iValue: Int=0, val lValue: Long=0, val sValue: String="", val unit: Units=Units.None, val condition:Boolean=true){
|
||||
constructor(dvalue: Double, unit: Units, condition:Boolean = true) : this(dvalue, 0, 0, "", unit, condition)
|
||||
constructor(ivalue: Int, unit: Units, condition:Boolean = true) : this(0.0, ivalue, 0, "", unit, condition)
|
||||
constructor(lvalue: Long, unit: Units, condition:Boolean = true) : this(0.0,0, lvalue, "", unit, condition)
|
||||
constructor(svalue: String, unit:Units) : this(0.0,0, 0, svalue, unit, svalue != "")
|
||||
constructor(dvalue: Double, unit:String) : this(dvalue,0, 0, "", Units.fromText(unit))
|
||||
constructor(rStringRef: Int, nbParam: Long) : this(0.0, rStringRef, nbParam, "", Units.R_String, !rStringRef.equals(0)) // additionnal constructors for formated strings with additional values as parameters (define number of parameters as long
|
||||
|
||||
fun value() : Any {
|
||||
if (sValue != "") return sValue
|
||||
if (!dValue.equals(0.0)) return dValue
|
||||
if (!iValue.equals(0)) return iValue
|
||||
return lValue
|
||||
}
|
||||
}
|
||||
enum class Units(val text: String) {
|
||||
@SerializedName("None") None (""), //Int or String
|
||||
@SerializedName("Mg_Dl") Mg_Dl ("mg/dl"), //Double
|
||||
@SerializedName("Mmol_L") Mmol_L ("mmol"), //Double
|
||||
@SerializedName("Timestamp") Timestamp("Timestamp"), //long
|
||||
@SerializedName("U") U ("U"), //Double
|
||||
@SerializedName("U_H") U_H ("U/h"), //Double
|
||||
@SerializedName("G") G ("g"), //Int
|
||||
@SerializedName("M") M ("m"), //Int
|
||||
@SerializedName("H") H ("h"), //Int
|
||||
@SerializedName("Percent") Percent ("%"), //Int
|
||||
@SerializedName("TherapyEvent") TherapyEvent ("TherapyEvent"), //String (All enum key translated by Translator function, mainly TherapyEvent)
|
||||
@SerializedName("R_String") R_String ("R.string") //Int
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun fromString(unit: String?) = values().firstOrNull { it.name == unit } ?: None
|
||||
fun fromText(unit: String?) = values().firstOrNull { it.text == unit } ?: None
|
||||
}
|
||||
}
|
||||
|
||||
enum class ColorGroup() {
|
||||
InsulinTreatment,
|
||||
CarbTreatment,
|
||||
TT,
|
||||
Profile,
|
||||
Loop,
|
||||
Careportal,
|
||||
Pump,
|
||||
Aaps
|
||||
}
|
||||
}
|
|
@ -1,26 +1,20 @@
|
|||
package info.nightscout.androidaps.database.transactions
|
||||
|
||||
import info.nightscout.androidaps.database.entities.UserEntry
|
||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||
|
||||
class UserEntryTransaction(
|
||||
val action: String,
|
||||
val s: String = "",
|
||||
val d1: Double = 0.0,
|
||||
val d2: Double = 0.0,
|
||||
val i1: Int = 0,
|
||||
val i2: Int = 0,
|
||||
val action: Action,
|
||||
val s: String,
|
||||
val values: MutableList<ValueWithUnit> = mutableListOf<ValueWithUnit>()
|
||||
) : Transaction<Unit>() {
|
||||
|
||||
override fun run() {
|
||||
|
||||
database.userEntryDao.insert(UserEntry(
|
||||
timestamp = System.currentTimeMillis(),
|
||||
action = action,
|
||||
s = s,
|
||||
d1 = d1,
|
||||
d2 = d2,
|
||||
i1 = i1,
|
||||
i2 = i2
|
||||
values = values
|
||||
))
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue