diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt index 7ebc636587..b9db49b782 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt @@ -18,7 +18,7 @@ import info.nightscout.androidaps.MainActivity import info.nightscout.androidaps.R import info.nightscout.androidaps.annotations.OpenForTesting import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.ValueWrapper import info.nightscout.androidaps.database.entities.OfflineEvent @@ -382,7 +382,7 @@ class LoopPlugin @Inject constructor( if (resultAfterConstraints.isChangeRequested && !commandQueue.bolusInQueue() ) { - val waiting = PumpEnactResult(injector) + val waiting = PumpEnactResultImpl(injector) waiting.queued = true if (resultAfterConstraints.tempBasalRequested) lastRun.tbrSetByPump = waiting if (resultAfterConstraints.bolusRequested()) lastRun.smbSetByPump = waiting @@ -533,18 +533,18 @@ class LoopPlugin @Inject constructor( */ private fun applyTBRRequest(request: APSResult, profile: Profile, callback: Callback?) { if (!request.tempBasalRequested) { - callback?.result(PumpEnactResult(injector).enacted(false).success(true).comment(R.string.nochangerequested))?.run() + callback?.result(PumpEnactResultImpl(injector).enacted(false).success(true).comment(R.string.nochangerequested))?.run() return } val pump = activePlugin.activePump if (!pump.isInitialized()) { aapsLogger.debug(LTag.APS, "applyAPSRequest: " + rh.gs(R.string.pumpNotInitialized)) - callback?.result(PumpEnactResult(injector).comment(R.string.pumpNotInitialized).enacted(false).success(false))?.run() + callback?.result(PumpEnactResultImpl(injector).comment(R.string.pumpNotInitialized).enacted(false).success(false))?.run() return } if (pump.isSuspended()) { aapsLogger.debug(LTag.APS, "applyAPSRequest: " + rh.gs(R.string.pumpsuspended)) - callback?.result(PumpEnactResult(injector).comment(R.string.pumpsuspended).enacted(false).success(false))?.run() + callback?.result(PumpEnactResultImpl(injector).comment(R.string.pumpsuspended).enacted(false).success(false))?.run() return } aapsLogger.debug(LTag.APS, "applyAPSRequest: $request") @@ -558,7 +558,7 @@ class LoopPlugin @Inject constructor( } else { aapsLogger.debug(LTag.APS, "applyAPSRequest: Basal set correctly") callback?.result( - PumpEnactResult(injector).absolute(request.rate).duration(0) + PumpEnactResultImpl(injector).absolute(request.rate).duration(0) .enacted(false).success(true).comment(R.string.basal_set_correctly) )?.run() } @@ -571,7 +571,7 @@ class LoopPlugin @Inject constructor( } else { aapsLogger.debug(LTag.APS, "applyAPSRequest: Basal set correctly") callback?.result( - PumpEnactResult(injector).percent(request.percent).duration(0) + PumpEnactResultImpl(injector).percent(request.percent).duration(0) .enacted(false).success(true).comment(R.string.basal_set_correctly) )?.run() } @@ -582,7 +582,7 @@ class LoopPlugin @Inject constructor( ) { aapsLogger.debug(LTag.APS, "applyAPSRequest: Temp basal set correctly") callback?.result( - PumpEnactResult(injector).percent(request.percent) + PumpEnactResultImpl(injector).percent(request.percent) .enacted(false).success(true).duration(activeTemp.plannedRemainingMinutes) .comment(R.string.let_temp_basal_run) )?.run() @@ -605,7 +605,7 @@ class LoopPlugin @Inject constructor( ) { aapsLogger.debug(LTag.APS, "applyAPSRequest: Temp basal set correctly") callback?.result( - PumpEnactResult(injector).absolute(activeTemp.convertedToAbsolute(now, profile)) + PumpEnactResultImpl(injector).absolute(activeTemp.convertedToAbsolute(now, profile)) .enacted(false).success(true).duration(activeTemp.plannedRemainingMinutes) .comment(R.string.let_temp_basal_run) )?.run() @@ -631,7 +631,7 @@ class LoopPlugin @Inject constructor( if (lastBolusTime != 0L && lastBolusTime + 3 * 60 * 1000 > System.currentTimeMillis()) { aapsLogger.debug(LTag.APS, "SMB requested but still in 3 min interval") callback?.result( - PumpEnactResult(injector) + PumpEnactResultImpl(injector) .comment(R.string.smb_frequency_exceeded) .enacted(false).success(false) )?.run() @@ -639,12 +639,12 @@ class LoopPlugin @Inject constructor( } if (!pump.isInitialized()) { aapsLogger.debug(LTag.APS, "applySMBRequest: " + rh.gs(R.string.pumpNotInitialized)) - callback?.result(PumpEnactResult(injector).comment(R.string.pumpNotInitialized).enacted(false).success(false))?.run() + callback?.result(PumpEnactResultImpl(injector).comment(R.string.pumpNotInitialized).enacted(false).success(false))?.run() return } if (pump.isSuspended()) { aapsLogger.debug(LTag.APS, "applySMBRequest: " + rh.gs(R.string.pumpsuspended)) - callback?.result(PumpEnactResult(injector).comment(R.string.pumpsuspended).enacted(false).success(false))?.run() + callback?.result(PumpEnactResultImpl(injector).comment(R.string.pumpsuspended).enacted(false).success(false))?.run() return } aapsLogger.debug(LTag.APS, "applySMBRequest: $request") diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt index fba1853e2d..4e06233eff 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt @@ -7,6 +7,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.dialogs.BolusProgressDialog import info.nightscout.androidaps.events.EventPreferenceChange import info.nightscout.androidaps.extensions.convertedToAbsolute @@ -132,7 +133,7 @@ open class VirtualPumpPlugin @Inject constructor( var fakeDataDetected = false override fun loadTDDs(): PumpEnactResult { //no result, could read DB in the future? - return PumpEnactResult(injector) + return PumpEnactResultImpl(injector) } override fun isInitialized(): Boolean = true @@ -157,7 +158,7 @@ open class VirtualPumpPlugin @Inject constructor( lastDataTime = System.currentTimeMillis() rxBus.send(EventNewNotification(Notification(Notification.PROFILE_SET_OK, rh.gs(R.string.profile_set_ok), Notification.INFO, 60))) // Do nothing here. we are using database profile - return PumpEnactResult(injector).success(true).enacted(true) + return PumpEnactResultImpl(injector).success(true).enacted(true) } override fun isThisProfileSet(profile: Profile): Boolean = pumpSync.expectedPumpState().profile?.isEqual(profile) ?: false @@ -174,7 +175,7 @@ open class VirtualPumpPlugin @Inject constructor( get() = batteryPercent override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) .success(true) .bolusDelivered(detailedBolusInfo.insulin) .carbsDelivered(detailedBolusInfo.carbs) @@ -190,7 +191,7 @@ open class VirtualPumpPlugin @Inject constructor( rxBus.send(bolusingEvent) delivering += 0.1 if (BolusProgressDialog.stopPressed) - return PumpEnactResult(injector) + return PumpEnactResultImpl(injector) .success(false) .enacted(false) .comment(rh.gs(R.string.stoppressed)) @@ -225,7 +226,7 @@ open class VirtualPumpPlugin @Inject constructor( override fun stopBolusDelivering() {} override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = true result.enacted = true result.isTempCancel = false @@ -242,14 +243,14 @@ open class VirtualPumpPlugin @Inject constructor( pumpType = pumpType ?: PumpType.GENERIC_AAPS, pumpSerial = serialNumber() ) - aapsLogger.debug(LTag.PUMP, "Setting temp basal absolute: $result") + aapsLogger.debug(LTag.PUMP, "Setting temp basal absolute: ${result.toText()}") rxBus.send(EventVirtualPumpUpdateGui()) lastDataTime = System.currentTimeMillis() return result } override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = true result.enacted = true result.percent = percent @@ -267,7 +268,7 @@ open class VirtualPumpPlugin @Inject constructor( pumpType = pumpType ?: PumpType.GENERIC_AAPS, pumpSerial = serialNumber() ) - aapsLogger.debug(LTag.PUMP, "Settings temp basal percent: $result") + aapsLogger.debug(LTag.PUMP, "Settings temp basal percent: ${result.toText()}") rxBus.send(EventVirtualPumpUpdateGui()) lastDataTime = System.currentTimeMillis() return result @@ -291,14 +292,14 @@ open class VirtualPumpPlugin @Inject constructor( pumpType = pumpType ?: PumpType.GENERIC_AAPS, pumpSerial = serialNumber() ) - aapsLogger.debug(LTag.PUMP, "Setting extended bolus: $result") + aapsLogger.debug(LTag.PUMP, "Setting extended bolus: ${result.toText()}") rxBus.send(EventVirtualPumpUpdateGui()) lastDataTime = System.currentTimeMillis() return result } override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = true result.isTempCancel = true result.comment = rh.gs(R.string.virtualpump_resultok) @@ -310,7 +311,7 @@ open class VirtualPumpPlugin @Inject constructor( pumpType = pumpType ?: PumpType.GENERIC_AAPS, pumpSerial = serialNumber() ) - aapsLogger.debug(LTag.PUMP, "Canceling temp basal: $result") + aapsLogger.debug(LTag.PUMP, "Canceling temp basal: ${result.toText()}") rxBus.send(EventVirtualPumpUpdateGui()) } lastDataTime = System.currentTimeMillis() @@ -318,7 +319,7 @@ open class VirtualPumpPlugin @Inject constructor( } override fun cancelExtendedBolus(): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (pumpSync.expectedPumpState().extendedBolus != null) { pumpSync.syncStopExtendedBolusWithPumpId( timestamp = dateUtil.now(), @@ -331,7 +332,7 @@ open class VirtualPumpPlugin @Inject constructor( result.enacted = true result.isTempCancel = true result.comment = rh.gs(R.string.virtualpump_resultok) - aapsLogger.debug(LTag.PUMP, "Canceling extended bolus: $result") + aapsLogger.debug(LTag.PUMP, "Canceling extended bolus: ${result.toText()}") rxBus.send(EventVirtualPumpUpdateGui()) lastDataTime = System.currentTimeMillis() return result diff --git a/app/src/test/java/info/nightscout/androidaps/TestBase.kt b/app/src/test/java/info/nightscout/androidaps/TestBase.kt index 1a4ad8a9cc..ee5264cbde 100644 --- a/app/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/app/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -2,7 +2,7 @@ package info.nightscout.androidaps import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito diff --git a/app/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/app/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt index c533893b3f..4e805f67a5 100644 --- a/app/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ b/app/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt @@ -2,10 +2,11 @@ package info.nightscout.androidaps import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.data.PumpEnactResultImpl +import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump +import info.nightscout.androidaps.interfaces.PumpDescription import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.plugins.common.ManufacturerType import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -43,26 +44,30 @@ class TestPumpPlugin(val injector: HasAndroidInjector) : Pump { override fun waitForDisconnectionInSeconds(): Int = 0 override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) + override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResultImpl(injector) override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet override fun lastDataTime(): Long = lastData override val baseBasalRate: Double = baseBasal override val reservoirLevel: Double = 0.0 override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS override fun model(): PumpType = PumpType.GENERIC_AAPS override fun serialNumber(): String = "1" override fun shortStatus(veryShort: Boolean): String = "" override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun loadTDDs(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun canHandleDST(): Boolean = true override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} } \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt b/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt index 3fc726bfef..e160d208fa 100644 --- a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt @@ -7,7 +7,7 @@ import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.androidaps.dana.DanaPump import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.danars.DanaRSPlugin -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.insight.database.InsightDatabaseDao import info.nightscout.androidaps.insight.database.InsightDbHelper @@ -84,7 +84,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { it.sp = sp it.dateUtil = dateUtil } - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } } @@ -135,12 +135,100 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { objectivesPlugin = ObjectivesPlugin(injector, aapsLogger, rh, activePlugin, sp, config, dateUtil, uel) comboPlugin = ComboPlugin(injector, aapsLogger, rxBus, rh, profileFunction, sp, commandQueue, context, pumpSync, dateUtil, ruffyScripter) danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePlugin, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync) - danaRSPlugin = DanaRSPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, profileFunction, sp, commandQueue, danaPump, pumpSync, detailedBolusInfoStorage, temporaryBasalStorage, fabricPrivacy, dateUtil) + danaRSPlugin = + DanaRSPlugin( + injector, + aapsLogger, + aapsSchedulers, + rxBus, + context, + rh, + constraintChecker, + profileFunction, + sp, + commandQueue, + danaPump, + pumpSync, + detailedBolusInfoStorage, + temporaryBasalStorage, + fabricPrivacy, + dateUtil + ) insightPlugin = LocalInsightPlugin(injector, aapsLogger, rxBus, rh, sp, commandQueue, profileFunction, context, config, dateUtil, insightDbHelper, pumpSync) - openAPSSMBPlugin = OpenAPSSMBPlugin(injector, aapsLogger, rxBus, constraintChecker, rh, profileFunction, context, activePlugin, iobCobCalculator, hardLimits, profiler, sp, dateUtil, repository, glucoseStatusProvider) - openAPSSMBDynamicISFPlugin = OpenAPSSMBDynamicISFPlugin(injector, aapsLogger, rxBus, constraintChecker, rh, profileFunction, context, activePlugin, iobCobCalculator, hardLimits, profiler, sp, dateUtil, repository, glucoseStatusProvider, buildHelper) - openAPSAMAPlugin = OpenAPSAMAPlugin(injector, aapsLogger, rxBus, constraintChecker, rh, profileFunction, context, activePlugin, iobCobCalculator, hardLimits, profiler, fabricPrivacy, dateUtil, repository, glucoseStatusProvider) - safetyPlugin = SafetyPlugin(injector, aapsLogger, rh, sp, rxBus, constraintChecker, openAPSAMAPlugin, openAPSSMBPlugin, openAPSSMBDynamicISFPlugin, sensitivityOref1Plugin, activePlugin, hardLimits, BuildHelperImpl(config, fileListProvider), iobCobCalculator, config, dateUtil) + openAPSSMBPlugin = + OpenAPSSMBPlugin( + injector, + aapsLogger, + rxBus, + constraintChecker, + rh, + profileFunction, + context, + activePlugin, + iobCobCalculator, + hardLimits, + profiler, + sp, + dateUtil, + repository, + glucoseStatusProvider + ) + openAPSSMBDynamicISFPlugin = + OpenAPSSMBDynamicISFPlugin( + injector, + aapsLogger, + rxBus, + constraintChecker, + rh, + profileFunction, + context, + activePlugin, + iobCobCalculator, + hardLimits, + profiler, + sp, + dateUtil, + repository, + glucoseStatusProvider, + buildHelper + ) + openAPSAMAPlugin = + OpenAPSAMAPlugin( + injector, + aapsLogger, + rxBus, + constraintChecker, + rh, + profileFunction, + context, + activePlugin, + iobCobCalculator, + hardLimits, + profiler, + fabricPrivacy, + dateUtil, + repository, + glucoseStatusProvider + ) + safetyPlugin = + SafetyPlugin( + injector, + aapsLogger, + rh, + sp, + rxBus, + constraintChecker, + openAPSAMAPlugin, + openAPSSMBPlugin, + openAPSSMBDynamicISFPlugin, + sensitivityOref1Plugin, + activePlugin, + hardLimits, + BuildHelperImpl(config, fileListProvider), + iobCobCalculator, + config, + dateUtil + ) val constraintsPluginsList = ArrayList() constraintsPluginsList.add(safetyPlugin) constraintsPluginsList.add(objectivesPlugin) diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt index d045ab95ef..67fc7486a9 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt @@ -4,7 +4,7 @@ import android.content.Context import android.widget.LinearLayout import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.JsonHelper @@ -39,7 +39,7 @@ class ActionAlarm(injector: HasAndroidInjector) : Action(injector) { override fun doAction(callback: Callback) { timerUtil.scheduleReminder(10, text.value.takeIf { it.isNotBlank() } ?: rh.gs(R.string.app_name)) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } override fun toJSON(): String { diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt index 9d5141fad0..f64df26bc8 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt @@ -2,7 +2,7 @@ package info.nightscout.automation.actions import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Sources import info.nightscout.androidaps.interfaces.CommandQueue @@ -41,7 +41,7 @@ class ActionLoopDisable(injector: HasAndroidInjector) : Action(injector) { } }) } else { - callback.result(PumpEnactResult(injector).success(true).comment(R.string.alreadydisabled)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.alreadydisabled)).run() } } diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt index 29e6a9f943..65e4d216b0 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt @@ -2,7 +2,7 @@ package info.nightscout.automation.actions import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Sources import info.nightscout.androidaps.interfaces.ConfigBuilder @@ -33,9 +33,9 @@ class ActionLoopEnable(injector: HasAndroidInjector) : Action(injector) { configBuilder.storeSettings("ActionLoopEnable") rxBus.send(EventRefreshOverview("ActionLoopEnable")) uel.log(UserEntry.Action.LOOP_ENABLED, Sources.Automation, title) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } else { - callback.result(PumpEnactResult(injector).success(true).comment(R.string.alreadyenabled)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.alreadyenabled)).run() } } diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopResume.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopResume.kt index 194b154ea9..7a8a304b18 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopResume.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopResume.kt @@ -2,7 +2,7 @@ package info.nightscout.automation.actions import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Sources @@ -45,9 +45,9 @@ class ActionLoopResume(injector: HasAndroidInjector) : Action(injector) { }) rxBus.send(EventRefreshOverview("ActionLoopResume")) uel.log(UserEntry.Action.RESUME, Sources.Automation, title) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } else { - callback.result(PumpEnactResult(injector).success(true).comment(R.string.notsuspended)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.notsuspended)).run() } } diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt index 68b59f70af..71271b4331 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt @@ -3,7 +3,7 @@ package info.nightscout.automation.actions import android.widget.LinearLayout import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Sources import info.nightscout.androidaps.database.entities.ValueWithUnit @@ -40,9 +40,9 @@ class ActionLoopSuspend(injector: HasAndroidInjector) : Action(injector) { UserEntry.Action.SUSPEND, Sources.Automation, title + ": " + rh.gs(R.string.suspendloopforXmin, minutes.getMinutes()), ValueWithUnit.Minute(minutes.getMinutes()) ) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } else { - callback.result(PumpEnactResult(injector).success(true).comment(R.string.alreadysuspended)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.alreadysuspended)).run() } } diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt index a9940d27af..7d6b768427 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt @@ -3,7 +3,7 @@ package info.nightscout.automation.actions import android.widget.LinearLayout import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification @@ -39,7 +39,7 @@ class ActionNotification(injector: HasAndroidInjector) : Action(injector) { rxBus.send(EventNewNotification(notification)) disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(text.value)).subscribe() rxBus.send(EventRefreshOverview("ActionNotification")) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } override fun toJSON(): String { diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt index e0308befd3..9cf909a40b 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt @@ -3,7 +3,7 @@ package info.nightscout.automation.actions import android.widget.LinearLayout import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Sources import info.nightscout.androidaps.database.entities.ValueWithUnit @@ -40,23 +40,23 @@ class ActionProfileSwitch(injector: HasAndroidInjector) : Action(injector) { //Check for uninitialized profileName if (inputProfileName.value == "") { aapsLogger.error(LTag.AUTOMATION, "Selected profile not initialized") - callback.result(PumpEnactResult(injector).success(false).comment(R.string.error_field_must_not_be_empty)).run() + callback.result(PumpEnactResultImpl(injector).success(false).comment(R.string.error_field_must_not_be_empty)).run() return } if (profileFunction.getProfile() == null) { aapsLogger.error(LTag.AUTOMATION, "ProfileFunctions not initialized") - callback.result(PumpEnactResult(injector).success(false).comment(R.string.noprofile)).run() + callback.result(PumpEnactResultImpl(injector).success(false).comment(R.string.noprofile)).run() return } if (inputProfileName.value == activeProfileName) { aapsLogger.debug(LTag.AUTOMATION, "Profile is already switched") - callback.result(PumpEnactResult(injector).success(true).comment(R.string.alreadyset)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.alreadyset)).run() return } val profileStore = activePlugin.activeProfileSource.profile ?: return if (profileStore.getSpecificProfile(inputProfileName.value) == null) { aapsLogger.error(LTag.AUTOMATION, "Selected profile does not exist! - ${inputProfileName.value}") - callback.result(PumpEnactResult(injector).success(false).comment(R.string.notexists)).run() + callback.result(PumpEnactResultImpl(injector).success(false).comment(R.string.notexists)).run() return } uel.log( @@ -65,7 +65,7 @@ class ActionProfileSwitch(injector: HasAndroidInjector) : Action(injector) { ValueWithUnit.Percent(100) ) val result = profileFunction.createProfileSwitch(profileStore, inputProfileName.value, 0, 100, 0, dateUtil.now()) - callback.result(PumpEnactResult(injector).success(result).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(result).comment(R.string.ok)).run() } override fun generateDialog(root: LinearLayout) { diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt index e8204b7bd8..a0e0317213 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt @@ -3,7 +3,7 @@ package info.nightscout.automation.actions import android.widget.LinearLayout import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Sources import info.nightscout.androidaps.database.entities.ValueWithUnit @@ -51,10 +51,10 @@ class ActionProfileSwitchPercent(injector: HasAndroidInjector) : Action(injector ValueWithUnit.Percent(pct.value.toInt()), ValueWithUnit.Minute(duration.value) ) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } else { aapsLogger.error(LTag.AUTOMATION, "Final profile not valid") - callback.result(PumpEnactResult(injector).success(false).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(false).comment(R.string.ok)).run() } } diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt index 2b83fa074c..f1c6fe4a24 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt @@ -3,7 +3,7 @@ package info.nightscout.automation.actions import android.widget.LinearLayout import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.Autotune import info.nightscout.androidaps.interfaces.ProfileFunction @@ -49,11 +49,11 @@ class ActionRunAutotune(injector: HasAndroidInjector) : Action(injector) { message = R.string.autotune_run_with_error aapsLogger.error(LTag.AUTOMATION, "Error during Autotune Run") } - callback.result(PumpEnactResult(injector).success(autotunePlugin.lastRunSuccess).comment(message)).run() + callback.result(PumpEnactResultImpl(injector).success(autotunePlugin.lastRunSuccess).comment(message)).run() } else { message = R.string.autotune_run_cancelled aapsLogger.debug(LTag.AUTOMATION, "Autotune run detected, Autotune Run Cancelled") - callback.result(PumpEnactResult(injector).success(false).comment(message)).run() + callback.result(PumpEnactResultImpl(injector).success(false).comment(message)).run() } }.start() return diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt index 927ca86b28..e2c0e2d205 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt @@ -2,7 +2,7 @@ package info.nightscout.automation.actions import android.widget.LinearLayout import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.SmsCommunicator import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.utils.JsonHelper @@ -25,7 +25,7 @@ class ActionSendSMS(injector: HasAndroidInjector) : Action(injector) { override fun doAction(callback: Callback) { val result = smsCommunicator.sendNotificationToAllNumbers(text.value) - callback.result(PumpEnactResult(injector).success(result).comment(if (result) R.string.ok else R.string.error)).run() + callback.result(PumpEnactResultImpl(injector).success(result).comment(if (result) R.string.ok else R.string.error)).run() } override fun isValid(): Boolean = text.value.isNotEmpty() diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt index 151341f1d5..9b71279a69 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt @@ -4,7 +4,7 @@ import android.widget.LinearLayout import androidx.annotation.DrawableRes import dagger.android.HasAndroidInjector import info.nightscout.androidaps.Constants -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.entities.TemporaryTarget import info.nightscout.androidaps.database.entities.UserEntry @@ -69,10 +69,10 @@ class ActionStartTempTarget(injector: HasAndroidInjector) : Action(injector) { ValueWithUnit.Mgdl(tt().highTarget).takeIf { tt().lowTarget != tt().highTarget }, ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(tt().duration).toInt()) ) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() }, { aapsLogger.error(LTag.DATABASE, "Error while saving temporary target", it) - callback.result(PumpEnactResult(injector).success(false).comment(R.string.error)).run() + callback.result(PumpEnactResultImpl(injector).success(false).comment(R.string.error)).run() }) } diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionStopProcessing.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionStopProcessing.kt index 53f613915c..88f9046cb5 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionStopProcessing.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionStopProcessing.kt @@ -3,7 +3,7 @@ package info.nightscout.automation.actions import androidx.annotation.DrawableRes import com.google.gson.JsonObject import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.queue.Callback import info.nightscout.automation.R import org.json.JSONObject @@ -17,7 +17,7 @@ class ActionStopProcessing(injector: HasAndroidInjector) : Action(injector) { override fun isValid(): Boolean = true override fun doAction(callback: Callback) { - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } override fun toJSON(): String { diff --git a/automation/src/main/java/info/nightscout/automation/actions/ActionStopTempTarget.kt b/automation/src/main/java/info/nightscout/automation/actions/ActionStopTempTarget.kt index 6a8d5f1967..d2d152b78c 100644 --- a/automation/src/main/java/info/nightscout/automation/actions/ActionStopTempTarget.kt +++ b/automation/src/main/java/info/nightscout/automation/actions/ActionStopTempTarget.kt @@ -1,7 +1,7 @@ package info.nightscout.automation.actions import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Sources @@ -36,7 +36,7 @@ class ActionStopTempTarget(injector: HasAndroidInjector) : Action(injector) { }, { aapsLogger.error(LTag.DATABASE, "Error while saving temporary target", it) }) - callback.result(PumpEnactResult(injector).success(true).comment(R.string.ok)).run() + callback.result(PumpEnactResultImpl(injector).success(true).comment(R.string.ok)).run() } override fun isValid(): Boolean = true diff --git a/automation/src/test/java/info/nightscout/androidaps/TestBase.kt b/automation/src/test/java/info/nightscout/androidaps/TestBase.kt index 16ad0df4db..b55d0aae33 100644 --- a/automation/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/automation/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,8 +1,8 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.ArgumentMatcher diff --git a/automation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/automation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt index 769d928f41..36eb757212 100644 --- a/automation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ b/automation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt @@ -3,6 +3,7 @@ package info.nightscout.androidaps import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.PluginBase import info.nightscout.androidaps.interfaces.PluginDescription import info.nightscout.androidaps.interfaces.Profile @@ -55,31 +56,31 @@ class TestPumpPlugin( override fun waitForDisconnectionInSeconds(): Int = 0 override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) + override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResultImpl(injector) override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet override fun lastDataTime(): Long = lastData override val baseBasalRate: Double = baseBasal override val reservoirLevel: Double = 0.0 override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult( + override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResultImpl( injector ).success(true) override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = - PumpEnactResult(injector).success(true) + PumpEnactResultImpl(injector).success(true) - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS override fun model(): PumpType = PumpType.GENERIC_AAPS override fun serialNumber(): String = "1" override fun shortStatus(veryShort: Boolean): String = "" override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun loadTDDs(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun canHandleDST(): Boolean = true override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} override fun specialEnableCondition(): Boolean = specialEnable diff --git a/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt b/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt index d4f8890d74..f4ba9c7453 100644 --- a/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt +++ b/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt @@ -4,7 +4,7 @@ import android.content.Context import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.utils.DateUtil @@ -37,7 +37,7 @@ class ActionAlarmTest : TestBase() { it.timerUtil = timerUtil it.dateUtil = dateUtil } - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } } diff --git a/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt b/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt index cb47326577..a55314f4d8 100644 --- a/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt +++ b/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt @@ -3,7 +3,7 @@ package info.nightscout.automation.actions import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction import info.nightscout.androidaps.database.transactions.Transaction @@ -35,7 +35,7 @@ class ActionNotificationTest : TestBase() { it.rxBus = rxBus it.repository = repository } - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } } diff --git a/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt b/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt index 536e8f661d..2e3bc345f9 100644 --- a/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt +++ b/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt @@ -4,7 +4,7 @@ import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.androidaps.TestPumpPlugin -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.entities.OfflineEvent import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.CommandQueue @@ -157,7 +157,7 @@ ActionsTestBase : TestBaseWithProfile() { if (it is ActionStopProcessing) { it.rh = rh } - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } if (it is Trigger) { diff --git a/core/src/main/java/info/nightscout/androidaps/data/PumpEnactResult.kt b/core/src/main/java/info/nightscout/androidaps/data/PumpEnactResult.kt index fd0f0fe33f..7fcab3465c 100644 --- a/core/src/main/java/info/nightscout/androidaps/data/PumpEnactResult.kt +++ b/core/src/main/java/info/nightscout/androidaps/data/PumpEnactResult.kt @@ -1,163 +1,40 @@ package info.nightscout.androidaps.data -import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.core.R -import info.nightscout.androidaps.interfaces.Profile -import info.nightscout.androidaps.utils.DecimalFormatter -import info.nightscout.androidaps.utils.Round -import info.nightscout.androidaps.interfaces.ResourceHelper import org.json.JSONObject -import javax.inject.Inject -class PumpEnactResult(injector: HasAndroidInjector) { +interface PumpEnactResult { - @Inject lateinit var rh: ResourceHelper - - init { - injector.androidInjector().inject(this) - } - - var success = false // request was processed successfully (but possible no change was needed) - var enacted = false // request was processed successfully and change has been made - var comment = "" + var success: Boolean // request was processed successfully (but possible no change was needed) + var enacted: Boolean // request was processed successfully and change has been made + var comment: String // Result of basal change - var duration = -1 // duration set [minutes] - var absolute = -1.0 // absolute rate [U/h] , isPercent = false - var percent = -1 // percent of current basal [%] (100% = current basal), isPercent = true - var isPercent = false // if true percent is used, otherwise absolute - var isTempCancel = false // if true we are canceling temp basal + var duration: Int // duration set [minutes] + var absolute: Double // absolute rate [U/h] , isPercent = false + var percent: Int // percent of current basal [%] (100% = current basal), isPercent = true + var isPercent: Boolean // if true percent is used, otherwise absolute + var isTempCancel: Boolean // if true we are canceling temp basal // Result of treatment delivery - var bolusDelivered = 0.0 // real value of delivered insulin - var carbsDelivered = 0.0 // real value of delivered carbs - var queued = false + var bolusDelivered: Double // real value of delivered insulin + var carbsDelivered: Double // real value of delivered carbs + var queued: Boolean - fun success(success: Boolean): PumpEnactResult = this.also { this.success = success } - fun enacted(enacted: Boolean): PumpEnactResult = this.also { it.enacted = enacted } - fun comment(comment: String): PumpEnactResult = this.also { it.comment = comment } - fun comment(comment: Int): PumpEnactResult = this.also { it.comment = rh.gs(comment) } - fun duration(duration: Int): PumpEnactResult = this.also { it.duration = duration } - fun absolute(absolute: Double): PumpEnactResult = this.also { it.absolute = absolute } - fun percent(percent: Int): PumpEnactResult = this.also { it.percent = percent } - fun isPercent(isPercent: Boolean): PumpEnactResult = this.also { it.isPercent = isPercent } - fun isTempCancel(isTempCancel: Boolean): PumpEnactResult = this.also { it.isTempCancel = isTempCancel } - fun bolusDelivered(bolusDelivered: Double): PumpEnactResult = this.also { it.bolusDelivered = bolusDelivered } - fun carbsDelivered(carbsDelivered: Double): PumpEnactResult = this.also { it.carbsDelivered = carbsDelivered } - fun queued(queued: Boolean): PumpEnactResult = this.also { it.queued = queued } + fun success(success: Boolean): PumpEnactResult + fun enacted(enacted: Boolean): PumpEnactResult + fun comment(comment: String): PumpEnactResult + fun comment(comment: Int): PumpEnactResult + fun duration(duration: Int): PumpEnactResult + fun absolute(absolute: Double): PumpEnactResult + fun percent(percent: Int): PumpEnactResult + fun isPercent(isPercent: Boolean): PumpEnactResult + fun isTempCancel(isTempCancel: Boolean): PumpEnactResult + fun bolusDelivered(bolusDelivered: Double): PumpEnactResult + fun carbsDelivered(carbsDelivered: Double): PumpEnactResult + fun queued(queued: Boolean): PumpEnactResult - fun log(): String { - return "Success: " + success + - " Enacted: " + enacted + - " Comment: " + comment + - " Duration: " + duration + - " Absolute: " + absolute + - " Percent: " + percent + - " IsPercent: " + isPercent + - " IsTempCancel: " + isTempCancel + - " bolusDelivered: " + bolusDelivered + - " carbsDelivered: " + carbsDelivered + - " Queued: " + queued - } - - override fun toString(): String { - var ret = rh.gs(R.string.success) + ": " + success - if (enacted) { - when { - bolusDelivered > 0 -> { - ret += "\n${rh.gs(R.string.enacted)}: $enacted" - ret += "\n${rh.gs(R.string.comment)}: $comment" - ret += "\n${rh.gs(R.string.configbuilder_insulin)}: $bolusDelivered ${rh.gs(R.string.insulin_unit_shortname)}" - } - - isTempCancel -> { - ret += "\n${rh.gs(R.string.enacted)}: $enacted" - if (comment.isNotEmpty()) ret += "\n${rh.gs(R.string.comment)}: $comment" - ret += "\n${rh.gs(R.string.canceltemp)}" - } - - isPercent -> { - ret += "\n${rh.gs(R.string.enacted)}: $enacted" - if (comment.isNotEmpty()) ret += "\n${rh.gs(R.string.comment)}: $comment" - ret += "\n${rh.gs(R.string.duration)}: $duration min" - ret += "\n${rh.gs(R.string.percent)}: $percent%" - } - - else -> { - ret += "\n${rh.gs(R.string.enacted)}: $enacted" - if (comment.isNotEmpty()) ret += "\n${rh.gs(R.string.comment)}: $comment" - ret += "\n${rh.gs(R.string.duration)}: $duration min" - ret += "\n${rh.gs(R.string.absolute)}: $absolute U/h" - } - } - } else { - ret += "\n${rh.gs(R.string.comment)}: $comment" - } - return ret - } - - fun toHtml(): String { - var ret = "" + rh.gs(R.string.success) + ": " + success - if (queued) { - ret = rh.gs(R.string.waitingforpumpresult) - } else if (enacted) { - when { - bolusDelivered > 0 -> { - ret += "
" + rh.gs(R.string.enacted) + ": " + enacted - if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment - ret += "
" + rh.gs(R.string.smb_shortname) + ": " + bolusDelivered + " " + rh.gs(R.string.insulin_unit_shortname) - } - - isTempCancel -> { - ret += "
" + rh.gs(R.string.enacted) + ": " + enacted - ret += "
" + rh.gs(R.string.comment) + ": " + comment + - "
" + rh.gs(R.string.canceltemp) - } - - isPercent && percent != -1 -> { - ret += "
" + rh.gs(R.string.enacted) + ": " + enacted - if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment - ret += "
" + rh.gs(R.string.duration) + ": " + duration + " min" - ret += "
" + rh.gs(R.string.percent) + ": " + percent + "%" - } - - absolute != -1.0 -> { - ret += "
" + rh.gs(R.string.enacted) + ": " + enacted - if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment - ret += "
" + rh.gs(R.string.duration) + ": " + duration + " min" - ret += "
" + rh.gs(R.string.absolute) + ": " + DecimalFormatter.to2Decimal(absolute) + " U/h" - } - } - } else { - if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment - } - return ret - } - - fun json(profile: Profile): JSONObject { - val result = JSONObject() - when { - bolusDelivered > 0 -> { - result.put("smb", bolusDelivered) - } - - isTempCancel -> { - result.put("rate", 0) - result.put("duration", 0) - } - - isPercent -> { - // Nightscout is expecting absolute value - val abs = Round.roundTo(profile.getBasal() * percent / 100, 0.01) - result.put("rate", abs) - result.put("duration", duration) - } - - else -> { - result.put("rate", absolute) - result.put("duration", duration) - } - } - return result - } + fun log(): String + fun toHtml(): String + fun toText(): String + fun json(baseBasal: Double): JSONObject } \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/data/PumpEnactResultImpl.kt b/core/src/main/java/info/nightscout/androidaps/data/PumpEnactResultImpl.kt new file mode 100644 index 0000000000..6ad31d401e --- /dev/null +++ b/core/src/main/java/info/nightscout/androidaps/data/PumpEnactResultImpl.kt @@ -0,0 +1,165 @@ +package info.nightscout.androidaps.data + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.core.R +import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.utils.DecimalFormatter +import info.nightscout.androidaps.utils.Round +import org.json.JSONObject +import java.lang.UnsupportedOperationException +import javax.inject.Inject + +class PumpEnactResultImpl(injector: HasAndroidInjector) : PumpEnactResult { + + @Inject lateinit var rh: ResourceHelper + + init { + injector.androidInjector().inject(this) + } + + override var success = false // request was processed successfully (but possible no change was needed) + override var enacted = false // request was processed successfully and change has been made + override var comment = "" + + // Result of basal change + override var duration = -1 // duration set [minutes] + override var absolute = -1.0 // absolute rate [U/h] , isPercent = false + override var percent = -1 // percent of current basal [%] (100% = current basal), isPercent = true + override var isPercent = false // if true percent is used, otherwise absolute + override var isTempCancel = false // if true we are canceling temp basal + + // Result of treatment delivery + override var bolusDelivered = 0.0 // real value of delivered insulin + override var carbsDelivered = 0.0 // real value of delivered carbs + override var queued = false + + override fun success(success: Boolean): PumpEnactResultImpl = this.also { this.success = success } + override fun enacted(enacted: Boolean): PumpEnactResultImpl = this.also { it.enacted = enacted } + override fun comment(comment: String): PumpEnactResultImpl = this.also { it.comment = comment } + override fun comment(comment: Int): PumpEnactResultImpl = this.also { it.comment = rh.gs(comment) } + override fun duration(duration: Int): PumpEnactResultImpl = this.also { it.duration = duration } + override fun absolute(absolute: Double): PumpEnactResultImpl = this.also { it.absolute = absolute } + override fun percent(percent: Int): PumpEnactResultImpl = this.also { it.percent = percent } + override fun isPercent(isPercent: Boolean): PumpEnactResultImpl = this.also { it.isPercent = isPercent } + override fun isTempCancel(isTempCancel: Boolean): PumpEnactResultImpl = this.also { it.isTempCancel = isTempCancel } + override fun bolusDelivered(bolusDelivered: Double): PumpEnactResultImpl = this.also { it.bolusDelivered = bolusDelivered } + override fun carbsDelivered(carbsDelivered: Double): PumpEnactResultImpl = this.also { it.carbsDelivered = carbsDelivered } + override fun queued(queued: Boolean): PumpEnactResultImpl = this.also { it.queued = queued } + + override fun log(): String { + return "Success: " + success + + " Enacted: " + enacted + + " Comment: " + comment + + " Duration: " + duration + + " Absolute: " + absolute + + " Percent: " + percent + + " IsPercent: " + isPercent + + " IsTempCancel: " + isTempCancel + + " bolusDelivered: " + bolusDelivered + + " carbsDelivered: " + carbsDelivered + + " Queued: " + queued + } + + override fun toString(): String = toText() + + override fun toText(): String { + var ret = rh.gs(R.string.success) + ": " + success + if (enacted) { + when { + bolusDelivered > 0 -> { + ret += "\n${rh.gs(R.string.enacted)}: $enacted" + ret += "\n${rh.gs(R.string.comment)}: $comment" + ret += "\n${rh.gs(R.string.configbuilder_insulin)}: $bolusDelivered ${rh.gs(R.string.insulin_unit_shortname)}" + } + + isTempCancel -> { + ret += "\n${rh.gs(R.string.enacted)}: $enacted" + if (comment.isNotEmpty()) ret += "\n${rh.gs(R.string.comment)}: $comment" + ret += "\n${rh.gs(R.string.canceltemp)}" + } + + isPercent -> { + ret += "\n${rh.gs(R.string.enacted)}: $enacted" + if (comment.isNotEmpty()) ret += "\n${rh.gs(R.string.comment)}: $comment" + ret += "\n${rh.gs(R.string.duration)}: $duration min" + ret += "\n${rh.gs(R.string.percent)}: $percent%" + } + + else -> { + ret += "\n${rh.gs(R.string.enacted)}: $enacted" + if (comment.isNotEmpty()) ret += "\n${rh.gs(R.string.comment)}: $comment" + ret += "\n${rh.gs(R.string.duration)}: $duration min" + ret += "\n${rh.gs(R.string.absolute)}: $absolute U/h" + } + } + } else { + ret += "\n${rh.gs(R.string.comment)}: $comment" + } + return ret + } + + override fun toHtml(): String { + var ret = "" + rh.gs(R.string.success) + ": " + success + if (queued) { + ret = rh.gs(R.string.waitingforpumpresult) + } else if (enacted) { + when { + bolusDelivered > 0 -> { + ret += "
" + rh.gs(R.string.enacted) + ": " + enacted + if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment + ret += "
" + rh.gs(R.string.smb_shortname) + ": " + bolusDelivered + " " + rh.gs(R.string.insulin_unit_shortname) + } + + isTempCancel -> { + ret += "
" + rh.gs(R.string.enacted) + ": " + enacted + ret += "
" + rh.gs(R.string.comment) + ": " + comment + + "
" + rh.gs(R.string.canceltemp) + } + + isPercent && percent != -1 -> { + ret += "
" + rh.gs(R.string.enacted) + ": " + enacted + if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment + ret += "
" + rh.gs(R.string.duration) + ": " + duration + " min" + ret += "
" + rh.gs(R.string.percent) + ": " + percent + "%" + } + + absolute != -1.0 -> { + ret += "
" + rh.gs(R.string.enacted) + ": " + enacted + if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment + ret += "
" + rh.gs(R.string.duration) + ": " + duration + " min" + ret += "
" + rh.gs(R.string.absolute) + ": " + DecimalFormatter.to2Decimal(absolute) + " U/h" + } + } + } else { + if (comment.isNotEmpty()) ret += "
" + rh.gs(R.string.comment) + ": " + comment + } + return ret + } + + override fun json(baseBasal: Double): JSONObject { + val result = JSONObject() + when { + bolusDelivered > 0 -> { + result.put("smb", bolusDelivered) + } + + isTempCancel -> { + result.put("rate", 0) + result.put("duration", 0) + } + + isPercent -> { + // Nightscout is expecting absolute value + val abs = Round.roundTo(baseBasal * percent / 100, 0.01) + result.put("rate", abs) + result.put("duration", duration) + } + + else -> { + result.put("rate", absolute) + result.put("duration", duration) + } + } + return result + } +} \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/data/Sms.kt b/core/src/main/java/info/nightscout/androidaps/data/Sms.kt index 370b591f31..f252fa6ef7 100644 --- a/core/src/main/java/info/nightscout/androidaps/data/Sms.kt +++ b/core/src/main/java/info/nightscout/androidaps/data/Sms.kt @@ -1,42 +1,2 @@ package info.nightscout.androidaps.data -import android.telephony.SmsMessage - -class Sms { - - var phoneNumber: String - var text: String - var date: Long - var received = false - var sent = false - var processed = false - var ignored = false - - constructor(message: SmsMessage) { - phoneNumber = message.originatingAddress ?: "" - text = message.messageBody - date = message.timestampMillis - received = true - } - - constructor(phoneNumber: String, text: String) { - this.phoneNumber = phoneNumber - this.text = text - date = System.currentTimeMillis() - sent = true - } - - constructor(other: Sms, number: String? = null) { - phoneNumber = number ?: other.phoneNumber - text = other.text - date = other.date - received = other.received - sent = other.sent - processed = other.processed - ignored = other.ignored - } - - override fun toString(): String { - return "SMS from $phoneNumber: $text" - } -} \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/di/CoreDataClassesModule.kt b/core/src/main/java/info/nightscout/androidaps/di/CoreDataClassesModule.kt index 201afcfe08..ea01e8ee27 100644 --- a/core/src/main/java/info/nightscout/androidaps/di/CoreDataClassesModule.kt +++ b/core/src/main/java/info/nightscout/androidaps/di/CoreDataClassesModule.kt @@ -2,7 +2,7 @@ package info.nightscout.androidaps.di import dagger.Module import dagger.android.ContributesAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ProfileStore import info.nightscout.androidaps.plugins.aps.loop.APSResult import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensData @@ -11,7 +11,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensData @Suppress("unused") abstract class CoreDataClassesModule { - @ContributesAndroidInjector abstract fun pumpEnactResultInjector(): PumpEnactResult + @ContributesAndroidInjector abstract fun pumpEnactResultInjector(): PumpEnactResultImpl @ContributesAndroidInjector abstract fun apsResultInjector(): APSResult @ContributesAndroidInjector abstract fun autosensDataInjector(): AutosensData diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/DeviceStatusExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/DeviceStatusExtension.kt index b51883a639..a7b12a061f 100644 --- a/core/src/main/java/info/nightscout/androidaps/extensions/DeviceStatusExtension.kt +++ b/core/src/main/java/info/nightscout/androidaps/extensions/DeviceStatusExtension.kt @@ -54,8 +54,8 @@ fun buildDeviceStatus( val requested = JSONObject() if (lastRun.tbrSetByPump?.enacted == true) { // enacted enacted = lastRun.request?.json()?.also { - it.put("rate", lastRun.tbrSetByPump!!.json(profile)["rate"]) - it.put("duration", lastRun.tbrSetByPump!!.json(profile)["duration"]) + it.put("rate", lastRun.tbrSetByPump!!.json(profile.getBasal())["rate"]) + it.put("duration", lastRun.tbrSetByPump!!.json(profile.getBasal())["duration"]) it.put("received", true) } requested.put("duration", lastRun.request?.duration) diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/Diaconn.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/Diaconn.kt index be3bfa1b87..4cab15b1b6 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/Diaconn.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/Diaconn.kt @@ -3,6 +3,7 @@ package info.nightscout.androidaps.interfaces import info.nightscout.androidaps.data.PumpEnactResult interface Diaconn { + fun loadHistory(): PumpEnactResult // for history browser fun setUserOptions(): PumpEnactResult // pump etc settings } \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/SmsCommunicator.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/SmsCommunicator.kt index 9c40035e1b..01e1ff25fa 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/SmsCommunicator.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/SmsCommunicator.kt @@ -1,6 +1,6 @@ package info.nightscout.androidaps.interfaces -import info.nightscout.androidaps.data.Sms +import info.nightscout.interfaces.data.smsCommunicator.Sms interface SmsCommunicator { diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt index d7595d7417..33005f9191 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt @@ -1,6 +1,7 @@ package info.nightscout.androidaps.plugins.general.overview.events import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.rx.events.Event class EventDismissBolusProgressIfRunning(val result: PumpEnactResult?, val id: Long?) : Event() \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/queue/Callback.kt b/core/src/main/java/info/nightscout/androidaps/queue/Callback.kt index 813ed79513..9c9a5fa71e 100644 --- a/core/src/main/java/info/nightscout/androidaps/queue/Callback.kt +++ b/core/src/main/java/info/nightscout/androidaps/queue/Callback.kt @@ -1,6 +1,7 @@ package info.nightscout.androidaps.queue import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl abstract class Callback : Runnable { diff --git a/core/src/main/java/info/nightscout/androidaps/queue/commands/Command.kt b/core/src/main/java/info/nightscout/androidaps/queue/commands/Command.kt index f4e827041f..e6473d2351 100644 --- a/core/src/main/java/info/nightscout/androidaps/queue/commands/Command.kt +++ b/core/src/main/java/info/nightscout/androidaps/queue/commands/Command.kt @@ -2,7 +2,7 @@ package info.nightscout.androidaps.queue.commands import dagger.android.HasAndroidInjector import info.nightscout.androidaps.core.R -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.queue.Callback @@ -48,7 +48,7 @@ abstract class Command( abstract fun log(): String fun cancel() { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = false result.comment = rh.gs(R.string.connectiontimedout) aapsLogger.debug(LTag.PUMPQUEUE, "Result cancel") diff --git a/core/src/test/java/info/nightscout/androidaps/TestBase.kt b/core/src/test/java/info/nightscout/androidaps/TestBase.kt index 77f5cd6515..ff9c66abeb 100644 --- a/core/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/core/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -2,7 +2,7 @@ package info.nightscout.androidaps import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito diff --git a/core/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/core/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt index c533893b3f..4e805f67a5 100644 --- a/core/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ b/core/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt @@ -2,10 +2,11 @@ package info.nightscout.androidaps import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.data.PumpEnactResultImpl +import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump +import info.nightscout.androidaps.interfaces.PumpDescription import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.plugins.common.ManufacturerType import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -43,26 +44,30 @@ class TestPumpPlugin(val injector: HasAndroidInjector) : Pump { override fun waitForDisconnectionInSeconds(): Int = 0 override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) + override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResultImpl(injector) override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet override fun lastDataTime(): Long = lastData override val baseBasalRate: Double = baseBasal override val reservoirLevel: Double = 0.0 override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS override fun model(): PumpType = PumpType.GENERIC_AAPS override fun serialNumber(): String = "1" override fun shortStatus(veryShort: Boolean): String = "" override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun loadTDDs(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun canHandleDST(): Boolean = true override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} } \ No newline at end of file diff --git a/core/src/test/java/info/nightscout/androidaps/data/PumpEnactResultTest.kt b/core/src/test/java/info/nightscout/androidaps/data/PumpEnactResultTest.kt index 0165075af4..ef5ade70b7 100644 --- a/core/src/test/java/info/nightscout/androidaps/data/PumpEnactResultTest.kt +++ b/core/src/test/java/info/nightscout/androidaps/data/PumpEnactResultTest.kt @@ -13,9 +13,9 @@ import org.skyscreamer.jsonassert.JSONAssert class PumpEnactResultTest : TestBaseWithProfile() { - val injector = HasAndroidInjector { + private val injector = HasAndroidInjector { AndroidInjector { - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } } @@ -36,154 +36,167 @@ class PumpEnactResultTest : TestBaseWithProfile() { } @Test fun successTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.success(true) Assert.assertEquals(true, per.success) } @Test fun enactedTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.enacted(true) Assert.assertEquals(true, per.enacted) } @Test fun commentTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.comment("SomeComment") Assert.assertEquals("SomeComment", per.comment) } @Test fun durationTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.duration(10) Assert.assertEquals(10, per.duration.toLong()) } @Test fun absoluteTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.absolute(11.0) Assert.assertEquals(11.0, per.absolute, 0.01) } @Test fun percentTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.percent(10) Assert.assertEquals(10, per.percent) } @Test fun isPercentTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.isPercent(true) Assert.assertEquals(true, per.isPercent) } @Test fun isTempCancelTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.isTempCancel(true) Assert.assertEquals(true, per.isTempCancel) } @Test fun bolusDeliveredTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.bolusDelivered(11.0) Assert.assertEquals(11.0, per.bolusDelivered, 0.01) } @Test fun carbsDeliveredTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.carbsDelivered(11.0) Assert.assertEquals(11.0, per.carbsDelivered, 0.01) } @Test fun queuedTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) per.queued(true) Assert.assertEquals(true, per.queued) } @Test fun logTest() { - val per = PumpEnactResult(injector) + val per = PumpEnactResultImpl(injector) - Assert.assertEquals("Success: false Enacted: false Comment: Duration: -1 Absolute: -1.0 Percent: -1 IsPercent: false IsTempCancel: false bolusDelivered: 0.0 carbsDelivered: 0.0 Queued: false", per.log()) + Assert.assertEquals( + "Success: false Enacted: false Comment: Duration: -1 Absolute: -1.0 Percent: -1 IsPercent: false IsTempCancel: false bolusDelivered: 0.0 carbsDelivered: 0.0 Queued: false", + per.log() + ) } @Test fun toStringTest() { - var per = PumpEnactResult(injector).enacted(true).bolusDelivered(10.0).comment("AAA") - Assert.assertEquals(""" + var per = PumpEnactResultImpl(injector).enacted(true).bolusDelivered(10.0).comment("AAA") + Assert.assertEquals( + """ Success: false Enacted: true Comment: AAA Insulin: 10.0 U - """.trimIndent(), per.toString()) - per = PumpEnactResult(injector).enacted(true).isTempCancel(true).comment("AAA") - Assert.assertEquals(""" + """.trimIndent(), per.toString() + ) + per = PumpEnactResultImpl(injector).enacted(true).isTempCancel(true).comment("AAA") + Assert.assertEquals( + """ Success: false Enacted: true Comment: AAA Cancel temp basal - """.trimIndent(), per.toString()) - per = PumpEnactResult(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") - Assert.assertEquals(""" + """.trimIndent(), per.toString() + ) + per = PumpEnactResultImpl(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") + Assert.assertEquals( + """ Success: false Enacted: true Comment: AAA Duration: 20 min Percent: 90% - """.trimIndent(), per.toString()) - per = PumpEnactResult(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") - Assert.assertEquals(""" + """.trimIndent(), per.toString() + ) + per = PumpEnactResultImpl(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") + Assert.assertEquals( + """ Success: false Enacted: true Comment: AAA Duration: 30 min Absolute: 1.0 U/h - """.trimIndent(), per.toString()) - per = PumpEnactResult(injector).enacted(false).comment("AAA") - Assert.assertEquals(""" + """.trimIndent(), per.toString() + ) + per = PumpEnactResultImpl(injector).enacted(false).comment("AAA") + Assert.assertEquals( + """ Success: false Comment: AAA - """.trimIndent(), per.toString()) + """.trimIndent(), per.toString() + ) } @Test fun toHtmlTest() { - var per: PumpEnactResult = PumpEnactResult(injector).enacted(true).bolusDelivered(10.0).comment("AAA") + var per: PumpEnactResult = PumpEnactResultImpl(injector).enacted(true).bolusDelivered(10.0).comment("AAA") Assert.assertEquals("Success: false
Enacted: true
Comment: AAA
SMB: 10.0 U", per.toHtml()) - per = PumpEnactResult(injector).enacted(true).isTempCancel(true).comment("AAA") + per = PumpEnactResultImpl(injector).enacted(true).isTempCancel(true).comment("AAA") Assert.assertEquals("Success: false
Enacted: true
Comment: AAA
Cancel temp basal", per.toHtml()) - per = PumpEnactResult(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") + per = PumpEnactResultImpl(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") Assert.assertEquals("Success: false
Enacted: true
Comment: AAA
Duration: 20 min
Percent: 90%", per.toHtml()) - per = PumpEnactResult(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") + per = PumpEnactResultImpl(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") Assert.assertEquals("Success: false
Enacted: true
Comment: AAA
Duration: 30 min
Absolute: 1.00 U/h", per.toHtml()) - per = PumpEnactResult(injector).enacted(false).comment("AAA") + per = PumpEnactResultImpl(injector).enacted(false).comment("AAA") Assert.assertEquals("Success: false
Comment: AAA", per.toHtml()) } @Test fun jsonTest() { var o: JSONObject? - var per: PumpEnactResult = PumpEnactResult(injector).enacted(true).bolusDelivered(10.0).comment("AAA") - o = per.json(validProfile) + var per: PumpEnactResult = PumpEnactResultImpl(injector).enacted(true).bolusDelivered(10.0).comment("AAA") + o = per.json(validProfile.getBasal()) JSONAssert.assertEquals("{\"smb\":10}", o, false) - per = PumpEnactResult(injector).enacted(true).isTempCancel(true).comment("AAA") - o = per.json(validProfile) + per = PumpEnactResultImpl(injector).enacted(true).isTempCancel(true).comment("AAA") + o = per.json(validProfile.getBasal()) JSONAssert.assertEquals("{\"rate\":0,\"duration\":0}", o, false) - per = PumpEnactResult(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") - o = per.json(validProfile) + per = PumpEnactResultImpl(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") + o = per.json(validProfile.getBasal()) JSONAssert.assertEquals("{\"rate\":0.9,\"duration\":20}", o, false) - per = PumpEnactResult(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") - o = per.json(validProfile) + per = PumpEnactResultImpl(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") + o = per.json(validProfile.getBasal()) JSONAssert.assertEquals("{\"rate\":1,\"duration\":30}", o, false) } } \ No newline at end of file diff --git a/core/src/test/java/info/nightscout/androidaps/plugins/general/maintenance/formats/EncryptedPrefsFormatTest.kt b/core/src/test/java/info/nightscout/androidaps/plugins/general/maintenance/formats/EncryptedPrefsFormatTest.kt index 1854b16c09..ad8715b1a1 100644 --- a/core/src/test/java/info/nightscout/androidaps/plugins/general/maintenance/formats/EncryptedPrefsFormatTest.kt +++ b/core/src/test/java/info/nightscout/androidaps/plugins/general/maintenance/formats/EncryptedPrefsFormatTest.kt @@ -6,6 +6,7 @@ import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.interfaces.data.maintenance.PrefFormatError import info.nightscout.interfaces.data.maintenance.PrefMetadata import info.nightscout.interfaces.data.maintenance.Prefs +import info.nightscout.interfaces.data.maintenance.PrefsFormat import info.nightscout.interfaces.data.maintenance.PrefsMetadataKey import info.nightscout.interfaces.data.maintenance.PrefsStatus import info.nightscout.shared.sharedPreferences.SP @@ -23,7 +24,6 @@ import java.io.File class EncryptedPrefsFormatTest : TestBase() { @Mock lateinit var rh: ResourceHelper - @Mock lateinit var sp: SP @Mock lateinit var file: MockedFile private var cryptoUtil: CryptoUtil = CryptoUtil(aapsLogger) @@ -68,7 +68,7 @@ class EncryptedPrefsFormatTest : TestBase() { Assert.assertEquals(prefs.values["keyB"], "2") Assert.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.status, PrefsStatus.OK) - Assert.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, EncryptedPrefsFormat.FORMAT_KEY_ENC) + Assert.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) Assert.assertEquals(prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.OK) } @@ -82,7 +82,7 @@ class EncryptedPrefsFormatTest : TestBase() { "keyB" to "2" ), mapOf( - PrefsMetadataKey.ENCRYPTION to PrefMetadata(EncryptedPrefsFormat.FORMAT_KEY_ENC, PrefsStatus.OK) + PrefsMetadataKey.ENCRYPTION to PrefMetadata(PrefsFormat.FORMAT_KEY_ENC, PrefsStatus.OK) ) ) encryptedFormat.savePreferences(getMockedFile(), prefs, "sikret") @@ -99,7 +99,7 @@ class EncryptedPrefsFormatTest : TestBase() { "testpref2" to "another" ), mapOf( - PrefsMetadataKey.ENCRYPTION to PrefMetadata(EncryptedPrefsFormat.FORMAT_KEY_ENC, PrefsStatus.OK) + PrefsMetadataKey.ENCRYPTION to PrefMetadata(PrefsFormat.FORMAT_KEY_ENC, PrefsStatus.OK) ) ) encryptedFormat.savePreferences(getMockedFile(), prefsIn, "tajemnica") @@ -112,7 +112,7 @@ class EncryptedPrefsFormatTest : TestBase() { Assert.assertEquals(prefsOut.values["testpref2"], "another") Assert.assertEquals(prefsOut.metadata[PrefsMetadataKey.FILE_FORMAT]?.status, PrefsStatus.OK) - Assert.assertEquals(prefsOut.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, EncryptedPrefsFormat.FORMAT_KEY_ENC) + Assert.assertEquals(prefsOut.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) Assert.assertEquals(prefsOut.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.OK) } @@ -137,7 +137,7 @@ class EncryptedPrefsFormatTest : TestBase() { Assert.assertEquals(prefs.values.size, 0) Assert.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.status, PrefsStatus.OK) - Assert.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, EncryptedPrefsFormat.FORMAT_KEY_ENC) + Assert.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) Assert.assertEquals(prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.ERROR) } diff --git a/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt b/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt index 6b34c90802..743ba26834 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt @@ -10,6 +10,7 @@ import info.nightscout.androidaps.annotations.OpenForTesting import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.ProfileSealed import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.ValueWrapper import info.nightscout.androidaps.database.entities.EffectiveProfileSwitch @@ -20,9 +21,7 @@ import info.nightscout.androidaps.extensions.getCustomizedName import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.ActivityNames import info.nightscout.androidaps.interfaces.AndroidPermission -import info.nightscout.interfaces.BuildHelper import info.nightscout.androidaps.interfaces.CommandQueue -import info.nightscout.interfaces.Config import info.nightscout.androidaps.interfaces.Constraint import info.nightscout.androidaps.interfaces.Constraints import info.nightscout.androidaps.interfaces.Profile @@ -58,6 +57,8 @@ import info.nightscout.implementation.queue.commands.CommandStartPump import info.nightscout.implementation.queue.commands.CommandStopPump import info.nightscout.implementation.queue.commands.CommandTempBasalAbsolute import info.nightscout.implementation.queue.commands.CommandTempBasalPercent +import info.nightscout.interfaces.BuildHelper +import info.nightscout.interfaces.Config import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventMobileToWear @@ -145,7 +146,7 @@ class CommandQueueImplementation @Inject constructor( } private fun executingNowError(): PumpEnactResult = - PumpEnactResult(injector).success(false).enacted(false).comment(R.string.executing_right_now) + PumpEnactResultImpl(injector).success(false).enacted(false).comment(R.string.executing_right_now) override fun isRunning(type: CommandType): Boolean = performing?.commandType == type @@ -268,12 +269,12 @@ class CommandQueueImplementation @Inject constructor( .subscribeBy( onSuccess = { result -> result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted carbs $it") } - callback?.result(PumpEnactResult(injector).enacted(false).success(true))?.run() + callback?.result(PumpEnactResultImpl(injector).enacted(false).success(true))?.run() }, onError = { aapsLogger.error(LTag.DATABASE, "Error while saving carbs", it) - callback?.result(PumpEnactResult(injector).enacted(false).success(false))?.run() + callback?.result(PumpEnactResultImpl(injector).enacted(false).success(false))?.run() } ) } @@ -290,13 +291,13 @@ class CommandQueueImplementation @Inject constructor( if (type == CommandType.SMB_BOLUS) { if (bolusInQueue()) { aapsLogger.debug(LTag.PUMPQUEUE, "Rejecting SMB since a bolus is queue/running") - callback?.result(PumpEnactResult(injector).enacted(false).success(false))?.run() + callback?.result(PumpEnactResultImpl(injector).enacted(false).success(false))?.run() return false } val lastBolusTime = repository.getLastBolusRecord()?.timestamp ?: 0L if (detailedBolusInfo.lastKnownBolusTime < lastBolusTime) { aapsLogger.debug(LTag.PUMPQUEUE, "Rejecting bolus, another bolus was issued since request time") - callback?.result(PumpEnactResult(injector).enacted(false).success(false))?.run() + callback?.result(PumpEnactResultImpl(injector).enacted(false).success(false))?.run() return false } removeAll(CommandType.SMB_BOLUS) @@ -349,7 +350,7 @@ class CommandQueueImplementation @Inject constructor( @Synchronized override fun cancelAllBoluses(id: Long?) { if (!isRunning(CommandType.BOLUS)) { - rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResult(injector).success(true).enacted(false), id)) + rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResultImpl(injector).success(true).enacted(false), id)) } removeAll(CommandType.BOLUS) removeAll(CommandType.SMB_BOLUS) @@ -433,12 +434,12 @@ class CommandQueueImplementation @Inject constructor( override fun setProfile(profile: Profile, hasNsId: Boolean, callback: Callback?): Boolean { if (isRunning(CommandType.BASAL_PROFILE)) { aapsLogger.debug(LTag.PUMPQUEUE, "Command is already executed") - callback?.result(PumpEnactResult(injector).success(true).enacted(false))?.run() + callback?.result(PumpEnactResultImpl(injector).success(true).enacted(false))?.run() return false } if (isThisProfileSet(profile) && repository.getEffectiveProfileSwitchActiveAt(dateUtil.now()).blockingGet() is ValueWrapper.Existing) { aapsLogger.debug(LTag.PUMPQUEUE, "Correct profile already set") - callback?.result(PumpEnactResult(injector).success(true).enacted(false))?.run() + callback?.result(PumpEnactResultImpl(injector).success(true).enacted(false))?.run() return false } // Compare with pump limits @@ -447,7 +448,7 @@ class CommandQueueImplementation @Inject constructor( if (basalValue.value < activePlugin.activePump.pumpDescription.basalMinimumRate) { val notification = Notification(Notification.BASAL_VALUE_BELOW_MINIMUM, rh.gs(R.string.basal_value_below_minimum), Notification.URGENT) rxBus.send(EventNewNotification(notification)) - callback?.result(PumpEnactResult(injector).success(false).enacted(false).comment(R.string.basal_value_below_minimum))?.run() + callback?.result(PumpEnactResultImpl(injector).success(false).enacted(false).comment(R.string.basal_value_below_minimum))?.run() return false } } diff --git a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandReadStatus.kt b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandReadStatus.kt index 8fac167862..63fe3261a0 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandReadStatus.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandReadStatus.kt @@ -1,7 +1,7 @@ package info.nightscout.implementation.queue.commands import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.interfaces.LocalAlertUtils import info.nightscout.androidaps.queue.Callback @@ -26,7 +26,7 @@ class CommandReadStatus( localAlertUtils.notifyPumpStatusRead() aapsLogger.debug(LTag.PUMPQUEUE, "CommandReadStatus executed. Reason: $reason") val pump = activePlugin.activePump - val result = PumpEnactResult(injector).success(false) + val result = PumpEnactResultImpl(injector).success(false) val lastConnection = pump.lastDataTime() if (lastConnection > System.currentTimeMillis() - T.mins(1).msecs()) result.success(true) callback?.result(result)?.run() diff --git a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSMBBolus.kt b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSMBBolus.kt index 058cd5db98..22c3b019fb 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSMBBolus.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSMBBolus.kt @@ -3,6 +3,7 @@ package info.nightscout.implementation.queue.commands import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.queue.commands.Command @@ -28,11 +29,11 @@ class CommandSMBBolus( aapsLogger.debug(LTag.PUMPQUEUE, "Last bolus: $lastBolusTime ${dateUtil.dateAndTimeAndSecondsString(lastBolusTime)}") if (lastBolusTime != 0L && lastBolusTime + T.mins(3).msecs() > dateUtil.now()) { aapsLogger.debug(LTag.PUMPQUEUE, "SMB requested but still in 3 min interval") - r = PumpEnactResult(injector).enacted(false).success(false).comment("SMB requested but still in 3 min interval") + r = PumpEnactResultImpl(injector).enacted(false).success(false).comment("SMB requested but still in 3 min interval") } else if (detailedBolusInfo.deliverAtTheLatest != 0L && detailedBolusInfo.deliverAtTheLatest + T.mins(1).msecs() > System.currentTimeMillis()) { r = activePlugin.activePump.deliverTreatment(detailedBolusInfo) } else { - r = PumpEnactResult(injector).enacted(false).success(false).comment("SMB request too old") + r = PumpEnactResultImpl(injector).enacted(false).success(false).comment("SMB request too old") aapsLogger.debug(LTag.PUMPQUEUE, "SMB bolus canceled. deliverAt: " + dateUtil.dateAndTimeString(detailedBolusInfo.deliverAtTheLatest)) } aapsLogger.debug(LTag.PUMPQUEUE, "Result success: ${r.success} enacted: ${r.enacted}") diff --git a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSetProfile.kt b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSetProfile.kt index 3837d3d0bd..435cad15b4 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSetProfile.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandSetProfile.kt @@ -1,7 +1,7 @@ package info.nightscout.implementation.queue.commands import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.ValueWrapper import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.CommandQueue @@ -33,7 +33,7 @@ class CommandSetProfile constructor( override fun execute() { if (commandQueue.isThisProfileSet(profile) && repository.getEffectiveProfileSwitchActiveAt(dateUtil.now()).blockingGet() is ValueWrapper.Existing) { aapsLogger.debug(LTag.PUMPQUEUE, "Correct profile already set. profile: $profile") - callback?.result(PumpEnactResult(injector).success(true).enacted(false))?.run() + callback?.result(PumpEnactResultImpl(injector).success(true).enacted(false))?.run() return } val r = activePlugin.activePump.setNewBasalProfile(profile) diff --git a/implementation/src/test/java/info/nightscout/androidaps/TestBase.kt b/implementation/src/test/java/info/nightscout/androidaps/TestBase.kt index b4c68bf8b5..03d778b101 100644 --- a/implementation/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/implementation/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase { diff --git a/implementation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/implementation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt index c533893b3f..4e805f67a5 100644 --- a/implementation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ b/implementation/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt @@ -2,10 +2,11 @@ package info.nightscout.androidaps import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.data.PumpEnactResultImpl +import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump +import info.nightscout.androidaps.interfaces.PumpDescription import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.plugins.common.ManufacturerType import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -43,26 +44,30 @@ class TestPumpPlugin(val injector: HasAndroidInjector) : Pump { override fun waitForDisconnectionInSeconds(): Int = 0 override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) + override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResultImpl(injector) override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet override fun lastDataTime(): Long = lastData override val baseBasalRate: Double = baseBasal override val reservoirLevel: Double = 0.0 override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS override fun model(): PumpType = PumpType.GENERIC_AAPS override fun serialNumber(): String = "1" override fun shortStatus(veryShort: Boolean): String = "" override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun loadTDDs(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun canHandleDST(): Boolean = true override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} } \ No newline at end of file diff --git a/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt b/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt index ec505371f9..0580cb7a57 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt @@ -7,15 +7,13 @@ import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.androidaps.TestPumpPlugin import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.ValueWrapper import info.nightscout.androidaps.database.entities.Bolus import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.ActivityNames import info.nightscout.androidaps.interfaces.AndroidPermission -import info.nightscout.interfaces.BuildHelper -import info.nightscout.interfaces.Config import info.nightscout.androidaps.interfaces.Constraint import info.nightscout.androidaps.interfaces.Constraints import info.nightscout.androidaps.interfaces.ProfileFunction @@ -32,6 +30,8 @@ import info.nightscout.implementation.queue.commands.CommandCustomCommand import info.nightscout.implementation.queue.commands.CommandExtendedBolus import info.nightscout.implementation.queue.commands.CommandLoadHistory import info.nightscout.implementation.queue.commands.CommandTempBasalPercent +import info.nightscout.interfaces.BuildHelper +import info.nightscout.interfaces.Config import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.logging.AAPSLogger @@ -105,7 +105,7 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { if (it is CommandLoadHistory) { it.activePlugin = activePlugin } - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } } diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java index 198f3d6652..7bde88edb1 100644 --- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java +++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java @@ -31,33 +31,27 @@ import javax.inject.Singleton; import dagger.android.HasAndroidInjector; import info.nightscout.androidaps.data.DetailedBolusInfo; -import info.nightscout.androidaps.interfaces.Insight; -import info.nightscout.androidaps.interfaces.Profile; import info.nightscout.androidaps.data.PumpEnactResult; -import info.nightscout.rx.events.EventInitializationChanged; -import info.nightscout.rx.events.EventRefreshOverview; +import info.nightscout.androidaps.data.PumpEnactResultImpl; +import info.nightscout.androidaps.insight.R; import info.nightscout.androidaps.insight.database.InsightBolusID; import info.nightscout.androidaps.insight.database.InsightDbHelper; import info.nightscout.androidaps.insight.database.InsightHistoryOffset; import info.nightscout.androidaps.insight.database.InsightPumpID; import info.nightscout.androidaps.insight.database.InsightPumpID.EventType; -import info.nightscout.androidaps.insight.R; import info.nightscout.androidaps.interfaces.CommandQueue; -import info.nightscout.interfaces.Config; import info.nightscout.androidaps.interfaces.Constraint; import info.nightscout.androidaps.interfaces.Constraints; +import info.nightscout.androidaps.interfaces.Insight; import info.nightscout.androidaps.interfaces.PluginDescription; -import info.nightscout.interfaces.PluginType; +import info.nightscout.androidaps.interfaces.Profile; import info.nightscout.androidaps.interfaces.ProfileFunction; import info.nightscout.androidaps.interfaces.Pump; import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpPluginBase; import info.nightscout.androidaps.interfaces.PumpSync; import info.nightscout.androidaps.interfaces.PumpSync.PumpState.TemporaryBasal; -import info.nightscout.rx.logging.AAPSLogger; -import info.nightscout.rx.logging.LTag -; -import info.nightscout.rx.bus.RxBus; +import info.nightscout.androidaps.interfaces.ResourceHelper; import info.nightscout.androidaps.plugins.common.ManufacturerType; import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification; @@ -132,7 +126,13 @@ import info.nightscout.androidaps.plugins.pump.insight.utils.ExceptionTranslator import info.nightscout.androidaps.plugins.pump.insight.utils.ParameterBlockUtil; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.T; -import info.nightscout.androidaps.interfaces.ResourceHelper; +import info.nightscout.interfaces.Config; +import info.nightscout.interfaces.PluginType; +import info.nightscout.rx.bus.RxBus; +import info.nightscout.rx.events.EventInitializationChanged; +import info.nightscout.rx.events.EventRefreshOverview; +import info.nightscout.rx.logging.AAPSLogger; +import info.nightscout.rx.logging.LTag; import info.nightscout.shared.sharedPreferences.SP; @Singleton @@ -235,7 +235,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, pumpDescription = new PumpDescription(); pumpDescription.fillFor(PumpType.ACCU_CHEK_INSIGHT); - lastBolusTimestamp = sp.getLong(R.string.key_insight_last_bolus_timestamp,0L); + lastBolusTimestamp = sp.getLong(R.string.key_insight_last_bolus_timestamp, 0L); lastBolusAmount = sp.getDouble(R.string.key_insight_last_bolus_amount, 0.0); } @@ -475,7 +475,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, @NonNull @Override public PumpEnactResult setNewBasalProfile(Profile profile) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); rxBus.send(new EventDismissNotification(Notification.PROFILE_NOT_SET_NOT_INITIALIZED)); List profileBlocks = new ArrayList<>(); for (int i = 0; i < profile.getBasalValues().length; i++) { @@ -575,7 +575,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, if (detailedBolusInfo.insulin == 0 || detailedBolusInfo.carbs > 0) { throw new IllegalArgumentException(detailedBolusInfo.toString(), new Exception()); } - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); double insulin = Math.round(detailedBolusInfo.insulin / 0.01) * 0.01; if (insulin > 0) { try { @@ -599,7 +599,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, int trials = 0; long now = dateUtil.now(); String serial = serialNumber(); - insightDbHelper.createOrUpdate( new InsightBolusID( + insightDbHelper.createOrUpdate(new InsightBolusID( now, serial, bolusID, @@ -691,7 +691,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, @NonNull @Override public PumpEnactResult setTempBasalAbsolute(double absoluteRate, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (activeBasalRate == null) return result; if (activeBasalRate.getActiveBasalRate() == 0) return result; double percent = 100D / activeBasalRate.getActiveBasalRate() * absoluteRate; @@ -741,7 +741,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, @NonNull @Override public PumpEnactResult setTempBasalPercent(int percent, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); percent = (int) Math.round(((double) percent) / 10d) * 10; if (percent == 100) return cancelTempBasal(true); else if (percent > 250) percent = 250; @@ -797,7 +797,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, } public PumpEnactResult setExtendedBolusOnly(Double insulin, Integer durationInMinutes, boolean disableVibration) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); try { DeliverBolusMessage bolusMessage = new DeliverBolusMessage(); bolusMessage.setBolusType(BolusType.EXTENDED); @@ -829,7 +829,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, @NonNull @Override public PumpEnactResult cancelTempBasal(boolean enforceNew) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); PumpEnactResult cancelEBResult = null; if (isFakingTempsByExtendedBoluses()) cancelEBResult = cancelExtendedBolusOnly(); PumpEnactResult cancelTBRResult = cancelTempBasalOnly(); @@ -850,7 +850,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, } private PumpEnactResult cancelTempBasalOnly() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); try { alertService.ignore(AlertType.WARNING_36); connectionService.requestMessage(new CancelTBRMessage()).await(); @@ -893,7 +893,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, } private PumpEnactResult cancelExtendedBolusOnly() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); try { for (ActiveBolus activeBolus : activeBoluses) { if (activeBolus.getBolusType() == BolusType.EXTENDED || activeBolus.getBolusType() == BolusType.MULTIWAVE) { @@ -1012,7 +1012,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, } public PumpEnactResult stopPump() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); try { SetOperatingModeMessage operatingModeMessage = new SetOperatingModeMessage(); operatingModeMessage.setOperatingMode(OperatingMode.STOPPED); @@ -1034,7 +1034,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, } public PumpEnactResult startPump() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); try { SetOperatingModeMessage operatingModeMessage = new SetOperatingModeMessage(); operatingModeMessage.setOperatingMode(OperatingMode.STARTED); @@ -1056,7 +1056,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, } public PumpEnactResult setTBROverNotification(boolean enabled) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); boolean valueBefore = tbrOverNotificationBlock.isEnabled(); tbrOverNotificationBlock.setEnabled(enabled); try { @@ -1119,7 +1119,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, @NonNull @Override public PumpEnactResult loadTDDs() { - return new PumpEnactResult(getInjector()).success(true); + return new PumpEnactResultImpl(getInjector()).success(true); } private void readHistory() { @@ -1213,12 +1213,12 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, for (TemporaryBasal temporaryBasal : temporaryBasals) { if (temporaryBasal.getDuration() == 0L) { // for Stop TBR event duration = 0L pumpSync.syncStopTemporaryBasalWithPumpId( - temporaryBasal.getTimestamp(), - temporaryBasal.getPumpId(), - PumpType.ACCU_CHEK_INSIGHT, - serial); + temporaryBasal.getTimestamp(), + temporaryBasal.getPumpId(), + PumpType.ACCU_CHEK_INSIGHT, + serial); } - if (temporaryBasal.getRate() != 100.0){ + if (temporaryBasal.getRate() != 100.0) { pumpSync.syncTemporaryBasalWithPumpId( temporaryBasal.getTimestamp(), temporaryBasal.getRate(), @@ -1240,7 +1240,8 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, processCannulaFilledEvent(serial, (CannulaFilledEvent) event); else if (event instanceof TotalDailyDoseEvent) processTotalDailyDoseEvent(serial, (TotalDailyDoseEvent) event); - else if (event instanceof TubeFilledEvent) processTubeFilledEvent(serial, (TubeFilledEvent) event); + else if (event instanceof TubeFilledEvent) + processTubeFilledEvent(serial, (TubeFilledEvent) event); else if (event instanceof SniffingDoneEvent) processSniffingDoneEvent(serial, (SniffingDoneEvent) event); else if (event instanceof PowerUpEvent) processPowerUpEvent(serial, (PowerUpEvent) event); @@ -1447,20 +1448,20 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, PumpType.ACCU_CHEK_INSIGHT, serial); lastBolusTimestamp = bolusID.getTimestamp(); - sp.putLong(R.string.key_insight_last_bolus_timestamp,lastBolusTimestamp); + sp.putLong(R.string.key_insight_last_bolus_timestamp, lastBolusTimestamp); lastBolusAmount = event.getImmediateAmount(); sp.putDouble(R.string.key_insight_last_bolus_amount, lastBolusAmount); } if (event.getBolusType() == BolusType.EXTENDED || event.getBolusType() == BolusType.MULTIWAVE) { if (event.getDuration() > 0 && profileFunction.getProfile(bolusID.getTimestamp()) != null) - pumpSync.syncExtendedBolusWithPumpId( - bolusID.getTimestamp(), - event.getExtendedAmount(), - timestamp - startTimestamp, - isFakingTempsByExtendedBoluses(), - bolusID.getId(), - PumpType.ACCU_CHEK_INSIGHT, - serial); + pumpSync.syncExtendedBolusWithPumpId( + bolusID.getTimestamp(), + event.getExtendedAmount(), + timestamp - startTimestamp, + isFakingTempsByExtendedBoluses(), + bolusID.getId(), + PumpType.ACCU_CHEK_INSIGHT, + serial); } } diff --git a/interfaces/src/main/java/info/nightscout/interfaces/data/smsCommunicator/Sms.kt b/interfaces/src/main/java/info/nightscout/interfaces/data/smsCommunicator/Sms.kt new file mode 100644 index 0000000000..bee9dd4ddc --- /dev/null +++ b/interfaces/src/main/java/info/nightscout/interfaces/data/smsCommunicator/Sms.kt @@ -0,0 +1,42 @@ +package info.nightscout.interfaces.data.smsCommunicator + +import android.telephony.SmsMessage + +class Sms { + + var phoneNumber: String + var text: String + var date: Long + var received = false + var sent = false + var processed = false + var ignored = false + + constructor(message: SmsMessage) { + phoneNumber = message.originatingAddress ?: "" + text = message.messageBody + date = message.timestampMillis + received = true + } + + constructor(phoneNumber: String, text: String) { + this.phoneNumber = phoneNumber + this.text = text + date = System.currentTimeMillis() + sent = true + } + + constructor(other: Sms, number: String? = null) { + phoneNumber = number ?: other.phoneNumber + text = other.text + date = other.date + received = other.received + sent = other.sent + processed = other.processed + ignored = other.ignored + } + + override fun toString(): String { + return "SMS from $phoneNumber: $text" + } +} \ No newline at end of file diff --git a/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/AuthRequest.kt b/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/AuthRequest.kt index a4d19cdb93..d9156f5c73 100644 --- a/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/AuthRequest.kt +++ b/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/AuthRequest.kt @@ -3,7 +3,7 @@ package info.nightscout.plugins.general.smsCommunicator import android.os.SystemClock import dagger.android.HasAndroidInjector import info.nightscout.androidaps.Constants -import info.nightscout.androidaps.data.Sms +import info.nightscout.interfaces.data.smsCommunicator.Sms import info.nightscout.androidaps.interfaces.CommandQueue import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.interfaces.SmsCommunicator diff --git a/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt b/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt index 3e9107994f..a450640252 100644 --- a/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt +++ b/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt @@ -5,7 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import dagger.android.support.DaggerFragment -import info.nightscout.androidaps.data.Sms +import info.nightscout.interfaces.data.smsCommunicator.Sms import info.nightscout.androidaps.interfaces.SmsCommunicator import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy diff --git a/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt index 71bb58b5b6..3b4592472c 100644 --- a/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt +++ b/plugins/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt @@ -14,7 +14,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.androidaps.Constants import info.nightscout.androidaps.annotations.OpenForTesting import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.data.Sms +import info.nightscout.interfaces.data.smsCommunicator.Sms import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.entities.OfflineEvent import info.nightscout.androidaps.database.entities.TemporaryTarget diff --git a/plugins/src/test/java/info/nightscout/androidaps/TestBase.kt b/plugins/src/test/java/info/nightscout/androidaps/TestBase.kt index b4c68bf8b5..03d778b101 100644 --- a/plugins/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/plugins/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase { diff --git a/plugins/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/plugins/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt index c533893b3f..4e805f67a5 100644 --- a/plugins/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ b/plugins/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt @@ -2,10 +2,11 @@ package info.nightscout.androidaps import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.data.PumpEnactResultImpl +import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump +import info.nightscout.androidaps.interfaces.PumpDescription import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.plugins.common.ManufacturerType import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -43,26 +44,30 @@ class TestPumpPlugin(val injector: HasAndroidInjector) : Pump { override fun waitForDisconnectionInSeconds(): Int = 0 override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) + override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResultImpl(injector) override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet override fun lastDataTime(): Long = lastData override val baseBasalRate: Double = baseBasal override val reservoirLevel: Double = 0.0 override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS override fun model(): PumpType = PumpType.GENERIC_AAPS override fun serialNumber(): String = "1" override fun shortStatus(veryShort: Boolean): String = "" override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun loadTDDs(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun canHandleDST(): Boolean = true override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} } \ No newline at end of file diff --git a/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/AuthRequestTest.kt b/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/AuthRequestTest.kt index 2e00b52e3b..9cdd492258 100644 --- a/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/AuthRequestTest.kt +++ b/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/AuthRequestTest.kt @@ -4,7 +4,7 @@ import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.Constants import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.data.Sms +import info.nightscout.interfaces.data.smsCommunicator.Sms import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.interfaces.SmsCommunicator import info.nightscout.plugins.general.smsCommunicator.otp.OneTimePassword diff --git a/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt b/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt index d6d3636e9c..753af7f2c0 100644 --- a/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt +++ b/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt @@ -4,23 +4,26 @@ import android.telephony.SmsManager import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.Constants -import info.nightscout.plugins.R import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.androidaps.TestPumpPlugin import info.nightscout.androidaps.data.IobTotal -import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.data.Sms +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.entities.GlucoseValue import info.nightscout.androidaps.database.transactions.CancelCurrentOfflineEventIfAnyTransaction import info.nightscout.androidaps.database.transactions.InsertAndCancelCurrentOfflineEventTransaction import info.nightscout.androidaps.database.transactions.InsertAndCancelCurrentTemporaryTargetTransaction import info.nightscout.androidaps.database.transactions.Transaction -import info.nightscout.androidaps.interfaces.* -import info.nightscout.androidaps.logging.UserEntryLogger +import info.nightscout.androidaps.interfaces.ActivePlugin +import info.nightscout.androidaps.interfaces.CommandQueue +import info.nightscout.androidaps.interfaces.Constraint import info.nightscout.androidaps.interfaces.Constraints -import info.nightscout.plugins.general.smsCommunicator.otp.OneTimePassword -import info.nightscout.plugins.general.smsCommunicator.otp.OneTimePasswordValidationResult +import info.nightscout.androidaps.interfaces.GlucoseUnit +import info.nightscout.androidaps.interfaces.Loop +import info.nightscout.androidaps.interfaces.ProfileSource +import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.interfaces.XDripBroadcast +import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensDataStore import info.nightscout.androidaps.plugins.iob.iobCobCalculator.CobInfo import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider @@ -28,8 +31,11 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.T -import info.nightscout.androidaps.interfaces.XDripBroadcast import info.nightscout.interfaces.PluginType +import info.nightscout.interfaces.data.smsCommunicator.Sms +import info.nightscout.plugins.R +import info.nightscout.plugins.general.smsCommunicator.otp.OneTimePassword +import info.nightscout.plugins.general.smsCommunicator.otp.OneTimePasswordValidationResult import info.nightscout.shared.sharedPreferences.SP import io.reactivex.rxjava3.core.Single import org.junit.Assert @@ -40,8 +46,8 @@ import org.mockito.ArgumentMatchers.anyString import org.mockito.ArgumentMatchers.eq import org.mockito.Mock import org.mockito.Mockito -import org.mockito.Mockito.`when` import org.mockito.Mockito.anyLong +import org.mockito.Mockito.`when` import org.mockito.invocation.InvocationOnMock @Suppress("SpellCheckingInspection") @@ -64,7 +70,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } if (it is AuthRequest) { @@ -98,50 +104,54 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { })) val glucoseStatusProvider = GlucoseStatusProvider(aapsLogger = aapsLogger, iobCobCalculator = iobCobCalculator, dateUtil = dateUtilMocked) - smsCommunicatorPlugin = SmsCommunicatorPlugin(injector, aapsLogger, rh, smsManager, aapsSchedulers, sp, constraintChecker, rxBus, profileFunction, fabricPrivacy, activePlugin, commandQueue, - loop, iobCobCalculator, xDripBroadcast, - otp, config, dateUtilMocked, uel, - glucoseStatusProvider, repository) + smsCommunicatorPlugin = SmsCommunicatorPlugin( + injector, aapsLogger, rh, smsManager, aapsSchedulers, sp, constraintChecker, rxBus, profileFunction, fabricPrivacy, activePlugin, commandQueue, + loop, iobCobCalculator, xDripBroadcast, + otp, config, dateUtilMocked, uel, + glucoseStatusProvider, repository + ) smsCommunicatorPlugin.setPluginEnabled(PluginType.GENERAL, true) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(1) - callback.result = PumpEnactResult(injector).success(true) + callback.result = PumpEnactResultImpl(injector).success(true) callback.run() null }.`when`(commandQueue).cancelTempBasal(ArgumentMatchers.anyBoolean(), ArgumentMatchers.any(Callback::class.java)) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(0) - callback.result = PumpEnactResult(injector).success(true) + callback.result = PumpEnactResultImpl(injector).success(true) callback.run() null }.`when`(commandQueue).cancelExtended(ArgumentMatchers.any(Callback::class.java)) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(1) - callback.result = PumpEnactResult(injector).success(true) + callback.result = PumpEnactResultImpl(injector).success(true) callback.run() null }.`when`(commandQueue).readStatus(ArgumentMatchers.anyString(), ArgumentMatchers.any(Callback::class.java)) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(1) - callback.result = PumpEnactResult(injector).success(true).bolusDelivered(1.0) + callback.result = PumpEnactResultImpl(injector).success(true).bolusDelivered(1.0) callback.run() null }.`when`(commandQueue).bolus(anyObject(), ArgumentMatchers.any(Callback::class.java)) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(5) - callback.result = PumpEnactResult(injector).success(true).isPercent(true).percent(invocation.getArgument(0)).duration(invocation.getArgument(1)) + callback.result = PumpEnactResultImpl(injector).success(true).isPercent(true).percent(invocation.getArgument(0)).duration(invocation.getArgument(1)) callback.run() null - }.`when`(commandQueue).tempBasalPercent(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt(), ArgumentMatchers.anyBoolean(), anyObject(), anyObject(), ArgumentMatchers.any(Callback::class.java)) + }.`when`(commandQueue) + .tempBasalPercent(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt(), ArgumentMatchers.anyBoolean(), anyObject(), anyObject(), ArgumentMatchers.any(Callback::class.java)) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(5) - callback.result = PumpEnactResult(injector).success(true).isPercent(false).absolute(invocation.getArgument(0)).duration(invocation.getArgument(1)) + callback.result = PumpEnactResultImpl(injector).success(true).isPercent(false).absolute(invocation.getArgument(0)).duration(invocation.getArgument(1)) callback.run() null - }.`when`(commandQueue).tempBasalAbsolute(ArgumentMatchers.anyDouble(), ArgumentMatchers.anyInt(), ArgumentMatchers.anyBoolean(), anyObject(), anyObject(), ArgumentMatchers.any(Callback::class.java)) + }.`when`(commandQueue) + .tempBasalAbsolute(ArgumentMatchers.anyDouble(), ArgumentMatchers.anyInt(), ArgumentMatchers.anyBoolean(), anyObject(), anyObject(), ArgumentMatchers.any(Callback::class.java)) Mockito.doAnswer { invocation: InvocationOnMock -> val callback = invocation.getArgument(2) - callback.result = PumpEnactResult(injector).success(true).isPercent(false).absolute(invocation.getArgument(0)).duration(invocation.getArgument(1)) + callback.result = PumpEnactResultImpl(injector).success(true).isPercent(false).absolute(invocation.getArgument(0)).duration(invocation.getArgument(1)) callback.run() null }.`when`(commandQueue).extendedBolus(ArgumentMatchers.anyDouble(), ArgumentMatchers.anyInt(), ArgumentMatchers.any(Callback::class.java)) @@ -180,8 +190,10 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { `when`(rh.gs(R.string.loopisdisabled)).thenReturn("Loop is disabled") `when`(rh.gs(R.string.smscommunicator_loopisenabled)).thenReturn("Loop is enabled") `when`(rh.gs(R.string.wrong_format)).thenReturn("Wrong format") - `when`(rh.gs(eq(R.string.sms_wrong_tbr_duration), ArgumentMatchers.any())).thenAnswer { i: InvocationOnMock -> "TBR duration must be a multiple of " + i.arguments[1] + " minutes and greater than " + - "0." } + `when`(rh.gs(eq(R.string.sms_wrong_tbr_duration), ArgumentMatchers.any())).thenAnswer { i: InvocationOnMock -> + "TBR duration must be a multiple of " + i.arguments[1] + " minutes and greater than " + + "0." + } `when`(rh.gs(R.string.smscommunicator_loophasbeendisabled)).thenReturn("Loop has been disabled") `when`(rh.gs(R.string.smscommunicator_loophasbeenenabled)).thenReturn("Loop has been enabled") `when`(rh.gs(R.string.smscommunicator_tempbasalcanceled)).thenReturn("Temp basal canceled") diff --git a/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsTest.kt b/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsTest.kt index 21b30b1c79..6b4a9cb796 100644 --- a/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsTest.kt +++ b/plugins/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsTest.kt @@ -2,7 +2,7 @@ package info.nightscout.plugins.general.smsCommunicator import android.telephony.SmsMessage import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.data.Sms +import info.nightscout.interfaces.data.smsCommunicator.Sms import org.junit.Assert import org.junit.Test import org.mockito.Mockito diff --git a/pump/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java b/pump/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java index 90a59a0476..808ba3c3cf 100644 --- a/pump/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java +++ b/pump/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java @@ -24,12 +24,12 @@ import dagger.android.HasAndroidInjector; import info.nightscout.androidaps.combo.R; import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.extensions.PumpStateExtensionKt; import info.nightscout.androidaps.interfaces.CommandQueue; import info.nightscout.androidaps.interfaces.Constraint; import info.nightscout.androidaps.interfaces.Constraints; import info.nightscout.androidaps.interfaces.PluginDescription; -import info.nightscout.interfaces.PluginType; import info.nightscout.androidaps.interfaces.Profile; import info.nightscout.androidaps.interfaces.ProfileFunction; import info.nightscout.androidaps.interfaces.Pump; @@ -59,6 +59,7 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.InstanceId; import info.nightscout.androidaps.utils.T; +import info.nightscout.interfaces.PluginType; import info.nightscout.rx.bus.RxBus; import info.nightscout.rx.events.EventInitializationChanged; import info.nightscout.rx.events.EventRefreshOverview; @@ -180,7 +181,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { @Override protected void onStart() { super.onStart(); - OPERATION_NOT_SUPPORTED = new PumpEnactResult(getInjector()) + OPERATION_NOT_SUPPORTED = new PumpEnactResultImpl(getInjector()) .success(false).enacted(false).comment(R.string.combo_pump_unsupported_operation); } @@ -267,7 +268,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { getAapsLogger().error("setNewBasalProfile not initialized"); Notification notification = new Notification(Notification.PROFILE_NOT_SET_NOT_INITIALIZED, getRh().gs(R.string.pumpNotInitializedProfileNotSet), Notification.URGENT); rxBus.send(new EventNewNotification(notification)); - return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(R.string.pumpNotInitializedProfileNotSet); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false).comment(R.string.pumpNotInitializedProfileNotSet); } BasalProfile requestedBasalProfile = convertProfileToComboProfile(profile); @@ -275,12 +276,12 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { //dismiss previously "FAILED" overview notifications rxBus.send(new EventDismissNotification(Notification.PROFILE_NOT_SET_NOT_INITIALIZED)); rxBus.send(new EventDismissNotification(Notification.FAILED_UPDATE_PROFILE)); - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } CommandResult stateResult = runCommand(null, 1, ruffyScripter::readPumpState); if (stateResult.state.unsafeUsageDetected == PumpState.UNSUPPORTED_BASAL_RATE_PROFILE) { - return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(R.string.combo_force_disabled_notification); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false).comment(R.string.combo_force_disabled_notification); } CommandResult setResult = runCommand(getRh().gs(R.string.combo_activity_setting_basal_profile), 2, @@ -288,7 +289,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { if (!setResult.success) { Notification notification = new Notification(Notification.FAILED_UPDATE_PROFILE, getRh().gs(R.string.failedupdatebasalprofile), Notification.URGENT); rxBus.send(new EventNewNotification(notification)); - return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(R.string.failedupdatebasalprofile); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false).comment(R.string.failedupdatebasalprofile); } pump.basalProfile = requestedBasalProfile; @@ -299,7 +300,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { //issue success notification Notification notification = new Notification(Notification.PROFILE_SET_OK, getRh().gs(R.string.profile_set_ok), Notification.INFO, 60); rxBus.send(new EventNewNotification(notification)); - return new PumpEnactResult(getInjector()).success(true).enacted(true); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(true); } @Override @@ -512,16 +513,16 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { // check pump is ready and all pump bolus records are known CommandResult stateResult = runCommand(null, 2, () -> ruffyScripter.readQuickInfo(1)); if (!stateResult.success) { - return new PumpEnactResult(getInjector()).success(false).enacted(false) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false) .comment(R.string.combo_error_no_connection_no_bolus_delivered); } if (stateResult.reservoirLevel != -1 && stateResult.reservoirLevel - 0.5 < detailedBolusInfo.insulin) { - return new PumpEnactResult(getInjector()).success(false).enacted(false) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false) .comment(R.string.combo_reservoir_level_insufficient_for_bolus); } // the commands above ensured a connection was made, which updated this field if (pumpHistoryChanged) { - return new PumpEnactResult(getInjector()).success(false).enacted(false) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false) .comment(R.string.combo_bolus_rejected_due_to_pump_history_change); } @@ -534,7 +535,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { if (Math.abs(previousBolus.amount - detailedBolusInfo.insulin) < 0.01 && previousBolus.timestamp + 60 * 1000 > System.currentTimeMillis()) { getAapsLogger().debug(LTag.PUMP, "Bolus request rejected, same bolus was successfully delivered very recently"); - return new PumpEnactResult(getInjector()).success(false).enacted(false) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false) .comment(R.string.bolus_frequency_exceeded); } @@ -547,10 +548,10 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { while (previousBolus.timestamp == timeCheckResult.state.pumpTime && maxWaitTimeout > System.currentTimeMillis()) { if (cancelBolus) { - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } if (!timeCheckResult.success) { - return new PumpEnactResult(getInjector()).success(false).enacted(false) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false) .comment(R.string.combo_error_no_connection_no_bolus_delivered); } getAapsLogger().debug(LTag.PUMP, "Waiting for pump clock to advance for the next unused bolus record timestamp"); @@ -564,7 +565,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { } if (cancelBolus) { - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } EventOverviewBolusProgress.Treatment treatment = new EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId()); @@ -584,7 +585,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { // (reads 2 records to update `recentBoluses` further down) CommandResult postBolusStateResult = runCommand(null, 3, () -> ruffyScripter.readQuickInfo(2)); if (!postBolusStateResult.success) { - return new PumpEnactResult(getInjector()).success(false).enacted(false) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false) .comment(R.string.combo_error_bolus_verification_failed); } Bolus lastPumpBolus = postBolusStateResult.history != null && !postBolusStateResult.history.bolusHistory.isEmpty() @@ -594,9 +595,9 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { // no bolus delivered? if (lastPumpBolus == null || lastPumpBolus.equals(previousBolus)) { if (cancelBolus) { - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } else { - return new PumpEnactResult(getInjector()) + return new PumpEnactResultImpl(getInjector()) .success(false) .enacted(false) .comment(R.string.combo_error_no_bolus_delivered); @@ -605,7 +606,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { // at least some insulin delivered, so add it to treatments if (!addBolusToTreatments(detailedBolusInfo, lastPumpBolus)) - return new PumpEnactResult(getInjector()).success(false).enacted(true) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(true) .comment(R.string.combo_error_updating_treatment_record); // check pump bolus record has a sane timestamp @@ -622,16 +623,16 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { // only a partial bolus was delivered if (Math.abs(lastPumpBolus.amount - detailedBolusInfo.insulin) > 0.01) { if (cancelBolus) { - return new PumpEnactResult(getInjector()).success(true).enacted(true); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(true); } - return new PumpEnactResult(getInjector()).success(false).enacted(true) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(true) .comment(getRh().gs(R.string.combo_error_partial_bolus_delivered, lastPumpBolus.amount, detailedBolusInfo.insulin)); } // full bolus was delivered successfully incrementBolusCount(); - return new PumpEnactResult(getInjector()) + return new PumpEnactResultImpl(getInjector()) .success(true) .enacted(lastPumpBolus.amount > 0) .bolusDelivered(lastPumpBolus.amount) @@ -732,7 +733,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { getAapsLogger().debug(LTag.PUMP, "setTempBasalPercent called with " + percent + "% for " + durationInMinutes + "min"); if (pumpHistoryChanged && percent > 110) { - return new PumpEnactResult(getInjector()).success(false).enacted(false) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false) .comment(R.string.combo_high_temp_rejected_due_to_pump_history_changes); } @@ -758,7 +759,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { CommandResult commandResult = runCommand(getRh().gs(R.string.combo_pump_action_setting_tbr, percent, durationInMinutes), 3, () -> ruffyScripter.setTbr(finalAdjustedPercent, durationInMinutes)); if (!commandResult.success) { - return new PumpEnactResult(getInjector()).success(false).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false); } PumpState state = commandResult.state; @@ -784,7 +785,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { } incrementTbrCount(); - return new PumpEnactResult(getInjector()).success(true).enacted(true).isPercent(true) + return new PumpEnactResultImpl(getInjector()).success(true).enacted(true).isPercent(true) .percent(state.tbrPercent).duration(state.tbrRemainingDuration); } @@ -808,15 +809,15 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { if (enforceNew) { CommandResult stateResult = runCommand(getRh().gs(R.string.combo_pump_action_refreshing), 2, ruffyScripter::readPumpState); if (!stateResult.success) { - return new PumpEnactResult(getInjector()).success(false).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false); } if (!stateResult.state.tbrActive) { - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } getAapsLogger().debug(LTag.PUMP, "cancelTempBasal: hard-cancelling TBR since force requested"); CommandResult cancelResult = runCommand(getRh().gs(R.string.combo_pump_action_cancelling_tbr), 2, ruffyScripter::cancelTbr); if (!cancelResult.success) { - return new PumpEnactResult(getInjector()).success(false).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false); } if (!cancelResult.state.tbrActive) { pumpSync.syncStopTemporaryBasalWithPumpId( @@ -826,19 +827,19 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { PumpType.ACCU_CHEK_COMBO, serialNumber() ); - return new PumpEnactResult(getInjector()).isTempCancel(true).success(true).enacted(true); + return new PumpEnactResultImpl(getInjector()).isTempCancel(true).success(true).enacted(true); } else { - return new PumpEnactResult(getInjector()).success(false).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false); } } else if (activeTemp == null) { - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } else if ((activeTemp.getRate() >= 90 && activeTemp.getRate() <= 110) && PumpStateExtensionKt.getPlannedRemainingMinutes(activeTemp) <= 15) { // Let fake neutral temp keep run (see below) // Note that since this runs on the queue a connection is opened regardless, but this // case doesn't occur all that often, so it's not worth optimizing (1.3k SetTBR vs 4 cancelTBR). getAapsLogger().debug(LTag.PUMP, "cancelTempBasal: skipping changing tbr since it already is at " + activeTemp.getRate() + "% and running for another " + PumpStateExtensionKt.getPlannedRemainingMinutes(activeTemp) + " mins."); - return new PumpEnactResult(getInjector()).success(true).enacted(true) + return new PumpEnactResultImpl(getInjector()).success(true).enacted(true) .comment("cancelTempBasal skipping changing tbr since it already is at " + activeTemp.getRate() + "% and running for another " + PumpStateExtensionKt.getPlannedRemainingMinutes(activeTemp) + " mins."); @@ -1364,7 +1365,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { @NonNull @Override public PumpEnactResult loadTDDs() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); result.success(readHistory(new PumpHistoryRequest().tddHistory(PumpHistoryRequest.FULL))); if (result.getSuccess()) { List tdds = pump.tddHistory; diff --git a/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/ComboPluginTest.kt b/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/ComboPluginTest.kt index fd18ca6428..5e23612321 100644 --- a/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/ComboPluginTest.kt +++ b/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/ComboPluginTest.kt @@ -5,8 +5,13 @@ import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.combo.R -import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.* +import info.nightscout.androidaps.data.PumpEnactResultImpl +import info.nightscout.androidaps.interfaces.ActivePlugin +import info.nightscout.androidaps.interfaces.CommandQueue +import info.nightscout.androidaps.interfaces.Constraint +import info.nightscout.androidaps.interfaces.ProfileFunction +import info.nightscout.androidaps.interfaces.PumpSync +import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.RuffyScripter import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.history.Bolus import info.nightscout.androidaps.utils.DateUtil @@ -33,7 +38,7 @@ class ComboPluginTest : TestBase() { val injector = HasAndroidInjector { AndroidInjector { - if (it is PumpEnactResult) { + if (it is PumpEnactResultImpl) { it.rh = rh } } diff --git a/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/TestBase.kt b/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/TestBase.kt index e4d3c51234..aa1fefaeda 100644 --- a/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/TestBase.kt +++ b/pump/combo/src/test/java/info/nightscout/androidaps/plugins/pump/combo/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale @Suppress("SpellCheckingInspection") open class TestBase { diff --git a/pump/dana/src/test/java/info/nightscout/androidaps/TestBase.kt b/pump/dana/src/test/java/info/nightscout/androidaps/TestBase.kt index b4c68bf8b5..03d778b101 100644 --- a/pump/dana/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/pump/dana/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase { diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt index dd450c2f03..8d7826b25f 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt @@ -12,12 +12,12 @@ import info.nightscout.androidaps.danar.AbstractDanaRPlugin import info.nightscout.androidaps.danar.R import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.events.EventPreferenceChange import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.CommandQueue import info.nightscout.androidaps.interfaces.Constraint import info.nightscout.androidaps.interfaces.Constraints -import info.nightscout.interfaces.PluginType import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.interfaces.PumpSync.TemporaryBasalType @@ -27,6 +27,7 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.Round +import info.nightscout.interfaces.PluginType import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventAppExit @@ -69,14 +70,14 @@ class DanaRKoreanPlugin @Inject constructor( .toObservable(EventPreferenceChange::class.java) .observeOn(aapsSchedulers.io) .subscribe({ - if (isEnabled(PluginType.PUMP)) { - val previousValue = useExtendedBoluses - useExtendedBoluses = sp.getBoolean(R.string.key_danar_useextended, false) - if (useExtendedBoluses != previousValue && pumpSync.expectedPumpState().extendedBolus != null) { - sExecutionService.extendedBolusStop() - } - } - }, fabricPrivacy::logException) + if (isEnabled(PluginType.PUMP)) { + val previousValue = useExtendedBoluses + useExtendedBoluses = sp.getBoolean(R.string.key_danar_useextended, false) + if (useExtendedBoluses != previousValue && pumpSync.expectedPumpState().extendedBolus != null) { + sExecutionService.extendedBolusStop() + } + } + }, fabricPrivacy::logException) disposable += rxBus .toObservable(EventAppExit::class.java) .observeOn(aapsSchedulers.io) @@ -130,9 +131,11 @@ class DanaRKoreanPlugin @Inject constructor( val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) var connectionOK = false if (detailedBolusInfo.insulin > 0) - connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, detailedBolusInfo.carbs.toInt(), detailedBolusInfo.carbsTimestamp - ?: detailedBolusInfo.timestamp, t) - val result = PumpEnactResult(injector) + connectionOK = sExecutionService.bolus( + detailedBolusInfo.insulin, detailedBolusInfo.carbs.toInt(), detailedBolusInfo.carbsTimestamp + ?: detailedBolusInfo.timestamp, t + ) + val result = PumpEnactResultImpl(injector) result.success(connectionOK && abs(detailedBolusInfo.insulin - t.insulin) < pumpDescription.bolusStep) .bolusDelivered(t.insulin) if (!result.success) result.comment(rh.gs(R.string.boluserrorcode, detailedBolusInfo.insulin, t.insulin, danaPump.bolusStartErrorCode)) else result.comment(R.string.ok) @@ -149,7 +152,7 @@ class DanaRKoreanPlugin @Inject constructor( ) result } else { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success(false).bolusDelivered(0.0).carbsDelivered(0.0).comment(R.string.invalidinput) aapsLogger.error("deliverTreatment: Invalid input") result @@ -160,7 +163,6 @@ class DanaRKoreanPlugin @Inject constructor( override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: TemporaryBasalType): PumpEnactResult { // Recheck pump status if older than 30 min //This should not be needed while using queue because connection should be done before calling this - var result = PumpEnactResult(injector) val absoluteRateAfterConstraint = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() var doTempOff = baseBasalRate - absoluteRateAfterConstraint == 0.0 && absoluteRateAfterConstraint >= 0.10 val doLowTemp = absoluteRateAfterConstraint < baseBasalRate || absoluteRateAfterConstraint < 0.10 @@ -189,15 +191,14 @@ class DanaRKoreanPlugin @Inject constructor( aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Stopping temp basal (doTempOff)") return cancelRealTempBasal() } - result.success(true).enacted(false).percent(100).isPercent(true).isTempCancel(true) aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: doTempOff OK") - return result + return PumpEnactResultImpl(injector).success(true).enacted(false).percent(100).isPercent(true).isTempCancel(true) } if (doLowTemp || doHighTemp) { // If extended in progress if (danaPump.isExtendedInProgress && useExtendedBoluses) { aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Stopping extended bolus (doLowTemp || doHighTemp)") - result = cancelExtendedBolus() + val result = cancelExtendedBolus() if (!result.success) { aapsLogger.error("setTempBasalAbsolute: Failed to stop previous extended bolus (doLowTemp || doHighTemp)") return result @@ -211,9 +212,8 @@ class DanaRKoreanPlugin @Inject constructor( if (enforceNew) { cancelTempBasal(true) } else { - result.success(true).percent(percentRate).enacted(false).duration(danaPump.tempBasalRemainingMin).isPercent(true).isTempCancel(false) aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)") - return result + return PumpEnactResultImpl(injector).success(true).percent(percentRate).enacted(false).duration(danaPump.tempBasalRemainingMin).isPercent(true).isTempCancel(false) } } } @@ -225,7 +225,7 @@ class DanaRKoreanPlugin @Inject constructor( // Check if some temp is already in progress if (danaPump.isTempBasalInProgress) { aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Stopping temp basal (doExtendedTemp)") - result = cancelRealTempBasal() + val result = cancelRealTempBasal() // Check for proper result if (!result.success) { aapsLogger.error("setTempBasalAbsolute: Failed to stop previous temp basal (doExtendedTemp)") @@ -242,21 +242,24 @@ class DanaRKoreanPlugin @Inject constructor( extendedRateToSet = Round.roundTo(extendedRateToSet, pumpDescription.extendedBolusStep * 2) // *2 because of half hours // What is current rate of extended bolusing in u/h? - aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Extended bolus in progress: " + danaPump.isExtendedInProgress + " rate: " + danaPump.extendedBolusAbsoluteRate + "U/h duration remaining: " + danaPump.extendedBolusRemainingMinutes + "min") + aapsLogger.debug( + LTag.PUMP, + "setTempBasalAbsolute: Extended bolus in progress: " + danaPump.isExtendedInProgress + " rate: " + danaPump.extendedBolusAbsoluteRate + "U/h duration remaining: " + danaPump.extendedBolusRemainingMinutes + "min" + ) aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Rate to set: " + extendedRateToSet + "U/h") // Compare with extended rate in progress if (danaPump.isExtendedInProgress && abs(danaPump.extendedBolusAbsoluteRate - extendedRateToSet) < pumpDescription.extendedBolusStep) { // correct extended already set - result.success(true).absolute(danaPump.extendedBolusAbsoluteRate).enacted(false).duration(danaPump.extendedBolusRemainingMinutes).isPercent(false).isTempCancel(false) aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Correct extended already set") - return result + return PumpEnactResultImpl(injector).success(true).absolute(danaPump.extendedBolusAbsoluteRate).enacted(false).duration(danaPump.extendedBolusRemainingMinutes).isPercent(false) + .isTempCancel(false) } // Now set new extended, no need to to stop previous (if running) because it's replaced val extendedAmount = extendedRateToSet / 2 * durationInHalfHours aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Setting extended: " + extendedAmount + "U half hours: " + durationInHalfHours) - result = setExtendedBolus(extendedAmount, durationInMinutes) + val result = setExtendedBolus(extendedAmount, durationInMinutes) if (!result.success) { aapsLogger.error("setTempBasalAbsolute: Failed to set extended bolus") return result @@ -267,8 +270,7 @@ class DanaRKoreanPlugin @Inject constructor( } // We should never end here aapsLogger.error("setTempBasalAbsolute: Internal error") - result.success(false).comment("Internal error") - return result + return PumpEnactResultImpl(injector).success(false).comment("Internal error") } override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult { @@ -276,7 +278,7 @@ class DanaRKoreanPlugin @Inject constructor( if (danaPump.isExtendedInProgress && useExtendedBoluses) { return cancelExtendedBolus() } - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success(true).enacted(false).comment(R.string.ok).isTempCancel(true) return result } @@ -284,7 +286,7 @@ class DanaRKoreanPlugin @Inject constructor( override fun model(): PumpType = PumpType.DANA_R_KOREAN private fun cancelRealTempBasal(): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (danaPump.isTempBasalInProgress) { sExecutionService.tempBasalStop() if (!danaPump.isTempBasalInProgress) { @@ -303,6 +305,6 @@ class DanaRKoreanPlugin @Inject constructor( return result } - override fun loadEvents(): PumpEnactResult = PumpEnactResult(injector) // no history, not needed - override fun setUserOptions(): PumpEnactResult = PumpEnactResult(injector) + override fun loadEvents(): PumpEnactResult = PumpEnactResultImpl(injector) // no history, not needed + override fun setUserOptions(): PumpEnactResult = PumpEnactResultImpl(injector) } \ No newline at end of file diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java index 6e6ef7c41d..80617e10ce 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java @@ -18,6 +18,7 @@ import info.nightscout.androidaps.danar.AbstractDanaRPlugin; import info.nightscout.androidaps.danar.R; import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.interfaces.ActivePlugin; import info.nightscout.androidaps.interfaces.CommandQueue; import info.nightscout.androidaps.interfaces.Constraint; @@ -189,7 +190,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { boolean connectionOK = false; if (detailedBolusInfo.insulin > 0 || carbs > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) carbs, carbTimeStamp, t); - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); result.success(connectionOK && Math.abs(detailedBolusInfo.insulin - t.getInsulin()) < pumpDescription.getBolusStep()) .bolusDelivered(t.getInsulin()) .carbsDelivered(detailedBolusInfo.carbs); @@ -202,7 +203,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { // remove carbs because it's get from history separately return result; } else { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); result.success(false).bolusDelivered(0d).carbsDelivered(0d).comment(R.string.invalidinput); aapsLogger.error("deliverTreatment: Invalid input"); return result; @@ -222,7 +223,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult setTempBasalAbsolute(double absoluteRate, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); absoluteRate = constraintChecker.applyBasalConstraints(new Constraint<>(absoluteRate), profile).value(); @@ -289,7 +290,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult setTempBasalPercent(int percent, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { DanaPump pump = danaPump; - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); percent = constraintChecker.applyBasalPercentConstraints(new Constraint<>(percent), profile).value(); if (percent < 0) { result.isTempCancel(false).enacted(false).success(false).comment(R.string.invalidinput); @@ -323,7 +324,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { private PumpEnactResult setHighTempBasalPercent(Integer percent, int durationInMinutes) { DanaPump pump = danaPump; - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); boolean connectionOK = sExecutionService.highTempBasal(percent, durationInMinutes); if (connectionOK && pump.isTempBasalInProgress() && pump.getTempBasalPercent() == percent) { result.enacted(true).success(true).comment(R.string.ok).isTempCancel(false).duration(pump.getTempBasalRemainingMin()).percent(pump.getTempBasalPercent()).isPercent(true); @@ -337,7 +338,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult cancelTempBasal(boolean force) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (danaPump.isTempBasalInProgress()) { sExecutionService.tempBasalStop(); result.enacted(true).isTempCancel(true); @@ -356,7 +357,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { int durationInHalfHours = Math.max(durationInMinutes / 30, 1); insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (danaPump.isExtendedInProgress() && Math.abs(danaPump.getExtendedBolusAmount() - insulin) < pumpDescription.getExtendedBolusStep()) { result.enacted(false) .success(true) @@ -389,7 +390,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult cancelExtendedBolus() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (danaPump.isExtendedInProgress()) { sExecutionService.extendedBolusStop(); result.enacted(true).success(!danaPump.isExtendedInProgress()).isTempCancel(true); diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java index 2e22bbd6ab..c61774d723 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java @@ -50,6 +50,7 @@ import info.nightscout.androidaps.danar.comm.MsgStatusBolusExtended; import info.nightscout.androidaps.danar.comm.MsgStatusTempBasal; import info.nightscout.androidaps.danar.services.AbstractDanaRExecutionService; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.dialogs.BolusProgressDialog; import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.interfaces.ActivePlugin; @@ -429,14 +430,14 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { public PumpEnactResult loadEvents() { if (!danaRv2Plugin.isInitialized()) { - PumpEnactResult result = new PumpEnactResult(injector).success(false); + PumpEnactResult result = new PumpEnactResultImpl(injector).success(false); result.comment("pump not initialized"); return result; } if (!isConnected()) - return new PumpEnactResult(injector).success(false); + return new PumpEnactResultImpl(injector).success(false); SystemClock.sleep(300); MsgHistoryEventsV2 msg = new MsgHistoryEventsV2(injector, danaPump.lastHistoryFetched); aapsLogger.debug(LTag.PUMP, "Loading event history from: " + dateUtil.dateAndTimeString(danaPump.lastHistoryFetched)); @@ -451,7 +452,7 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { else danaPump.lastHistoryFetched = 0; danaPump.setLastConnection(System.currentTimeMillis()); - return new PumpEnactResult(injector).success(true); + return new PumpEnactResultImpl(injector).success(true); } public boolean updateBasalsInPump(final Profile profile) { @@ -470,12 +471,12 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { public PumpEnactResult setUserOptions() { if (!isConnected()) - return new PumpEnactResult(injector).success(false); + return new PumpEnactResultImpl(injector).success(false); SystemClock.sleep(300); MsgSetUserOptions msg = new MsgSetUserOptions(injector); mSerialIOThread.sendMessage(msg); SystemClock.sleep(200); - return new PumpEnactResult(injector).success(!msg.getFailed()); + return new PumpEnactResultImpl(injector).success(!msg.getFailed()); } } diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java b/pump/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java index 5da4a66aa8..b013ca2b04 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java @@ -11,6 +11,7 @@ import info.nightscout.androidaps.dana.DanaPump; import info.nightscout.androidaps.dana.comm.RecordTypes; import info.nightscout.androidaps.danar.services.AbstractDanaRExecutionService; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.extensions.PumpStateExtensionKt; import info.nightscout.androidaps.interfaces.ActivePlugin; @@ -19,7 +20,6 @@ import info.nightscout.androidaps.interfaces.Constraint; import info.nightscout.androidaps.interfaces.Constraints; import info.nightscout.androidaps.interfaces.Dana; import info.nightscout.androidaps.interfaces.PluginDescription; -import info.nightscout.interfaces.PluginType; import info.nightscout.androidaps.interfaces.Profile; import info.nightscout.androidaps.interfaces.Pump; import info.nightscout.androidaps.interfaces.PumpDescription; @@ -33,6 +33,7 @@ import info.nightscout.androidaps.plugins.general.overview.notifications.Notific import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.DecimalFormatter; import info.nightscout.androidaps.utils.Round; +import info.nightscout.interfaces.PluginType; import info.nightscout.rx.AapsSchedulers; import info.nightscout.rx.bus.RxBus; import info.nightscout.rx.events.EventConfigBuilderChange; @@ -135,7 +136,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump // Pump interface @NonNull @Override public PumpEnactResult setNewBasalProfile(@NonNull Profile profile) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (sExecutionService == null) { getAapsLogger().error("setNewBasalProfile sExecutionService is null"); @@ -215,7 +216,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump @NonNull @Override public PumpEnactResult setTempBasalPercent(int percent, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); percent = constraintChecker.applyBasalPercentConstraints(new Constraint<>(percent), profile).value(); if (percent < 0) { result.isTempCancel(false).enacted(false).success(false).comment(R.string.invalidinput); @@ -268,7 +269,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump int durationInHalfHours = Math.max(durationInMinutes / 30, 1); insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (danaPump.isExtendedInProgress() && Math.abs(danaPump.getExtendedBolusAmount() - insulin) < getPumpDescription().getExtendedBolusStep()) { result.enacted(false) .success(true) @@ -319,7 +320,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump @NonNull @Override public PumpEnactResult cancelExtendedBolus() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (danaPump.isExtendedInProgress()) { sExecutionService.extendedBolusStop(); if (!danaPump.isExtendedInProgress()) { diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java b/pump/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java index 41d16f8fe7..c357343fe7 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java @@ -16,12 +16,12 @@ import info.nightscout.androidaps.dana.DanaPump; import info.nightscout.androidaps.danar.services.DanaRExecutionService; import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.interfaces.ActivePlugin; import info.nightscout.androidaps.interfaces.CommandQueue; import info.nightscout.androidaps.interfaces.Constraint; import info.nightscout.androidaps.interfaces.Constraints; -import info.nightscout.interfaces.PluginType; import info.nightscout.androidaps.interfaces.Profile; import info.nightscout.androidaps.interfaces.PumpSync; import info.nightscout.androidaps.interfaces.ResourceHelper; @@ -30,6 +30,7 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.FabricPrivacy; import info.nightscout.androidaps.utils.Round; +import info.nightscout.interfaces.PluginType; import info.nightscout.rx.AapsSchedulers; import info.nightscout.rx.bus.RxBus; import info.nightscout.rx.events.EventAppExit; @@ -165,7 +166,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { boolean connectionOK = false; if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, detailedBolusInfo.getCarbsTimestamp() != null ? detailedBolusInfo.getCarbsTimestamp() : detailedBolusInfo.timestamp, t); - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); result.success(connectionOK && Math.abs(detailedBolusInfo.insulin - t.getInsulin()) < pumpDescription.getBolusStep()) .bolusDelivered(t.getInsulin()) .carbsDelivered(detailedBolusInfo.carbs); @@ -193,7 +194,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { serialNumber()); return result; } else { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); result.success(false).bolusDelivered(0d).carbsDelivered(0d).comment(R.string.invalidinput); aapsLogger.error("deliverTreatment: Invalid input"); return result; @@ -205,7 +206,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { public PumpEnactResult setTempBasalAbsolute(double absoluteRate, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { // Recheck pump status if older than 30 min //This should not be needed while using queue because connection should be done before calling this - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); absoluteRate = constraints.applyBasalConstraints(new Constraint<>(absoluteRate), profile).value(); @@ -327,7 +328,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { if (danaPump.isExtendedInProgress() && useExtendedBoluses) { return cancelExtendedBolus(); } - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); result.success(true).enacted(false).comment(R.string.ok).isTempCancel(true); return result; } @@ -338,7 +339,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { } private PumpEnactResult cancelRealTempBasal() { - PumpEnactResult result = new PumpEnactResult(getInjector()); + PumpEnactResult result = new PumpEnactResultImpl(getInjector()); if (danaPump.isTempBasalInProgress()) { sExecutionService.tempBasalStop(); if (!danaPump.isTempBasalInProgress()) { @@ -360,7 +361,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult loadEvents() { - return new PumpEnactResult(getInjector()); // no history, not needed + return new PumpEnactResultImpl(getInjector()); // no history, not needed } @NonNull @Override diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java b/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java index dda4b6c543..88a26daa60 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java @@ -40,6 +40,7 @@ import info.nightscout.androidaps.danar.comm.MsgHistorySuspend; import info.nightscout.androidaps.danar.comm.MsgPCCommStart; import info.nightscout.androidaps.danar.comm.MsgPCCommStop; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.interfaces.ActivePlugin; import info.nightscout.androidaps.interfaces.Profile; @@ -241,7 +242,7 @@ public abstract class AbstractDanaRExecutionService extends DaggerService { } public PumpEnactResult loadHistory(byte type) { - PumpEnactResult result = new PumpEnactResult(injector); + PumpEnactResult result = new PumpEnactResultImpl(injector); if (!isConnected()) return result; MessageBase msg = null; switch (type) { diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java b/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java index cde870add4..48be34a631 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java @@ -45,6 +45,7 @@ import info.nightscout.androidaps.danar.comm.MsgStatusBasic; import info.nightscout.androidaps.danar.comm.MsgStatusBolusExtended; import info.nightscout.androidaps.danar.comm.MsgStatusTempBasal; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.dialogs.BolusProgressDialog; import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.interfaces.CommandQueue; @@ -396,11 +397,11 @@ public class DanaRExecutionService extends AbstractDanaRExecutionService { public PumpEnactResult setUserOptions() { if (!isConnected()) - return new PumpEnactResult(injector).success(false); + return new PumpEnactResultImpl(injector).success(false); SystemClock.sleep(300); MsgSetUserOptions msg = new MsgSetUserOptions(injector); mSerialIOThread.sendMessage(msg); SystemClock.sleep(200); - return new PumpEnactResult(injector).success(!msg.getFailed()); + return new PumpEnactResultImpl(injector).success(!msg.getFailed()); } } diff --git a/pump/danar/src/test/java/info/nightscout/androidaps/TestBase.kt b/pump/danar/src/test/java/info/nightscout/androidaps/TestBase.kt index e4d3c51234..aa1fefaeda 100644 --- a/pump/danar/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/pump/danar/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale @Suppress("SpellCheckingInspection") open class TestBase { diff --git a/pump/danar/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/pump/danar/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt index c533893b3f..11baf1fd11 100644 --- a/pump/danar/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ b/pump/danar/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt @@ -2,10 +2,11 @@ package info.nightscout.androidaps import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.data.PumpEnactResultImpl +import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump +import info.nightscout.androidaps.interfaces.PumpDescription import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.plugins.common.ManufacturerType import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -43,26 +44,26 @@ class TestPumpPlugin(val injector: HasAndroidInjector) : Pump { override fun waitForDisconnectionInSeconds(): Int = 0 override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) + override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResultImpl(injector) override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet override fun lastDataTime(): Long = lastData override val baseBasalRate: Double = baseBasal override val reservoirLevel: Double = 0.0 override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS override fun model(): PumpType = PumpType.GENERIC_AAPS override fun serialNumber(): String = "1" override fun shortStatus(veryShort: Boolean): String = "" override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun loadTDDs(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun canHandleDST(): Boolean = true override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} } \ No newline at end of file diff --git a/pump/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt b/pump/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt index d5e6013790..2b6256edc1 100644 --- a/pump/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt +++ b/pump/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt @@ -15,6 +15,7 @@ import info.nightscout.androidaps.danars.events.EventDanaRSDeviceChange import info.nightscout.androidaps.danars.services.DanaRSService import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.extensions.convertedToAbsolute import info.nightscout.androidaps.extensions.plannedRemainingMinutes import info.nightscout.androidaps.interfaces.CommandQueue @@ -22,7 +23,6 @@ import info.nightscout.androidaps.interfaces.Constraint import info.nightscout.androidaps.interfaces.Constraints import info.nightscout.androidaps.interfaces.Dana import info.nightscout.androidaps.interfaces.PluginDescription -import info.nightscout.interfaces.PluginType import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.interfaces.Pump @@ -44,6 +44,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.ToastUtils +import info.nightscout.interfaces.PluginType import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventAppExit @@ -124,9 +125,9 @@ class DanaRSPlugin @Inject constructor( .toObservable(EventDanaRSDeviceChange::class.java) .observeOn(aapsSchedulers.io) .subscribe({ - pumpSync.connectNewPump() - changePump() - }, fabricPrivacy::logException) + pumpSync.connectNewPump() + changePump() + }, fabricPrivacy::logException) changePump() // load device name } @@ -185,15 +186,15 @@ class DanaRSPlugin @Inject constructor( // DanaR interface override fun loadHistory(type: Byte): PumpEnactResult { - return danaRSService?.loadHistory(type) ?: PumpEnactResult(injector).success(false) + return danaRSService?.loadHistory(type) ?: PumpEnactResultImpl(injector).success(false) } override fun loadEvents(): PumpEnactResult { - return danaRSService?.loadEvents() ?: PumpEnactResult(injector).success(false) + return danaRSService?.loadEvents() ?: PumpEnactResultImpl(injector).success(false) } override fun setUserOptions(): PumpEnactResult { - return danaRSService?.setUserSettings() ?: PumpEnactResult(injector).success(false) + return danaRSService?.setUserSettings() ?: PumpEnactResultImpl(injector).success(false) } // Constraints interface @@ -228,7 +229,7 @@ class DanaRSPlugin @Inject constructor( danaRSService?.isConnected ?: false || danaRSService?.isConnecting ?: false override fun setNewBasalProfile(profile: Profile): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (!isInitialized()) { aapsLogger.error("setNewBasalProfile not initialized") val notification = Notification(Notification.PROFILE_NOT_SET_NOT_INITIALIZED, rh.gs(R.string.pumpNotInitializedProfileNotSet), Notification.URGENT) @@ -304,7 +305,7 @@ class DanaRSPlugin @Inject constructor( var connectionOK = false if (detailedBolusInfo.insulin > 0 || carbs > 0) connectionOK = danaRSService?.bolus(detailedBolusInfo.insulin, carbs.toInt(), carbTimeStamp, t) ?: false - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = connectionOK && abs(detailedBolusInfo.insulin - t.insulin) < pumpDescription.bolusStep result.bolusDelivered = t.insulin result.carbsDelivered = detailedBolusInfo.carbs @@ -321,7 +322,7 @@ class DanaRSPlugin @Inject constructor( aapsLogger.debug(LTag.PUMP, "deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.bolusDelivered) result } else { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = false result.bolusDelivered = 0.0 result.carbsDelivered = 0.0 @@ -338,7 +339,6 @@ class DanaRSPlugin @Inject constructor( // This is called from APS @Synchronized override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { - var result = PumpEnactResult(injector) val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() var doTempOff = baseBasalRate - absoluteAfterConstrain == 0.0 val doLowTemp = absoluteAfterConstrain < baseBasalRate @@ -363,13 +363,13 @@ class DanaRSPlugin @Inject constructor( aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Stopping temp basal (doTempOff)") return cancelTempBasal(false) } - result.success = true - result.enacted = false - result.percent = 100 - result.isPercent = true - result.isTempCancel = true aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: doTempOff OK") - return result + return PumpEnactResultImpl(injector) + .success(true) + .enacted(false) + .percent(100) + .isPercent(true) + .isTempCancel(true) } if (doLowTemp || doHighTemp) { // Check if some temp is already in progress @@ -378,21 +378,21 @@ class DanaRSPlugin @Inject constructor( // Correct basal already set ? if (danaPump.tempBasalPercent == percentRate && danaPump.tempBasalRemainingMin > 4) { if (!enforceNew) { - result.success = true - result.percent = percentRate - result.enacted = false - result.duration = danaPump.tempBasalRemainingMin - result.isPercent = true - result.isTempCancel = false aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)") - return result + return PumpEnactResultImpl(injector) + .success(true) + .percent(percentRate) + .enacted(false) + .duration(danaPump.tempBasalRemainingMin) + .isPercent(true) + .isTempCancel(false) } } } temporaryBasalStorage.add(PumpSync.PumpState.TemporaryBasal(dateUtil.now(), T.mins(durationInMinutes.toLong()).msecs(), percentRate.toDouble(), false, tbrType, 0L, 0L)) // Convert duration from minutes to hours aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Setting temp basal $percentRate% for $durationInMinutes minutes (doLowTemp || doHighTemp)") - result = if (percentRate == 0 && durationInMinutes > 30) { + val result = if (percentRate == 0 && durationInMinutes > 30) { setTempBasalPercent(percentRate, durationInMinutes, profile, enforceNew, tbrType) } else { // use special APS temp basal call ... 100+/15min .... 100-/30min @@ -407,14 +407,14 @@ class DanaRSPlugin @Inject constructor( } // We should never end here aapsLogger.error("setTempBasalAbsolute: Internal error") - result.success = false - result.comment = "Internal error" - return result + return PumpEnactResultImpl(injector) + .success(false) + .comment("Internal error") } @Synchronized override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) var percentAfterConstraint = constraintChecker.applyBasalPercentConstraints(Constraint(percent), profile).value() if (percentAfterConstraint < 0) { result.isTempCancel = false @@ -463,7 +463,7 @@ class DanaRSPlugin @Inject constructor( } @Synchronized private fun setHighTempBasalPercent(percent: Int): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) val connectionOK = danaRSService?.highTempBasal(percent) ?: false if (connectionOK && danaPump.isTempBasalInProgress && danaPump.tempBasalPercent == percent) { result.enacted = true @@ -489,7 +489,7 @@ class DanaRSPlugin @Inject constructor( // needs to be rounded val durationInHalfHours = max(durationInMinutes / 30, 1) insulinAfterConstraint = Round.roundTo(insulinAfterConstraint, pumpDescription.extendedBolusStep) - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (danaPump.isExtendedInProgress && abs(danaPump.extendedBolusAmount - insulinAfterConstraint) < pumpDescription.extendedBolusStep) { result.enacted = false result.success = true @@ -524,7 +524,7 @@ class DanaRSPlugin @Inject constructor( @Synchronized override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (danaPump.isTempBasalInProgress) { danaRSService?.tempBasalStop() result.success = !danaPump.isTempBasalInProgress @@ -541,7 +541,7 @@ class DanaRSPlugin @Inject constructor( } @Synchronized override fun cancelExtendedBolus(): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (danaPump.isExtendedInProgress) { danaRSService?.extendedBolusStop() result.success = !danaPump.isExtendedInProgress diff --git a/pump/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt b/pump/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt index c80797caa6..83b78b8c6f 100644 --- a/pump/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt +++ b/pump/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt @@ -56,6 +56,7 @@ import info.nightscout.androidaps.danars.comm.DanaRSPacketOptionSetPumpTime import info.nightscout.androidaps.danars.comm.DanaRSPacketOptionSetPumpUTCAndTimeZone import info.nightscout.androidaps.danars.comm.DanaRSPacketOptionSetUserOption import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.dialogs.BolusProgressDialog import info.nightscout.androidaps.events.EventPumpStatusChanged import info.nightscout.androidaps.interfaces.ActivePlugin @@ -260,7 +261,7 @@ class DanaRSService : DaggerService() { fun loadEvents(): PumpEnactResult { if (!danaRSPlugin.isInitialized()) { - val result = PumpEnactResult(injector).success(false) + val result = PumpEnactResultImpl(injector).success(false) result.comment = "pump not initialized" return result } @@ -282,13 +283,13 @@ class DanaRSService : DaggerService() { rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingpumpstatus))) sendMessage(DanaRSPacketGeneralInitialScreenInformation(injector)) danaPump.lastConnection = System.currentTimeMillis() - return PumpEnactResult(injector).success(msg.success()) + return PumpEnactResultImpl(injector).success(msg.success()) } fun setUserSettings(): PumpEnactResult { val message = DanaRSPacketOptionSetUserOption(injector) sendMessage(message) - return PumpEnactResult(injector).success(message.success()) + return PumpEnactResultImpl(injector).success(message.success()) } fun bolus(insulin: Double, carbs: Int, carbTime: Long, t: EventOverviewBolusProgress.Treatment): Boolean { @@ -498,7 +499,7 @@ class DanaRSService : DaggerService() { } fun loadHistory(type: Byte): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (!isConnected) return result var msg: DanaRSPacketHistory? = null when (type) { diff --git a/pump/danars/src/test/java/info/nightscout/androidaps/TestBase.kt b/pump/danars/src/test/java/info/nightscout/androidaps/TestBase.kt index e4d3c51234..aa1fefaeda 100644 --- a/pump/danars/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/pump/danars/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale @Suppress("SpellCheckingInspection") open class TestBase { diff --git a/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt b/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt index 270c6cdd80..81a5a793ef 100644 --- a/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt +++ b/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt @@ -11,6 +11,7 @@ import androidx.preference.PreferenceFragmentCompat import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.diaconn.events.EventDiaconnG8DeviceChange import info.nightscout.androidaps.diaconn.service.DiaconnG8Service import info.nightscout.androidaps.extensions.convertedToAbsolute @@ -20,7 +21,6 @@ import info.nightscout.androidaps.interfaces.Constraint import info.nightscout.androidaps.interfaces.Constraints import info.nightscout.androidaps.interfaces.Diaconn import info.nightscout.androidaps.interfaces.PluginDescription -import info.nightscout.interfaces.PluginType import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.interfaces.Pump @@ -44,6 +44,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.ToastUtils +import info.nightscout.interfaces.PluginType import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventAppExit @@ -77,14 +78,15 @@ class DiaconnG8Plugin @Inject constructor( private val fabricPrivacy: FabricPrivacy, private val dateUtil: DateUtil, private val aapsSchedulers: AapsSchedulers -) : PumpPluginBase(PluginDescription() - .mainType(PluginType.PUMP) - .fragmentClass(DiaconnG8Fragment::class.java.name) - .pluginIcon(R.drawable.ic_diaconn_g8) - .pluginName(R.string.diaconn_g8_pump) - .shortName(R.string.diaconn_g8_pump_shortname) - .preferencesId(R.xml.pref_diaconn) - .description(R.string.description_pump_diaconn_g8), +) : PumpPluginBase( + PluginDescription() + .mainType(PluginType.PUMP) + .fragmentClass(DiaconnG8Fragment::class.java.name) + .pluginIcon(R.drawable.ic_diaconn_g8) + .pluginName(R.string.diaconn_g8_pump) + .shortName(R.string.diaconn_g8_pump_shortname) + .preferencesId(R.xml.pref_diaconn) + .description(R.string.description_pump_diaconn_g8), injector, aapsLogger, rh, commandQueue ), Pump, Diaconn, Constraints { @@ -99,19 +101,19 @@ class DiaconnG8Plugin @Inject constructor( val intent = Intent(context, DiaconnG8Service::class.java) context.bindService(intent, mConnection, Context.BIND_AUTO_CREATE) disposable.add(rxBus - .toObservable(EventAppExit::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ context.unbindService(mConnection) }) { fabricPrivacy.logException(it) } + .toObservable(EventAppExit::class.java) + .observeOn(aapsSchedulers.io) + .subscribe({ context.unbindService(mConnection) }) { fabricPrivacy.logException(it) } ) disposable.add(rxBus - .toObservable(EventConfigBuilderChange::class.java) - .observeOn(aapsSchedulers.io) - .subscribe { diaconnG8Pump.reset() } + .toObservable(EventConfigBuilderChange::class.java) + .observeOn(aapsSchedulers.io) + .subscribe { diaconnG8Pump.reset() } ) disposable.add(rxBus - .toObservable(EventDiaconnG8DeviceChange::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ changePump() }) { fabricPrivacy.logException(it) } + .toObservable(EventDiaconnG8DeviceChange::class.java) + .observeOn(aapsSchedulers.io) + .subscribe({ changePump() }) { fabricPrivacy.logException(it) } ) changePump() // load device name } @@ -144,9 +146,9 @@ class DiaconnG8Plugin @Inject constructor( override fun connect(reason: String) { aapsLogger.debug(LTag.PUMP, "Diaconn G8 connect from: $reason") - if(diaconnG8Service != null && mDeviceAddress != "" && mDeviceName != "") { + if (diaconnG8Service != null && mDeviceAddress != "" && mDeviceName != "") { val success = diaconnG8Service?.connect(reason, mDeviceAddress) ?: false - if(!success) ToastUtils.errorToast(context, R.string.ble_not_supported) + if (!success) ToastUtils.errorToast(context, R.string.ble_not_supported) } } @@ -172,11 +174,11 @@ class DiaconnG8Plugin @Inject constructor( // Diaconn Pump Interface override fun loadHistory(): PumpEnactResult { - return diaconnG8Service?.loadHistory() ?: PumpEnactResult(injector).success(false) + return diaconnG8Service?.loadHistory() ?: PumpEnactResultImpl(injector).success(false) } override fun setUserOptions(): PumpEnactResult { - return diaconnG8Service?.setUserSettings() ?: PumpEnactResult(injector).success(false) + return diaconnG8Service?.setUserSettings() ?: PumpEnactResultImpl(injector).success(false) } // Constraints interface @@ -201,7 +203,7 @@ class DiaconnG8Plugin @Inject constructor( } // Pump interface - override fun isInitialized(): Boolean = + override fun isInitialized(): Boolean = diaconnG8Pump.lastConnection > 0 && diaconnG8Pump.maxBasal > 0 override fun isSuspended(): Boolean = @@ -211,7 +213,7 @@ class DiaconnG8Plugin @Inject constructor( diaconnG8Service?.isConnected ?: false || diaconnG8Service?.isConnecting ?: false override fun setNewBasalProfile(profile: Profile): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (!isInitialized()) { val notification = Notification(Notification.PROFILE_NOT_SET_NOT_INITIALIZED, rh.gs(R.string.pumpNotInitializedProfileNotSet), Notification.URGENT) rxBus.send(EventNewNotification(notification)) @@ -241,7 +243,7 @@ class DiaconnG8Plugin @Inject constructor( if (!isInitialized()) return true if (diaconnG8Pump.pumpProfiles == null) return true val basalValues = 24 - val basalIncrement = 60 * 60 + val basalIncrement = 60 * 60 for (h in 0 until basalValues) { val pumpValue = diaconnG8Pump.pumpProfiles!![diaconnG8Pump.activeProfile][h] val profileValue = profile.getBasalTimeFromMidnight(h * basalIncrement) @@ -275,19 +277,19 @@ class DiaconnG8Plugin @Inject constructor( var connectionOK = false if (detailedBolusInfo.insulin > 0 || carbs > 0) connectionOK = diaconnG8Service?.bolus(detailedBolusInfo.insulin, carbs.toInt(), carbTimeStamp, t) ?: false - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = connectionOK result.bolusDelivered = t.insulin result.carbsDelivered = detailedBolusInfo.carbs - if(result.success) result.enacted = true + if (result.success) result.enacted = true if (!result.success) { setErrorMsg(diaconnG8Pump.resultErrorCode, result) } else result.comment = rh.gs(R.string.ok) aapsLogger.debug(LTag.PUMP, "deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.bolusDelivered) result } else { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.success = false result.bolusDelivered = 0.0 result.carbsDelivered = 0.0 @@ -304,7 +306,7 @@ class DiaconnG8Plugin @Inject constructor( // This is called from APS @Synchronized override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() val doTempOff = baseBasalRate - absoluteAfterConstrain == 0.0 val doLowTemp = absoluteAfterConstrain < baseBasalRate @@ -381,7 +383,10 @@ class DiaconnG8Plugin @Inject constructor( } else { var absoluteValue = profile.getBasal() * (percent / 100.0) absoluteValue = pumpDescription.pumpType.determineCorrectBasalSize(absoluteValue) - aapsLogger.warn(LTag.PUMP, "setTempBasalPercent [DiaconnG8Plugin] - You are trying to use setTempBasalPercent with percent other then 0% ($percent). This will start setTempBasalAbsolute, with calculated value ($absoluteValue). Result might not be 100% correct.") + aapsLogger.warn( + LTag.PUMP, + "setTempBasalPercent [DiaconnG8Plugin] - You are trying to use setTempBasalPercent with percent other then 0% ($percent). This will start setTempBasalAbsolute, with calculated value ($absoluteValue). Result might not be 100% correct." + ) setTempBasalAbsolute(absoluteValue, durationInMinutes, profile, enforceNew, tbrType) } @@ -392,7 +397,7 @@ class DiaconnG8Plugin @Inject constructor( var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(Constraint(insulin)).value() // needs to be rounded insulinAfterConstraint = Round.roundTo(insulinAfterConstraint, pumpDescription.extendedBolusStep) - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (diaconnG8Pump.isExtendedInProgress && abs(diaconnG8Pump.extendedBolusAmount - insulinAfterConstraint) < pumpDescription.extendedBolusStep) { result.enacted = false @@ -430,13 +435,13 @@ class DiaconnG8Plugin @Inject constructor( @Synchronized override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (diaconnG8Pump.isTempBasalInProgress) { diaconnG8Service?.tempBasalStop() result.success = !diaconnG8Pump.isTempBasalInProgress result.enacted = true result.isTempCancel = true - if(!result.success) setErrorMsg(diaconnG8Pump.resultErrorCode, result) + if (!result.success) setErrorMsg(diaconnG8Pump.resultErrorCode, result) } else { result.success = true result.enacted = false @@ -448,17 +453,17 @@ class DiaconnG8Plugin @Inject constructor( } @Synchronized override fun cancelExtendedBolus(): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) if (diaconnG8Pump.isExtendedInProgress) { diaconnG8Service?.extendedBolusStop() result.success = !diaconnG8Pump.isExtendedInProgress result.enacted = true - if(!result.success) { + if (!result.success) { setErrorMsg(diaconnG8Pump.resultErrorCode, result) diaconnG8Service?.readPumpStatus() } - } else { + } else { result.success = true result.enacted = false result.comment = rh.gs(R.string.ok) @@ -549,42 +554,43 @@ class DiaconnG8Plugin @Inject constructor( ret += "Batt: ${diaconnG8Pump.systemRemainBattery}" return ret } + override val isFakingTempsByExtendedBoluses: Boolean = false override fun loadTDDs(): PumpEnactResult = loadHistory() override fun getCustomActions(): List? = null override fun executeCustomAction(customActionType: CustomActionType) {} override fun canHandleDST(): Boolean = false - override fun isBatteryChangeLoggingEnabled():Boolean { + override fun isBatteryChangeLoggingEnabled(): Boolean { return sp.getBoolean(R.string.key_diaconn_g8_logbatterychange, false) } - fun isInsulinChangeLoggingEnabled():Boolean { + fun isInsulinChangeLoggingEnabled(): Boolean { return sp.getBoolean(R.string.key_diaconn_g8_loginsulinchange, false) } @Synchronized fun setErrorMsg(errorCode: Int, result: PumpEnactResult) { when (errorCode) { - 1 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_1) - 2 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_2) - 3 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_3) - 4 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_4) - 6 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_6) - 7 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_7) - 8 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_8) - 9 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_9) - 10 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_10) - 11 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_11) - 12 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_12) - 13 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_13) - 14 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_14) - 15 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_15) - 32 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_32) - 33 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_33) - 34 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_34) - 35 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_35) - 36 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_36) + 1 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_1) + 2 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_2) + 3 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_3) + 4 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_4) + 6 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_6) + 7 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_7) + 8 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_8) + 9 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_9) + 10 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_10) + 11 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_11) + 12 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_12) + 13 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_13) + 14 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_14) + 15 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_15) + 32 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_32) + 33 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_33) + 34 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_34) + 35 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_35) + 36 -> result.comment = rh.gs(R.string.diaconn_g8_errorcode_36) else -> result.comment = "not defined Error code: $errorCode" } } diff --git a/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt b/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt index f127f661df..76e2fa282e 100644 --- a/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt +++ b/pump/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt @@ -10,6 +10,7 @@ import dagger.android.DaggerService import dagger.android.HasAndroidInjector import info.nightscout.androidaps.Constants import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.diaconn.DiaconnG8Plugin import info.nightscout.androidaps.diaconn.DiaconnG8Pump import info.nightscout.androidaps.diaconn.R @@ -268,7 +269,7 @@ class DiaconnG8Service : DaggerService() { fun loadHistory(): PumpEnactResult { if (!diaconnG8Plugin.isInitialized()) { - val result = PumpEnactResult(injector).success(false) + val result = PumpEnactResultImpl(injector).success(false) result.comment = "pump not initialized" return result } @@ -278,14 +279,14 @@ class DiaconnG8Service : DaggerService() { sendMessage(IncarnationInquirePacket(injector)) } - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) var apsLastLogNum = 9999 var apsWrappingCount = -1 // get saved last loginfo val diaconnHistoryRecord = diaconnHistoryRecordDao.getLastRecord(diaconnG8Pump.pumpUid) aapsLogger.debug(LTag.PUMPCOMM, "diaconnHistoryRecord :: $diaconnHistoryRecord") - if(diaconnHistoryRecord != null) { + if (diaconnHistoryRecord != null) { apsLastLogNum = diaconnHistoryRecord.lognum apsWrappingCount = diaconnHistoryRecord.wrappingCount } @@ -297,25 +298,24 @@ class DiaconnG8Service : DaggerService() { // aps last log num val pumpSerialNo = sp.getInt(rh.gs(R.string.pumpserialno), 0) - // if first install app - if (apsWrappingCount == -1 && apsLastLogNum == 9999 ) { + if (apsWrappingCount == -1 && apsLastLogNum == 9999) { apsWrappingCount = pumpWrappingCount - apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum -2 + apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum - 2 } // if another pump if (pumpSerialNo != diaconnG8Pump.serialNo) { apsWrappingCount = pumpWrappingCount - apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum -2 + apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum - 2 sp.putInt(rh.gs(R.string.pumpserialno), diaconnG8Pump.serialNo) } // if pump reset if (apsIncarnationNum != diaconnG8Pump.pumpIncarnationNum) { apsWrappingCount = pumpWrappingCount - apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum -2 + apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum - 2 sp.putInt(R.string.apsIncarnationNo, apsIncarnationNum) } - aapsLogger.debug(LTag.PUMPCOMM, "apsWrappingCount : $apsWrappingCount, apsLastLogNum : $apsLastLogNum") + aapsLogger.debug(LTag.PUMPCOMM, "apsWrappingCount : $apsWrappingCount, apsLastLogNum : $apsLastLogNum") // pump log loop size val pumpLogPageSize = 11 @@ -340,7 +340,7 @@ class DiaconnG8Service : DaggerService() { val retrofit = diaconnLogUploader.getRetrofitInstance() val api = retrofit?.create(DiaconnApiService::class.java) val response = api?.getPumpLastNo(diaconnG8Pump.pumpUid, diaconnG8Pump.pumpVersion, diaconnG8Pump.pumpIncarnationNum)?.execute() - if(response?.body()?.ok == true) { + if (response?.body()?.ok == true) { aapsLogger.debug(LTag.PUMPCOMM, "pumplog_no = ${response.body()?.info?.pumplog_no}") val platformLastNo = response.body()?.info?.pumplog_no!! val platformWrappingCount: Int = floor(platformLastNo / 10000.0).toInt() @@ -353,10 +353,10 @@ class DiaconnG8Service : DaggerService() { // 페이지 사이즈로 처리할 때 루핑 횟수 계산 val (platformStart, platformEnd, platformLoopSize) = getCloudLogLoopCount(platformLastNo.toInt(), platformLogNo, platformWrappingCount, pumpLastNum, pumpWrappingCount) - if(platformLoopSize > 0) { + if (platformLoopSize > 0) { diaconnG8Pump.isPlatformUploadStarted = true for (i in 0 until platformLoopSize) { - if(diaconnG8Pump.isPumpLogUploadFailed) { + if (diaconnG8Pump.isPumpLogUploadFailed) { break } rxBus.send(EventPumpStatusChanged("클라우드동기화 진행 중 : $i / $platformLoopSize")) @@ -370,7 +370,7 @@ class DiaconnG8Service : DaggerService() { diaconnG8Pump.isPumpLogUploadFailed = false } } - } catch (e:Exception) { + } catch (e: Exception) { aapsLogger.error("Unhandled exception", e) } } @@ -394,18 +394,21 @@ class DiaconnG8Service : DaggerService() { return Triple(start, end, size) } - private fun getCloudLogLoopCount(platformLastNo:Int, platformPumpLogNum: Int, wrappingCount: Int, pumpLastNum: Int, pumpWrappingCount: Int): Triple { + private fun getCloudLogLoopCount(platformLastNo: Int, platformPumpLogNum: Int, wrappingCount: Int, pumpLastNum: Int, pumpWrappingCount: Int): Triple { val start: Int// log sync start number val end: Int // log sync end number1311 - aapsLogger.debug(LTag.PUMPCOMM, "platformLastNo: $platformLastNo, PlatformPumpLogNum : $platformPumpLogNum, wrappingCount : $wrappingCount , pumpLastNum: $pumpLastNum, pumpWrappingCount :$pumpWrappingCount") + aapsLogger.debug( + LTag.PUMPCOMM, + "platformLastNo: $platformLastNo, PlatformPumpLogNum : $platformPumpLogNum, wrappingCount : $wrappingCount , pumpLastNum: $pumpLastNum, pumpWrappingCount :$pumpWrappingCount" + ) - if ((pumpWrappingCount * 10000 + pumpLastNum - platformLastNo > 10000 )) { + if ((pumpWrappingCount * 10000 + pumpLastNum - platformLastNo > 10000)) { start = pumpLastNum end = 10000 } else if (pumpWrappingCount > wrappingCount && platformPumpLogNum < 9999) { start = (platformPumpLogNum + 1) end = 10000 - } else if (pumpWrappingCount > wrappingCount && platformPumpLogNum >= 9999 ) { + } else if (pumpWrappingCount > wrappingCount && platformPumpLogNum >= 9999) { start = 0 // 처음부터 시작 end = pumpLastNum } else { @@ -418,7 +421,7 @@ class DiaconnG8Service : DaggerService() { } fun setUserSettings(): PumpEnactResult { - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) val msg: DiaconnG8Packet = when (diaconnG8Pump.setUserOptionType) { DiaconnG8Pump.ALARM -> SoundSettingPacket(injector, diaconnG8Pump.beepAndAlarm, diaconnG8Pump.alarmIntesity) @@ -501,7 +504,7 @@ class DiaconnG8Service : DaggerService() { val bolusDurationInMSec = (insulin * speed * 1000).toLong() val expectedEnd = bolusStart + bolusDurationInMSec + 3500L val totalwaitTime = (expectedEnd - System.currentTimeMillis()) / 1000 - if(diaconnG8Pump.isReadyToBolus) { + if (diaconnG8Pump.isReadyToBolus) { while (!diaconnG8Pump.bolusDone) { val waitTime = (expectedEnd - System.currentTimeMillis()) / 1000 bolusingEvent.status = String.format(rh.gs(R.string.waitingforestimatedbolusend), if (waitTime < 0) 0 else waitTime) @@ -739,7 +742,7 @@ class DiaconnG8Service : DaggerService() { // pump confirm var loopCnt = 0 // waiting 2 seconds for otp - while(loopCnt < 20) { + while (loopCnt < 20) { if (diaconnG8Pump.otpNumber == 0) { SystemClock.sleep(100) aapsLogger.error(LTag.PUMPCOMM, "OTP waiting 100ms $loopCnt / 20") diff --git a/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/EopatchPumpPlugin.kt b/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/EopatchPumpPlugin.kt index 56c6b49b54..dc75c55b52 100644 --- a/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/EopatchPumpPlugin.kt +++ b/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/EopatchPumpPlugin.kt @@ -4,10 +4,10 @@ import android.os.SystemClock import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.events.EventPreferenceChange import info.nightscout.androidaps.interfaces.CommandQueue import info.nightscout.androidaps.interfaces.PluginDescription -import info.nightscout.interfaces.PluginType import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump import info.nightscout.androidaps.interfaces.PumpDescription @@ -33,6 +33,7 @@ import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.TimeChangeType +import info.nightscout.interfaces.PluginType import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventAppInitialized @@ -61,14 +62,15 @@ class EopatchPumpPlugin @Inject constructor( private val patchManager: IPatchManager, private val alarmManager: IAlarmManager, private val preferenceManager: IPreferenceManager -):PumpPluginBase(PluginDescription() - .mainType(PluginType.PUMP) - .fragmentClass(EopatchOverviewFragment::class.java.name) - .pluginIcon(R.drawable.ic_eopatch2_128) - .pluginName(R.string.eopatch) - .shortName(R.string.eopatch_shortname) - .preferencesId(R.xml.pref_eopatch) - .description(R.string.eopatch_pump_description), injector, aapsLogger, rh, commandQueue +) : PumpPluginBase( + PluginDescription() + .mainType(PluginType.PUMP) + .fragmentClass(EopatchOverviewFragment::class.java.name) + .pluginIcon(R.drawable.ic_eopatch2_128) + .pluginName(R.string.eopatch) + .shortName(R.string.eopatch_shortname) + .preferencesId(R.xml.pref_eopatch) + .description(R.string.eopatch_pump_description), injector, aapsLogger, rh, commandQueue ), Pump { private val mDisposables = CompositeDisposable() @@ -80,31 +82,31 @@ class EopatchPumpPlugin @Inject constructor( override fun onStart() { super.onStart() mDisposables.add(rxBus - .toObservable(EventPreferenceChange::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ event: EventPreferenceChange -> - if (event.isChanged(rh, SettingKeys.LOW_RESERVOIR_REMINDERS) || event.isChanged(rh, SettingKeys.EXPIRATION_REMINDERS)) { - patchManager.changeReminderSetting() - } else if (event.isChanged(rh, SettingKeys.BUZZER_REMINDERS)) { - patchManager.changeBuzzerSetting() - } - }) { throwable: Throwable -> fabricPrivacy.logException(throwable) } + .toObservable(EventPreferenceChange::class.java) + .observeOn(aapsSchedulers.io) + .subscribe({ event: EventPreferenceChange -> + if (event.isChanged(rh, SettingKeys.LOW_RESERVOIR_REMINDERS) || event.isChanged(rh, SettingKeys.EXPIRATION_REMINDERS)) { + patchManager.changeReminderSetting() + } else if (event.isChanged(rh, SettingKeys.BUZZER_REMINDERS)) { + patchManager.changeBuzzerSetting() + } + }) { throwable: Throwable -> fabricPrivacy.logException(throwable) } ) mDisposables.add(rxBus - .toObservable(EventAppInitialized::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ - preferenceManager.init() - patchManager.init() - alarmManager.init() - }) { throwable: Throwable -> fabricPrivacy.logException(throwable) } + .toObservable(EventAppInitialized::class.java) + .observeOn(aapsSchedulers.io) + .subscribe({ + preferenceManager.init() + patchManager.init() + alarmManager.init() + }) { throwable: Throwable -> fabricPrivacy.logException(throwable) } ) } override fun specialEnableCondition(): Boolean { //BG -> FG, restart patch activation and trigger unhandled alarm - if(preferenceManager.isInitDone()) { + if (preferenceManager.isInitDone()) { patchManager.checkActivationProcess() alarmManager.restartAll() } @@ -129,7 +131,7 @@ class EopatchPumpPlugin @Inject constructor( } override fun isConnected(): Boolean { - return if(patchManager.isDeactivated) true else patchManager.patchConnectionState.isConnected + return if (patchManager.isDeactivated) true else patchManager.patchConnectionState.isConnected } override fun isConnecting(): Boolean { @@ -144,12 +146,12 @@ class EopatchPumpPlugin @Inject constructor( } override fun connect(reason: String) { - aapsLogger.debug(LTag.PUMP,"EOPatch connect - reason:$reason") + aapsLogger.debug(LTag.PUMP, "EOPatch connect - reason:$reason") mLastDataTime = System.currentTimeMillis() } override fun disconnect(reason: String) { - aapsLogger.debug(LTag.PUMP,"EOPatch disconnect - reason:$reason") + aapsLogger.debug(LTag.PUMP, "EOPatch disconnect - reason:$reason") } override fun stopConnecting() { @@ -159,23 +161,24 @@ class EopatchPumpPlugin @Inject constructor( if (patchManager.isActivated) { if ("SMS" == reason) { aapsLogger.debug("Acknowledged AAPS getPumpStatus request it was requested through an SMS") - }else{ + } else { aapsLogger.debug("Acknowledged AAPS getPumpStatus request") } - mDisposables.add(patchManager.updateConnection() - .subscribe(Consumer { - mLastDataTime = System.currentTimeMillis() - }) + mDisposables.add( + patchManager.updateConnection() + .subscribe(Consumer { + mLastDataTime = System.currentTimeMillis() + }) ) } } override fun setNewBasalProfile(profile: Profile): PumpEnactResult { mLastDataTime = System.currentTimeMillis() - if(patchManager.isActivated){ - if(patchManager.patchState.isTempBasalActive || patchManager.patchState.isBolusActive){ - return PumpEnactResult(injector) - }else{ + if (patchManager.isActivated) { + if (patchManager.patchState.isTempBasalActive || patchManager.patchState.isBolusActive) { + return PumpEnactResultImpl(injector) + } else { var isSuccess: Boolean? = null val result: BehaviorSubject = BehaviorSubject.create() val disposable = result.hide() @@ -184,33 +187,34 @@ class EopatchPumpPlugin @Inject constructor( } val nb = preferenceManager.getNormalBasalManager().convertProfileToNormalBasal(profile) - mDisposables.add(patchManager.startBasal(nb) - .observeOn(aapsSchedulers.main) - .subscribe({ response -> - result.onNext(response.isSuccess) - }, { - result.onNext(false) - }) + mDisposables.add( + patchManager.startBasal(nb) + .observeOn(aapsSchedulers.main) + .subscribe({ response -> + result.onNext(response.isSuccess) + }, { + result.onNext(false) + }) ) - do{ + do { SystemClock.sleep(100) - }while(isSuccess == null) + } while (isSuccess == null) disposable.dispose() - aapsLogger.info(LTag.PUMP, "Basal Profile was set: ${isSuccess?:false}") - if(isSuccess == true) { + aapsLogger.info(LTag.PUMP, "Basal Profile was set: ${isSuccess ?: false}") + if (isSuccess == true) { rxBus.send(EventNewNotification(Notification(Notification.PROFILE_SET_OK, rh.gs(R.string.profile_set_ok), Notification.INFO, 60))) - return PumpEnactResult(injector).success(true).enacted(true) - }else{ - return PumpEnactResult(injector) + return PumpEnactResultImpl(injector).success(true).enacted(true) + } else { + return PumpEnactResultImpl(injector) } } - }else{ + } else { preferenceManager.getNormalBasalManager().setNormalBasal(profile) preferenceManager.flushNormalBasalManager() rxBus.send(EventNewNotification(Notification(Notification.PROFILE_SET_OK, rh.gs(R.string.profile_set_ok), Notification.INFO, 60))) - return PumpEnactResult(injector).success(true).enacted(true) + return PumpEnactResultImpl(injector).success(true).enacted(true) } } @@ -229,39 +233,39 @@ class EopatchPumpPlugin @Inject constructor( } override val baseBasalRate: Double - get() { - if (!patchManager.isActivated || patchManager.patchState.isNormalBasalPaused) { - return 0.0 - } + get() { + if (!patchManager.isActivated || patchManager.patchState.isNormalBasalPaused) { + return 0.0 + } - return preferenceManager.getNormalBasalManager().normalBasal.getCurrentSegment()?.doseUnitPerHour?.toDouble()?:0.05 - } + return preferenceManager.getNormalBasalManager().normalBasal.getCurrentSegment()?.doseUnitPerHour?.toDouble() ?: 0.05 + } override val reservoirLevel: Double - get() { - if (!patchManager.isActivated) { - return 0.0 - } + get() { + if (!patchManager.isActivated) { + return 0.0 + } - return patchManager.patchState.remainedInsulin.toDouble() - } + return patchManager.patchState.remainedInsulin.toDouble() + } override val batteryLevel: Int - get() { - return if(patchManager.isActivated) { - patchManager.patchState.batteryLevel() - }else{ - 0 + get() { + return if (patchManager.isActivated) { + patchManager.patchState.batteryLevel() + } else { + 0 + } } - } override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { if (detailedBolusInfo.insulin == 0.0 && detailedBolusInfo.carbs == 0.0) { // neither carbs nor bolus requested aapsLogger.error("deliverTreatment: Invalid input: neither carbs nor insulin are set in treatment") - return PumpEnactResult(injector).success(false).enacted(false).bolusDelivered(0.0).carbsDelivered(0.0) - .comment(rh.gs(R.string.invalidinput)) + return PumpEnactResultImpl(injector).success(false).enacted(false).bolusDelivered(0.0).carbsDelivered(0.0) + .comment(rh.gs(R.string.invalidinput)) } else if (detailedBolusInfo.insulin > 0.0) { var isSuccess = true val result = BehaviorSubject.createDefault(true) @@ -271,22 +275,22 @@ class EopatchPumpPlugin @Inject constructor( } mDisposables.add(patchManager.startCalculatorBolus(detailedBolusInfo) - .doOnSuccess { - mLastDataTime = System.currentTimeMillis() - }.subscribe({ - result.onNext(it.isSuccess) - }, { - result.onNext(false) - }) + .doOnSuccess { + mLastDataTime = System.currentTimeMillis() + }.subscribe({ + result.onNext(it.isSuccess) + }, { + result.onNext(false) + }) ) val tr = detailedBolusInfo.let { EventOverviewBolusProgress.Treatment(it.insulin, it.carbs.toInt(), it.bolusType === DetailedBolusInfo.BolusType.SMB, it.id) } - do{ + do { SystemClock.sleep(100) - if(patchManager.patchConnectionState.isConnected) { + if (patchManager.patchConnectionState.isConnected) { val delivering = patchManager.bolusCurrent.nowBolus.injected rxBus.send(EventOverviewBolusProgress.apply { status = rh.gs(R.string.bolusdelivering, delivering) @@ -294,7 +298,7 @@ class EopatchPumpPlugin @Inject constructor( t = tr }) } - }while(!patchManager.bolusCurrent.nowBolus.endTimeSynced && isSuccess) + } while (!patchManager.bolusCurrent.nowBolus.endTimeSynced && isSuccess) rxBus.send(EventOverviewBolusProgress.apply { status = rh.gs(R.string.bolusdelivered, detailedBolusInfo.insulin) @@ -306,35 +310,35 @@ class EopatchPumpPlugin @Inject constructor( disposable.dispose() - return if(isSuccess) - PumpEnactResult(injector).success(true)/*.enacted(true)*/.carbsDelivered(detailedBolusInfo.carbs).bolusDelivered(detailedBolusInfo.insulin) + return if (isSuccess) + PumpEnactResultImpl(injector).success(true)/*.enacted(true)*/.carbsDelivered(detailedBolusInfo.carbs).bolusDelivered(detailedBolusInfo.insulin) else - PumpEnactResult(injector).success(false)/*.enacted(false)*/.carbsDelivered(0.0).bolusDelivered(detailedBolusInfo.insulin) + PumpEnactResultImpl(injector).success(false)/*.enacted(false)*/.carbsDelivered(0.0).bolusDelivered(detailedBolusInfo.insulin) } else { // no bolus required, carb only treatment patchManager.addBolusToHistory(detailedBolusInfo) - return PumpEnactResult(injector).success(true).enacted(true).bolusDelivered(0.0) - .carbsDelivered(detailedBolusInfo.carbs).comment(rh.gs(info.nightscout.androidaps.core.R.string.ok)) + return PumpEnactResultImpl(injector).success(true).enacted(true).bolusDelivered(0.0) + .carbsDelivered(detailedBolusInfo.carbs).comment(rh.gs(info.nightscout.androidaps.core.R.string.ok)) } } override fun stopBolusDelivering() { mDisposables.add(patchManager.stopNowBolus() - .subscribeOn(aapsSchedulers.io) - .observeOn(aapsSchedulers.main) - .subscribe { it -> - rxBus.send(EventOverviewBolusProgress.apply { - status = rh.gs(R.string.bolusdelivered, (it.injectedBolusAmount * 0.05f)) - }) - } + .subscribeOn(aapsSchedulers.io) + .observeOn(aapsSchedulers.main) + .subscribe { it -> + rxBus.send(EventOverviewBolusProgress.apply { + status = rh.gs(R.string.bolusdelivered, (it.injectedBolusAmount * 0.05f)) + }) + } ) } override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - absoluteRate: ${absoluteRate.toFloat()}, durationInMinutes: ${durationInMinutes.toLong()}, enforceNew: $enforceNew") - if(patchManager.patchState.isNormalBasalAct){ + if (patchManager.patchState.isNormalBasalAct) { mLastDataTime = System.currentTimeMillis() val tb = TempBasal.createAbsolute(durationInMinutes.toLong(), absoluteRate.toFloat()) return patchManager.startTempBasal(tb) @@ -351,21 +355,23 @@ class EopatchPumpPlugin @Inject constructor( pumpType = PumpType.EOFLOW_EOPATCH2, pumpSerial = serialNumber() ) - aapsLogger.info(LTag.PUMP,"setTempBasalAbsolute - tbrCurrent:${readTBR()}") + aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - tbrCurrent:${readTBR()}") } - .map { PumpEnactResult(injector).success(true).enacted(true).duration(durationInMinutes).absolute(absoluteRate).isPercent(false).isTempCancel(false) } - .onErrorReturnItem(PumpEnactResult(injector).success(false).enacted(false) - .comment("Internal error")) + .map { PumpEnactResultImpl(injector).success(true).enacted(true).duration(durationInMinutes).absolute(absoluteRate).isPercent(false).isTempCancel(false) } + .onErrorReturnItem( + PumpEnactResultImpl(injector).success(false).enacted(false) + .comment("Internal error") + ) .blockingGet() - }else{ - aapsLogger.info(LTag.PUMP,"setTempBasalAbsolute - normal basal is not active") - return PumpEnactResult(injector).success(false).enacted(false) + } else { + aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - normal basal is not active") + return PumpEnactResultImpl(injector).success(false).enacted(false) } } override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { - aapsLogger.info(LTag.PUMP,"setTempBasalPercent - percent: $percent, durationInMinutes: $durationInMinutes, enforceNew: $enforceNew") - if(patchManager.patchState.isNormalBasalAct && percent != 0){ + aapsLogger.info(LTag.PUMP, "setTempBasalPercent - percent: $percent, durationInMinutes: $durationInMinutes, enforceNew: $enforceNew") + if (patchManager.patchState.isNormalBasalAct && percent != 0) { mLastDataTime = System.currentTimeMillis() val tb = TempBasal.createPercent(durationInMinutes.toLong(), percent) return patchManager.startTempBasal(tb) @@ -382,20 +388,22 @@ class EopatchPumpPlugin @Inject constructor( pumpType = PumpType.EOFLOW_EOPATCH2, pumpSerial = serialNumber() ) - aapsLogger.info(LTag.PUMP,"setTempBasalPercent - tbrCurrent:${readTBR()}") + aapsLogger.info(LTag.PUMP, "setTempBasalPercent - tbrCurrent:${readTBR()}") } - .map { PumpEnactResult(injector).success(true).enacted(true).duration(durationInMinutes).percent(percent).isPercent(true).isTempCancel(false) } - .onErrorReturnItem(PumpEnactResult(injector).success(false).enacted(false) - .comment("Internal error")) + .map { PumpEnactResultImpl(injector).success(true).enacted(true).duration(durationInMinutes).percent(percent).isPercent(true).isTempCancel(false) } + .onErrorReturnItem( + PumpEnactResultImpl(injector).success(false).enacted(false) + .comment("Internal error") + ) .blockingGet() - }else{ - aapsLogger.info(LTag.PUMP,"setTempBasalPercent - normal basal is not active") - return PumpEnactResult(injector).success(false).enacted(false) + } else { + aapsLogger.info(LTag.PUMP, "setTempBasalPercent - normal basal is not active") + return PumpEnactResultImpl(injector).success(false).enacted(false) } } override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult { - aapsLogger.info(LTag.PUMP,"setExtendedBolus - insulin: $insulin, durationInMinutes: $durationInMinutes") + aapsLogger.info(LTag.PUMP, "setExtendedBolus - insulin: $insulin, durationInMinutes: $durationInMinutes") return patchManager.startQuickBolus(0f, insulin.toFloat(), BolusExDuration.ofRaw(durationInMinutes)) .doOnSuccess { @@ -410,31 +418,33 @@ class EopatchPumpPlugin @Inject constructor( pumpSerial = serialNumber() ) } - .map { PumpEnactResult(injector).success(true).enacted(true)} - .onErrorReturnItem(PumpEnactResult(injector).success(false).enacted(false).bolusDelivered(0.0) - .comment(rh.gs(info.nightscout.androidaps.core.R.string.error))) + .map { PumpEnactResultImpl(injector).success(true).enacted(true) } + .onErrorReturnItem( + PumpEnactResultImpl(injector).success(false).enacted(false).bolusDelivered(0.0) + .comment(rh.gs(info.nightscout.androidaps.core.R.string.error)) + ) .blockingGet() } override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult { val tbrCurrent = readTBR() - if (tbrCurrent == null ) { - aapsLogger.debug(LTag.PUMP,"cancelTempBasal - TBR already false.") - return PumpEnactResult(injector).success(true).enacted(false) - } + if (tbrCurrent == null) { + aapsLogger.debug(LTag.PUMP, "cancelTempBasal - TBR already false.") + return PumpEnactResultImpl(injector).success(true).enacted(false) + } - if (!patchManager.patchState.isTempBasalActive) { - return if (pumpSync.expectedPumpState().temporaryBasal != null) { - PumpEnactResult(injector).success(true).enacted(true).isTempCancel(true) - }else - PumpEnactResult(injector).success(true).isTempCancel(true) + if (!patchManager.patchState.isTempBasalActive) { + return if (pumpSync.expectedPumpState().temporaryBasal != null) { + PumpEnactResultImpl(injector).success(true).enacted(true).isTempCancel(true) + } else + PumpEnactResultImpl(injector).success(true).isTempCancel(true) } return patchManager.stopTempBasal() .doOnSuccess { mLastDataTime = System.currentTimeMillis() - aapsLogger.debug(LTag.PUMP,"cancelTempBasal - $it") + aapsLogger.debug(LTag.PUMP, "cancelTempBasal - $it") pumpSync.syncStopTemporaryBasalWithPumpId( timestamp = dateUtil.now(), endPumpId = dateUtil.now(), @@ -442,20 +452,22 @@ class EopatchPumpPlugin @Inject constructor( pumpSerial = serialNumber() ) } - .doOnError{ - aapsLogger.error(LTag.PUMP,"cancelTempBasal() - $it") + .doOnError { + aapsLogger.error(LTag.PUMP, "cancelTempBasal() - $it") } - .map { PumpEnactResult(injector).success(true).enacted(true).isTempCancel(true)} - .onErrorReturnItem(PumpEnactResult(injector).success(false).enacted(false) - .comment(rh.gs(info.nightscout.androidaps.core.R.string.error))) + .map { PumpEnactResultImpl(injector).success(true).enacted(true).isTempCancel(true) } + .onErrorReturnItem( + PumpEnactResultImpl(injector).success(false).enacted(false) + .comment(rh.gs(info.nightscout.androidaps.core.R.string.error)) + ) .blockingGet() } override fun cancelExtendedBolus(): PumpEnactResult { - if(patchManager.patchState.isExtBolusActive){ + if (patchManager.patchState.isExtBolusActive) { return patchManager.stopExtBolus() .doOnSuccess { - aapsLogger.debug(LTag.PUMP,"cancelExtendedBolus - success") + aapsLogger.debug(LTag.PUMP, "cancelExtendedBolus - success") mLastDataTime = System.currentTimeMillis() pumpSync.syncStopExtendedBolusWithPumpId( timestamp = dateUtil.now(), @@ -464,12 +476,14 @@ class EopatchPumpPlugin @Inject constructor( pumpSerial = serialNumber() ) } - .map { PumpEnactResult(injector).success(true).enacted(true).isTempCancel(true)} - .onErrorReturnItem(PumpEnactResult(injector).success(false).enacted(false) - .comment(rh.gs(info.nightscout.androidaps.core.R.string.error))) + .map { PumpEnactResultImpl(injector).success(true).enacted(true).isTempCancel(true) } + .onErrorReturnItem( + PumpEnactResultImpl(injector).success(false).enacted(false) + .comment(rh.gs(info.nightscout.androidaps.core.R.string.error)) + ) .blockingGet() - }else{ - aapsLogger.debug(LTag.PUMP,"cancelExtendedBolus - nothing stops") + } else { + aapsLogger.debug(LTag.PUMP, "cancelExtendedBolus - nothing stops") return if (pumpSync.expectedPumpState().extendedBolus != null) { pumpSync.syncStopExtendedBolusWithPumpId( timestamp = dateUtil.now(), @@ -477,9 +491,9 @@ class EopatchPumpPlugin @Inject constructor( pumpType = PumpType.EOFLOW_EOPATCH2, pumpSerial = serialNumber() ) - PumpEnactResult(injector).success(true).enacted(true).isTempCancel(true) - }else - PumpEnactResult(injector) + PumpEnactResultImpl(injector).success(true).enacted(true).isTempCancel(true) + } else + PumpEnactResultImpl(injector) } } @@ -503,7 +517,7 @@ class EopatchPumpPlugin @Inject constructor( get() = mPumpDescription override fun shortStatus(veryShort: Boolean): String { - if(patchManager.isActivated) { + if (patchManager.isActivated) { var ret = "" val activeTemp = pumpSync.expectedPumpState().temporaryBasal if (activeTemp != null) @@ -524,7 +538,7 @@ class EopatchPumpPlugin @Inject constructor( ret += "Reservoir: $reservoirStr" ret += "Battery: ${patchManager.patchState.batteryLevel()}" return ret - }else{ + } else { return "EOPatch is not enabled." } } @@ -532,7 +546,7 @@ class EopatchPumpPlugin @Inject constructor( override val isFakingTempsByExtendedBoluses: Boolean = false override fun loadTDDs(): PumpEnactResult { - return PumpEnactResult(injector) + return PumpEnactResultImpl(injector) } override fun canHandleDST(): Boolean { @@ -551,7 +565,6 @@ class EopatchPumpPlugin @Inject constructor( return null } - override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) { } diff --git a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt index 044213d96b..bb0744317b 100644 --- a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt +++ b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt @@ -9,11 +9,11 @@ import androidx.preference.Preference import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.ActivityNames import info.nightscout.androidaps.interfaces.CommandQueue import info.nightscout.androidaps.interfaces.PluginDescription -import info.nightscout.interfaces.PluginType import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump import info.nightscout.androidaps.interfaces.PumpSync @@ -66,6 +66,7 @@ import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil.Comp import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.TimeChangeType +import info.nightscout.interfaces.PluginType import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventRefreshOverview @@ -591,7 +592,7 @@ class MedtronicPumpPlugin @Inject constructor( aapsLogger.info(LTag.PUMP, "MedtronicPumpPlugin::deliverBolus - " + BolusDeliveryType.DeliveryPrepared) setRefreshButtonEnabled(false) if (detailedBolusInfo.insulin > medtronicPumpStatus.reservoirRemainingUnits) { - return PumpEnactResult(injector) // + return PumpEnactResultImpl(injector) // .success(false) // .enacted(false) // .comment( @@ -632,7 +633,7 @@ class MedtronicPumpPlugin @Inject constructor( // LOG.debug("MedtronicPumpPlugin::deliverBolus - Response: {}", response); return if (response == null || !response) { - PumpEnactResult(injector) // + PumpEnactResultImpl(injector) // .success(bolusDeliveryType == BolusDeliveryType.CancelDelivery) // .enacted(false) // .comment(R.string.medtronic_cmd_bolus_could_not_be_delivered) @@ -659,7 +660,7 @@ class MedtronicPumpPlugin @Inject constructor( val time = now + bolusTime * 1000 busyTimestamps.add(time) setEnableCustomAction(MedtronicCustomActionType.ClearBolusBlock, true) - PumpEnactResult(injector).success(true) // + PumpEnactResultImpl(injector).success(true) // .enacted(true) // .bolusDelivered(detailedBolusInfo.insulin) // .carbsDelivered(detailedBolusInfo.carbs) @@ -676,8 +677,8 @@ class MedtronicPumpPlugin @Inject constructor( private fun setNotReachable(isBolus: Boolean, success: Boolean): PumpEnactResult { setRefreshButtonEnabled(true) if (isBolus) bolusDeliveryType = BolusDeliveryType.Idle - return if (success) PumpEnactResult(injector).success(true).enacted(false) - else PumpEnactResult(injector).success(false).enacted(false).comment(R.string.medtronic_pump_status_pump_unreachable) + return if (success) PumpEnactResultImpl(injector).success(true).enacted(false) + else PumpEnactResultImpl(injector).success(false).enacted(false).comment(R.string.medtronic_pump_status_pump_unreachable) } override fun stopBolusDelivering() { @@ -700,7 +701,7 @@ class MedtronicPumpPlugin @Inject constructor( setRefreshButtonEnabled(false) if (isPumpNotReachable) { setRefreshButtonEnabled(true) - return PumpEnactResult(injector) // + return PumpEnactResultImpl(injector) // .success(false) // .enacted(false) // .comment(R.string.medtronic_pump_status_pump_unreachable) @@ -713,7 +714,7 @@ class MedtronicPumpPlugin @Inject constructor( if (tbrCurrent == null) { aapsLogger.warn(LTag.PUMP, logPrefix + "setTempBasalAbsolute - Could not read current TBR, canceling operation.") finishAction("TBR") - return PumpEnactResult(injector).success(false).enacted(false) + return PumpEnactResultImpl(injector).success(false).enacted(false) .comment(R.string.medtronic_cmd_cant_read_tbr) } else { aapsLogger.info(LTag.PUMP, logPrefix + "setTempBasalAbsolute: Current Basal: duration: " + tbrCurrent.durationMinutes + " min, rate=" + tbrCurrent.insulinRate) @@ -728,7 +729,7 @@ class MedtronicPumpPlugin @Inject constructor( if (sameRate) { aapsLogger.info(LTag.PUMP, logPrefix + "setTempBasalAbsolute - No enforceNew and same rate. Exiting.") finishAction("TBR") - return PumpEnactResult(injector).success(true).enacted(false) + return PumpEnactResultImpl(injector).success(true).enacted(false) } } // if not the same rate, we cancel and start new @@ -744,7 +745,7 @@ class MedtronicPumpPlugin @Inject constructor( if (response == null || !response) { aapsLogger.error(logPrefix + "setTempBasalAbsolute - Cancel TBR failed.") finishAction("TBR") - return PumpEnactResult(injector).success(false).enacted(false) + return PumpEnactResultImpl(injector).success(false).enacted(false) .comment(R.string.medtronic_cmd_cant_cancel_tbr_stop_op) } else { //cancelTBRWithTemporaryId() @@ -761,7 +762,7 @@ class MedtronicPumpPlugin @Inject constructor( aapsLogger.info(LTag.PUMP, logPrefix + "setTempBasalAbsolute - setTBR. Response: " + response) return if (response == null || !response) { finishAction("TBR") - PumpEnactResult(injector).success(false).enacted(false) // + PumpEnactResultImpl(injector).success(false).enacted(false) // .comment(R.string.medtronic_cmd_tbr_could_not_be_delivered) } else { medtronicPumpStatus.tempBasalStart = System.currentTimeMillis() @@ -775,7 +776,7 @@ class MedtronicPumpPlugin @Inject constructor( incrementStatistics(MedtronicConst.Statistics.TBRsSet) finishAction("TBR") - PumpEnactResult(injector).success(true).enacted(true) // + PumpEnactResultImpl(injector).success(true).enacted(true) // .absolute(absoluteRate).duration(durationInMinutes) } } @@ -1021,7 +1022,7 @@ class MedtronicPumpPlugin @Inject constructor( aapsLogger.info(LTag.PUMP, logPrefix + "cancelTempBasal - started") if (isPumpNotReachable) { setRefreshButtonEnabled(true) - return PumpEnactResult(injector) // + return PumpEnactResultImpl(injector) // .success(false) // .enacted(false) // .comment(R.string.medtronic_pump_status_pump_unreachable) @@ -1033,12 +1034,12 @@ class MedtronicPumpPlugin @Inject constructor( if (tbrCurrent.insulinRate > 0.0f && tbrCurrent.durationMinutes == 0) { aapsLogger.info(LTag.PUMP, logPrefix + "cancelTempBasal - TBR already canceled.") finishAction("TBR") - return PumpEnactResult(injector).success(true).enacted(false) + return PumpEnactResultImpl(injector).success(true).enacted(false) } } else { aapsLogger.warn(LTag.PUMP, logPrefix + "cancelTempBasal - Could not read current TBR, canceling operation.") finishAction("TBR") - return PumpEnactResult(injector).success(false).enacted(false) + return PumpEnactResultImpl(injector).success(false).enacted(false) .comment(R.string.medtronic_cmd_cant_read_tbr) } val responseTask2 = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand(MedtronicCommandType.CancelTBR) @@ -1046,7 +1047,7 @@ class MedtronicPumpPlugin @Inject constructor( finishAction("TBR") return if (response == null || !response) { aapsLogger.info(LTag.PUMP, logPrefix + "cancelTempBasal - Cancel TBR failed.") - PumpEnactResult(injector).success(false).enacted(false) // + PumpEnactResultImpl(injector).success(false).enacted(false) // .comment(R.string.medtronic_cmd_cant_cancel_tbr) } else { aapsLogger.info(LTag.PUMP, logPrefix + "cancelTempBasal - Cancel TBR successful.") @@ -1082,7 +1083,7 @@ class MedtronicPumpPlugin @Inject constructor( //cancelTBRWithTemporaryId() - PumpEnactResult(injector).success(true).enacted(true) // + PumpEnactResultImpl(injector).success(true).enacted(true) // .isTempCancel(true) } } @@ -1105,7 +1106,7 @@ class MedtronicPumpPlugin @Inject constructor( // this shouldn't be needed, but let's do check if profile setting we are setting is same as current one if (isProfileSame(profile)) { - return PumpEnactResult(injector) // + return PumpEnactResultImpl(injector) // .success(true) // .enacted(false) // .comment(R.string.medtronic_cmd_basal_profile_not_set_is_same) @@ -1113,7 +1114,7 @@ class MedtronicPumpPlugin @Inject constructor( setRefreshButtonEnabled(false) if (isPumpNotReachable) { setRefreshButtonEnabled(true) - return PumpEnactResult(injector) // + return PumpEnactResultImpl(injector) // .success(false) // .enacted(false) // .comment(R.string.medtronic_pump_status_pump_unreachable) @@ -1123,7 +1124,7 @@ class MedtronicPumpPlugin @Inject constructor( aapsLogger.debug("Basal Profile: $basalProfile") val profileInvalid = isProfileValid(basalProfile) if (profileInvalid != null) { - return PumpEnactResult(injector) // + return PumpEnactResultImpl(injector) // .success(false) // .enacted(false) // .comment(rh.gs(R.string.medtronic_cmd_set_profile_pattern_overflow, profileInvalid)) @@ -1135,10 +1136,10 @@ class MedtronicPumpPlugin @Inject constructor( val response = responseTask?.result as Boolean? aapsLogger.info(LTag.PUMP, logPrefix + "Basal Profile was set: " + response) return if (response == null || !response) { - PumpEnactResult(injector).success(false).enacted(false) // + PumpEnactResultImpl(injector).success(false).enacted(false) // .comment(R.string.medtronic_cmd_basal_profile_could_not_be_set) } else { - PumpEnactResult(injector).success(true).enacted(true) + PumpEnactResultImpl(injector).success(true).enacted(true) } } diff --git a/pump/medtronic/src/test/java/info/nightscout/androidaps/TestBase.kt b/pump/medtronic/src/test/java/info/nightscout/androidaps/TestBase.kt index 827ea1de9d..f7737a1881 100644 --- a/pump/medtronic/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/pump/medtronic/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -12,10 +12,10 @@ import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.Medtr import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryType import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers +import info.nightscout.rx.TestAapsSchedulers import info.nightscout.rx.bus.RxBus -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import info.nightscout.shared.sharedPreferences.SP import org.junit.Before import org.junit.Rule @@ -24,7 +24,7 @@ import org.mockito.Mock import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase { diff --git a/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt b/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt index e25d03f6e5..9a3975647a 100644 --- a/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt +++ b/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt @@ -12,8 +12,8 @@ import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.TempBasalProce import info.nightscout.androidaps.plugins.pump.medtronic.defs.MedtronicDeviceType import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.androidaps.utils.serialisation.SealedClassHelper.gson +import info.nightscout.rx.TestAapsSchedulers import info.nightscout.rx.bus.RxBus import org.junit.Before import org.junit.Test diff --git a/pump/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/common/viewmodel/ActionViewModelBase.kt b/pump/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/common/viewmodel/ActionViewModelBase.kt index 03412433e8..4a745a9f7a 100644 --- a/pump/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/common/viewmodel/ActionViewModelBase.kt +++ b/pump/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/common/viewmodel/ActionViewModelBase.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag @@ -41,7 +42,7 @@ abstract class ActionViewModelBase( logger.error(LTag.PUMP, "Caught exception in while executing action in ActionViewModelBase", throwable) _isActionExecutingLiveData.postValue(false) _actionResultLiveData.postValue( - PumpEnactResult(injector).success(false).comment( + PumpEnactResultImpl(injector).success(false).comment( throwable.message ?: "Caught exception in while executing action in ActionViewModelBase" ) ) diff --git a/pump/omnipod-dash/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/history/DashHistoryTest.kt b/pump/omnipod-dash/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/history/DashHistoryTest.kt index e5b309d398..b0739c0849 100644 --- a/pump/omnipod-dash/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/history/DashHistoryTest.kt +++ b/pump/omnipod-dash/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/history/DashHistoryTest.kt @@ -9,7 +9,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.common.definition.Omnipod import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.database.DashHistoryDatabase import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.database.HistoryRecordDao import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.mapper.HistoryMapper -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import io.reactivex.rxjava3.schedulers.Schedulers import org.junit.After import org.junit.Before diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt index 56d8bea964..44f083ef59 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt @@ -7,6 +7,7 @@ import android.text.format.DateFormat import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.events.EventPreferenceChange import info.nightscout.androidaps.extensions.convertedToAbsolute import info.nightscout.androidaps.extensions.plannedRemainingMinutes @@ -14,7 +15,6 @@ import info.nightscout.androidaps.extensions.toStringFull import info.nightscout.androidaps.interfaces.ActivityNames import info.nightscout.androidaps.interfaces.CommandQueue import info.nightscout.androidaps.interfaces.PluginDescription -import info.nightscout.interfaces.PluginType import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.interfaces.Pump @@ -68,6 +68,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.TimeChangeType +import info.nightscout.interfaces.PluginType import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventProfileSwitchChanged @@ -394,7 +395,7 @@ class OmnipodDashPumpPlugin @Inject constructor( override fun setNewBasalProfile(profile: Profile): PumpEnactResult { if (!podStateManager.isActivationCompleted) { - return PumpEnactResult(injector).success(true).enacted(true) + return PumpEnactResultImpl(injector).success(true).enacted(true) } aapsLogger.debug(LTag.PUMP, "setNewBasalProfile profile=$profile") return setNewBasalProfile(profile, OmnipodCommandType.SET_BASAL_PROFILE) @@ -420,7 +421,7 @@ class OmnipodDashPumpPlugin @Inject constructor( command = omnipodManager.setBasalProgram(basalProgram, hasBasalBeepEnabled()).ignoreElements(), post = failWhenUnconfirmed(deliverySuspended), // mark as failed even if it worked OK and try again vs. mark ok and deny later - ).toPumpEnactResult() + ).toPumpEnactResultImpl() } private fun failWhenUnconfirmed(deliverySuspended: Boolean): Completable = Completable.defer { @@ -566,7 +567,7 @@ class OmnipodDashPumpPlugin @Inject constructor( detailedBolusInfo.insulin == 0.0 ) { // Accept only valid insulin requests - return PumpEnactResult(injector) + return PumpEnactResultImpl(injector) .success(false) .enacted(false) .bolusDelivered(0.0) @@ -574,7 +575,7 @@ class OmnipodDashPumpPlugin @Inject constructor( } val requestedBolusAmount = detailedBolusInfo.insulin if (requestedBolusAmount > reservoirLevel) { - return PumpEnactResult(injector) + return PumpEnactResultImpl(injector) .success(false) .enacted(false) .bolusDelivered(0.0) @@ -583,7 +584,7 @@ class OmnipodDashPumpPlugin @Inject constructor( if (podStateManager.deliveryStatus == DeliveryStatus.BOLUS_AND_BASAL_ACTIVE || podStateManager.deliveryStatus == DeliveryStatus.BOLUS_AND_TEMP_BASAL_ACTIVE ) { - return PumpEnactResult(injector) + return PumpEnactResultImpl(injector) .success(false) .enacted(false) .bolusDelivered(0.0) @@ -652,10 +653,10 @@ class OmnipodDashPumpPlugin @Inject constructor( } } }.toSingle { - PumpEnactResult(injector).success(true).enacted(true).bolusDelivered(deliveredBolusAmount) + PumpEnactResultImpl(injector).success(true).enacted(true).bolusDelivered(deliveredBolusAmount) }.onErrorReturnItem( // success if canceled - PumpEnactResult(injector).success(bolusCanceled).enacted(false) + PumpEnactResultImpl(injector).success(bolusCanceled).enacted(false) ) .blockingGet() aapsLogger.info( @@ -864,7 +865,7 @@ class OmnipodDashPumpPlugin @Inject constructor( "it has been cancelled. Please manually refresh the Pod status from the Omnipod tab.", R.raw.boluserror, ) - }.toPumpEnactResult() + }.toPumpEnactResultImpl() if (ret.success && ret.enacted) { ret.isPercent(false).absolute(absoluteRate).duration(durationInMinutes) @@ -939,13 +940,13 @@ class OmnipodDashPumpPlugin @Inject constructor( tbrType: PumpSync.TemporaryBasalType ): PumpEnactResult { // TODO i18n - return PumpEnactResult(injector).success(false).enacted(false) + return PumpEnactResultImpl(injector).success(false).enacted(false) .comment("Omnipod Dash driver does not support percentage temp basals") } override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult { // TODO i18n - return PumpEnactResult(injector).success(false).enacted(false) + return PumpEnactResultImpl(injector).success(false).enacted(false) .comment("Omnipod Dash driver does not support extended boluses") } @@ -962,7 +963,7 @@ class OmnipodDashPumpPlugin @Inject constructor( pumpSync.expectedPumpState().temporaryBasal == null ) { // nothing to cancel - return PumpEnactResult(injector).success(true).enacted(false) + return PumpEnactResultImpl(injector).success(true).enacted(false) } return executeProgrammingCommand( @@ -974,7 +975,7 @@ class OmnipodDashPumpPlugin @Inject constructor( "Cancel temp basal result is uncertain", // TODO: i8n, R.raw.boluserror, // TODO: add setting for this ) - }.toPumpEnactResult() + }.toPumpEnactResultImpl() } private fun notifyOnUnconfirmed(notificationId: Int, msg: String, sound: Int?) { @@ -984,18 +985,18 @@ class OmnipodDashPumpPlugin @Inject constructor( } } - private fun Completable.toPumpEnactResult(): PumpEnactResult { - return this.toSingleDefault(PumpEnactResult(injector).success(true).enacted(true)) + private fun Completable.toPumpEnactResultImpl(): PumpEnactResult { + return this.toSingleDefault(PumpEnactResultImpl(injector).success(true).enacted(true)) .doOnError { throwable -> aapsLogger.error(LTag.PUMP, "toPumpEnactResult, error executing command: $throwable") } - .onErrorReturnItem(PumpEnactResult(injector).success(false).enacted(false)) + .onErrorReturnItem(PumpEnactResultImpl(injector).success(false).enacted(false)) .blockingGet() } override fun cancelExtendedBolus(): PumpEnactResult { // TODO i18n - return PumpEnactResult(injector).success(false).enacted(false) + return PumpEnactResultImpl(injector).success(false).enacted(false) .comment("Omnipod Dash driver does not support extended boluses") } @@ -1096,7 +1097,7 @@ class OmnipodDashPumpPlugin @Inject constructor( override fun loadTDDs(): PumpEnactResult { // TODO i18n - return PumpEnactResult(injector).success(false).enacted(false) + return PumpEnactResultImpl(injector).success(false).enacted(false) .comment("Omnipod Dash driver does not support TDD") } @@ -1131,7 +1132,7 @@ class OmnipodDashPumpPlugin @Inject constructor( else -> { aapsLogger.warn(LTag.PUMP, "Unsupported custom command: " + customCommand.javaClass.name) - PumpEnactResult(injector).success(false).enacted(false).comment( + PumpEnactResultImpl(injector).success(false).enacted(false).comment( rh.gs( R.string.omnipod_common_error_unsupported_custom_command, customCommand.javaClass.name @@ -1147,8 +1148,8 @@ class OmnipodDashPumpPlugin @Inject constructor( executeProgrammingCommand( historyEntry = history.createRecord(commandType = OmnipodCommandType.ACKNOWLEDGE_ALERTS), command = omnipodManager.silenceAlerts(it).ignoreElements(), - ).toPumpEnactResult() - } ?: PumpEnactResult(injector).success(false).enacted(false).comment("No active alerts") // TODO i18n + ).toPumpEnactResultImpl() + } ?: PumpEnactResultImpl(injector).success(false).enacted(false).comment("No active alerts") // TODO i18n } private fun disableSuspendAlerts(): PumpEnactResult { @@ -1168,7 +1169,7 @@ class OmnipodDashPumpPlugin @Inject constructor( val ret = executeProgrammingCommand( historyEntry = history.createRecord(OmnipodCommandType.CONFIGURE_ALERTS), command = omnipodManager.programAlerts(alerts).ignoreElements(), - ).toPumpEnactResult() + ).toPumpEnactResultImpl() if (ret.success && ret.enacted) { podStateManager.suspendAlertsEnabled = false } @@ -1195,8 +1196,8 @@ class OmnipodDashPumpPlugin @Inject constructor( "Unconfirmed resumeDelivery command. Please refresh pod status", R.raw.boluserror ) - }.toPumpEnactResult() - } ?: PumpEnactResult(injector).success(false).enacted(false).comment("No profile active") // TODO i18n + }.toPumpEnactResultImpl() + } ?: PumpEnactResultImpl(injector).success(false).enacted(false).comment("No profile active") // TODO i18n } private fun deactivatePod(): PumpEnactResult { @@ -1212,7 +1213,7 @@ class OmnipodDashPumpPlugin @Inject constructor( podStateManager.reset() rxBus.send(EventDismissNotification(Notification.OMNIPOD_POD_FAULT)) } - }.toPumpEnactResult() + }.toPumpEnactResultImpl() if (!success) { ret.success(false) } @@ -1222,7 +1223,7 @@ class OmnipodDashPumpPlugin @Inject constructor( private fun handleTimeChange(): PumpEnactResult { return profileFunction.getProfile()?.let { setNewBasalProfile(it, OmnipodCommandType.SET_TIME) - } ?: PumpEnactResult(injector).success(false).enacted(false).comment("No profile active") + } ?: PumpEnactResultImpl(injector).success(false).enacted(false).comment("No profile active") } private fun updateAlertConfiguration(): PumpEnactResult { @@ -1240,12 +1241,12 @@ class OmnipodDashPumpPlugin @Inject constructor( lowReservoirAlertUnits ) -> { aapsLogger.debug(LTag.PUMP, "Ignoring updateAlertConfiguration because the settings did not change") - return PumpEnactResult(injector).success(true).enacted(false) + return PumpEnactResultImpl(injector).success(true).enacted(false) } !podStateManager.isPodRunning -> { aapsLogger.debug(LTag.PUMP, "Ignoring updateAlertConfiguration because there is no active pod") - return PumpEnactResult(injector).success(true).enacted(false) + return PumpEnactResultImpl(injector).success(true).enacted(false) } } @@ -1257,7 +1258,7 @@ class OmnipodDashPumpPlugin @Inject constructor( "updateAlertConfiguration negative " + "expiryAlertDuration=$expiryAlertDelay" ) - PumpEnactResult(injector).success(false).enacted(false) + PumpEnactResultImpl(injector).success(false).enacted(false) } val alerts = listOf( AlertConfiguration( @@ -1293,14 +1294,14 @@ class OmnipodDashPumpPlugin @Inject constructor( lowReservoirAlertUnits ) ) - ).toPumpEnactResult() + ).toPumpEnactResultImpl() } private fun playTestBeep(): PumpEnactResult { return executeProgrammingCommand( historyEntry = history.createRecord(OmnipodCommandType.PLAY_TEST_BEEP), command = omnipodManager.playBeep(BeepType.LONG_SINGLE_BEEP).ignoreElements() - ).toPumpEnactResult() + ).toPumpEnactResultImpl() } override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) { diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInitializePodViewModel.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInitializePodViewModel.kt index 63fb4d6072..b240c1f4f0 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInitializePodViewModel.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInitializePodViewModel.kt @@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.ui.wizard.activatio import androidx.annotation.StringRes import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.plugins.pump.omnipod.common.definition.OmnipodCommandType import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.action.InitializePodViewModel @@ -66,14 +67,14 @@ class DashInitializePodViewModel @Inject constructor( onError = { throwable -> logger.error(LTag.PUMP, "Error in Pod activation part 1", throwable) source.onSuccess( - PumpEnactResult(injector) + PumpEnactResultImpl(injector) .success(false) .comment(I8n.textFromException(throwable, rh)) ) }, onComplete = { logger.debug("Pod activation part 1 completed") - source.onSuccess(PumpEnactResult(injector).success(true)) + source.onSuccess(PumpEnactResultImpl(injector).success(true)) } ) } diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt index 62c932fc14..1b36626575 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt @@ -4,6 +4,7 @@ import androidx.annotation.StringRes import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.interfaces.ResourceHelper @@ -90,7 +91,7 @@ class DashInsertCannulaViewModel @Inject constructor( .subscribeBy( onError = { throwable -> logger.error(LTag.PUMP, "Error in Pod activation part 2", throwable) - source.onSuccess(PumpEnactResult(injector).success(false).comment(I8n.textFromException(throwable, rh))) + source.onSuccess(PumpEnactResultImpl(injector).success(false).comment(I8n.textFromException(throwable, rh))) }, onComplete = { logger.debug("Pod activation part 2 completed") @@ -120,7 +121,7 @@ class DashInsertCannulaViewModel @Inject constructor( ) rxBus.send(EventDismissNotification(Notification.OMNIPOD_POD_NOT_ATTACHED)) fabricPrivacy.logCustom("OmnipodDashPodActivated") - source.onSuccess(PumpEnactResult(injector).success(true)) + source.onSuccess(PumpEnactResultImpl(injector).success(true)) } ) } diff --git a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/TestBase.kt b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/TestBase.kt new file mode 100644 index 0000000000..ff9c66abeb --- /dev/null +++ b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -0,0 +1,40 @@ +package info.nightscout.androidaps + +import info.nightscout.rx.AapsSchedulers +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest +import org.junit.Before +import org.junit.Rule +import org.mockito.Mockito +import org.mockito.junit.MockitoJUnit +import org.mockito.junit.MockitoRule +import java.util.* + +@Suppress("SpellCheckingInspection") +open class TestBase { + + val aapsLogger = AAPSLoggerTest() + val aapsSchedulers: AapsSchedulers = TestAapsSchedulers() + + // Add a JUnit rule that will setup the @Mock annotated vars and log. + // Another possibility would be to add `MockitoAnnotations.initMocks(this) to the setup method. + @get:Rule + val mockitoRule: MockitoRule = MockitoJUnit.rule() + + @Before + fun setupLocale() { + Locale.setDefault(Locale.ENGLISH) + System.setProperty("disableFirebase", "true") + } + + // Workaround for Kotlin nullability. + // https://medium.com/@elye.project/befriending-kotlin-and-mockito-1c2e7b0ef791 + // https://stackoverflow.com/questions/30305217/is-it-possible-to-use-mockito-in-kotlin + fun anyObject(): T { + Mockito.any() + return uninitialized() + } + + @Suppress("Unchecked_Cast") + fun uninitialized(): T = null as T +} \ No newline at end of file diff --git a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/endecrypt/EnDecryptTest.kt b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/endecrypt/EnDecryptTest.kt index c37c76a903..5117ebf0a9 100644 --- a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/endecrypt/EnDecryptTest.kt +++ b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/endecrypt/EnDecryptTest.kt @@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.endecry import info.nightscout.androidaps.extensions.toHex import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.message.MessagePacket -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Assert import org.junit.Test import org.spongycastle.util.encoders.Hex diff --git a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacketTest.kt b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacketTest.kt index 0a9862d027..11b50e451b 100644 --- a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacketTest.kt +++ b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacketTest.kt @@ -3,7 +3,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.message import com.google.crypto.tink.subtle.Hex import info.nightscout.androidaps.extensions.toHex import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.Id -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Assert.assertEquals import org.junit.Test diff --git a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/pair/KeyExchangeTest.kt b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/pair/KeyExchangeTest.kt index ab671d94e2..2583dc178a 100644 --- a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/pair/KeyExchangeTest.kt +++ b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/pair/KeyExchangeTest.kt @@ -1,24 +1,29 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.pair +import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.extensions.toHex import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.util.RandomByteGenerator import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.util.X25519KeyGenerator -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.interfaces.Config +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Assert.assertEquals import org.junit.Test import org.mockito.ArgumentMatchers.anyInt +import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.Mockito.spy import org.spongycastle.util.encoders.Hex -class KeyExchangeTest { +class KeyExchangeTest : TestBase() { val keyGenerator = X25519KeyGenerator() val keyGeneratorSpy = spy(keyGenerator) var randomByteGenerator: RandomByteGenerator = mock(RandomByteGenerator::class.java) + @Mock lateinit var config: Config + @Test fun testLTK() { val aapsLogger = AAPSLoggerTest() @@ -31,6 +36,7 @@ class KeyExchangeTest { val ke = KeyExchange( aapsLogger, + config, keyGeneratorSpy, randomByteGenerator ) diff --git a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/EapMessageTest.kt b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/EapMessageTest.kt index 9acef7eb66..fe064a18cd 100644 --- a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/EapMessageTest.kt +++ b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/EapMessageTest.kt @@ -1,7 +1,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.session import info.nightscout.androidaps.extensions.toHex -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Assert import org.junit.Test import org.spongycastle.util.encoders.Hex diff --git a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/MilenageTest.kt b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/MilenageTest.kt index 72614ed3a6..1ac87b3a89 100644 --- a/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/MilenageTest.kt +++ b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/MilenageTest.kt @@ -1,17 +1,23 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.session +import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.extensions.toHex -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.interfaces.Config +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Assert import org.junit.Test +import org.mockito.Mock import org.spongycastle.util.encoders.Hex -class MilenageTest { +class MilenageTest : TestBase() { + + @Mock lateinit var config: Config @Test fun testMilenage() { val aapsLogger = AAPSLoggerTest() val m = Milenage( aapsLogger = aapsLogger, + config = config, k = Hex.decode("c0772899720972a314f557de66d571dd"), sqn = byteArrayOf(0, 0, 0, 0, 0, 2), randParam = Hex.decode("c2cd1248451103bd77a6c7ef88c441ba") @@ -25,6 +31,7 @@ class MilenageTest { val aapsLogger = AAPSLoggerTest() val m = Milenage( aapsLogger = aapsLogger, + config = config, k = Hex.decode("78411ccad0fd0fb6f381a47fb3335ecb"), sqn = byteArrayOf(0, 0, 0, 0, 0, 2), // 1 + 1 randParam = Hex.decode("4fc01ac1a94376ae3e052339c07d9e1f") @@ -38,6 +45,7 @@ class MilenageTest { val aapsLogger = AAPSLoggerTest() val m = Milenage( aapsLogger = aapsLogger, + config = config, k = Hex.decode("c0772899720972a314f557de66d571dd"), // byteArrayOf(0,0,0,0,0x01,0x5d), this is in logs. SQN has to be incremented. sqn = byteArrayOf(0, 0, 0, 0, 0x01, 0x5e), @@ -52,6 +60,7 @@ class MilenageTest { val aapsLogger = AAPSLoggerTest() val m = Milenage( aapsLogger = aapsLogger, + config = config, k = Hex.decode("689b860fde3331dd7e1671ad39985e3b"), sqn = byteArrayOf(0, 0, 0, 0, 0, 8), // 1 + 1 auts = Hex.decode("84ff173947a67567985de71e4890"), diff --git a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java index ab4d6fc375..9ca130f442 100644 --- a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java +++ b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java @@ -36,12 +36,12 @@ import javax.inject.Singleton; import dagger.android.HasAndroidInjector; import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.interfaces.ActivePlugin; import info.nightscout.androidaps.interfaces.ActivityNames; import info.nightscout.androidaps.interfaces.CommandQueue; import info.nightscout.androidaps.interfaces.PluginDescription; -import info.nightscout.interfaces.PluginType; import info.nightscout.androidaps.interfaces.Profile; import info.nightscout.androidaps.interfaces.ProfileFunction; import info.nightscout.androidaps.interfaces.Pump; @@ -104,6 +104,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy; import info.nightscout.androidaps.utils.Round; import info.nightscout.androidaps.utils.T; import info.nightscout.androidaps.utils.TimeChangeType; +import info.nightscout.interfaces.PluginType; import info.nightscout.rx.AapsSchedulers; import info.nightscout.rx.bus.RxBus; import info.nightscout.rx.events.EventAppExit; @@ -601,7 +602,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley @Override public PumpEnactResult setNewBasalProfile(@NonNull Profile profile) { if (!podStateManager.hasPodState()) - return new PumpEnactResult(getInjector()).enacted(false).success(false).comment("Null pod state"); + return new PumpEnactResultImpl(getInjector()).enacted(false).success(false).comment("Null pod state"); PumpEnactResult result = executeCommand(OmnipodCommandType.SET_BASAL_PROFILE, () -> aapsOmnipodErosManager.setBasalProfile(profile, true)); aapsLogger.info(LTag.PUMP, "Basal Profile was set: " + result.getSuccess()); @@ -659,7 +660,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley if (detailedBolusInfo.insulin == 0 && detailedBolusInfo.carbs == 0) { // neither carbs nor bolus requested aapsLogger.error("deliverTreatment: Invalid input: neither carbs nor insulin are set in treatment"); - return new PumpEnactResult(getInjector()).success(false).enacted(false).bolusDelivered(0d).carbsDelivered(0d) + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false).bolusDelivered(0d).carbsDelivered(0d) .comment(R.string.invalidinput); } else if (detailedBolusInfo.insulin > 0) { // bolus needed, ask pump to deliver it @@ -677,7 +678,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley "[date=%d, carbs=%.2f, pumpSerial=%s] - Result: %b", detailedBolusInfo.timestamp, detailedBolusInfo.carbs, serialNumber(), result)); - return new PumpEnactResult(getInjector()).success(true).enacted(true).bolusDelivered(0d) + return new PumpEnactResultImpl(getInjector()).success(true).enacted(true).bolusDelivered(0d) .carbsDelivered(detailedBolusInfo.carbs); } } @@ -695,7 +696,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute: rate: {}, duration={}", absoluteRate, durationInMinutes); if (durationInMinutes <= 0 || durationInMinutes % BASAL_STEP_DURATION.getStandardMinutes() != 0) { - return new PumpEnactResult(getInjector()).success(false).comment(rh.gs(R.string.omnipod_eros_error_set_temp_basal_failed_validation, BASAL_STEP_DURATION.getStandardMinutes())); + return new PumpEnactResultImpl(getInjector()).success(false).comment(rh.gs(R.string.omnipod_eros_error_set_temp_basal_failed_validation, BASAL_STEP_DURATION.getStandardMinutes())); } // read current TBR @@ -709,7 +710,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley if (tbrCurrent != null && !enforceNew) { if (Round.INSTANCE.isSame(tbrCurrent.getRate(), absoluteRate)) { aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - No enforceNew and same rate. Exiting."); - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } } @@ -731,7 +732,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley if (tbrCurrent == null) { aapsLogger.info(LTag.PUMP, "cancelTempBasal - TBR already cancelled."); - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } return executeCommand(OmnipodCommandType.CANCEL_TEMPORARY_BASAL, aapsOmnipodErosManager::cancelTemporaryBasal); @@ -855,7 +856,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley @Override public PumpEnactResult executeCustomCommand(@NonNull CustomCommand command) { if (!podStateManager.hasPodState()) - return new PumpEnactResult(getInjector()).enacted(false).success(false).comment("Null pod state"); + return new PumpEnactResultImpl(getInjector()).enacted(false).success(false).comment("Null pod state"); if (command instanceof CommandSilenceAlerts) { return executeCommand(OmnipodCommandType.ACKNOWLEDGE_ALERTS, aapsOmnipodErosManager::acknowledgeAlerts); } @@ -885,7 +886,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley } aapsLogger.warn(LTag.PUMP, "Unsupported custom command: " + command.getClass().getName()); - return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(rh.gs(R.string.omnipod_common_error_unsupported_custom_command, command.getClass().getName())); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false).comment(rh.gs(R.string.omnipod_common_error_unsupported_custom_command, command.getClass().getName())); } private PumpEnactResult retrievePulseLog() { @@ -893,7 +894,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley try { result = executeCommand(OmnipodCommandType.READ_POD_PULSE_LOG, aapsOmnipodErosManager::readPulseLog); } catch (Exception ex) { - return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(aapsOmnipodErosManager.translateException(ex)); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false).comment(aapsOmnipodErosManager.translateException(ex)); } Intent i = new Intent(context, activityNames.getErrorHelperActivity()); @@ -903,7 +904,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley i.putExtra("clipboardContent", result.toString()); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); - return new PumpEnactResult(getInjector()).success(true).enacted(false); + return new PumpEnactResultImpl(getInjector()).success(true).enacted(false); } @NonNull private PumpEnactResult updateAlertConfiguration() { @@ -1168,7 +1169,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley } private PumpEnactResult getOperationNotSupportedWithCustomText(int resourceId) { - return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(resourceId); + return new PumpEnactResultImpl(getInjector()).success(false).enacted(false).comment(resourceId); } } diff --git a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java index 56a687f02b..efaa1bf52b 100644 --- a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java +++ b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java @@ -16,6 +16,7 @@ import javax.inject.Singleton; import dagger.android.HasAndroidInjector; import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.PumpEnactResult; +import info.nightscout.androidaps.data.PumpEnactResultImpl; import info.nightscout.androidaps.extensions.PumpStateExtensionKt; import info.nightscout.androidaps.interfaces.ActivityNames; import info.nightscout.androidaps.interfaces.Profile; @@ -168,7 +169,7 @@ public class AapsOmnipodErosManager { } public PumpEnactResult initializePod() { - PumpEnactResult result = new PumpEnactResult(injector); + PumpEnactResult result = new PumpEnactResultImpl(injector); try { Boolean res = executeCommand(delegate::pairAndPrime) .blockingGet(); @@ -190,10 +191,10 @@ public class AapsOmnipodErosManager { public PumpEnactResult insertCannula(Profile profile) { if (profile == null) { String comment = getStringResource(R.string.omnipod_common_error_set_initial_basal_schedule_no_profile); - return new PumpEnactResult(injector).success(false).enacted(false).comment(comment); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(comment); } - PumpEnactResult result = new PumpEnactResult(injector); + PumpEnactResult result = new PumpEnactResultImpl(injector); try { BasalSchedule basalSchedule = mapProfileToBasalSchedule(profile); @@ -231,11 +232,11 @@ public class AapsOmnipodErosManager { } catch (Exception ex) { String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.CONFIGURE_ALERTS, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } addSuccessToHistory(PodHistoryEntryType.CONFIGURE_ALERTS, alertConfigurations); - return new PumpEnactResult(injector).success(true).enacted(false); + return new PumpEnactResultImpl(injector).success(true).enacted(false); } public PumpEnactResult playTestBeep(BeepConfigType beepType) { @@ -244,11 +245,11 @@ public class AapsOmnipodErosManager { } catch (Exception ex) { String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.PLAY_TEST_BEEP, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } addSuccessToHistory(PodHistoryEntryType.PLAY_TEST_BEEP, beepType); - return new PumpEnactResult(injector).success(true).enacted(false); + return new PumpEnactResultImpl(injector).success(true).enacted(false); } @@ -260,12 +261,12 @@ public class AapsOmnipodErosManager { } catch (Exception ex) { String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.GET_POD_STATUS, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } addSuccessToHistory(PodHistoryEntryType.GET_POD_STATUS, statusResponse); - return new PumpEnactResult(injector).success(true).enacted(false); + return new PumpEnactResultImpl(injector).success(true).enacted(false); } public PumpEnactResult deactivatePod() { @@ -274,7 +275,7 @@ public class AapsOmnipodErosManager { } catch (Exception ex) { String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.DEACTIVATE_POD, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } addSuccessToHistory(PodHistoryEntryType.DEACTIVATE_POD, null); @@ -282,7 +283,7 @@ public class AapsOmnipodErosManager { dismissNotification(Notification.OMNIPOD_POD_FAULT); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } public PumpEnactResult setBasalProfile(Profile profile, boolean showNotifications) { @@ -291,7 +292,7 @@ public class AapsOmnipodErosManager { if (showNotifications) { showNotification(Notification.FAILED_UPDATE_PROFILE, note, Notification.URGENT, R.raw.boluserror); } - return new PumpEnactResult(injector).success(false).enacted(false).comment(note); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(note); } // #1963 return synthetic success if pre-activation @@ -299,7 +300,7 @@ public class AapsOmnipodErosManager { // otherwise a catch-22 if (!podStateManager.getActivationProgress().isCompleted()) { // TODO: i18n string - return new PumpEnactResult(injector).success(true).enacted(false).comment("pre" + + return new PumpEnactResultImpl(injector).success(true).enacted(false).comment("pre" + "-activation basal change moot"); } @@ -315,14 +316,14 @@ public class AapsOmnipodErosManager { } String errorMessage = translateException(ex.getCause()); addFailureToHistory(historyEntryType, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } catch (PrecedingCommandFailedUncertainlyException ex) { if (showNotifications) { showNotification(Notification.FAILED_UPDATE_PROFILE, getStringResource(R.string.omnipod_eros_error_set_basal_failed_delivery_might_be_suspended), Notification.URGENT, R.raw.boluserror); } String errorMessage = translateException(ex.getCause()); addFailureToHistory(historyEntryType, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } catch (Exception ex) { if (showNotifications) { String note; @@ -335,7 +336,7 @@ public class AapsOmnipodErosManager { } String errorMessage = translateException(ex); addFailureToHistory(historyEntryType, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } @@ -353,7 +354,7 @@ public class AapsOmnipodErosManager { dismissNotification(Notification.OMNIPOD_POD_SUSPENDED); dismissNotification(Notification.OMNIPOD_TIME_OUT_OF_SYNC); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } public PumpEnactResult discardPodState() { @@ -367,7 +368,7 @@ public class AapsOmnipodErosManager { sendEvent(new EventOmnipodErosPumpValuesChanged()); sendEvent(new EventRefreshOverview("Omnipod command: " + OmnipodCommandType.DISCARD_POD, false)); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } public PumpEnactResult bolus(DetailedBolusInfo detailedBolusInfo) { @@ -391,7 +392,7 @@ public class AapsOmnipodErosManager { } catch (Exception ex) { String errorMessage = translateException(ex); addFailureToHistory(System.currentTimeMillis(), PodHistoryEntryType.SET_BOLUS, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } if (OmnipodManager.CommandDeliveryStatus.UNCERTAIN_FAILURE.equals(bolusCommandResult.getCommandDeliveryStatus())) { @@ -446,7 +447,7 @@ public class AapsOmnipodErosManager { sp.remove(OmnipodErosStorageKeys.Preferences.ACTIVE_BOLUS); - return new PumpEnactResult(injector).success(true).enacted(true).carbsDelivered(detailedBolusInfo.carbs).bolusDelivered(detailedBolusInfo.insulin); + return new PumpEnactResultImpl(injector).success(true).enacted(true).carbsDelivered(detailedBolusInfo.carbs).bolusDelivered(detailedBolusInfo.insulin); } public PumpEnactResult cancelBolus() { @@ -461,7 +462,7 @@ public class AapsOmnipodErosManager { aapsLogger.debug(LTag.PUMP, "Not cancelling bolus: bolus command failed"); String comment = getStringResource(R.string.omnipod_common_error_bolus_did_not_succeed); addFailureToHistory(System.currentTimeMillis(), PodHistoryEntryType.CANCEL_BOLUS, comment); - return new PumpEnactResult(injector).success(true).enacted(false).comment(comment); + return new PumpEnactResultImpl(injector).success(true).enacted(false).comment(comment); } } @@ -473,11 +474,11 @@ public class AapsOmnipodErosManager { executeCommand(() -> delegate.cancelBolus(isBolusBeepsEnabled())); aapsLogger.debug(LTag.PUMP, "Successfully cancelled bolus", i); addSuccessToHistory(System.currentTimeMillis(), PodHistoryEntryType.CANCEL_BOLUS, null); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } catch (PodFaultException ex) { aapsLogger.debug(LTag.PUMP, "Successfully cancelled bolus (implicitly because of a Pod Fault)"); addSuccessToHistory(System.currentTimeMillis(), PodHistoryEntryType.CANCEL_BOLUS, null); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } catch (Exception ex) { aapsLogger.debug(LTag.PUMP, "Failed to cancel bolus", ex); comment = translateException(ex); @@ -485,7 +486,7 @@ public class AapsOmnipodErosManager { } addFailureToHistory(System.currentTimeMillis(), PodHistoryEntryType.CANCEL_BOLUS, comment); - return new PumpEnactResult(injector).success(false).enacted(false).comment(comment); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(comment); } public PumpEnactResult setTemporaryBasal(TempBasalPair tempBasalPair) { @@ -495,7 +496,7 @@ public class AapsOmnipodErosManager { } catch (CommandFailedAfterChangingDeliveryStatusException ex) { String errorMessage = translateException(ex.getCause()); addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } catch (PrecedingCommandFailedUncertainlyException ex) { String errorMessage = translateException(ex.getCause()); addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage); @@ -504,7 +505,7 @@ public class AapsOmnipodErosManager { splitActiveTbr(); // Split any active TBR so when we recover from the uncertain TBR status,we only cancel the part after the cancellation - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } catch (Exception ex) { String errorMessage = translateException(ex); long pumpId = addFailureToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, errorMessage); @@ -522,7 +523,7 @@ public class AapsOmnipodErosManager { addTempBasalTreatment(System.currentTimeMillis(), pumpId, tempBasalPair); } - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } long pumpId = addSuccessToHistory(PodHistoryEntryType.SET_TEMPORARY_BASAL, tempBasalPair); @@ -531,7 +532,7 @@ public class AapsOmnipodErosManager { sendEvent(new EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS)); - return new PumpEnactResult(injector) + return new PumpEnactResultImpl(injector) .duration(tempBasalPair.getDurationMinutes()) .absolute(PumpType.OMNIPOD_EROS.determineCorrectBasalSize(tempBasalPair.getInsulinRate())) .success(true).enacted(true); @@ -548,7 +549,7 @@ public class AapsOmnipodErosManager { } String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.CANCEL_TEMPORARY_BASAL, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } long pumpId = addSuccessToHistory(PodHistoryEntryType.CANCEL_TEMPORARY_BASAL, null); @@ -562,7 +563,7 @@ public class AapsOmnipodErosManager { sendEvent(new EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS)); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } public PumpEnactResult acknowledgeAlerts() { @@ -571,11 +572,11 @@ public class AapsOmnipodErosManager { } catch (Exception ex) { String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.ACKNOWLEDGE_ALERTS, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } addSuccessToHistory(PodHistoryEntryType.ACKNOWLEDGE_ALERTS, null); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } public PumpEnactResult suspendDelivery() { @@ -584,7 +585,7 @@ public class AapsOmnipodErosManager { } catch (Exception ex) { String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.SUSPEND_DELIVERY, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } addSuccessToHistory(PodHistoryEntryType.SUSPEND_DELIVERY, null); @@ -593,7 +594,7 @@ public class AapsOmnipodErosManager { dismissNotification(Notification.FAILED_UPDATE_PROFILE); dismissNotification(Notification.OMNIPOD_TIME_OUT_OF_SYNC); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } // Updates the pods current time based on the device timezone and the pod's time zone @@ -607,21 +608,21 @@ public class AapsOmnipodErosManager { } String errorMessage = translateException(ex.getCause()); addFailureToHistory(PodHistoryEntryType.SET_TIME, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } catch (PrecedingCommandFailedUncertainlyException ex) { if (showNotifications) { showNotification(Notification.FAILED_UPDATE_PROFILE, getStringResource(R.string.omnipod_eros_error_set_time_failed_delivery_might_be_suspended), Notification.URGENT, R.raw.boluserror); } String errorMessage = translateException(ex.getCause()); addFailureToHistory(PodHistoryEntryType.SET_TIME, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } catch (Exception ex) { if (showNotifications) { showNotification(Notification.FAILED_UPDATE_PROFILE, getStringResource(R.string.omnipod_eros_error_set_time_failed_delivery_might_be_suspended), Notification.URGENT, R.raw.boluserror); } String errorMessage = translateException(ex); addFailureToHistory(PodHistoryEntryType.SET_TIME, errorMessage); - return new PumpEnactResult(injector).success(false).enacted(false).comment(errorMessage); + return new PumpEnactResultImpl(injector).success(false).enacted(false).comment(errorMessage); } addSuccessToHistory(PodHistoryEntryType.SET_TIME, null); @@ -630,7 +631,7 @@ public class AapsOmnipodErosManager { dismissNotification(Notification.OMNIPOD_POD_SUSPENDED); dismissNotification(Notification.OMNIPOD_TIME_OUT_OF_SYNC); - return new PumpEnactResult(injector).success(true).enacted(true); + return new PumpEnactResultImpl(injector).success(true).enacted(true); } public PodInfoRecentPulseLog readPulseLog() { diff --git a/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/TestBase.kt b/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/TestBase.kt index b4c68bf8b5..03d778b101 100644 --- a/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase { diff --git a/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPluginTest.kt b/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPluginTest.kt index 5118c70129..00512a398c 100644 --- a/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPluginTest.kt +++ b/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPluginTest.kt @@ -3,7 +3,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.eros import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.ActivityNames import info.nightscout.androidaps.interfaces.CommandQueue @@ -14,7 +14,7 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType import info.nightscout.androidaps.plugins.pump.common.defs.TempBasalPair import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil import info.nightscout.androidaps.plugins.pump.omnipod.eros.manager.AapsOmnipodErosManager -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers +import info.nightscout.rx.TestAapsSchedulers import info.nightscout.rx.bus.RxBus import org.joda.time.DateTimeZone import org.joda.time.tz.UTCProvider @@ -74,7 +74,7 @@ class OmnipodErosPumpPluginTest : TestBase() { ) ).thenAnswer { invocation: InvocationOnMock -> val pair = invocation.getArgument(0) - val result = PumpEnactResult(injector) + val result = PumpEnactResultImpl(injector) result.absolute(pair.insulinRate) result.duration(pair.durationMinutes) result diff --git a/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt b/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt index c1ae911d92..678f32f135 100644 --- a/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt +++ b/pump/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt @@ -3,7 +3,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.eros.manager import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.plugins.pump.omnipod.eros.driver.definition.FirmwareVersion import info.nightscout.androidaps.plugins.pump.omnipod.eros.driver.definition.PodProgressStatus -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers +import info.nightscout.rx.TestAapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.shared.sharedPreferences.SP import org.joda.time.DateTime diff --git a/pump/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt b/pump/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt index 198b4b7d6d..11875126dc 100644 --- a/pump/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt +++ b/pump/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt @@ -8,6 +8,7 @@ import com.google.gson.GsonBuilder import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.data.PumpEnactResultImpl import info.nightscout.androidaps.extensions.convertedToAbsolute import info.nightscout.androidaps.extensions.plannedRemainingMinutes import info.nightscout.androidaps.extensions.toStringFull @@ -312,7 +313,7 @@ abstract class PumpPluginAbstract protected constructor( if (detailedBolusInfo.insulin == 0.0 && detailedBolusInfo.carbs == 0.0) { // neither carbs nor bolus requested aapsLogger.error("deliverTreatment: Invalid input") - PumpEnactResult(injector).success(false).enacted(false).bolusDelivered(0.0).carbsDelivered(0.0) + PumpEnactResultImpl(injector).success(false).enacted(false).bolusDelivered(0.0).carbsDelivered(0.0) .comment(R.string.invalidinput) } else if (detailedBolusInfo.insulin > 0) { // bolus needed, ask pump to deliver it @@ -328,7 +329,7 @@ abstract class PumpPluginAbstract protected constructor( bolusingEvent.percent = 100 rxBus.send(bolusingEvent) aapsLogger.debug(LTag.PUMP, "deliverTreatment: Carb only treatment.") - PumpEnactResult(injector).success(true).enacted(true).bolusDelivered(0.0) + PumpEnactResultImpl(injector).success(true).enacted(true).bolusDelivered(0.0) .carbsDelivered(detailedBolusInfo.carbs).comment(R.string.common_resultok) } } finally { @@ -349,7 +350,7 @@ abstract class PumpPluginAbstract protected constructor( protected abstract fun triggerUIChange() private fun getOperationNotSupportedWithCustomText(resourceId: Int): PumpEnactResult = - PumpEnactResult(injector).success(false).enacted(false).comment(resourceId) + PumpEnactResultImpl(injector).success(false).enacted(false).comment(resourceId) init { pumpDescription.fillFor(pumpType) diff --git a/pump/rileylink/src/test/java/info/nightscout/androidaps/TestBase.kt b/pump/rileylink/src/test/java/info/nightscout/androidaps/TestBase.kt index b4c68bf8b5..03d778b101 100644 --- a/pump/rileylink/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/pump/rileylink/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.rx.AapsSchedulers -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase { diff --git a/ui/src/test/java/info/nightscout/androidaps/TestBase.kt b/ui/src/test/java/info/nightscout/androidaps/TestBase.kt index 4d1edc5cb6..03d778b101 100644 --- a/ui/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/ui/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -1,14 +1,14 @@ package info.nightscout.androidaps -import info.nightscout.shared.logging.AAPSLoggerTest import info.nightscout.rx.AapsSchedulers -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers +import info.nightscout.rx.TestAapsSchedulers +import info.nightscout.rx.logging.AAPSLoggerTest import org.junit.Before import org.junit.Rule import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase { diff --git a/ui/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/ui/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt index c533893b3f..4e805f67a5 100644 --- a/ui/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ b/ui/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt @@ -2,10 +2,11 @@ package info.nightscout.androidaps import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo -import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.data.PumpEnactResultImpl +import info.nightscout.androidaps.interfaces.Profile import info.nightscout.androidaps.interfaces.Pump +import info.nightscout.androidaps.interfaces.PumpDescription import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.plugins.common.ManufacturerType import info.nightscout.androidaps.plugins.pump.common.defs.PumpType @@ -43,26 +44,30 @@ class TestPumpPlugin(val injector: HasAndroidInjector) : Pump { override fun waitForDisconnectionInSeconds(): Int = 0 override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) + override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResultImpl(injector) override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet override fun lastDataTime(): Long = lastData override val baseBasalRate: Double = baseBasal override val reservoirLevel: Double = 0.0 override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = + PumpEnactResultImpl(injector).success(true) + + override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResultImpl(injector).success(true) + override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS override fun model(): PumpType = PumpType.GENERIC_AAPS override fun serialNumber(): String = "1" override fun shortStatus(veryShort: Boolean): String = "" override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) + override fun loadTDDs(): PumpEnactResult = PumpEnactResultImpl(injector).success(true) override fun canHandleDST(): Boolean = true override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} } \ No newline at end of file diff --git a/wear/src/test/java/info/nightscout/androidaps/TestBase.kt b/wear/src/test/java/info/nightscout/androidaps/TestBase.kt index 764f44687c..ff0fdb621c 100644 --- a/wear/src/test/java/info/nightscout/androidaps/TestBase.kt +++ b/wear/src/test/java/info/nightscout/androidaps/TestBase.kt @@ -7,7 +7,7 @@ import info.nightscout.androidaps.interaction.utils.WearUtil import info.nightscout.androidaps.testing.mockers.WearUtilMocker import info.nightscout.androidaps.testing.mocks.SharedPreferencesMock import info.nightscout.androidaps.utils.DateUtil -import info.nightscout.shared.logging.AAPSLoggerTest +import info.nightscout.rx.logging.AAPSLoggerTest import info.nightscout.shared.sharedPreferences.SP import org.junit.Before import org.junit.Rule @@ -16,7 +16,7 @@ import org.mockito.Mock import org.mockito.Mockito import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule -import java.util.* +import java.util.Locale open class TestBase {