diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cb897b727c..42a8bc1042 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -25,6 +25,7 @@
+
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/CarbTimer.kt b/app/src/main/java/info/nightscout/androidaps/utils/CarbTimer.kt
new file mode 100644
index 0000000000..5c592d035f
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/utils/CarbTimer.kt
@@ -0,0 +1,91 @@
+package info.nightscout.androidaps.utils
+
+import android.content.Context
+import android.content.Intent
+import android.provider.AlarmClock
+import dagger.android.HasAndroidInjector
+import info.nightscout.androidaps.Constants
+import info.nightscout.androidaps.R
+import info.nightscout.androidaps.plugins.general.automation.AutomationEvent
+import info.nightscout.androidaps.plugins.general.automation.AutomationPlugin
+import info.nightscout.androidaps.plugins.general.automation.actions.ActionAlarm
+import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
+import info.nightscout.androidaps.plugins.general.automation.elements.InputDelta
+import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerBg
+import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerConnector
+import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerDelta
+import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerTime
+import info.nightscout.androidaps.utils.resources.ResourceHelper
+import info.nightscout.androidaps.utils.sharedPreferences.SP
+import java.text.DecimalFormat
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class CarbTimer @Inject constructor(
+ private val sp: SP,
+ private val context: Context,
+ private val injector: HasAndroidInjector,
+ private val resourceHelper: ResourceHelper,
+ private val automationPlugin: AutomationPlugin
+) {
+
+ fun scheduleReminder(time: Long) {
+ if (sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, true)) {
+ Intent(AlarmClock.ACTION_SET_TIMER).apply {
+ val length: Int = ((time - DateUtil.now()) / 1000).toInt()
+ flags = flags or Intent.FLAG_ACTIVITY_NEW_TASK
+ putExtra(AlarmClock.EXTRA_LENGTH, length)
+ putExtra(AlarmClock.EXTRA_SKIP_UI, true)
+ putExtra(AlarmClock.EXTRA_MESSAGE, resourceHelper.gs(R.string.timetoeat))
+ context.startActivity(this)
+ }
+ } else {
+ AutomationEvent(injector).apply {
+ title = resourceHelper.gs(R.string.timetoeat)
+ readOnly = true
+ systemAction = true
+ autoRemove = true
+ trigger = TriggerConnector(injector, TriggerConnector.Type.AND).apply {
+ list.add(TriggerTime(injector, time))
+ }
+ actions.add(ActionAlarm(injector, resourceHelper.gs(R.string.timetoeat)))
+ automationPlugin.addIfNotExists(this)
+ }
+ }
+ }
+
+ fun scheduleEatReminder() {
+ val event = AutomationEvent(injector).apply {
+ title = resourceHelper.gs(R.string.bolusadvisor)
+ readOnly = true
+ systemAction = true
+ autoRemove = true
+ trigger = TriggerConnector(injector, TriggerConnector.Type.OR).apply {
+
+ // Bg under 180 mgdl and dropping by 15 mgdl
+ list.add(TriggerConnector(injector, TriggerConnector.Type.AND).apply {
+ list.add(TriggerBg(injector, 180.0, Constants.MGDL, Comparator.Compare.IS_LESSER))
+ list.add(TriggerDelta(injector, InputDelta(injector, -15.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.DELTA), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
+ list.add(TriggerDelta(injector, InputDelta(injector, -8.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.SHORT_AVERAGE), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
+ })
+ // Bg under 160 mgdl and dropping by 9 mgdl
+ list.add(TriggerConnector(injector, TriggerConnector.Type.AND).apply {
+ list.add(TriggerBg(injector, 160.0, Constants.MGDL, Comparator.Compare.IS_LESSER))
+ list.add(TriggerDelta(injector, InputDelta(injector, -9.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.DELTA), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
+ list.add(TriggerDelta(injector, InputDelta(injector, -5.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.SHORT_AVERAGE), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
+ })
+ // Bg under 145 mgdl and dropping
+ list.add(TriggerConnector(injector, TriggerConnector.Type.AND).apply {
+ list.add(TriggerBg(injector, 145.0, Constants.MGDL, Comparator.Compare.IS_LESSER))
+ list.add(TriggerDelta(injector, InputDelta(injector, 0.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.DELTA), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
+ list.add(TriggerDelta(injector, InputDelta(injector, 0.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.SHORT_AVERAGE), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
+ })
+ }
+ actions.add(ActionAlarm(injector, resourceHelper.gs(R.string.time_to_eat)))
+ }
+
+ automationPlugin.addIfNotExists(event)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt b/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt
index e32f62e61b..b324ad318e 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt
+++ b/app/src/main/java/info/nightscout/androidaps/utils/wizard/BolusWizard.kt
@@ -6,7 +6,6 @@ import android.text.Spanned
import com.google.common.base.Joiner
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Config
-import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.data.DetailedBolusInfo
@@ -22,18 +21,10 @@ import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
-import info.nightscout.androidaps.plugins.general.automation.AutomationEvent
-import info.nightscout.androidaps.plugins.general.automation.AutomationPlugin
-import info.nightscout.androidaps.plugins.general.automation.actions.ActionAlarm
-import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
-import info.nightscout.androidaps.plugins.general.automation.elements.InputDelta
-import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerBg
-import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerConnector
-import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerDelta
-import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerTime
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
import info.nightscout.androidaps.queue.Callback
+import info.nightscout.androidaps.utils.CarbTimer
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.Round
@@ -44,7 +35,6 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
import org.json.JSONException
import org.json.JSONObject
-import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
import kotlin.math.abs
@@ -63,10 +53,10 @@ class BolusWizard @Inject constructor(
@Inject lateinit var commandQueue: CommandQueueProvider
@Inject lateinit var loopPlugin: LoopPlugin
@Inject lateinit var iobCobCalculatorPlugin: IobCobCalculatorPlugin
- @Inject lateinit var automationPlugin: AutomationPlugin
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var config: Config
@Inject lateinit var uel: UserEntryLogger
+ @Inject lateinit var carbTimer: CarbTimer
init {
injector.androidInjector().inject(this)
@@ -368,7 +358,7 @@ class BolusWizard @Inject constructor(
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
ctx.startActivity(i)
} else
- scheduleEatReminder()
+ carbTimer.scheduleEatReminder()
}
})
}
@@ -449,57 +439,9 @@ class BolusWizard @Inject constructor(
}
}
if (useAlarm && carbs > 0 && carbTime > 0) {
- scheduleReminder(dateUtil._now() + T.mins(carbTime.toLong()).msecs())
+ carbTimer.scheduleReminder(dateUtil._now() + T.mins(carbTime.toLong()).msecs())
}
}
})
}
-
- private fun scheduleEatReminder() {
- val event = AutomationEvent(injector).apply {
- title = resourceHelper.gs(R.string.bolusadvisor)
- readOnly = true
- systemAction = true
- autoRemove = true
- trigger = TriggerConnector(injector, TriggerConnector.Type.OR).apply {
-
- // Bg under 180 mgdl and dropping by 15 mgdl
- list.add(TriggerConnector(injector, TriggerConnector.Type.AND).apply {
- list.add(TriggerBg(injector, 180.0, Constants.MGDL, Comparator.Compare.IS_LESSER))
- list.add(TriggerDelta(injector, InputDelta(injector, -15.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.DELTA), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
- list.add(TriggerDelta(injector, InputDelta(injector, -8.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.SHORT_AVERAGE), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
- })
- // Bg under 160 mgdl and dropping by 9 mgdl
- list.add(TriggerConnector(injector, TriggerConnector.Type.AND).apply {
- list.add(TriggerBg(injector, 160.0, Constants.MGDL, Comparator.Compare.IS_LESSER))
- list.add(TriggerDelta(injector, InputDelta(injector, -9.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.DELTA), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
- list.add(TriggerDelta(injector, InputDelta(injector, -5.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.SHORT_AVERAGE), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
- })
- // Bg under 145 mgdl and dropping
- list.add(TriggerConnector(injector, TriggerConnector.Type.AND).apply {
- list.add(TriggerBg(injector, 145.0, Constants.MGDL, Comparator.Compare.IS_LESSER))
- list.add(TriggerDelta(injector, InputDelta(injector, 0.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.DELTA), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
- list.add(TriggerDelta(injector, InputDelta(injector, 0.0, -360.0, 360.0, 1.0, DecimalFormat("0"), InputDelta.DeltaType.SHORT_AVERAGE), Constants.MGDL, Comparator.Compare.IS_EQUAL_OR_LESSER))
- })
- }
- actions.add(ActionAlarm(injector, resourceHelper.gs(R.string.time_to_eat)))
- }
-
- automationPlugin.addIfNotExists(event)
- }
-
- private fun scheduleReminder(time: Long) {
- val event = AutomationEvent(injector).apply {
- title = resourceHelper.gs(R.string.timetoeat)
- readOnly = true
- systemAction = true
- autoRemove = true
- trigger = TriggerConnector(injector, TriggerConnector.Type.AND).apply {
- list.add(TriggerTime(injector, time))
- }
- actions.add(ActionAlarm(injector, resourceHelper.gs(R.string.timetoeat)))
- }
-
- automationPlugin.addIfNotExists(event)
- }
-}
+}
\ No newline at end of file