From ac501495638fbff3c10c6ffe370156604132d0a5 Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Thu, 14 Sep 2023 21:14:09 +0200 Subject: [PATCH 01/65] Medtrum: Move Initializers to onStart() --- .../nightscout/pump/medtrum/MedtrumPlugin.kt | 1 + .../nightscout/pump/medtrum/MedtrumPump.kt | 22 ++++++++++--------- .../pump/medtrum/services/MedtrumService.kt | 2 -- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt index 294af1d054..ed0cff7dcf 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt @@ -95,6 +95,7 @@ import kotlin.math.abs override fun onStart() { super.onStart() aapsLogger.debug(LTag.PUMP, "MedtrumPlugin onStart()") + medtrumPump.loadVarsFromSP() val intent = Intent(context, MedtrumService::class.java) context.bindService(intent, mConnection, Context.BIND_AUTO_CREATE) disposable += rxBus diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt index 8756cc730c..8480282e6f 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt @@ -279,7 +279,16 @@ class MedtrumPump @Inject constructor( var desiredHourlyMaxInsulin: Int = 40 var desiredDailyMaxInsulin: Int = 180 - init { + fun pumpType(): PumpType = pumpType(deviceType) + + fun pumpType(type: Int): PumpType = + when (type) { + MedtrumSnUtil.MD_0201, MedtrumSnUtil.MD_8201 -> PumpType.MEDTRUM_NANO + MedtrumSnUtil.MD_8301 -> PumpType.MEDTRUM_300U + else -> PumpType.MEDTRUM_UNTESTED + } + + fun loadVarsFromSP() { // Load stuff from SP _patchSessionToken = sp.getLong(R.string.key_session_token, 0L) _lastConnection = sp.getLong(R.string.key_last_connection, 0L) @@ -304,16 +313,9 @@ class MedtrumPump @Inject constructor( } catch (e: Exception) { aapsLogger.warn(LTag.PUMP, "Error decoding basal profile from SP: $encodedString") } - } - fun pumpType(): PumpType = pumpType(deviceType) - - fun pumpType(type: Int): PumpType = - when (type) { - MedtrumSnUtil.MD_0201, MedtrumSnUtil.MD_8201 -> PumpType.MEDTRUM_NANO - MedtrumSnUtil.MD_8301 -> PumpType.MEDTRUM_300U - else -> PumpType.MEDTRUM_UNTESTED - } + loadUserSettingsFromSP() + } fun loadUserSettingsFromSP() { desiredPatchExpiration = sp.getBoolean(R.string.key_patch_expiration, false) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt index 86f995bbf4..7581b8fa9c 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt @@ -145,8 +145,6 @@ class MedtrumService : DaggerService(), BLECommCallback { handleConnectionStateChange(connectionState) } } - - medtrumPump.loadUserSettingsFromSP() } override fun onDestroy() { From 0c1224faf6620e484d3a4f397bfd0bc0f407cbf7 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Thu, 14 Sep 2023 22:02:56 -0700 Subject: [PATCH 02/65] Updates visibility and openness of attributes and methods More mock-friendly, better access visibility --- .../androidaps/interaction/utils/WearUtil.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt index 3744ab2868..ce41387bb1 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt @@ -5,7 +5,6 @@ import android.os.PowerManager import info.nightscout.annotations.OpenForTesting import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag - import javax.inject.Inject import javax.inject.Singleton @@ -16,12 +15,12 @@ import javax.inject.Singleton @Singleton @OpenForTesting open class WearUtil @Inject constructor( - open val context: Context, - open val aapsLogger: AAPSLogger + private val context: Context, + private val aapsLogger: AAPSLogger, ) { private val debugWakelocks = false - open val rateLimits: MutableMap = HashMap() + private val rateLimits: MutableMap = HashMap() //============================================================================================== // Time related util methods @@ -30,11 +29,11 @@ open class WearUtil @Inject constructor( return System.currentTimeMillis() } - fun msSince(`when`: Long): Long { + open fun msSince(`when`: Long): Long { return timestamp() - `when` } - fun msTill(`when`: Long): Long { + open fun msTill(`when`: Long): Long { return `when` - timestamp() } From a7dabcf98305560bb93d587ad5fd682c10006a39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Sep 2023 08:27:27 +0000 Subject: [PATCH 03/65] chore(deps): bump com.google.gms:google-services from 4.3.15 to 4.4.0 Bumps com.google.gms:google-services from 4.3.15 to 4.4.0. --- updated-dependencies: - dependency-name: com.google.gms:google-services dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5b1b617bf6..ec7fcd3ac4 100644 --- a/build.gradle +++ b/build.gradle @@ -62,7 +62,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:8.1.1' - classpath 'com.google.gms:google-services:4.3.15' + classpath 'com.google.gms:google-services:4.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' // NOTE: Do not place your application dependencies here; they belong From 1bed0251d266b8de89e2d0c94146b32ddc35c0e3 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Fri, 15 Sep 2023 08:33:49 -0700 Subject: [PATCH 04/65] Provides kotlinx.datetime.Clock in wear --- wear/build.gradle | 3 ++- .../main/java/info/nightscout/androidaps/di/WearModule.kt | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/wear/build.gradle b/wear/build.gradle index a4b592cf00..a7638ba42d 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -118,6 +118,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-datetime:$kotlinx_datetime_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" // for old fashioned support-app version @@ -145,4 +146,4 @@ configurations { all { exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx' } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt b/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt index 1875954570..014b247cc8 100644 --- a/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt +++ b/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt @@ -3,11 +3,13 @@ package info.nightscout.androidaps.di import android.content.Context import dagger.Binds import dagger.Module +import dagger.Provides import dagger.android.HasAndroidInjector import info.nightscout.androidaps.WearApp import info.nightscout.rx.di.RxModule import info.nightscout.shared.di.SharedModule import info.nightscout.shared.impl.di.SharedImplModule +import kotlinx.datetime.Clock @Suppress("unused") @Module( @@ -27,5 +29,8 @@ open class WearModule { @Binds fun bindContext(aaps: WearApp): Context @Binds fun bindInjector(aaps: WearApp): HasAndroidInjector } + + @Provides + fun providesClock(): Clock = Clock.System } From 86b259e244aee540e19a6c8feef1b583f4716e84 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Fri, 15 Sep 2023 08:34:47 -0700 Subject: [PATCH 05/65] Uses injected clock rather than System for time This is better for mocking --- .../androidaps/interaction/utils/WearUtil.kt | 4 +- .../nightscout/androidaps/WearTestBase.kt | 39 ++++++++++--------- .../interaction/utils/DisplayFormatTest.kt | 2 +- .../interaction/utils/WearUtilTest.kt | 27 +++++++------ 4 files changed, 37 insertions(+), 35 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt index ce41387bb1..80885f87bf 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/WearUtil.kt @@ -7,6 +7,7 @@ import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import javax.inject.Inject import javax.inject.Singleton +import kotlinx.datetime.Clock /** * Created by andy on 3/5/19. @@ -17,6 +18,7 @@ import javax.inject.Singleton open class WearUtil @Inject constructor( private val context: Context, private val aapsLogger: AAPSLogger, + private val clock: Clock, ) { private val debugWakelocks = false @@ -26,7 +28,7 @@ open class WearUtil @Inject constructor( // Time related util methods //============================================================================================== open fun timestamp(): Long { - return System.currentTimeMillis() + return clock.now().toEpochMilliseconds() } open fun msSince(`when`: Long): Long { diff --git a/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt b/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt index 3b9c6ed7c9..0c04c2a324 100644 --- a/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt +++ b/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt @@ -6,44 +6,32 @@ import info.nightscout.androidaps.interaction.utils.Constants import info.nightscout.androidaps.interaction.utils.Persistence import info.nightscout.androidaps.interaction.utils.WearUtil import info.nightscout.androidaps.testing.mocks.SharedPreferencesMock -import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil import info.nightscout.sharedtests.TestBase +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant import org.junit.jupiter.api.BeforeEach import org.mockito.ArgumentMatchers import org.mockito.Mock import org.mockito.Mockito -class FakeWearUtil(context: Context, aapsLogger: AAPSLogger) : WearUtil(context, aapsLogger) { - private var clockMsDiff = 0L - - override fun timestamp(): Long = REF_NOW + clockMsDiff - - fun progressClock(byMilliseconds: Long) { - clockMsDiff += byMilliseconds - } - - companion object { - const val REF_NOW = 1572610530000L - } -} - open class WearTestBase : TestBase() { + private var clockNow: Long = REF_NOW @Mock lateinit var context: Context @Mock lateinit var sp: SP @Mock lateinit var dateUtil: DateUtil - lateinit var fakeWearUtil: FakeWearUtil + @Mock lateinit var clock: Clock + lateinit var wearUtil: WearUtil lateinit var persistence: Persistence private val mockedSharedPrefs: HashMap = HashMap() - @BeforeEach fun setup() { - fakeWearUtil = FakeWearUtil(context, aapsLogger) + wearUtil = WearUtil(context, aapsLogger, clock) Mockito.doAnswer { invocation -> val key = invocation.getArgument(0) if (mockedSharedPrefs.containsKey(key)) { @@ -54,12 +42,25 @@ open class WearTestBase : TestBase() { return@doAnswer newPrefs } }.`when`(context).getSharedPreferences(ArgumentMatchers.anyString(), ArgumentMatchers.anyInt()) + setClockNow() persistence = Mockito.spy(Persistence(aapsLogger, dateUtil, sp)) } + fun progressClock(byMilliseconds: Long) { + clockNow += byMilliseconds + setClockNow() + } + + private fun setClockNow() { + Mockito.`when`(clock.now()).thenReturn(Instant.fromEpochMilliseconds(clockNow)) + } + companion object { + + const val REF_NOW = 1572610530000L + fun backInTime(d: Int, h: Int, m: Int, s: Int): Long = - FakeWearUtil.REF_NOW - (Constants.DAY_IN_MS * d + Constants.HOUR_IN_MS * h + Constants.MINUTE_IN_MS * m + Constants.SECOND_IN_MS * s) + REF_NOW - (Constants.DAY_IN_MS * d + Constants.HOUR_IN_MS * h + Constants.MINUTE_IN_MS * m + Constants.SECOND_IN_MS * s) } } diff --git a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt index 6ce2cce75f..e2a0934f21 100644 --- a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt @@ -22,7 +22,7 @@ class DisplayFormatTest : WearTestBase() { fun mock() { rawDataMocker = RawDataMocker() displayFormat = DisplayFormat() - displayFormat.wearUtil = fakeWearUtil + displayFormat.wearUtil = wearUtil displayFormat.sp = sp displayFormat.context = context Mockito.`when`(sp.getBoolean("complication_unicode", true)).thenReturn(true) diff --git a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt index 3c88639184..1350669279 100644 --- a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt @@ -1,7 +1,6 @@ package info.nightscout.androidaps.interaction.utils import com.google.common.truth.Truth.assertThat -import info.nightscout.androidaps.FakeWearUtil import info.nightscout.androidaps.WearTestBase import org.junit.jupiter.api.Test @@ -14,13 +13,13 @@ class WearUtilTest : WearTestBase() { @Test fun timestampAndTimeDiffsTest() { // smoke for mocks - since we freeze "now" to get stable tests - assertThat(fakeWearUtil.timestamp()).isEqualTo(FakeWearUtil.REF_NOW) - assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW)).isEqualTo(0L) - assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW + 3456L)).isEqualTo(3456L) - assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW - 6294L)).isEqualTo(-6294L) - assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW)).isEqualTo(0L) - assertThat(fakeWearUtil.msSince(FakeWearUtil.REF_NOW + 3456L)).isEqualTo(-3456L) - assertThat(fakeWearUtil.msSince(FakeWearUtil.REF_NOW - 6294L)).isEqualTo(6294L) + assertThat(wearUtil.timestamp()).isEqualTo(REF_NOW) + assertThat(wearUtil.msTill(REF_NOW)).isEqualTo(0L) + assertThat(wearUtil.msTill(REF_NOW + 3456L)).isEqualTo(3456L) + assertThat(wearUtil.msTill(REF_NOW - 6294L)).isEqualTo(-6294L) + assertThat(wearUtil.msTill(REF_NOW)).isEqualTo(0L) + assertThat(wearUtil.msSince(REF_NOW + 3456L)).isEqualTo(-3456L) + assertThat(wearUtil.msSince(REF_NOW - 6294L)).isEqualTo(6294L) } @Test fun joinSetTest() { @@ -99,12 +98,12 @@ class WearUtilTest : WearTestBase() { */ @Test fun rateLimitTest() { // WHEN - val firstCall = fakeWearUtil.isBelowRateLimit("test-limit", 3) - val callAfterward = fakeWearUtil.isBelowRateLimit("test-limit", 3) - fakeWearUtil.progressClock(500L) - val callTooSoon = fakeWearUtil.isBelowRateLimit("test-limit", 3) - fakeWearUtil.progressClock(3100L) - val callAfterRateLimit = fakeWearUtil.isBelowRateLimit("test-limit", 3) + val firstCall = wearUtil.isBelowRateLimit("test-limit", 3) + val callAfterward = wearUtil.isBelowRateLimit("test-limit", 3) + progressClock(500L) + val callTooSoon = wearUtil.isBelowRateLimit("test-limit", 3) + progressClock(3100L) + val callAfterRateLimit = wearUtil.isBelowRateLimit("test-limit", 3) // THEN assertThat(firstCall).isTrue() From 275e52a546791ff044121bce6984a778b724a2c6 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 16 Sep 2023 20:52:16 +0200 Subject: [PATCH 06/65] Show PH values properly --- .../fragments/TreatmentsBolusCarbsFragment.kt | 5 ++-- .../ui/extensions/InterfaceIDsExtension.kt | 5 ++++ .../extensions/InterfaceIDsExtensionKtTest.kt | 23 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 ui/src/main/java/info/nightscout/ui/extensions/InterfaceIDsExtension.kt create mode 100644 ui/src/test/java/info/nightscout/ui/extensions/InterfaceIDsExtensionKtTest.kt diff --git a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt index fbf769c577..ec47157e38 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt @@ -53,6 +53,7 @@ import info.nightscout.ui.R import info.nightscout.ui.databinding.TreatmentsBolusCarbsFragmentBinding import info.nightscout.ui.databinding.TreatmentsBolusCarbsItemBinding import info.nightscout.ui.dialogs.WizardInfoDialog +import info.nightscout.ui.extensions.isPumpHistory import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign @@ -219,7 +220,7 @@ class TreatmentsBolusCarbsFragment : DaggerFragment(), MenuProvider { holder.binding.bolusTime.text = dateUtil.timeString(bolus.timestamp) holder.binding.insulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, bolus.amount) holder.binding.bolusNs.visibility = (bolus.interfaceIDs.nightscoutId != null).toVisibility() - holder.binding.bolusPump.visibility = (bolus.interfaceIDs.pumpId != null).toVisibility() + holder.binding.bolusPump.visibility = bolus.interfaceIDs.isPumpHistory().toVisibility() holder.binding.bolusInvalid.visibility = bolus.isValid.not().toVisibility() val iob = bolus.iobCalc(activePlugin, System.currentTimeMillis(), profile.dia) if (iob.iobContrib > 0.01) { @@ -260,7 +261,7 @@ class TreatmentsBolusCarbsFragment : DaggerFragment(), MenuProvider { holder.binding.carbs.text = rh.gs(info.nightscout.core.graph.R.string.format_carbs, carbs.amount.toInt()) holder.binding.carbsDuration.text = if (carbs.duration > 0) rh.gs(info.nightscout.core.ui.R.string.format_mins, T.msecs(carbs.duration).mins().toInt()) else "" holder.binding.carbsNs.visibility = (carbs.interfaceIDs.nightscoutId != null).toVisibility() - holder.binding.carbsPump.visibility = (carbs.interfaceIDs.pumpId != null).toVisibility() + holder.binding.carbsPump.visibility = carbs.interfaceIDs.isPumpHistory().toVisibility() holder.binding.carbsInvalid.visibility = carbs.isValid.not().toVisibility() holder.binding.cbCarbsRemove.visibility = (ml.carbs.isValid && actionHelper.isRemoving).toVisibility() if (actionHelper.isRemoving) { diff --git a/ui/src/main/java/info/nightscout/ui/extensions/InterfaceIDsExtension.kt b/ui/src/main/java/info/nightscout/ui/extensions/InterfaceIDsExtension.kt new file mode 100644 index 0000000000..10700728e4 --- /dev/null +++ b/ui/src/main/java/info/nightscout/ui/extensions/InterfaceIDsExtension.kt @@ -0,0 +1,5 @@ +package info.nightscout.ui.extensions + +import info.nightscout.database.entities.embedments.InterfaceIDs + +fun InterfaceIDs.isPumpHistory() = pumpSerial != null && pumpId != null \ No newline at end of file diff --git a/ui/src/test/java/info/nightscout/ui/extensions/InterfaceIDsExtensionKtTest.kt b/ui/src/test/java/info/nightscout/ui/extensions/InterfaceIDsExtensionKtTest.kt new file mode 100644 index 0000000000..81fbffd863 --- /dev/null +++ b/ui/src/test/java/info/nightscout/ui/extensions/InterfaceIDsExtensionKtTest.kt @@ -0,0 +1,23 @@ +package info.nightscout.ui.extensions + +import com.google.common.truth.Truth.assertThat +import info.nightscout.database.entities.embedments.InterfaceIDs +import info.nightscout.sharedtests.TestBase +import org.junit.jupiter.api.Test + +class InterfaceIDsExtensionKtTest : TestBase() { + + @Test + fun isPumpHistory() { + val sut = InterfaceIDs() + assertThat(sut.isPumpHistory()).isFalse() + sut.pumpId = 123 + assertThat(sut.isPumpHistory()).isFalse() + sut.pumpId = null + sut.pumpSerial = "123" + assertThat(sut.isPumpHistory()).isFalse() + sut.pumpId = 123 + sut.pumpSerial = "123" + assertThat(sut.isPumpHistory()).isTrue() + } +} \ No newline at end of file From dec3b1ca2fbd21797f17031282de52b3d186772e Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 16 Sep 2023 20:57:43 +0200 Subject: [PATCH 07/65] unify aaps and wear wizard --- .../nightscout/androidaps/interaction/actions/WizardActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt index 714d5495b9..95531f8f92 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt @@ -57,7 +57,7 @@ class WizardActivity : ViewSelectorActivity() { val view = viewAdapter.root val percentage = sp.getInt(getString(R.string.key_bolus_wizard_percentage), 100).toDouble() val initValue = SafeParse.stringToDouble(editPercentage?.editText?.text.toString(), percentage) - editPercentage = PlusMinusEditText(viewAdapter, initValue, 50.0, 150.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) + editPercentage = PlusMinusEditText(viewAdapter, initValue, 10.0, 2000.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) container.addView(view) view } From f717d7a0b2d738c486b1d163d1e35a744379f976 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 16 Sep 2023 21:18:42 +0200 Subject: [PATCH 08/65] fix typo --- .../nightscout/androidaps/interaction/actions/WizardActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt index 95531f8f92..733f4bea86 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt @@ -57,7 +57,7 @@ class WizardActivity : ViewSelectorActivity() { val view = viewAdapter.root val percentage = sp.getInt(getString(R.string.key_bolus_wizard_percentage), 100).toDouble() val initValue = SafeParse.stringToDouble(editPercentage?.editText?.text.toString(), percentage) - editPercentage = PlusMinusEditText(viewAdapter, initValue, 10.0, 2000.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) + editPercentage = PlusMinusEditText(viewAdapter, initValue, 10.0, 200.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) container.addView(view) view } From 9dee9139776bb6770e88e193d0657a3b076ada37 Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Sun, 17 Sep 2023 17:29:34 +0200 Subject: [PATCH 09/65] Medtrum: Fix Suspended not syncing, fix duration in extended bolus --- .../pump/medtrum/comm/enums/BasalEndReason.kt | 34 +++++++++++++++++++ .../pump/medtrum/comm/enums/BasalType.kt | 15 ++++++++ .../medtrum/comm/packets/GetRecordPacket.kt | 23 +++++++++---- 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt new file mode 100644 index 0000000000..70594a49ba --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt @@ -0,0 +1,34 @@ +package info.nightscout.pump.medtrum.comm.enums + +enum class BasalEndReason { + SUCCESS, + SUSPEND_LOW_GLUCOSE, + SUSPEND_PREDICT_LOW_GLUCOSE, + SUSPEND_AUTO, + SUSPEND_MORE_THAN_MAX_PER_HOUR, + SUSPEND_MORE_THAN_MAX_PER_DAY, + SUSPEND_MANUAL, + STOP_OCCLUSION, + STOP_EXPIRED, + STOP_EMPTY, + STOP_PATCH_FAULT, + STOP_PATCH_FAULT2, + STOP_BASE_FAULT, + STOP_PATCH_BATTERY_EXAUSTED, + STOP_MAG_SENSOR_NO_CALIBRATION, + STOP, + STOP_LOW_BATTERY, + STOP_AUTO_EXIT, + STOP_CANCEL, + STOP_LOW_SUPER_CAPACITOR, + STOP_DISCARD, + PAUSE_INTERRUPT, + AUTO_MODE_EXIT, + AUTO_MODE_EXIT_MIN_DELIVERY_TOO_LONG, + AUTO_MODE_EXIT_NO_GLUCOSE_3_HOUR, + AUTO_MODE_EXIT_MAX_DELIVERY_TOO_LONG; + + fun isSuspendedByPump(): Boolean { + return this in SUSPEND_LOW_GLUCOSE..SUSPEND_MANUAL + } +} \ No newline at end of file diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalType.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalType.kt index f35ff3b4ba..3490f0531f 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalType.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalType.kt @@ -51,4 +51,19 @@ enum class BasalType { fun isSuspendedByPump(): Boolean { return this in SUSPEND_LOW_GLUCOSE..STOP } + + companion object { + + fun fromBasalEndReason(endReason: BasalEndReason): BasalType { + return when (endReason) { + BasalEndReason.SUSPEND_LOW_GLUCOSE -> SUSPEND_LOW_GLUCOSE + BasalEndReason.SUSPEND_PREDICT_LOW_GLUCOSE -> SUSPEND_PREDICT_LOW_GLUCOSE + BasalEndReason.SUSPEND_AUTO -> SUSPEND_AUTO + BasalEndReason.SUSPEND_MORE_THAN_MAX_PER_HOUR -> SUSPEND_MORE_THAN_MAX_PER_HOUR + BasalEndReason.SUSPEND_MORE_THAN_MAX_PER_DAY -> SUSPEND_MORE_THAN_MAX_PER_DAY + BasalEndReason.SUSPEND_MANUAL -> SUSPEND_MANUAL + else -> NONE + } + } + } } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt index 669e512ee9..03d3eb19f2 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt @@ -5,6 +5,7 @@ import info.nightscout.interfaces.pump.DetailedBolusInfoStorage import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.TemporaryBasalStorage import info.nightscout.pump.medtrum.MedtrumPump +import info.nightscout.pump.medtrum.comm.enums.BasalEndReason import info.nightscout.pump.medtrum.comm.enums.CommandType.GET_RECORD import info.nightscout.pump.medtrum.comm.enums.BasalType import info.nightscout.pump.medtrum.comm.enums.BolusType @@ -15,6 +16,7 @@ import info.nightscout.pump.medtrum.extension.toLong import info.nightscout.pump.medtrum.util.MedtrumTimeUtil import info.nightscout.rx.logging.LTag import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.T import javax.inject.Inject class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int) : MedtrumPacket(injector) { @@ -74,7 +76,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int val recordUnknown = data.copyOfRange(RESP_RECORD_UNKNOWN_START, RESP_RECORD_UNKNOWN_END).toInt() val recordType = data.copyOfRange(RESP_RECORD_TYPE_START, RESP_RECORD_TYPE_END).toInt() val recordSerial = data.copyOfRange(RESP_RECORD_SERIAL_START, RESP_RECORD_SERIAL_END).toLong() - val recordPatchId = data.copyOfRange(RESP_RECORD_PATCH_ID_START, RESP_RECORD_PATCH_ID_END).toInt() + val recordPatchId = data.copyOfRange(RESP_RECORD_PATCH_ID_START, RESP_RECORD_PATCH_ID_END).toLong() val recordSequence = data.copyOfRange(RESP_RECORD_SEQUENCE_START, RESP_RECORD_SEQUENCE_END).toInt() aapsLogger.debug( @@ -82,8 +84,6 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int "GetRecordPacket HandleResponse: Record header: $recordHeader, unknown: $recordUnknown, type: $recordType, serial: $recordSerial, patchId: $recordPatchId, " + "sequence: $recordSequence" ) - medtrumPump.syncedSequenceNumber = recordSequence // Assume sync upwards - if (recordHeader == VALID_HEADER) { when (recordType) { BOLUS_RECORD, BOLUS_RECORD_ALT -> { @@ -95,7 +95,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int val bolusNormalAmount = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 10).toInt() * 0.05 val bolusNormalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05 val bolusExtendedAmount = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05 - val bolusExtendedDuration = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toLong() * 1000 + val bolusExtendedDuration = T.mins(data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toLong()).msecs() val bolusExtendedDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 18).toInt() * 0.05 val bolusCarb = data.copyOfRange(RESP_RECORD_DATA_START + 18, RESP_RECORD_DATA_START + 20).toInt() val bolusGlucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 22).toInt() @@ -213,7 +213,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int val basalStartTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong()) val basalEndTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong()) val basalType = enumValues()[data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 9).toInt()] - val basalEndReason = data.copyOfRange(RESP_RECORD_DATA_START + 9, RESP_RECORD_DATA_START + 10).toInt() + val basalEndReason = enumValues()[data.copyOfRange(RESP_RECORD_DATA_START + 9, RESP_RECORD_DATA_START + 10).toInt()] val basalRate = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05 val basalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05 val basalPercent = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toInt() @@ -230,7 +230,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int } BasalType.ABSOLUTE_TEMP, BasalType.RELATIVE_TEMP -> { - aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Absolute temp basal") + aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: temp basal") var duration = (basalEndTime - basalStartTime) // Work around for pumpSync not accepting 0 duration. // sometimes we get 0 duration for very short basal because the pump only reports time in seconds @@ -255,6 +255,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int in BasalType.SUSPEND_LOW_GLUCOSE..BasalType.STOP -> { aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Suspend basal") + // Never seen a packet like this from a pump, even when suspended by app, but leave it in just in case val duration = (basalEndTime - basalStartTime) val newRecord = pumpSync.syncTemporaryBasalWithPumpId( timestamp = basalEndTime, @@ -277,6 +278,13 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Unknown basal type: $basalType") } } + + if (basalEndReason.isSuspendedByPump()) { + // Pump doesn't seem to sync suspend explicitly, so we need to do it here + // Sync suspend using handleBasalStatusUpdate to make sure other variables are updated as well + aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Got suspended end reason, syncing suspend") + medtrumPump.handleBasalStatusUpdate(BasalType.fromBasalEndReason(basalEndReason), 0.0, recordSequence, recordPatchId, basalEndTime) + } } ALARM_RECORD -> { @@ -355,6 +363,9 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int } else { aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Invalid record header") } + + // Update sequence number + medtrumPump.syncedSequenceNumber = recordSequence // Assume sync upwards } return success From 7627fcce7db62bda10d46211a9d50921259bd660 Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Sun, 17 Sep 2023 17:59:59 +0200 Subject: [PATCH 10/65] Medtrum: Allow reset of all suspended states --- .../pump/medtrum/comm/enums/MedtrumPumpState.kt | 4 ++++ .../nightscout/pump/medtrum/services/MedtrumService.kt | 9 ++------- .../medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt | 4 +--- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/MedtrumPumpState.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/MedtrumPumpState.kt index c17caa6ad9..99451d4cc1 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/MedtrumPumpState.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/MedtrumPumpState.kt @@ -27,6 +27,10 @@ enum class MedtrumPumpState(val state: Byte) { NO_CALIBRATION(103), STOPPED(128.toByte()); + fun isSuspendedByPump(): Boolean { + return this in LOW_BG_SUSPENDED..SUSPENDED + } + companion object { fun fromByte(state: Byte) = values().find { it.state == state } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt index 7581b8fa9c..569ed1b587 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt @@ -281,13 +281,8 @@ class MedtrumService : DaggerService(), BLECommCallback { } fun clearAlarms(): Boolean { - var result = true - if (medtrumPump.pumpState in listOf( - MedtrumPumpState.PAUSED, - MedtrumPumpState.HOURLY_MAX_SUSPENDED, - MedtrumPumpState.DAILY_MAX_SUSPENDED - ) - ) { + var result = loadEvents() // Make sure we have all events before clearing alarms + if (result && medtrumPump.pumpState.isSuspendedByPump()) { when (medtrumPump.pumpState) { MedtrumPumpState.HOURLY_MAX_SUSPENDED -> { result = sendPacketAndGetResponse(ClearPumpAlarmPacket(injector, ALARM_HOURLY_MAX_CLEAR_CODE)) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt index a3c6e15620..13392125bf 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt @@ -119,9 +119,7 @@ class MedtrumOverviewViewModel @Inject constructor( medtrumPump.pumpStateFlow.collect { state -> aapsLogger.debug(LTag.PUMP, "MedtrumViewModel pumpStateFlow: $state") _canDoResetAlarms.postValue( - medtrumPump.pumpState in listOf( - MedtrumPumpState.PAUSED, MedtrumPumpState.HOURLY_MAX_SUSPENDED, MedtrumPumpState.DAILY_MAX_SUSPENDED - ) + medtrumPump.pumpState.isSuspendedByPump() ) updateGUI() From 5074195315927cd5fd7947587044c096738a773b Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Sun, 17 Sep 2023 19:38:13 +0200 Subject: [PATCH 11/65] Medtrum: Add more tests to GetRecordPacketTest --- .../pump/medtrum/comm/enums/BasalEndReason.kt | 2 +- .../medtrum/comm/packets/GetRecordPacket.kt | 2 +- .../comm/packets/GetRecordPacketTest.kt | 304 ++++++++++++++++++ 3 files changed, 306 insertions(+), 2 deletions(-) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt index 70594a49ba..632f49608e 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BasalEndReason.kt @@ -31,4 +31,4 @@ enum class BasalEndReason { fun isSuspendedByPump(): Boolean { return this in SUSPEND_LOW_GLUCOSE..SUSPEND_MANUAL } -} \ No newline at end of file +} diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt index 03d3eb19f2..0f375b056f 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt @@ -258,7 +258,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int // Never seen a packet like this from a pump, even when suspended by app, but leave it in just in case val duration = (basalEndTime - basalStartTime) val newRecord = pumpSync.syncTemporaryBasalWithPumpId( - timestamp = basalEndTime, + timestamp = basalStartTime, rate = 0.0, duration = duration, isAbsolute = true, diff --git a/pump/medtrum/src/test/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacketTest.kt b/pump/medtrum/src/test/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacketTest.kt index 1e69dff73b..ab2d3dd871 100644 --- a/pump/medtrum/src/test/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacketTest.kt +++ b/pump/medtrum/src/test/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacketTest.kt @@ -2,19 +2,31 @@ package info.nightscout.pump.medtrum.comm.packets import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.interfaces.pump.DetailedBolusInfo +import info.nightscout.interfaces.pump.DetailedBolusInfoStorage +import info.nightscout.interfaces.pump.PumpSync import info.nightscout.pump.medtrum.MedtrumTestBase +import info.nightscout.shared.utils.T import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.mock class GetRecordPacketTest : MedtrumTestBase() { /** Test packet specific behavior */ + @Mock private lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage + private val packetInjector = HasAndroidInjector { AndroidInjector { if (it is GetRecordPacket) { it.aapsLogger = aapsLogger it.medtrumPump = medtrumPump + it.pumpSync = pumpSync + it.detailedBolusInfoStorage = detailedBolusInfoStorage + it.dateUtil = dateUtil } } } @@ -58,4 +70,296 @@ class GetRecordPacketTest : MedtrumTestBase() { Assertions.assertEquals(false, result) Assertions.assertEquals(true, packet.failed) } + + @Test fun handleResponseGivenBolusRecordWhenAndDetailedBolusInfoPresentThenExpectPumpSyncWithTempId() { + val data = byteArrayOf(47, 99, 10, 1, 0, 0, -86, 40, 1, -1, 38, 105, -77, 57, 56, 0, 29, 0, 1, 0, 0, 0, -82, -85, 62, 18, 22, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76) + + val timestamp = 1694631470000L + val bolusType = DetailedBolusInfo.BolusType.SMB + val amount = 1.1 + + // Mocks + val detailedBolusInfo: DetailedBolusInfo = mock(DetailedBolusInfo::class.java) + detailedBolusInfo.timestamp = timestamp // Wierd way to mock but this is a @JvmField + Mockito.`when`(detailedBolusInfo.bolusType).thenReturn(bolusType) + + Mockito.`when`(detailedBolusInfoStorage.findDetailedBolusInfo(timestamp, amount)).thenReturn(detailedBolusInfo) + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).syncBolusWithTempId( + timestamp = timestamp, + amount = amount, + temporaryId = timestamp, + type = bolusType, + pumpId = timestamp, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + Assertions.assertEquals(timestamp, medtrumPump.lastBolusTime) + Assertions.assertEquals(amount, medtrumPump.lastBolusAmount, 0.01) + } + + @Test fun handleResponseGivenBolusRecordWhenAndNoDetailedBolusInfoPresentThenExpectPumpSyncWithPumpId() { + val data = byteArrayOf(47, 99, 10, 1, 0, 0, -86, 40, 1, -1, 38, 105, -77, 57, 56, 0, 29, 0, 1, 0, 0, 0, -82, -85, 62, 18, 22, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76) + + val timestamp = 1694631470000L + val amount = 1.1 + + // Mocks + Mockito.`when`(detailedBolusInfoStorage.findDetailedBolusInfo(timestamp, amount)).thenReturn(null) + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).syncBolusWithPumpId( + timestamp = timestamp, + amount = amount, + type = null, + pumpId = timestamp, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + Assertions.assertEquals(timestamp, medtrumPump.lastBolusTime) + Assertions.assertEquals(amount, medtrumPump.lastBolusAmount, 0.01) + } + + @Test fun handleResponseGivenExtendedBolusRecordThenExpectPumpSyncWithPumpId() { + val data = byteArrayOf(47, 99, 5, 1, 0, 0, -86, 40, 1, -1, 38, 105, -77, 57, 63, 0, 6, 0, 2, 0, 0, 0, -22, -123, 67, 18, 0, 0, 0, 0, 25, 0, 30, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124) + + val timestamp = 1694949482000 + val amount = 1.25 + val duration = T.mins(30).msecs() + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).syncExtendedBolusWithPumpId( + timestamp = timestamp, + amount = amount, + duration = duration, + isEmulatingTB = false, + pumpId = timestamp, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } + + @Test fun handleResponseGivenComboBolusRecordWhenAndNoDetailedBolusInfoPresentThenExpectPumpSyncWithPumpId() { + val data = byteArrayOf(47, 99, 5, 1, 0, 0, -86, 40, 1, -1, 38, 105, -77, 57, 63, 0, 8, 0, 3, 0, 0, 0, 111, -110, 67, 18, 40, 0, 40, 0, 20, 0, 30, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -122) + + val timestamp = 1694952687000L + val amountDirect = 2.0 + val amountExtended = 1.0 + val duration = T.mins(30).msecs() + + // Mocks + Mockito.`when`(detailedBolusInfoStorage.findDetailedBolusInfo(timestamp, amountDirect)).thenReturn(null) + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).syncBolusWithPumpId( + timestamp = timestamp, + amount = amountDirect, + type = null, + pumpId = timestamp, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + Mockito.verify(pumpSync).syncExtendedBolusWithPumpId( + timestamp = timestamp, + amount = amountExtended, + duration = duration, + isEmulatingTB = false, + pumpId = timestamp, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } + + @Test fun handleResponseGivenBasalRecordWhenAbsoluteTempThenExpectPumpSync() { + val data = byteArrayOf(35, 99, 7, 1, 0, 0, -86, 28, 2, -1, 38, 105, -77, 57, 56, 0, 30, 0, -85, -85, 62, 18, -34, -84, 62, 18, 6, 0, 69, 0, 6, 0, 69, 0, -125) + + val startTime = 1694631467000 + val endTime = 1694631774000 + val rate = 3.45 + val duration = endTime - startTime + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).syncTemporaryBasalWithPumpId( + timestamp = startTime, + rate = rate, + duration = duration, + isAbsolute = true, + type = PumpSync.TemporaryBasalType.NORMAL, + pumpId = startTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } + + @Test fun handleResponseGivenBasalRecordWhenRelativeTempThenExpectPumpSync() { + val data = byteArrayOf(35, 99, 7, 1, 0, 0, -86, 28, 2, -1, 38, 105, -77, 57, 63, 0, 4, 0, -116, -123, 67, 18, 81, -119, 67, 18, 7, 0, 4, 0, 1, 0, -56, 0, 1) + + val startTime = 1694949388000 + val endTime = 1694950353000 + val rate = 200.0 + val duration = endTime - startTime + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).syncTemporaryBasalWithPumpId( + timestamp = startTime, + rate = rate, + duration = duration, + isAbsolute = false, + type = PumpSync.TemporaryBasalType.NORMAL, + pumpId = startTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } + + @Test fun handleResponseGivenBasalRecordWhenSuspendThenExpectPumpSync() { + // Note: This is not a real response as I was unable to get this response from any of my pumpbases, but it can theoretically happen + val data = byteArrayOf(35, 99, 7, 1, 0, 0, -86, 28, 2, -1, -39, -7, 118, -86, -85, 1, 8, 0, -4, 116, -16, 17, 21, 125, -16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 125) + val startTime = 1689505660000 + val endTime = 1689507733000 + val rate = 0.0 + val duration = endTime - startTime + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).syncTemporaryBasalWithPumpId( + timestamp = startTime, + rate = rate, + duration = duration, + isAbsolute = true, + type = PumpSync.TemporaryBasalType.PUMP_SUSPEND, + pumpId = startTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } + + @Test fun handleResponseGivenBasalRecordWhenStandardAndSuspendEndReasonThenExpectPumpSync() { + val data = byteArrayOf(35, 99, 8, 1, 0, 0, -86, 28, 2, -1, -39, -7, 118, -86, -85, 1, 4, 0, -117, 113, -16, 17, 9, 116, -16, 17, 1, 4, 10, 0, 2, 0, 0, 0, 57) + val endTime = 1689505417000 + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Just check the pumpSync here, rest of the behavoir of medtrumPump is tested in MedtrumPumpTest + // Expected values + Mockito.verify(pumpSync).syncTemporaryBasalWithPumpId( + timestamp = endTime, + rate = 0.0, + duration = T.mins(4800L).msecs(), + isAbsolute = true, + type = PumpSync.TemporaryBasalType.PUMP_SUSPEND, + pumpId = endTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } + + @Test fun handleResponseGivenBasalRecordWhenTempAndSuspendEndReasonThenExpectPumpSync() { + val data = byteArrayOf(35, 99, 8, 1, 0, 0, -86, 28, 2, -1, -39, -7, 118, -86, -82, 1, 5, 0, 75, 24, -14, 17, 44, 27, -14, 17, 6, 4, 16, 0, 3, 0, 16, 0, -73) + val endTime = 1689613740000 + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Just check the pumpSync here, rest of the behavoir of medtrumPump is tested in MedtrumPumpTest + // Expected values + Mockito.verify(pumpSync).syncTemporaryBasalWithPumpId( + timestamp = endTime, + rate = 0.0, + duration = T.mins(4800L).msecs(), + isAbsolute = true, + type = PumpSync.TemporaryBasalType.PUMP_SUSPEND, + pumpId = endTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } + + @Test fun handleResponseGivenTDDRecordThenExpectPumpSync() { + val data = byteArrayOf( + 87, 99, 8, 1, 0, 0, -86, 80, 9, -1, 38, 105, -77, 57, 56, 0, 82, 0, -32, -124, 61, 18, 120, 0, -120, 5, 0, 0, 0, 0, -102, -103, 84, 66, 0, 0, + -120, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, -26, -128, 66, 58, -52, -75, 63, 0, 0, -16, 66, -49, -9, -13, 63, -103, -103, 121, 66, 55, + -75, -84, 63, 0, 0, -16, 66, -49, -9, -13, 63, 0, 0, 0, 0, -128 + ) + val timestamp = 1694556000000L + val tdd = 53.150001525878906 + val basalTdd = 17.0 + val bolusTdd = tdd - basalTdd + + // Call + val packet = GetRecordPacket(packetInjector, 0) + val result = packet.handleResponse(data) + + // Expected values + Mockito.verify(pumpSync).createOrUpdateTotalDailyDose( + timestamp = timestamp, + bolusAmount = bolusTdd, + basalAmount = basalTdd, + totalAmount = tdd, + pumpId = timestamp, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + Assertions.assertEquals(true, result) + Assertions.assertEquals(false, packet.failed) + } } From ae5c4ddeeb49763af17c24b8351708210544b825 Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Sun, 17 Sep 2023 20:22:13 +0200 Subject: [PATCH 12/65] Medtrum: Lints --- .../nightscout/pump/medtrum/MedtrumPlugin.kt | 30 +- .../nightscout/pump/medtrum/MedtrumPump.kt | 12 +- .../medtrum/comm/packets/GetRecordPacket.kt | 491 +++++++++--------- .../comm/packets/NotificationPacket.kt | 1 - 4 files changed, 271 insertions(+), 263 deletions(-) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt index ed0cff7dcf..efcda22669 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt @@ -255,7 +255,11 @@ import kotlin.math.abs override fun isConnected(): Boolean { // This is a workaround to prevent AAPS to trigger connects when we have no patch activated - return if (!isInitialized()) true else medtrumService?.isConnected ?: false + return if (!isInitialized()) { + true + } else { + medtrumService?.isConnected ?: false + } } override fun isConnecting(): Boolean = medtrumService?.isConnecting ?: false @@ -544,31 +548,19 @@ import kotlin.math.abs // Medtrum interface override fun loadEvents(): PumpEnactResult { - if (!isInitialized()) { - val result = PumpEnactResult(injector).success(false) - result.comment = "pump not initialized" - return result - } + if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false) val connectionOK = medtrumService?.loadEvents() ?: false return PumpEnactResult(injector).success(connectionOK) } override fun setUserOptions(): PumpEnactResult { - if (!isInitialized()) { - val result = PumpEnactResult(injector).success(false) - result.comment = "pump not initialized" - return result - } + if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false) val connectionOK = medtrumService?.setUserSettings() ?: false return PumpEnactResult(injector).success(connectionOK) } override fun clearAlarms(): PumpEnactResult { - if (!isInitialized()) { - val result = PumpEnactResult(injector).success(false) - result.comment = "pump not initialized" - return result - } + if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false) val connectionOK = medtrumService?.clearAlarms() ?: false return PumpEnactResult(injector).success(connectionOK) } @@ -579,11 +571,7 @@ import kotlin.math.abs } override fun updateTime(): PumpEnactResult { - if (!isInitialized()) { - val result = PumpEnactResult(injector).success(false) - result.comment = "pump not initialized" - return result - } + if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false) val connectionOK = medtrumService?.updateTimeIfNeeded() ?: false return PumpEnactResult(injector).success(connectionOK) } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt index 8480282e6f..ad537792a5 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt @@ -315,7 +315,7 @@ class MedtrumPump @Inject constructor( } loadUserSettingsFromSP() - } + } fun loadUserSettingsFromSP() { desiredPatchExpiration = sp.getBoolean(R.string.key_patch_expiration, false) @@ -421,7 +421,7 @@ class MedtrumPump @Inject constructor( ) aapsLogger.debug( LTag.PUMPCOMM, - "handleBasalStatusUpdate: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + "Rate: $basalRate Duration: ${duration} temporaryBasalInfo: $temporaryBasalInfo, expectedTemporaryBasal: $expectedTemporaryBasal" + "handleBasalStatusUpdate: ${newRecordInfo(newRecord)}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + "Rate: $basalRate Duration: ${duration} temporaryBasalInfo: $temporaryBasalInfo, expectedTemporaryBasal: $expectedTemporaryBasal" ) } @@ -438,7 +438,7 @@ class MedtrumPump @Inject constructor( ) aapsLogger.debug( LTag.PUMPCOMM, - "handleBasalStatusUpdate: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) expectedTemporaryBasal: $expectedTemporaryBasal" + "handleBasalStatusUpdate: ${newRecordInfo(newRecord)}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) expectedTemporaryBasal: $expectedTemporaryBasal" ) } @@ -507,7 +507,7 @@ class MedtrumPump @Inject constructor( ) aapsLogger.debug( LTag.PUMPCOMM, - "handleBasalStatusUpdate: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_START (FAKE)" + "handleBasalStatusUpdate: ${newRecordInfo(newRecord)}EVENT TEMP_START (FAKE)" ) } @@ -597,4 +597,8 @@ class MedtrumPump @Inject constructor( .let { EnumSet.copyOf(it) } } } + + private fun newRecordInfo(newRecord: Boolean): String { + return "${if (newRecord) "**NEW** " else ""}" + } } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt index 0f375b056f..5aa1f12843 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt @@ -87,204 +87,11 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int if (recordHeader == VALID_HEADER) { when (recordType) { BOLUS_RECORD, BOLUS_RECORD_ALT -> { - aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD") - val typeAndWizard = data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 1).toInt() - val bolusCause = data.copyOfRange(RESP_RECORD_DATA_START + 1, RESP_RECORD_DATA_START + 2).toInt() - val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 2, RESP_RECORD_DATA_START + 4).toInt() - val bolusStartTime = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong()) - val bolusNormalAmount = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 10).toInt() * 0.05 - val bolusNormalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05 - val bolusExtendedAmount = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05 - val bolusExtendedDuration = T.mins(data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toLong()).msecs() - val bolusExtendedDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 18).toInt() * 0.05 - val bolusCarb = data.copyOfRange(RESP_RECORD_DATA_START + 18, RESP_RECORD_DATA_START + 20).toInt() - val bolusGlucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 22).toInt() - val bolusIOB = data.copyOfRange(RESP_RECORD_DATA_START + 22, RESP_RECORD_DATA_START + 24).toInt() - val unknown1 = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 26).toInt() - val unknown2 = data.copyOfRange(RESP_RECORD_DATA_START + 26, RESP_RECORD_DATA_START + 28).toInt() - val bolusType = enumValues()[typeAndWizard and 0x0F] - val bolusWizard = (typeAndWizard and 0xF0) != 0 - aapsLogger.debug( - LTag.PUMPCOMM, - "GetRecordPacket HandleResponse: BOLUS_RECORD: typeAndWizard: $typeAndWizard, bolusCause: $bolusCause, unknown: $unknown, bolusStartTime: $bolusStartTime, " + - "bolusNormalAmount: $bolusNormalAmount, bolusNormalDelivered: $bolusNormalDelivered, bolusExtendedAmount: $bolusExtendedAmount, bolusExtendedDuration: " + - "$bolusExtendedDuration, " + "bolusExtendedDelivered: $bolusExtendedDelivered, bolusCarb: $bolusCarb, bolusGlucose: $bolusGlucose, bolusIOB: $bolusIOB, unknown1: $unknown1, unknown2: $unknown2, " + "bolusType: $bolusType, bolusWizard: $bolusWizard" - ) - - when (bolusType) { - BolusType.NORMAL -> { - val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered) - var newRecord = false - if (detailedBolusInfo != null) { - val syncOk = pumpSync.syncBolusWithTempId( - timestamp = bolusStartTime, - amount = bolusNormalDelivered, - temporaryId = detailedBolusInfo.timestamp, - type = detailedBolusInfo.bolusType, - pumpId = bolusStartTime, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - if (!syncOk) { - aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Failed to sync bolus with tempId: ${detailedBolusInfo.timestamp}") - // detailedInfo can be from another similar record. Reinsert - detailedBolusInfoStorage.add(detailedBolusInfo) - } - } else { - newRecord = pumpSync.syncBolusWithPumpId( - timestamp = bolusStartTime, - amount = bolusNormalDelivered, - type = null, - pumpId = bolusStartTime, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - } - - aapsLogger.debug( - LTag.PUMPCOMM, - "from record: ${if (newRecord) "**NEW** " else ""}EVENT BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U " - ) - if (bolusStartTime > medtrumPump.lastBolusTime) { - medtrumPump.lastBolusTime = bolusStartTime - medtrumPump.lastBolusAmount = bolusNormalDelivered - } - } - - BolusType.EXTENDED -> { - val newRecord = pumpSync.syncExtendedBolusWithPumpId( - timestamp = bolusStartTime, - amount = bolusExtendedDelivered, - duration = bolusExtendedDuration, - isEmulatingTB = false, - pumpId = bolusStartTime, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - aapsLogger.debug( - LTag.PUMPCOMM, - "from record: ${if (newRecord) "**NEW** " else ""}EVENT EXTENDED BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U " - ) - } - - BolusType.COMBI -> { - // Note, this should never happen, as we don't use combo bolus - val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered) - val newRecord = pumpSync.syncBolusWithPumpId( - timestamp = bolusStartTime, - amount = bolusNormalDelivered, - type = detailedBolusInfo?.bolusType, - pumpId = bolusStartTime, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - pumpSync.syncExtendedBolusWithPumpId( - timestamp = bolusStartTime, - amount = bolusExtendedDelivered, - duration = bolusExtendedDuration, - isEmulatingTB = false, - pumpId = bolusStartTime, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - aapsLogger.error( - LTag.PUMPCOMM, - "from record: ${if (newRecord) "**NEW** " else ""}EVENT COMBI BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U Extended: ${bolusExtendedDelivered} THIS SHOULD NOT HAPPEN!!!" - ) - if (!newRecord && detailedBolusInfo != null) { - // detailedInfo can be from another similar record. Reinsert - detailedBolusInfoStorage.add(detailedBolusInfo) - } - if (bolusStartTime > medtrumPump.lastBolusTime) { - medtrumPump.lastBolusTime = bolusStartTime - medtrumPump.lastBolusAmount = bolusNormalDelivered - } - } - - else -> { - aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Unknown bolus type: $bolusType") - } - } - + handleBolusRecord(data) } BASAL_RECORD, BASAL_RECORD_ALT -> { - val medtrumTimeUtil = MedtrumTimeUtil() - val basalStartTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong()) - val basalEndTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong()) - val basalType = enumValues()[data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 9).toInt()] - val basalEndReason = enumValues()[data.copyOfRange(RESP_RECORD_DATA_START + 9, RESP_RECORD_DATA_START + 10).toInt()] - val basalRate = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05 - val basalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05 - val basalPercent = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toInt() - - aapsLogger.debug( - LTag.PUMPCOMM, - "GetRecordPacket HandleResponse: BASAL_RECORD: Start: $basalStartTime, End: $basalEndTime, Type: $basalType, EndReason: $basalEndReason, Rate: $basalRate, Delivered: $basalDelivered, Percent: $basalPercent" - ) - - when (basalType) { - BasalType.STANDARD -> { - aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Standard basal") - // If we are here it means the basal has ended - } - - BasalType.ABSOLUTE_TEMP, BasalType.RELATIVE_TEMP -> { - aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: temp basal") - var duration = (basalEndTime - basalStartTime) - // Work around for pumpSync not accepting 0 duration. - // sometimes we get 0 duration for very short basal because the pump only reports time in seconds - if (duration < 250) duration = 250 // 250ms to make sure AAPS accepts it - - val newRecord = pumpSync.syncTemporaryBasalWithPumpId( - timestamp = basalStartTime, - rate = if (basalType == BasalType.ABSOLUTE_TEMP) basalRate else basalPercent.toDouble(), - duration = duration, - isAbsolute = (basalType == BasalType.ABSOLUTE_TEMP), - type = PumpSync.TemporaryBasalType.NORMAL, - pumpId = basalStartTime, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - aapsLogger.debug( - LTag.PUMPCOMM, - "handleBasalStatusUpdate from record: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_SYNC: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + - "Rate: $basalRate Duration: ${duration}" - ) - } - - in BasalType.SUSPEND_LOW_GLUCOSE..BasalType.STOP -> { - aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Suspend basal") - // Never seen a packet like this from a pump, even when suspended by app, but leave it in just in case - val duration = (basalEndTime - basalStartTime) - val newRecord = pumpSync.syncTemporaryBasalWithPumpId( - timestamp = basalStartTime, - rate = 0.0, - duration = duration, - isAbsolute = true, - type = PumpSync.TemporaryBasalType.PUMP_SUSPEND, - pumpId = basalStartTime, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - aapsLogger.debug( - LTag.PUMPCOMM, - "handleBasalStatusUpdate from record: ${if (newRecord) "**NEW** " else ""}EVENT SUSPEND: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + - "Rate: $basalRate Duration: ${duration}" - ) - } - - else -> { - aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Unknown basal type: $basalType") - } - } - - if (basalEndReason.isSuspendedByPump()) { - // Pump doesn't seem to sync suspend explicitly, so we need to do it here - // Sync suspend using handleBasalStatusUpdate to make sure other variables are updated as well - aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Got suspended end reason, syncing suspend") - medtrumPump.handleBasalStatusUpdate(BasalType.fromBasalEndReason(basalEndReason), 0.0, recordSequence, recordPatchId, basalEndTime) - } + handleBasalRecord(data) } ALARM_RECORD -> { @@ -312,54 +119,13 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int } TDD_RECORD -> { - aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: TDD_RECORD") - val timestamp = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong()) - val timeZoneOffset = data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 6).toInt() - val tddMinutes = data.copyOfRange(RESP_RECORD_DATA_START + 6, RESP_RECORD_DATA_START + 8).toInt() - val glucoseRecordTime = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 12).toLong() - val tdd = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 16).toFloat() - val basalTdd = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 20).toFloat() - val glucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 24).toFloat() - val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 28).toFloat() - val meanSomething = data.copyOfRange(RESP_RECORD_DATA_START + 28, RESP_RECORD_DATA_START + 32).toFloat() - val usedTdd = data.copyOfRange(RESP_RECORD_DATA_START + 32, RESP_RECORD_DATA_START + 36).toFloat() - val usedIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 36, RESP_RECORD_DATA_START + 40).toFloat() - val usedSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 40, RESP_RECORD_DATA_START + 44).toFloat() - val usedUMax = data.copyOfRange(RESP_RECORD_DATA_START + 44, RESP_RECORD_DATA_START + 48).toFloat() - val newTdd = data.copyOfRange(RESP_RECORD_DATA_START + 48, RESP_RECORD_DATA_START + 52).toFloat() - val newIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 52, RESP_RECORD_DATA_START + 56).toFloat() - val newSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 56, RESP_RECORD_DATA_START + 60).toFloat() - val newUMax = data.copyOfRange(RESP_RECORD_DATA_START + 60, RESP_RECORD_DATA_START + 64).toFloat() - - aapsLogger.debug( - LTag.PUMPCOMM, "TDD_RECORD: timestamp: $timestamp, timeZoneOffset: $timeZoneOffset, tddMinutes: $tddMinutes, glucoseRecordTime: $glucoseRecordTime, tdd: " + - "$tdd, basalTdd: $basalTdd, glucose: $glucose, unknown: $unknown, meanSomething: $meanSomething, usedTdd: $usedTdd, usedIBasal: $usedIBasal, usedSgBasal: " + - "$usedSgBasal, usedUMax: $usedUMax, newTdd: $newTdd, newIBasal: $newIBasal, newSgBasal: $newSgBasal, newUMax: $newUMax" - ) - - val newRecord = pumpSync.createOrUpdateTotalDailyDose( - timestamp = timestamp, - bolusAmount = (tdd - basalTdd).toDouble(), - basalAmount = basalTdd.toDouble(), - totalAmount = tdd.toDouble(), - pumpId = timestamp, - pumpType = medtrumPump.pumpType(), - pumpSerial = medtrumPump.pumpSN.toString(radix = 16) - ) - - aapsLogger.debug( - LTag.PUMPCOMM, - "handleBasalStatusUpdate from record: ${if (newRecord) "**NEW** " else ""}EVENT TDD: ${dateUtil.dateAndTimeString(timestamp)} ($timestamp) " + - "TDD: $tdd, BasalTDD: $basalTdd, BolusTDD: ${tdd - basalTdd}" - ) - + handleTddRecord(data) } else -> { aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Unknown record type: $recordType") } } - } else { aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Invalid record header") } @@ -370,4 +136,255 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int return success } + + private fun handleBolusRecord(data: ByteArray) { + aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD") + val typeAndWizard = data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 1).toInt() + val bolusCause = data.copyOfRange(RESP_RECORD_DATA_START + 1, RESP_RECORD_DATA_START + 2).toInt() + val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 2, RESP_RECORD_DATA_START + 4).toInt() + val bolusStartTime = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong()) + val bolusNormalAmount = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 10).toInt() * 0.05 + val bolusNormalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05 + val bolusExtendedAmount = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05 + val bolusExtendedDuration = T.mins(data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toLong()).msecs() + val bolusExtendedDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 18).toInt() * 0.05 + val bolusCarb = data.copyOfRange(RESP_RECORD_DATA_START + 18, RESP_RECORD_DATA_START + 20).toInt() + val bolusGlucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 22).toInt() + val bolusIOB = data.copyOfRange(RESP_RECORD_DATA_START + 22, RESP_RECORD_DATA_START + 24).toInt() + val unknown1 = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 26).toInt() + val unknown2 = data.copyOfRange(RESP_RECORD_DATA_START + 26, RESP_RECORD_DATA_START + 28).toInt() + val bolusType = enumValues()[typeAndWizard and 0x0F] + val bolusWizard = (typeAndWizard and 0xF0) != 0 + aapsLogger.debug( + LTag.PUMPCOMM, + "GetRecordPacket HandleResponse: BOLUS_RECORD: typeAndWizard: $typeAndWizard, bolusCause: $bolusCause, unknown: $unknown, bolusStartTime: $bolusStartTime, " + + "bolusNormalAmount: $bolusNormalAmount, bolusNormalDelivered: $bolusNormalDelivered, bolusExtendedAmount: $bolusExtendedAmount, bolusExtendedDuration: " + + "$bolusExtendedDuration, " + "bolusExtendedDelivered: $bolusExtendedDelivered, bolusCarb: $bolusCarb, bolusGlucose: $bolusGlucose, bolusIOB: $bolusIOB, unknown1: $unknown1, unknown2: $unknown2, " + "bolusType: $bolusType, bolusWizard: $bolusWizard" + ) + + when (bolusType) { + BolusType.NORMAL -> { + val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered) + var newRecord = false + if (detailedBolusInfo != null) { + val syncOk = pumpSync.syncBolusWithTempId( + timestamp = bolusStartTime, + amount = bolusNormalDelivered, + temporaryId = detailedBolusInfo.timestamp, + type = detailedBolusInfo.bolusType, + pumpId = bolusStartTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + if (!syncOk) { + aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Failed to sync bolus with tempId: ${detailedBolusInfo.timestamp}") + // detailedInfo can be from another similar record. Reinsert + detailedBolusInfoStorage.add(detailedBolusInfo) + } + } else { + newRecord = pumpSync.syncBolusWithPumpId( + timestamp = bolusStartTime, + amount = bolusNormalDelivered, + type = null, + pumpId = bolusStartTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + } + + aapsLogger.debug( + LTag.PUMPCOMM, + "from record: ${newRecordInfo(newRecord)}EVENT BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U " + ) + if (bolusStartTime > medtrumPump.lastBolusTime) { + medtrumPump.lastBolusTime = bolusStartTime + medtrumPump.lastBolusAmount = bolusNormalDelivered + } + } + + BolusType.EXTENDED -> { + val newRecord = pumpSync.syncExtendedBolusWithPumpId( + timestamp = bolusStartTime, + amount = bolusExtendedDelivered, + duration = bolusExtendedDuration, + isEmulatingTB = false, + pumpId = bolusStartTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + aapsLogger.debug( + LTag.PUMPCOMM, + "from record: ${newRecordInfo(newRecord)}EVENT EXTENDED BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U " + ) + } + + BolusType.COMBI -> { + // Note, this should never happen, as we don't use combo bolus + val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered) + val newRecord = pumpSync.syncBolusWithPumpId( + timestamp = bolusStartTime, + amount = bolusNormalDelivered, + type = detailedBolusInfo?.bolusType, + pumpId = bolusStartTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + pumpSync.syncExtendedBolusWithPumpId( + timestamp = bolusStartTime, + amount = bolusExtendedDelivered, + duration = bolusExtendedDuration, + isEmulatingTB = false, + pumpId = bolusStartTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + aapsLogger.error( + LTag.PUMPCOMM, + "from record: ${newRecordInfo(newRecord)}EVENT COMBI BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U Extended: ${bolusExtendedDelivered} THIS SHOULD NOT HAPPEN!!!" + ) + if (!newRecord && detailedBolusInfo != null) { + // detailedInfo can be from another similar record. Reinsert + detailedBolusInfoStorage.add(detailedBolusInfo) + } + if (bolusStartTime > medtrumPump.lastBolusTime) { + medtrumPump.lastBolusTime = bolusStartTime + medtrumPump.lastBolusAmount = bolusNormalDelivered + } + } + + else -> { + aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Unknown bolus type: $bolusType") + } + } + } + + private fun handleBasalRecord(data: ByteArray) { + val medtrumTimeUtil = MedtrumTimeUtil() + + val recordPatchId = data.copyOfRange(RESP_RECORD_PATCH_ID_START, RESP_RECORD_PATCH_ID_END).toLong() + val recordSequence = data.copyOfRange(RESP_RECORD_SEQUENCE_START, RESP_RECORD_SEQUENCE_END).toInt() + + val basalStartTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong()) + val basalEndTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong()) + val basalType = enumValues()[data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 9).toInt()] + val basalEndReason = enumValues()[data.copyOfRange(RESP_RECORD_DATA_START + 9, RESP_RECORD_DATA_START + 10).toInt()] + val basalRate = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05 + val basalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05 + val basalPercent = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toInt() + + aapsLogger.debug( + LTag.PUMPCOMM, + "GetRecordPacket HandleResponse: BASAL_RECORD: Start: $basalStartTime, End: $basalEndTime, Type: $basalType, EndReason: $basalEndReason, Rate: $basalRate, Delivered: $basalDelivered, Percent: $basalPercent" + ) + + when (basalType) { + BasalType.STANDARD -> { + aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Standard basal") + // If we are here it means the basal has ended + } + + BasalType.ABSOLUTE_TEMP, BasalType.RELATIVE_TEMP -> { + aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: temp basal") + var duration = (basalEndTime - basalStartTime) + // Work around for pumpSync not accepting 0 duration. + // sometimes we get 0 duration for very short basal because the pump only reports time in seconds + if (duration < 250) duration = 250 // 250ms to make sure AAPS accepts it + + val newRecord = pumpSync.syncTemporaryBasalWithPumpId( + timestamp = basalStartTime, + rate = if (basalType == BasalType.ABSOLUTE_TEMP) basalRate else basalPercent.toDouble(), + duration = duration, + isAbsolute = (basalType == BasalType.ABSOLUTE_TEMP), + type = PumpSync.TemporaryBasalType.NORMAL, + pumpId = basalStartTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + aapsLogger.debug( + LTag.PUMPCOMM, + "handleBasalStatusUpdate from record: ${newRecordInfo(newRecord)}EVENT TEMP_SYNC: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + + "Rate: $basalRate Duration: ${duration}" + ) + } + + in BasalType.SUSPEND_LOW_GLUCOSE..BasalType.STOP -> { + aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Suspend basal") + // Never seen a packet like this from a pump, even when suspended by app, but leave it in just in case + val duration = (basalEndTime - basalStartTime) + val newRecord = pumpSync.syncTemporaryBasalWithPumpId( + timestamp = basalStartTime, + rate = 0.0, + duration = duration, + isAbsolute = true, + type = PumpSync.TemporaryBasalType.PUMP_SUSPEND, + pumpId = basalStartTime, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + aapsLogger.debug( + LTag.PUMPCOMM, + "handleBasalStatusUpdate from record: ${newRecordInfo(newRecord)}EVENT SUSPEND: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + + "Rate: $basalRate Duration: ${duration}" + ) + } + + else -> { + aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Unknown basal type: $basalType") + } + } + + if (basalEndReason.isSuspendedByPump()) { + // Pump doesn't seem to sync suspend explicitly, so we need to do it here + // Sync suspend using handleBasalStatusUpdate to make sure other variables are updated as well + aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Got suspended end reason, syncing suspend") + medtrumPump.handleBasalStatusUpdate(BasalType.fromBasalEndReason(basalEndReason), 0.0, recordSequence, recordPatchId, basalEndTime) + } + } + + private fun handleTddRecord(data: ByteArray) { + aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: TDD_RECORD") + val timestamp = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong()) + val timeZoneOffset = data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 6).toInt() + val tddMinutes = data.copyOfRange(RESP_RECORD_DATA_START + 6, RESP_RECORD_DATA_START + 8).toInt() + val glucoseRecordTime = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 12).toLong() + val tdd = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 16).toFloat() + val basalTdd = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 20).toFloat() + val glucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 24).toFloat() + val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 28).toFloat() + val meanSomething = data.copyOfRange(RESP_RECORD_DATA_START + 28, RESP_RECORD_DATA_START + 32).toFloat() + val usedTdd = data.copyOfRange(RESP_RECORD_DATA_START + 32, RESP_RECORD_DATA_START + 36).toFloat() + val usedIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 36, RESP_RECORD_DATA_START + 40).toFloat() + val usedSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 40, RESP_RECORD_DATA_START + 44).toFloat() + val usedUMax = data.copyOfRange(RESP_RECORD_DATA_START + 44, RESP_RECORD_DATA_START + 48).toFloat() + val newTdd = data.copyOfRange(RESP_RECORD_DATA_START + 48, RESP_RECORD_DATA_START + 52).toFloat() + val newIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 52, RESP_RECORD_DATA_START + 56).toFloat() + val newSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 56, RESP_RECORD_DATA_START + 60).toFloat() + val newUMax = data.copyOfRange(RESP_RECORD_DATA_START + 60, RESP_RECORD_DATA_START + 64).toFloat() + + aapsLogger.debug( + LTag.PUMPCOMM, "TDD_RECORD: timestamp: $timestamp, timeZoneOffset: $timeZoneOffset, tddMinutes: $tddMinutes, glucoseRecordTime: $glucoseRecordTime, tdd: " + + "$tdd, basalTdd: $basalTdd, glucose: $glucose, unknown: $unknown, meanSomething: $meanSomething, usedTdd: $usedTdd, usedIBasal: $usedIBasal, usedSgBasal: " + + "$usedSgBasal, usedUMax: $usedUMax, newTdd: $newTdd, newIBasal: $newIBasal, newSgBasal: $newSgBasal, newUMax: $newUMax" + ) + + val newRecord = pumpSync.createOrUpdateTotalDailyDose( + timestamp = timestamp, + bolusAmount = (tdd - basalTdd).toDouble(), + basalAmount = basalTdd.toDouble(), + totalAmount = tdd.toDouble(), + pumpId = timestamp, + pumpType = medtrumPump.pumpType(), + pumpSerial = medtrumPump.pumpSN.toString(radix = 16) + ) + + aapsLogger.debug( + LTag.PUMPCOMM, + "handleBasalStatusUpdate from record: ${newRecordInfo(newRecord)}EVENT TDD: ${dateUtil.dateAndTimeString(timestamp)} ($timestamp) " + + "TDD: $tdd, BasalTDD: $basalTdd, BolusTDD: ${tdd - basalTdd}" + ) + } + + private fun newRecordInfo(newRecord: Boolean): String { + return "${if (newRecord) "**NEW** " else ""}" + } } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/NotificationPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/NotificationPacket.kt index 0657319396..f867adce1a 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/NotificationPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/NotificationPacket.kt @@ -109,7 +109,6 @@ class NotificationPacket(val injector: HasAndroidInjector) { if (fieldMask and MASK_EXTENDED_BOLUS != 0) { aapsLogger.error(LTag.PUMPCOMM, "Extended bolus notification received, extended bolus not supported!") - // TODO Handle error and stop pump if this happens? offset += 3 } From bedccac4e37ba90feb302d2610058891b7d436be Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sun, 17 Sep 2023 23:22:28 +0200 Subject: [PATCH 13/65] break aps -> automation dependency --- .../nightscout/core/ui/elements/WeekDay.kt | 92 ++++++++++++++++++ .../core/ui/elements}/WeekdayPicker.kt | 8 +- .../res/color/day_selection_background.xml | 0 .../drawable/weekday_circle_background.xml | 0 .../drawable/weekend_circle_background.xml | 0 .../src/main/res/layout/weekday_picker.xml | 16 ++-- core/ui/src/main/res/values/strings.xml | 19 ++++ plugins/aps/build.gradle | 1 - .../general/autotune/AutotuneFragment.kt | 4 +- .../general/autotune/AutotunePlugin.kt | 46 ++++----- .../automation/actions/ActionRunAutotune.kt | 7 +- .../automation/elements/Comparator.kt | 2 +- .../automation/elements/ComparatorConnect.kt | 2 +- .../automation/elements/ComparatorExists.kt | 2 +- .../nightscout/automation/elements/Element.kt | 5 +- .../nightscout/automation/elements/InputBg.kt | 2 +- .../automation/elements/InputButton.kt | 2 +- .../elements/InputCarePortalMenu.kt | 2 +- .../automation/elements/InputDateTime.kt | 2 +- .../automation/elements/InputDelta.kt | 2 +- .../automation/elements/InputDouble.kt | 2 +- .../automation/elements/InputDropdownMenu.kt | 2 +- .../automation/elements/InputDuration.kt | 2 +- .../automation/elements/InputInsulin.kt | 2 +- .../automation/elements/InputLocationMode.kt | 2 +- .../automation/elements/InputPercent.kt | 2 +- .../automation/elements/InputProfileName.kt | 2 +- .../automation/elements/InputString.kt | 2 +- .../automation/elements/InputTempTarget.kt | 2 +- .../automation/elements/InputTime.kt | 2 +- .../automation/elements/InputTimeRange.kt | 2 +- .../automation/elements/InputWeekDay.kt | 93 +------------------ .../automation/elements/LabelWithElement.kt | 2 +- .../automation/elements/StaticLabel.kt | 2 +- .../triggers/TriggerRecurringTime.kt | 9 +- .../src/main/res/values/strings.xml | 16 ---- 36 files changed, 183 insertions(+), 175 deletions(-) create mode 100644 core/ui/src/main/java/info/nightscout/core/ui/elements/WeekDay.kt rename {plugins/automation/src/main/java/info/nightscout/automation/ui => core/ui/src/main/java/info/nightscout/core/ui/elements}/WeekdayPicker.kt (92%) rename {plugins/automation => core/ui}/src/main/res/color/day_selection_background.xml (100%) rename plugins/automation/src/main/res/drawable/weekday_circle_brackground.xml => core/ui/src/main/res/drawable/weekday_circle_background.xml (100%) rename plugins/automation/src/main/res/drawable/weekend_circle_brackground.xml => core/ui/src/main/res/drawable/weekend_circle_background.xml (100%) rename {plugins/automation => core/ui}/src/main/res/layout/weekday_picker.xml (91%) diff --git a/core/ui/src/main/java/info/nightscout/core/ui/elements/WeekDay.kt b/core/ui/src/main/java/info/nightscout/core/ui/elements/WeekDay.kt new file mode 100644 index 0000000000..5281ffd220 --- /dev/null +++ b/core/ui/src/main/java/info/nightscout/core/ui/elements/WeekDay.kt @@ -0,0 +1,92 @@ +package info.nightscout.core.ui.elements + +import android.widget.LinearLayout +import androidx.annotation.StringRes +import info.nightscout.core.ui.R +import java.util.Calendar +import java.util.Date + +open class WeekDay { + + enum class DayOfWeek { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; + + fun toCalendarInt(): Int { + return calendarInts[ordinal] + } + + @get:StringRes val shortName: Int + get() = shortNames[ordinal] + + companion object { + + private val calendarInts = intArrayOf( + Calendar.MONDAY, + Calendar.TUESDAY, + Calendar.WEDNESDAY, + Calendar.THURSDAY, + Calendar.FRIDAY, + Calendar.SATURDAY, + Calendar.SUNDAY + ) + private val shortNames = intArrayOf( + R.string.weekday_monday_short, + R.string.weekday_tuesday_short, + R.string.weekday_wednesday_short, + R.string.weekday_thursday_short, + R.string.weekday_friday_short, + R.string.weekday_saturday_short, + R.string.weekday_sunday_short + ) + + fun fromCalendarInt(day: Int): DayOfWeek { + for (i in calendarInts.indices) { + if (calendarInts[i] == day) return values()[i] + } + throw IllegalStateException("Invalid day") + } + } + } + + val weekdays = BooleanArray(DayOfWeek.values().size) + var view: WeekdayPicker? = null + init { + for (day in DayOfWeek.values()) set(day, false) + } + + fun setAll(value: Boolean) { + for (day in DayOfWeek.values()) set(day, value) + } + + operator fun set(day: DayOfWeek, value: Boolean): WeekDay { + weekdays[day.ordinal] = value + return this + } + + fun isSet(day: DayOfWeek): Boolean = weekdays[day.ordinal] + + fun isSet(timestamp: Long): Boolean { + val scheduledDayOfWeek = Calendar.getInstance().also { it.time = Date(timestamp) } + return isSet(DayOfWeek.fromCalendarInt(scheduledDayOfWeek[Calendar.DAY_OF_WEEK])) + } + + fun getSelectedDays(): List { + val selectedDays: MutableList = ArrayList() + for (i in weekdays.indices) { + val day = DayOfWeek.values()[i] + val selected = weekdays[i] + if (selected) selectedDays.add(day.toCalendarInt()) + } + return selectedDays + } + + fun addToLayout(root: LinearLayout) { + view = WeekdayPicker(root.context).apply { + setSelectedDays(getSelectedDays()) + setOnWeekdaysChangeListener { i: Int, selected: Boolean -> set(DayOfWeek.fromCalendarInt(i), selected) } + } + root.addView( + view + ) + } +} diff --git a/plugins/automation/src/main/java/info/nightscout/automation/ui/WeekdayPicker.kt b/core/ui/src/main/java/info/nightscout/core/ui/elements/WeekdayPicker.kt similarity index 92% rename from plugins/automation/src/main/java/info/nightscout/automation/ui/WeekdayPicker.kt rename to core/ui/src/main/java/info/nightscout/core/ui/elements/WeekdayPicker.kt index 4b86c01ac5..f4b098c10b 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/ui/WeekdayPicker.kt +++ b/core/ui/src/main/java/info/nightscout/core/ui/elements/WeekdayPicker.kt @@ -1,13 +1,13 @@ -package info.nightscout.automation.ui +package info.nightscout.core.ui.elements import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View import android.widget.Checkable import androidx.appcompat.widget.AppCompatCheckedTextView import androidx.constraintlayout.widget.ConstraintLayout -import info.nightscout.automation.databinding.WeekdayPickerBinding -import info.nightscout.shared.extensions.toVisibility +import info.nightscout.core.ui.databinding.WeekdayPickerBinding import java.util.Calendar class WeekdayPicker constructor( @@ -25,6 +25,8 @@ class WeekdayPicker constructor( setupClickListeners() } + fun Boolean.toVisibility() = if (this) View.VISIBLE else View.GONE + private fun determineBeginOfWeek() { (Calendar.getInstance().firstDayOfWeek == Calendar.SUNDAY).let { binding.weekdayPickerSundayStart.visibility = it.toVisibility() diff --git a/plugins/automation/src/main/res/color/day_selection_background.xml b/core/ui/src/main/res/color/day_selection_background.xml similarity index 100% rename from plugins/automation/src/main/res/color/day_selection_background.xml rename to core/ui/src/main/res/color/day_selection_background.xml diff --git a/plugins/automation/src/main/res/drawable/weekday_circle_brackground.xml b/core/ui/src/main/res/drawable/weekday_circle_background.xml similarity index 100% rename from plugins/automation/src/main/res/drawable/weekday_circle_brackground.xml rename to core/ui/src/main/res/drawable/weekday_circle_background.xml diff --git a/plugins/automation/src/main/res/drawable/weekend_circle_brackground.xml b/core/ui/src/main/res/drawable/weekend_circle_background.xml similarity index 100% rename from plugins/automation/src/main/res/drawable/weekend_circle_brackground.xml rename to core/ui/src/main/res/drawable/weekend_circle_background.xml diff --git a/plugins/automation/src/main/res/layout/weekday_picker.xml b/core/ui/src/main/res/layout/weekday_picker.xml similarity index 91% rename from plugins/automation/src/main/res/layout/weekday_picker.xml rename to core/ui/src/main/res/layout/weekday_picker.xml index f20fec423d..3e6ab00ff0 100644 --- a/plugins/automation/src/main/res/layout/weekday_picker.xml +++ b/core/ui/src/main/res/layout/weekday_picker.xml @@ -11,7 +11,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekend_circle_brackground" + android:background="@drawable/weekend_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/sunday_short" @@ -27,7 +27,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekday_circle_brackground" + android:background="@drawable/weekday_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/monday_short" @@ -43,7 +43,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekday_circle_brackground" + android:background="@drawable/weekday_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/tuesday_short" @@ -59,7 +59,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekday_circle_brackground" + android:background="@drawable/weekday_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/wednesday_short" @@ -75,7 +75,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekday_circle_brackground" + android:background="@drawable/weekday_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/thursday_short" @@ -91,7 +91,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekday_circle_brackground" + android:background="@drawable/weekday_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/friday_short" @@ -107,7 +107,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekend_circle_brackground" + android:background="@drawable/weekend_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/saturday_short" @@ -123,7 +123,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="2dp" - android:background="@drawable/weekend_circle_brackground" + android:background="@drawable/weekend_circle_background" android:gravity="center" android:padding="8dp" android:text="@string/sunday_short" diff --git a/core/ui/src/main/res/values/strings.xml b/core/ui/src/main/res/values/strings.xml index ec3ae4661b..5965f8ec64 100644 --- a/core/ui/src/main/res/values/strings.xml +++ b/core/ui/src/main/res/values/strings.xml @@ -630,4 +630,23 @@ Do you want to cleanup the database?\nIt will remove tracked changes and historic data older than 3 months.\nDoing it will speedup full synchronization dramatically. Cleared entries + + Sun + Sat + Fri + Thu + Wed + Tue + Mon + + + M + T + W + T + F + S + S + + diff --git a/plugins/aps/build.gradle b/plugins/aps/build.gradle index d191d8afe0..05bda637bf 100644 --- a/plugins/aps/build.gradle +++ b/plugins/aps/build.gradle @@ -23,7 +23,6 @@ dependencies { implementation project(':core:utils') implementation project(':core:ui') implementation project(':core:validators') - implementation project(':plugins:automation') testImplementation project(':app-wear-shared:shared-tests') diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt index 53f21fb92e..85e90953af 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt @@ -19,9 +19,9 @@ import android.widget.TableRow import android.widget.TextView import dagger.android.HasAndroidInjector import dagger.android.support.DaggerFragment -import info.nightscout.automation.elements.InputWeekDay import info.nightscout.core.profile.ProfileSealed import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.ui.elements.WeekDay import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit @@ -112,7 +112,7 @@ class AutotuneFragment : DaggerFragment() { if (autotunePlugin.calculationRunning) days.view?.setSelectedDays(days.getSelectedDays()) else { - days.set(InputWeekDay.DayOfWeek.fromCalendarInt(i), selected) + days.set(WeekDay.DayOfWeek.fromCalendarInt(i), selected) resetParam(false) updateGui() } diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt index 4d4449c814..46bd06c7ff 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt @@ -1,10 +1,12 @@ +@file:Suppress("SpellCheckingInspection") + package info.nightscout.plugins.general.autotune import android.view.View import dagger.android.HasAndroidInjector -import info.nightscout.automation.elements.InputWeekDay import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.ui.elements.WeekDay import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit import info.nightscout.interfaces.Config @@ -38,7 +40,6 @@ import org.json.JSONObject import java.util.TimeZone import javax.inject.Inject import javax.inject.Singleton -import kotlin.collections.ArrayList /* * adaptation from oref0 autotune developed by philoul on 2022 (complete refactoring of AutotunePlugin initialised by Rumen Georgiev on 1/29/2018.) @@ -87,7 +88,7 @@ class AutotunePlugin @Inject constructor( @Volatile var tunedProfile: ATProfile? = null private var preppedGlucose: PreppedGlucose? = null private lateinit var profile: Profile - val days = InputWeekDay() + val days = WeekDay() val autotuneStartHour: Int = 4 override fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String, weekDays: BooleanArray?) { @@ -104,10 +105,9 @@ class AutotunePlugin @Inject constructor( val calcDays = calcDays(daysBack) val sb = StringBuilder() sb.append("Selected days: ") - var counter = 0 - for (i in days.getSelectedDays()) { - if (counter++ > 0) sb.append(",") - sb.append(InputWeekDay.DayOfWeek.fromCalendarInt(i)) + for ((counter, i) in days.getSelectedDays().withIndex()) { + if (counter > 0) sb.append(",") + sb.append(WeekDay.DayOfWeek.fromCalendarInt(i)) } log(sb.toString()) tunedProfile = null @@ -143,8 +143,8 @@ class AutotunePlugin @Inject constructor( // Today at 4 AM var endTime = MidnightTime.calc(lastRun) + autotuneStartHour * 60 * 60 * 1000L if (endTime > lastRun) endTime -= 24 * 60 * 60 * 1000L // Check if 4 AM is before now - val starttime = endTime - daysBack * 24 * 60 * 60 * 1000L - autotuneFS.exportSettings(settings(lastRun, daysBack, starttime, endTime)) + val startTime = endTime - daysBack * 24 * 60 * 60 * 1000L + autotuneFS.exportSettings(settings(lastRun, daysBack, startTime, endTime)) tunedProfile = ATProfile(profile, localInsulin, injector).also { it.profileName = rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name) } @@ -165,7 +165,7 @@ class AutotunePlugin @Inject constructor( } var currentCalcDay = 0 for (i in 0 until daysBack) { - val from = starttime + i * 24 * 60 * 60 * 1000L // get 24 hours BG values from 4 AM to 4 AM next day + val from = startTime + i * 24 * 60 * 60 * 1000L // get 24 hours BG values from 4 AM to 4 AM next day val to = from + 24 * 60 * 60 * 1000L if (days.isSet(from)) { currentCalcDay++ @@ -234,9 +234,9 @@ class AutotunePlugin @Inject constructor( ValueWithUnit.SimpleString(tunedP.profileName) ) updateButtonVisibility = View.GONE - tunedP.profileStore(circadian)?.let { profilestore -> + tunedP.profileStore(circadian)?.let { profileStore -> if (profileFunction.createProfileSwitch( - profilestore, + profileStore, profileName = tunedP.profileName, durationInMinutes = 0, percentage = 100, @@ -301,13 +301,13 @@ class AutotunePlugin @Inject constructor( return strResult } - private fun settings(runDate: Long, nbDays: Int, firstloopstart: Long, lastloopend: Long): String { + private fun settings(runDate: Long, nbDays: Int, firstLoopStart: Long, lastLoopEnd: Long): String { var jsonString = "" val jsonSettings = JSONObject() val insulinInterface = activePlugin.activeInsulin val utcOffset = T.msecs(TimeZone.getDefault().getOffset(dateUtil.now()).toLong()).hours() - val startDateString = dateUtil.toISOString(firstloopstart).substring(0, 10) - val endDateString = dateUtil.toISOString(lastloopend - 24 * 60 * 60 * 1000L).substring(0, 10) + val startDateString = dateUtil.toISOString(firstLoopStart).substring(0, 10) + val endDateString = dateUtil.toISOString(lastLoopEnd - 24 * 60 * 60 * 1000L).substring(0, 10) val nsUrl = sp.getString(info.nightscout.core.utils.R.string.key_nsclientinternal_url, "") val optCategorizeUam = if (sp.getBoolean(info.nightscout.core.utils.R.string.key_autotune_categorize_uam_as_basal, false)) "-c=true" else "" val optInsulinCurve = if (sp.getBoolean(info.nightscout.core.utils.R.string.key_autotune_tune_insulin_curve, false)) "-i=true" else "" @@ -330,7 +330,7 @@ class AutotunePlugin @Inject constructor( jsonSettings.put("categorize_uam_as_basal", sp.getBoolean(info.nightscout.core.utils.R.string.key_autotune_categorize_uam_as_basal, false)) jsonSettings.put("tune_insulin_curve", false) - val peaktime: Int = insulinInterface.peak + val peakTime: Int = insulinInterface.peak if (insulinInterface.id === Insulin.InsulinType.OREF_ULTRA_RAPID_ACTING) jsonSettings.put("curve", "ultra-rapid") else if (insulinInterface.id === Insulin.InsulinType.OREF_RAPID_ACTING) @@ -338,11 +338,11 @@ class AutotunePlugin @Inject constructor( else if (insulinInterface.id === Insulin.InsulinType.OREF_LYUMJEV) { jsonSettings.put("curve", "ultra-rapid") jsonSettings.put("useCustomPeakTime", true) - jsonSettings.put("insulinPeakTime", peaktime) + jsonSettings.put("insulinPeakTime", peakTime) } else if (insulinInterface.id === Insulin.InsulinType.OREF_FREE_PEAK) { - jsonSettings.put("curve", if (peaktime > 55) "rapid-acting" else "ultra-rapid") + jsonSettings.put("curve", if (peakTime > 55) "rapid-acting" else "ultra-rapid") jsonSettings.put("useCustomPeakTime", true) - jsonSettings.put("insulinPeakTime", peaktime) + jsonSettings.put("insulinPeakTime", peakTime) } jsonString = jsonSettings.toString(4).replace("\\/", "/") } catch (e: JSONException) { @@ -392,7 +392,7 @@ class AutotunePlugin @Inject constructor( } } for (i in days.weekdays.indices) { - json.put(InputWeekDay.DayOfWeek.values()[i].name, days.weekdays[i]) + json.put(WeekDay.DayOfWeek.values()[i].name, days.weekdays[i]) } json.put("result", result) json.put("updateButtonVisibility", updateButtonVisibility) @@ -429,7 +429,7 @@ class AutotunePlugin @Inject constructor( } } for (i in days.weekdays.indices) - days.weekdays[i] = JsonHelper.safeGetBoolean(json, InputWeekDay.DayOfWeek.values()[i].name,true) + days.weekdays[i] = JsonHelper.safeGetBoolean(json, WeekDay.DayOfWeek.values()[i].name,true) result = JsonHelper.safeGetString(json, "result", "") updateButtonVisibility = JsonHelper.safeGetInt(json, "updateButtonVisibility") lastRunSuccess = true @@ -441,10 +441,10 @@ class AutotunePlugin @Inject constructor( fun calcDays(daysBack:Int): Int { var endTime = MidnightTime.calc(dateUtil.now()) + autotuneStartHour * 60 * 60 * 1000L if (endTime > dateUtil.now()) endTime -= T.days(1).msecs() // Check if 4 AM is before now - val starttime = endTime - daysBack * T.days(1).msecs() + val startTime = endTime - daysBack * T.days(1).msecs() var result = 0 for (i in 0 until daysBack) { - if (days.isSet(starttime + i * T.days(1).msecs())) + if (days.isSet(startTime + i * T.days(1).msecs())) result++ } return result diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt index f386c222ae..c2dceab6dc 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt @@ -8,6 +8,7 @@ import info.nightscout.automation.elements.InputProfileName import info.nightscout.automation.elements.InputWeekDay import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder +import info.nightscout.core.ui.elements.WeekDay import info.nightscout.interfaces.autotune.Autotune import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction @@ -28,7 +29,7 @@ class ActionRunAutotune(injector: HasAndroidInjector) : Action(injector) { @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var sp: SP - var defaultValue = 0 + private var defaultValue = 0 private var inputProfileName = InputProfileName(rh, activePlugin, "", true) private var daysBack = InputDuration(0, InputDuration.TimeUnit.DAYS) private val days = InputWeekDay().also { it.setAll(true) } @@ -77,7 +78,7 @@ class ActionRunAutotune(injector: HasAndroidInjector) : Action(injector) { .put("profileToTune", inputProfileName.value) .put("tunedays", daysBack.value) for (i in days.weekdays.indices) { - data.put(InputWeekDay.DayOfWeek.values()[i].name, days.weekdays[i]) + data.put(WeekDay.DayOfWeek.values()[i].name, days.weekdays[i]) } return JSONObject() .put("type", this.javaClass.simpleName) @@ -88,7 +89,7 @@ class ActionRunAutotune(injector: HasAndroidInjector) : Action(injector) { override fun fromJSON(data: String): Action { val o = JSONObject(data) for (i in days.weekdays.indices) - days.weekdays[i] = JsonHelper.safeGetBoolean(o, InputWeekDay.DayOfWeek.values()[i].name,true) + days.weekdays[i] = JsonHelper.safeGetBoolean(o, WeekDay.DayOfWeek.values()[i].name,true) inputProfileName.value = JsonHelper.safeGetString(o, "profileToTune", "") defaultValue = JsonHelper.safeGetInt(o, "tunedays") if (defaultValue == 0) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/Comparator.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/Comparator.kt index 81bf666597..6fba8d942e 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/Comparator.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/Comparator.kt @@ -10,7 +10,7 @@ import androidx.annotation.StringRes import info.nightscout.automation.R import info.nightscout.shared.interfaces.ResourceHelper -class Comparator(private val rh: ResourceHelper) : Element() { +class Comparator(private val rh: ResourceHelper) : Element { enum class Compare { IS_LESSER, diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorConnect.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorConnect.kt index 61f4314796..63edc159ee 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorConnect.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorConnect.kt @@ -10,7 +10,7 @@ import androidx.annotation.StringRes import info.nightscout.automation.R import info.nightscout.shared.interfaces.ResourceHelper -class ComparatorConnect(private val rh: ResourceHelper) : Element() { +class ComparatorConnect(private val rh: ResourceHelper) : Element { enum class Compare { ON_CONNECT, ON_DISCONNECT; diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorExists.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorExists.kt index 3b9ac38f53..d3c38abe32 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorExists.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/ComparatorExists.kt @@ -9,7 +9,7 @@ import android.widget.Spinner import androidx.annotation.StringRes import info.nightscout.shared.interfaces.ResourceHelper -class ComparatorExists(private val rh: ResourceHelper, var value: Compare = Compare.EXISTS) : Element() { +class ComparatorExists(private val rh: ResourceHelper, var value: Compare = Compare.EXISTS) : Element { enum class Compare { EXISTS, NOT_EXISTS; diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/Element.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/Element.kt index 0e980bf2d6..0f4e512b51 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/Element.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/Element.kt @@ -2,8 +2,7 @@ package info.nightscout.automation.elements import android.widget.LinearLayout -abstract class Element { - - abstract fun addToLayout(root: LinearLayout) +interface Element { + fun addToLayout(root: LinearLayout) } \ No newline at end of file diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputBg.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputBg.kt index 0723a9d595..7fe302f257 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputBg.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputBg.kt @@ -7,7 +7,7 @@ import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.profile.ProfileFunction import java.text.DecimalFormat -class InputBg(profileFunction: ProfileFunction) : Element() { +class InputBg(profileFunction: ProfileFunction) : Element { var units = GlucoseUnit.MGDL var value = 0.0 diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputButton.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputButton.kt index c51dc518c9..3841de824e 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputButton.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputButton.kt @@ -4,7 +4,7 @@ import android.view.Gravity import android.widget.Button import android.widget.LinearLayout -class InputButton() : Element() { +class InputButton() : Element { var text: String? = null var runnable: Runnable? = null diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputCarePortalMenu.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputCarePortalMenu.kt index 1a53741d1a..5da10bfe52 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputCarePortalMenu.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputCarePortalMenu.kt @@ -11,7 +11,7 @@ import androidx.annotation.StringRes import info.nightscout.database.entities.TherapyEvent import info.nightscout.shared.interfaces.ResourceHelper -class InputCarePortalMenu(private val rh: ResourceHelper) : Element() { +class InputCarePortalMenu(private val rh: ResourceHelper) : Element { enum class EventType(val therapyEventType: TherapyEvent.Type) { NOTE(TherapyEvent.Type.NOTE), diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDateTime.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDateTime.kt index ae34ae264f..e7c4472eca 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDateTime.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDateTime.kt @@ -17,7 +17,7 @@ import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.utils.DateUtil import java.util.Calendar -class InputDateTime(private val rh: ResourceHelper, private val dateUtil: DateUtil, var value: Long = dateUtil.now()) : Element() { +class InputDateTime(private val rh: ResourceHelper, private val dateUtil: DateUtil, var value: Long = dateUtil.now()) : Element { override fun addToLayout(root: LinearLayout) { val px = rh.dpToPx(10) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDelta.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDelta.kt index 49dab52cc9..7c4c4303e4 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDelta.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDelta.kt @@ -12,7 +12,7 @@ import info.nightscout.core.ui.elements.NumberPicker import info.nightscout.shared.interfaces.ResourceHelper import java.text.DecimalFormat -class InputDelta(private val rh: ResourceHelper) : Element() { +class InputDelta(private val rh: ResourceHelper) : Element { enum class DeltaType { DELTA, SHORT_AVERAGE, LONG_AVERAGE; diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDouble.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDouble.kt index cb35f082d1..2d24edc5c7 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDouble.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDouble.kt @@ -5,7 +5,7 @@ import android.widget.LinearLayout import info.nightscout.core.ui.elements.NumberPicker import java.text.DecimalFormat -class InputDouble() : Element() { +class InputDouble() : Element { var value = 0.0 private var minValue = 0.0 diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDropdownMenu.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDropdownMenu.kt index a6fd55f701..e623313100 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDropdownMenu.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDropdownMenu.kt @@ -8,7 +8,7 @@ import android.widget.LinearLayout import android.widget.Spinner import info.nightscout.shared.interfaces.ResourceHelper -class InputDropdownMenu(private val rh: ResourceHelper) : Element() { +class InputDropdownMenu(private val rh: ResourceHelper) : Element { private var itemList: ArrayList = ArrayList() var value: String = "" diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDuration.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDuration.kt index dcbef5b52a..686f72a34b 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDuration.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputDuration.kt @@ -9,7 +9,7 @@ import java.text.DecimalFormat class InputDuration( var value: Int = 0, var unit: TimeUnit = TimeUnit.MINUTES, -) : Element() { +) : Element { enum class TimeUnit { MINUTES, HOURS, DAYS diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputInsulin.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputInsulin.kt index 9286b5b3f3..aa64712d91 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputInsulin.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputInsulin.kt @@ -5,7 +5,7 @@ import android.widget.LinearLayout import info.nightscout.core.ui.elements.NumberPicker import java.text.DecimalFormat -class InputInsulin() : Element() { +class InputInsulin() : Element { var value = 0.0 diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputLocationMode.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputLocationMode.kt index 6b52fb3015..78258a4bc3 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputLocationMode.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputLocationMode.kt @@ -10,7 +10,7 @@ import androidx.annotation.StringRes import info.nightscout.automation.R import info.nightscout.shared.interfaces.ResourceHelper -class InputLocationMode(private val rh: ResourceHelper) : Element() { +class InputLocationMode(private val rh: ResourceHelper) : Element { enum class Mode { INSIDE, OUTSIDE, GOING_IN, GOING_OUT; diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputPercent.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputPercent.kt index 97737b5d98..86c5083054 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputPercent.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputPercent.kt @@ -5,7 +5,7 @@ import android.widget.LinearLayout import info.nightscout.core.ui.elements.NumberPicker import java.text.DecimalFormat -class InputPercent() : Element() { +class InputPercent() : Element { var value: Double = 100.0 diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputProfileName.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputProfileName.kt index c1e89152dc..6e1f62365c 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputProfileName.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputProfileName.kt @@ -9,7 +9,7 @@ import android.widget.Spinner import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.shared.interfaces.ResourceHelper -class InputProfileName(private val rh: ResourceHelper, private val activePlugin: ActivePlugin, val name: String = "", private val addActive: Boolean = false) : Element() { +class InputProfileName(private val rh: ResourceHelper, private val activePlugin: ActivePlugin, val name: String = "", private val addActive: Boolean = false) : Element { var value: String = name diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputString.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputString.kt index 05c08d56c4..9894e47ef2 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputString.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputString.kt @@ -7,7 +7,7 @@ import android.view.ViewGroup import android.widget.EditText import android.widget.LinearLayout -class InputString(var value: String = "") : Element() { +class InputString(var value: String = "") : Element { private val textWatcher: TextWatcher = object : TextWatcher { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTempTarget.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTempTarget.kt index 58d1ac103c..f06cecb96d 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTempTarget.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTempTarget.kt @@ -8,7 +8,7 @@ import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.profile.ProfileFunction import java.text.DecimalFormat -class InputTempTarget(profileFunction: ProfileFunction) : Element() { +class InputTempTarget(profileFunction: ProfileFunction) : Element { var units: GlucoseUnit = GlucoseUnit.MGDL var value = 0.0 diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTime.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTime.kt index e3600294f8..4a3c6be6a7 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTime.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTime.kt @@ -19,7 +19,7 @@ import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.utils.DateUtil import java.util.Calendar -class InputTime(private val rh: ResourceHelper, private val dateUtil: DateUtil) : Element() { +class InputTime(private val rh: ResourceHelper, private val dateUtil: DateUtil) : Element { var value: Int = getMinSinceMidnight(dateUtil.now()) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTimeRange.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTimeRange.kt index 3a2cb243a6..4c7c43d560 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTimeRange.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputTimeRange.kt @@ -19,7 +19,7 @@ import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.utils.DateUtil import java.util.Calendar -class InputTimeRange(private val rh: ResourceHelper, private val dateUtil: DateUtil) : Element() { +class InputTimeRange(private val rh: ResourceHelper, private val dateUtil: DateUtil) : Element { var start: Int = getMinSinceMidnight(dateUtil.now()) var end: Int = getMinSinceMidnight(dateUtil.now()) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputWeekDay.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputWeekDay.kt index cf13f3b8a2..a8269d8f93 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/InputWeekDay.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/InputWeekDay.kt @@ -1,94 +1,5 @@ package info.nightscout.automation.elements -import android.widget.LinearLayout -import androidx.annotation.StringRes -import info.nightscout.automation.ui.WeekdayPicker -import info.nightscout.automation.R -import java.util.Calendar -import java.util.Date -import kotlin.collections.ArrayList +import info.nightscout.core.ui.elements.WeekDay -class InputWeekDay : Element() { - - enum class DayOfWeek { - MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; - - fun toCalendarInt(): Int { - return calendarInts[ordinal] - } - - @get:StringRes val shortName: Int - get() = shortNames[ordinal] - - companion object { - - private val calendarInts = intArrayOf( - Calendar.MONDAY, - Calendar.TUESDAY, - Calendar.WEDNESDAY, - Calendar.THURSDAY, - Calendar.FRIDAY, - Calendar.SATURDAY, - Calendar.SUNDAY - ) - private val shortNames = intArrayOf( - R.string.weekday_monday_short, - R.string.weekday_tuesday_short, - R.string.weekday_wednesday_short, - R.string.weekday_thursday_short, - R.string.weekday_friday_short, - R.string.weekday_saturday_short, - R.string.weekday_sunday_short - ) - - fun fromCalendarInt(day: Int): DayOfWeek { - for (i in calendarInts.indices) { - if (calendarInts[i] == day) return values()[i] - } - throw IllegalStateException("Invalid day") - } - } - } - - val weekdays = BooleanArray(DayOfWeek.values().size) - var view: WeekdayPicker? = null - init { - for (day in DayOfWeek.values()) set(day, false) - } - - fun setAll(value: Boolean) { - for (day in DayOfWeek.values()) set(day, value) - } - - operator fun set(day: DayOfWeek, value: Boolean): InputWeekDay { - weekdays[day.ordinal] = value - return this - } - - fun isSet(day: DayOfWeek): Boolean = weekdays[day.ordinal] - - fun isSet(timestamp: Long): Boolean { - val scheduledDayOfWeek = Calendar.getInstance().also { it.time = Date(timestamp) } - return isSet(DayOfWeek.fromCalendarInt(scheduledDayOfWeek[Calendar.DAY_OF_WEEK])) - } - - fun getSelectedDays(): List { - val selectedDays: MutableList = ArrayList() - for (i in weekdays.indices) { - val day = DayOfWeek.values()[i] - val selected = weekdays[i] - if (selected) selectedDays.add(day.toCalendarInt()) - } - return selectedDays - } - - override fun addToLayout(root: LinearLayout) { - view = WeekdayPicker(root.context).apply { - setSelectedDays(getSelectedDays()) - setOnWeekdaysChangeListener { i: Int, selected: Boolean -> set(DayOfWeek.fromCalendarInt(i), selected) } - } - root.addView( - view - ) - } -} +class InputWeekDay : WeekDay(), Element diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/LabelWithElement.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/LabelWithElement.kt index fa73ca5dc3..b52476b965 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/LabelWithElement.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/LabelWithElement.kt @@ -11,7 +11,7 @@ class LabelWithElement( var textPre: String = "", var textPost: String = "", var element: Element? = null, -) : Element() { +) : Element { override fun addToLayout(root: LinearLayout) { // container layout // text view pre element diff --git a/plugins/automation/src/main/java/info/nightscout/automation/elements/StaticLabel.kt b/plugins/automation/src/main/java/info/nightscout/automation/elements/StaticLabel.kt index c1d308e8b3..21d218ffed 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/elements/StaticLabel.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/elements/StaticLabel.kt @@ -7,7 +7,7 @@ import android.widget.TextView import info.nightscout.automation.triggers.Trigger import info.nightscout.shared.interfaces.ResourceHelper -class StaticLabel(private val rh: ResourceHelper) : Element() { +class StaticLabel(private val rh: ResourceHelper) : Element { var label = "" var trigger: Trigger? = null diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt index fa7cb76dad..805cf24fa4 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt @@ -8,6 +8,7 @@ import info.nightscout.automation.elements.InputTime import info.nightscout.automation.elements.InputWeekDay import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.ui.elements.WeekDay import info.nightscout.core.utils.MidnightUtils import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.interfaces.utils.MidnightTime @@ -35,7 +36,7 @@ class TriggerRecurringTime(injector: HasAndroidInjector) : Trigger(injector) { override fun shouldRun(): Boolean { val currentMinSinceMidnight = getMinSinceMidnight(dateUtil.now()) val scheduledDayOfWeek = Calendar.getInstance()[Calendar.DAY_OF_WEEK] - if (days.isSet(Objects.requireNonNull(InputWeekDay.DayOfWeek.fromCalendarInt(scheduledDayOfWeek)))) { + if (days.isSet(Objects.requireNonNull(WeekDay.DayOfWeek.fromCalendarInt(scheduledDayOfWeek)))) { if (currentMinSinceMidnight >= time.value && currentMinSinceMidnight - time.value < 5) { aapsLogger.debug(LTag.AUTOMATION, "Ready for execution: " + friendlyDescription()) return true @@ -49,7 +50,7 @@ class TriggerRecurringTime(injector: HasAndroidInjector) : Trigger(injector) { val data = JSONObject() .put("time", time.value) for (i in days.weekdays.indices) { - data.put(InputWeekDay.DayOfWeek.values()[i].name, days.weekdays[i]) + data.put(WeekDay.DayOfWeek.values()[i].name, days.weekdays[i]) } return data } @@ -57,7 +58,7 @@ class TriggerRecurringTime(injector: HasAndroidInjector) : Trigger(injector) { override fun fromJSON(data: String): Trigger { val o = JSONObject(data) for (i in days.weekdays.indices) - days.weekdays[i] = JsonHelper.safeGetBoolean(o, InputWeekDay.DayOfWeek.values()[i].name) + days.weekdays[i] = JsonHelper.safeGetBoolean(o, WeekDay.DayOfWeek.values()[i].name) if (o.has("hour")) { // do conversion from 2.5.1 format val hour = JsonHelper.safeGetInt(o, "hour") @@ -78,7 +79,7 @@ class TriggerRecurringTime(injector: HasAndroidInjector) : Trigger(injector) { var counter = 0 for (i in days.getSelectedDays()) { if (counter++ > 0) sb.append(",") - sb.append(rh.gs(Objects.requireNonNull(InputWeekDay.DayOfWeek.fromCalendarInt(i)).shortName)) + sb.append(rh.gs(Objects.requireNonNull(WeekDay.DayOfWeek.fromCalendarInt(i)).shortName)) } sb.append(" ") sb.append(dateUtil.timeString(toMills(time.value))) diff --git a/plugins/automation/src/main/res/values/strings.xml b/plugins/automation/src/main/res/values/strings.xml index a4df0e3e1a..a80edb2723 100644 --- a/plugins/automation/src/main/res/values/strings.xml +++ b/plugins/automation/src/main/res/values/strings.xml @@ -65,13 +65,6 @@ Time range Time is between %1$s and %2$s Between - Sun - Sat - Fri - Thu - Wed - Tue - Mon DEL ADD COPY @@ -123,15 +116,6 @@ Add rule Stop processing - - M - T - W - T - F - S - S - Time to eat!\nRun Bolus wizard and do calculation again. Time to bolus!\nRun Bolus wizard and do calculation again. From 688090fdcc87c21c43c2fa113686a6d1ab4ea325 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sun, 17 Sep 2023 23:51:42 +0200 Subject: [PATCH 14/65] remove unneeded dependency --- pump/rileylink/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/pump/rileylink/build.gradle b/pump/rileylink/build.gradle index 48fead13e1..36a7318e18 100644 --- a/pump/rileylink/build.gradle +++ b/pump/rileylink/build.gradle @@ -18,7 +18,6 @@ dependencies { implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') implementation project(':core:ui') - implementation project(':pump:pump-common') implementation project(':pump:pump-core') testImplementation project(':app-wear-shared:shared-tests') From af8f2d8124c79ab76416baf58fc84bb612b941d6 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 00:41:34 +0200 Subject: [PATCH 15/65] break interfaces -> ns-sdk dependency --- .../androidaps/receivers/KeepAliveWorker.kt | 17 +----- .../plugins/aps/loop/LoopPluginTest.kt | 2 +- core/interfaces/build.gradle | 2 +- .../info/nightscout/interfaces/aps/Loop.kt | 18 +----- .../sdk/interfaces}/RunningConfiguration.kt | 2 +- plugins/aps/build.gradle | 1 + .../nightscout/plugins/aps/loop/LoopPlugin.kt | 61 +++++++------------ .../automation/actions/ActionsTestBase.kt | 4 +- .../configBuilder/RunningConfigurationImpl.kt | 2 +- .../configuration/di/ConfigurationModule.kt | 2 +- .../nsclient/data/NSDeviceStatusHandler.kt | 2 +- .../extensions/DeviceStatusExtensionKtTest.kt | 2 +- 12 files changed, 35 insertions(+), 80 deletions(-) rename core/{interfaces/src/main/java/info/nightscout/interfaces/configBuilder => ns-sdk/src/main/java/info/nightscout/sdk/interfaces}/RunningConfiguration.kt (85%) diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveWorker.kt b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveWorker.kt index 39e461b388..e38068a115 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveWorker.kt @@ -10,7 +10,6 @@ import androidx.work.WorkQuery import androidx.work.WorkerParameters import androidx.work.workDataOf import com.google.common.util.concurrent.ListenableFuture -import info.nightscout.androidaps.BuildConfig import info.nightscout.androidaps.R import info.nightscout.configuration.maintenance.MaintenancePlugin import info.nightscout.core.profile.ProfileSealed @@ -19,13 +18,11 @@ import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config import info.nightscout.interfaces.LocalAlertUtils import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.configBuilder.RunningConfiguration import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.queue.Command import info.nightscout.interfaces.queue.CommandQueue -import info.nightscout.interfaces.receivers.ReceiverStatusStore import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventProfileSwitchChanged import info.nightscout.rx.logging.LTag @@ -51,8 +48,6 @@ class KeepAliveWorker( @Inject lateinit var dateUtil: DateUtil @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var profileFunction: ProfileFunction - @Inject lateinit var runningConfiguration: RunningConfiguration - @Inject lateinit var receiverStatusStore: ReceiverStatusStore @Inject lateinit var rxBus: RxBus @Inject lateinit var commandQueue: CommandQueue @Inject lateinit var maintenancePlugin: MaintenancePlugin @@ -155,13 +150,7 @@ class KeepAliveWorker( else if (dateUtil.isOlderThan(activePlugin.activeAPS.lastAPSRun, 5)) shouldUploadStatus = true if (dateUtil.isOlderThan(lastIobUpload, IOB_UPDATE_FREQUENCY_IN_MINUTES) && shouldUploadStatus) { lastIobUpload = dateUtil.now() - loop.buildDeviceStatus( - dateUtil, loop, iobCobCalculator, profileFunction, - activePlugin.activePump, receiverStatusStore, runningConfiguration, - BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION - )?.also { - repository.insert(it) - } + loop.buildAndStoreDeviceStatus() } } @@ -193,8 +182,8 @@ class KeepAliveWorker( // do nothing if pump is disconnected } else if (runningProfile == null || ((!pump.isThisProfileSet(requestedProfile) || !requestedProfile.isEqual(runningProfile) || (runningProfile is ProfileSealed.EPS && runningProfile.value.originalEnd < dateUtil.now() && runningProfile.value.originalDuration != 0L)) - && !commandQueue.isRunning(Command.CommandType.BASAL_PROFILE))) - { + && !commandQueue.isRunning(Command.CommandType.BASAL_PROFILE)) + ) { rxBus.send(EventProfileSwitchChanged()) } else if (isStatusOutdated && !pump.isBusy()) { lastReadStatus = now diff --git a/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt index b6ed18b582..7f74063515 100644 --- a/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt @@ -8,7 +8,7 @@ import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ApsMode import info.nightscout.interfaces.Config -import info.nightscout.interfaces.configBuilder.RunningConfiguration +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger diff --git a/core/interfaces/build.gradle b/core/interfaces/build.gradle index ba4be205c3..4cd1087543 100644 --- a/core/interfaces/build.gradle +++ b/core/interfaces/build.gradle @@ -22,7 +22,7 @@ dependencies { // (ResourceHelper, AAPSLogger interface) implementation project(':app-wear-shared:shared') implementation project(':database:entities') - implementation project(':core:ns-sdk') + // implementation project(':core:ns-sdk') api "androidx.appcompat:appcompat:$appcompat_version" diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/aps/Loop.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/aps/Loop.kt index c0eac9f4eb..cc62767c0a 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/aps/Loop.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/aps/Loop.kt @@ -1,16 +1,9 @@ package info.nightscout.interfaces.aps -import info.nightscout.database.entities.DeviceStatus import info.nightscout.database.entities.OfflineEvent -import info.nightscout.interfaces.configBuilder.RunningConfiguration import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.profile.Profile -import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.interfaces.pump.Pump import info.nightscout.interfaces.pump.PumpEnactResult -import info.nightscout.interfaces.receivers.ReceiverStatusStore -import info.nightscout.shared.utils.DateUtil interface Loop { @@ -47,14 +40,5 @@ interface Loop { fun goToZeroTemp(durationInMinutes: Int, profile: Profile, reason: OfflineEvent.Reason) fun suspendLoop(durationInMinutes: Int) fun disableCarbSuggestions(durationMinutes: Int) - fun buildDeviceStatus( - dateUtil: DateUtil, - loop: Loop, - iobCobCalculatorPlugin: IobCobCalculator, - profileFunction: ProfileFunction, - pump: Pump, - receiverStatusStore: ReceiverStatusStore, - runningConfiguration: RunningConfiguration, - version: String - ): DeviceStatus? + fun buildAndStoreDeviceStatus() } \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/configBuilder/RunningConfiguration.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/interfaces/RunningConfiguration.kt similarity index 85% rename from core/interfaces/src/main/java/info/nightscout/interfaces/configBuilder/RunningConfiguration.kt rename to core/ns-sdk/src/main/java/info/nightscout/sdk/interfaces/RunningConfiguration.kt index 9e7ef843ca..cc5600a7d9 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/configBuilder/RunningConfiguration.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/interfaces/RunningConfiguration.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.configBuilder +package info.nightscout.sdk.interfaces import info.nightscout.sdk.localmodel.devicestatus.NSDeviceStatus import org.json.JSONObject diff --git a/plugins/aps/build.gradle b/plugins/aps/build.gradle index 05bda637bf..633891e71c 100644 --- a/plugins/aps/build.gradle +++ b/plugins/aps/build.gradle @@ -20,6 +20,7 @@ dependencies { implementation project(':database:impl') implementation project(':core:main') implementation project(':core:interfaces') + implementation project(':core:ns-sdk') implementation project(':core:utils') implementation project(':core:ui') implementation project(':core:validators') diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt index 50969bf984..660b9b92e1 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt @@ -35,7 +35,6 @@ import info.nightscout.interfaces.Constants import info.nightscout.interfaces.aps.APSResult import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.aps.Loop.LastRun -import info.nightscout.interfaces.configBuilder.RunningConfiguration import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.iob.IobCobCalculator @@ -48,7 +47,6 @@ import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.DetailedBolusInfo -import info.nightscout.interfaces.pump.Pump import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.VirtualPump @@ -72,6 +70,7 @@ import info.nightscout.rx.events.EventTempTargetChange import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import info.nightscout.rx.weardata.EventData +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil @@ -106,7 +105,7 @@ class LoopPlugin @Inject constructor( private val uel: UserEntryLogger, private val repository: AppRepository, private val runningConfiguration: RunningConfiguration, - private val uiInteraction: UiInteraction + private val uiInteraction: UiInteraction, ) : PluginBase( PluginDescription() .mainType(PluginType.LOOP) @@ -300,13 +299,7 @@ class LoopPlugin @Inject constructor( lastRun.lastTBRRequest = 0 lastRun.lastSMBEnact = 0 lastRun.lastSMBRequest = 0 - buildDeviceStatus( - dateUtil, this, iobCobCalculator, profileFunction, - activePlugin.activePump, receiverStatusStore, runningConfiguration, - config.VERSION_NAME + "-" + config.BUILD_VERSION - )?.also { - repository.insert(it) - } + buildAndStoreDeviceStatus() if (isSuspended) { aapsLogger.debug(LTag.APS, rh.gs(info.nightscout.core.ui.R.string.loopsuspended)) @@ -524,13 +517,7 @@ class LoopPlugin @Inject constructor( lastRun.lastTBRRequest = lastRun.lastAPSRun lastRun.lastTBREnact = dateUtil.now() lastRun.lastOpenModeAccept = dateUtil.now() - buildDeviceStatus( - dateUtil, this@LoopPlugin, iobCobCalculator, profileFunction, - activePlugin.activePump, receiverStatusStore, runningConfiguration, - config.VERSION_NAME + "-" + config.BUILD_VERSION - )?.also { - repository.insert(it) - } + buildAndStoreDeviceStatus() sp.incInt(info.nightscout.core.utils.R.string.key_ObjectivesmanualEnacts) } rxBus.send(EventAcceptOpenLoopChange()) @@ -734,20 +721,12 @@ class LoopPlugin @Inject constructor( }) } - override fun buildDeviceStatus( - dateUtil: DateUtil, - loop: Loop, - iobCobCalculatorPlugin: IobCobCalculator, - profileFunction: ProfileFunction, - pump: Pump, - receiverStatusStore: ReceiverStatusStore, - runningConfiguration: RunningConfiguration, - version: String - ): DeviceStatus? { - val profile = profileFunction.getProfile() ?: return null + override fun buildAndStoreDeviceStatus() { + val version = config.VERSION_NAME + "-" + config.BUILD_VERSION + val profile = profileFunction.getProfile() ?: return val profileName = profileFunction.getProfileName() - val lastRun = loop.lastRun + val lastRun = lastRun var apsResult: JSONObject? = null var iob: JSONObject? = null var enacted: JSONObject? = null @@ -774,22 +753,24 @@ class LoopPlugin @Inject constructor( enacted?.put("smb", lastRun.tbrSetByPump?.bolusDelivered) } } else { - val calcIob = iobCobCalculatorPlugin.calculateIobArrayInDia(profile) + val calcIob = iobCobCalculator.calculateIobArrayInDia(profile) if (calcIob.isNotEmpty()) { iob = calcIob[0].json(dateUtil) iob.put("time", dateUtil.toISOString(dateUtil.now())) } } - return DeviceStatus( - timestamp = dateUtil.now(), - suggested = apsResult?.toString(), - iob = iob?.toString(), - enacted = enacted?.toString(), - device = "openaps://" + Build.MANUFACTURER + " " + Build.MODEL, - pump = pump.getJSONStatus(profile, profileName, version).toString(), - uploaderBattery = receiverStatusStore.batteryLevel, - isCharging = receiverStatusStore.isCharging, - configuration = runningConfiguration.configuration().toString() + repository.insert( + DeviceStatus( + timestamp = dateUtil.now(), + suggested = apsResult?.toString(), + iob = iob?.toString(), + enacted = enacted?.toString(), + device = "openaps://" + Build.MANUFACTURER + " " + Build.MODEL, + pump = activePlugin.activePump.getJSONStatus(profile, profileName, version).toString(), + uploaderBattery = receiverStatusStore.batteryLevel, + isCharging = receiverStatusStore.isCharging, + configuration = runningConfiguration.configuration().toString() + ) ) } diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt index f1d920435b..f88729ed43 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt @@ -9,7 +9,7 @@ import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.configBuilder.RunningConfiguration +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger @@ -69,7 +69,7 @@ ActionsTestBase : TestBaseWithProfile() { profileFunction: ProfileFunction, pump: Pump, receiverStatusStore: ReceiverStatusStore, - runningConfiguration: RunningConfiguration, + runningConfiguration: info.nightscout.sdk.interfaces.RunningConfiguration, version: String ): DeviceStatus? = null diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/configBuilder/RunningConfigurationImpl.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/configBuilder/RunningConfigurationImpl.kt index 1696e5c6a0..a8f0a5908c 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/configBuilder/RunningConfigurationImpl.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/configBuilder/RunningConfigurationImpl.kt @@ -4,7 +4,7 @@ import info.nightscout.configuration.R import info.nightscout.interfaces.Config import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.aps.Sensitivity -import info.nightscout.interfaces.configBuilder.RunningConfiguration +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.insulin.Insulin import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.ActivePlugin diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/di/ConfigurationModule.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/di/ConfigurationModule.kt index bc85399a39..7825ca1c00 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/di/ConfigurationModule.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/di/ConfigurationModule.kt @@ -17,7 +17,7 @@ import info.nightscout.configuration.maintenance.activities.PrefImportListActivi import info.nightscout.configuration.maintenance.formats.EncryptedPrefsFormat import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.ConfigBuilder -import info.nightscout.interfaces.configBuilder.RunningConfiguration +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.maintenance.ImportExportPrefs import info.nightscout.interfaces.maintenance.PrefFileListProvider diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt index adf88bf940..b62eb70c96 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt @@ -2,7 +2,7 @@ package info.nightscout.plugins.sync.nsclient.data import info.nightscout.annotations.OpenForTesting import info.nightscout.interfaces.Config -import info.nightscout.interfaces.configBuilder.RunningConfiguration +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.interfaces.utils.JsonHelper diff --git a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/extensions/DeviceStatusExtensionKtTest.kt b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/extensions/DeviceStatusExtensionKtTest.kt index 6f536526f2..9edd9225db 100644 --- a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/extensions/DeviceStatusExtensionKtTest.kt +++ b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/extensions/DeviceStatusExtensionKtTest.kt @@ -2,7 +2,7 @@ package info.nightscout.plugins.sync.nsclientV3.extensions import info.nightscout.database.entities.DeviceStatus import info.nightscout.interfaces.Config -import info.nightscout.interfaces.configBuilder.RunningConfiguration +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData import info.nightscout.interfaces.profile.Instantiator import info.nightscout.plugins.sync.nsclient.data.NSDeviceStatusHandler From caad075310ab58f8a79eefe828d2b39596f9f2a6 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 01:06:16 +0200 Subject: [PATCH 16/65] simply interfaces module --- .../interfaces/pump/defs/PumpType.kt | 27 +++---------------- .../src/main/res/values/strings.xml | 7 ----- .../nightscout/core/wizard/BolusWizard.kt | 2 +- core/ui/src/main/res/values/strings.xml | 3 +++ .../overview/OverviewDataImpl.kt | 8 +++--- .../queue/commands/CommandBolus.kt | 2 +- .../queue/commands/CommandSMBBolus.kt | 2 +- .../stats/TotalDailyDoseExtension.kt | 12 ++++----- .../utils/DecimalFormatterImpl.kt | 2 +- .../queue/CommandQueueImplementationTest.kt | 2 +- .../general/overview/OverviewFragment.kt | 2 +- .../info/nightscout/pump/dana/DanaFragment.kt | 2 +- .../dana/activities/DanaHistoryActivity.kt | 6 ++--- .../pump/diaconn/DiaconnG8Fragment.kt | 2 +- .../activities/DiaconnG8HistoryActivity.kt | 6 ++--- .../ui/viewmodel/MedtrumOverviewViewModel.kt | 6 ++--- .../pump/virtual/VirtualPumpFragment.kt | 24 ++++++++++++++++- pump/virtual/src/main/res/values/strings.xml | 3 +++ .../ui/activities/TDDStatsActivity.kt | 14 +++++----- .../fragments/TreatmentsBolusCarbsFragment.kt | 8 +++--- .../TreatmentsExtendedBolusesFragment.kt | 4 +-- .../TreatmentsTemporaryBasalsFragment.kt | 2 +- .../ui/dialogs/ExtendedBolusDialog.kt | 2 +- .../ui/dialogs/ProfileViewerDialog.kt | 2 +- .../nightscout/ui/dialogs/WizardDialog.kt | 18 ++++++------- .../nightscout/ui/dialogs/WizardInfoDialog.kt | 18 ++++++------- 26 files changed, 93 insertions(+), 93 deletions(-) diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt index b6d7400e3e..994ed2b84a 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt @@ -1,8 +1,6 @@ package info.nightscout.interfaces.pump.defs -import info.nightscout.interfaces.R import info.nightscout.interfaces.utils.Round -import info.nightscout.shared.interfaces.ResourceHelper import kotlin.math.min @Suppress("unused") @@ -447,7 +445,7 @@ enum class PumpType { private set var bolusSize = 0.0 get() = parent?.bolusSize ?: field - private var specialBolusSize: DoseStepSize? = null + var specialBolusSize: DoseStepSize? = null get() = parent?.specialBolusSize ?: field var extendedBolusSettings: DoseSettings? = null get() = parent?.extendedBolusSettings ?: field @@ -470,7 +468,7 @@ enum class PumpType { var baseBasalStep = 1.0 get() = parent?.baseBasalStep ?: field private set - private var baseBasalSpecialSteps: DoseStepSize? = null + var baseBasalSpecialSteps: DoseStepSize? = null get() = parent?.baseBasalSpecialSteps ?: field var pumpCapability: PumpCapability? = null get() = parent?.pumpCapability ?: field @@ -570,29 +568,10 @@ enum class PumpType { this.source = source } - fun getFullDescription(i18nTemplate: String, hasExtendedBasals: Boolean, rh: ResourceHelper): String { - val unit = if (pumpTempBasalType == PumpTempBasalType.Percent) "%" else "" - val eb = extendedBolusSettings ?: return "INVALID" - val tbr = tbrSettings ?: return "INVALID" - val extendedNote = if (hasExtendedBasals) rh.gs(R.string.def_extended_note) else "" - return String.format( - i18nTemplate, - getStep("" + bolusSize, specialBolusSize), - eb.step, eb.durationStep, eb.maxDuration / 60, - getStep(baseBasalRange(), baseBasalSpecialSteps), - tbr.minDose.toString() + unit + "-" + tbr.maxDose + unit, tbr.step.toString() + unit, - tbr.durationStep, tbr.maxDuration / 60, extendedNote - ) - } - - private fun baseBasalRange(): String = + fun baseBasalRange(): String = if (baseBasalMaxValue == null) baseBasalMinValue.toString() else baseBasalMinValue.toString() + "-" + baseBasalMaxValue.toString() - private fun getStep(step: String, stepSize: DoseStepSize?): String = - if (stepSize != null) step + " [" + stepSize.description + "] *" - else step - fun hasExtendedBasals(): Boolean = baseBasalSpecialSteps != null || specialBolusSize != null fun determineCorrectBolusSize(bolusAmount: Double): Double = diff --git a/core/interfaces/src/main/res/values/strings.xml b/core/interfaces/src/main/res/values/strings.xml index 306c12f87d..bc7e2675d6 100644 --- a/core/interfaces/src/main/res/values/strings.xml +++ b/core/interfaces/src/main/res/values/strings.xml @@ -12,14 +12,7 @@ New debug format (unencrypted) Unknown export format - - * Only discrete values no ranges are supported as granularity for basal/bolus in virtual pump. - Pump driver changed. - - %1$.1f U - %1$.2f U - diff --git a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt index 7bf6c1f716..be814c2ea3 100644 --- a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt +++ b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt @@ -321,7 +321,7 @@ class BolusWizard @Inject constructor( if (insulinAfterConstraints > 0) { val pct = if (percentageCorrection != 100) " ($percentageCorrection%)" else "" actions.add( - rh.gs(info.nightscout.core.ui.R.string.bolus) + ": " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, insulinAfterConstraints).formatColor + rh.gs(info.nightscout.core.ui.R.string.bolus) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, insulinAfterConstraints).formatColor (context, rh, info.nightscout.core.ui.R.attr.bolusColor) + pct ) } diff --git a/core/ui/src/main/res/values/strings.xml b/core/ui/src/main/res/values/strings.xml index 5965f8ec64..dffde23751 100644 --- a/core/ui/src/main/res/values/strings.xml +++ b/core/ui/src/main/res/values/strings.xml @@ -648,5 +648,8 @@ S S + + %1$.1f U + %1$.2f U diff --git a/implementation/src/main/java/info/nightscout/implementation/overview/OverviewDataImpl.kt b/implementation/src/main/java/info/nightscout/implementation/overview/OverviewDataImpl.kt index 1aedfc003e..8dabf9b375 100644 --- a/implementation/src/main/java/info/nightscout/implementation/overview/OverviewDataImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/overview/OverviewDataImpl.kt @@ -245,12 +245,12 @@ class OverviewDataImpl @Inject constructor( } override fun iobText(iobCobCalculator: IobCobCalculator): String = - rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob) + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob) override fun iobDialogText(iobCobCalculator: IobCobCalculator): String = - rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob) + "\n" + - rh.gs(info.nightscout.core.ui.R.string.bolus) + ": " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, bolusIob(iobCobCalculator).iob) + "\n" + - rh.gs(info.nightscout.core.ui.R.string.basal) + ": " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, basalIob(iobCobCalculator).basaliob) + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob) + "\n" + + rh.gs(info.nightscout.core.ui.R.string.bolus) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, bolusIob(iobCobCalculator).iob) + "\n" + + rh.gs(info.nightscout.core.ui.R.string.basal) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, basalIob(iobCobCalculator).basaliob) /* * TEMP TARGET diff --git a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandBolus.kt b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandBolus.kt index 9645df6318..d73072cbb8 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandBolus.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/commands/CommandBolus.kt @@ -38,7 +38,7 @@ class CommandBolus( } override fun log(): String { - return (if (detailedBolusInfo.insulin > 0) "BOLUS " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, detailedBolusInfo.insulin) else "") + + return (if (detailedBolusInfo.insulin > 0) "BOLUS " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, detailedBolusInfo.insulin) else "") + if (detailedBolusInfo.carbs > 0) "CARBS " + rh.gs(info.nightscout.core.main.R.string.format_carbs, detailedBolusInfo.carbs.toInt()) else "" } 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 32e00d4f70..b834ada838 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 @@ -41,7 +41,7 @@ class CommandSMBBolus( override fun status(): String = rh.gs(info.nightscout.core.ui.R.string.smb_bolus_u, detailedBolusInfo.insulin) - override fun log(): String = "SMB BOLUS ${rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, detailedBolusInfo.insulin)}" + override fun log(): String = "SMB BOLUS ${rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, detailedBolusInfo.insulin)}" override fun cancel() { aapsLogger.debug(LTag.PUMPQUEUE, "Result cancel") callback?.result(PumpEnactResult(injector).success(false).comment(info.nightscout.core.ui.R.string.connectiontimedout))?.run() diff --git a/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt b/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt index 6ca8875275..85f711a224 100644 --- a/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt +++ b/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt @@ -37,9 +37,9 @@ fun TotalDailyDose.toTableRow(context: Context, rh: ResourceHelper, dateUtil: Da row.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT) row.gravity = Gravity.CENTER_HORIZONTAL row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = dateUtil.dateStringShort(timestamp) }) - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units1, total) }) - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units1, bolusAmount) }) - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units1, basalAmount) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, total) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, bolusAmount) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, basalAmount) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 4 }; text = rh.gs(info.nightscout.core.ui.R.string.formatPercent, basalPct) }) if (includeCarbs) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 5 }; text = rh.gs(info.nightscout.core.main.R.string.format_carbs, carbs @@ -55,9 +55,9 @@ fun TotalDailyDose.toTableRow(context: Context, rh: ResourceHelper, days: Int, i row.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT) row.gravity = Gravity.CENTER_HORIZONTAL row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = "%02d".format(days) + " " + rh.gs(info.nightscout.shared.R.string.days) }) - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units1, total) }) - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units1, bolusAmount) }) - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units1, basalAmount) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, total) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, bolusAmount) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, basalAmount) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 4 }; text = rh.gs(info.nightscout.core.ui.R.string.formatPercent, basalPct) }) if (includeCarbs) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 5 }; text = rh.gs(info.nightscout.core.main.R.string.format_carbs, carbs diff --git a/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt b/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt index db9e78da6e..f627734e9a 100644 --- a/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt @@ -27,7 +27,7 @@ class DecimalFormatterImpl @Inject constructor( override fun to3Decimal(value: Double, unit: String): String = format3dec.format(value) + unit override fun toPumpSupportedBolus(value: Double, bolusStep: Double): String = if (bolusStep <= 0.051) to2Decimal(value) else to1Decimal(value) override fun toPumpSupportedBolusWithUnits(value: Double, bolusStep: Double): String = - if (bolusStep <= 0.051) rh.gs(R.string.format_insulin_units, value) else rh.gs(R.string.format_insulin_units1, value) + if (bolusStep <= 0.051) rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, value) else rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, value) override fun pumpSupportedBolusFormat(bolusStep: Double): DecimalFormat = if (bolusStep <= 0.051) DecimalFormat("0.00") else DecimalFormat("0.0") } \ 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 0645630ab0..f77ea1b704 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt @@ -150,7 +150,7 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { val percentageConstraint = Constraint(0) `when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(percentageConstraint) `when`(rh.gs(info.nightscout.core.ui.R.string.connectiontimedout)).thenReturn("Connection timed out") - `when`(rh.gs(info.nightscout.interfaces.R.string.format_insulin_units)).thenReturn("%1\$.2f U") + `when`(rh.gs(info.nightscout.core.ui.R.string.format_insulin_units)).thenReturn("%1\$.2f U") `when`(rh.gs(info.nightscout.core.ui.R.string.goingtodeliver)).thenReturn("Going to deliver %1\$.2f U") } diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt index 81dd5a1174..3b4ae53379 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt @@ -544,7 +544,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList binding.buttonsLayout.quickWizardButton.visibility = View.VISIBLE val wizard = quickWizardEntry.doCalc(profile, profileName, lastBG) binding.buttonsLayout.quickWizardButton.text = quickWizardEntry.buttonText() + "\n" + rh.gs(info.nightscout.core.main.R.string.format_carbs, quickWizardEntry.carbs()) + - " " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.calculatedTotalInsulin) + " " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.calculatedTotalInsulin) if (wizard.calculatedTotalInsulin <= 0) binding.buttonsLayout.quickWizardButton.visibility = View.GONE } else binding.buttonsLayout.quickWizardButton.visibility = View.GONE } diff --git a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt index 32c807106b..acd4e7b830 100644 --- a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt +++ b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt @@ -215,7 +215,7 @@ class DanaFragment : DaggerFragment() { val agoHours = agoMilliseconds.toDouble() / 60.0 / 60.0 / 1000.0 if (agoHours < 6) // max 6h back - binding.lastBolus.text = dateUtil.timeString(pump.lastBolusTime) + " " + dateUtil.sinceString(pump.lastBolusTime, rh) + " " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, pump.lastBolusAmount) + binding.lastBolus.text = dateUtil.timeString(pump.lastBolusTime) + " " + dateUtil.sinceString(pump.lastBolusTime, rh) + " " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, pump.lastBolusAmount) else binding.lastBolus.text = "" } diff --git a/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaHistoryActivity.kt b/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaHistoryActivity.kt index e5e0c75bcb..c279e44935 100644 --- a/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaHistoryActivity.kt +++ b/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaHistoryActivity.kt @@ -179,9 +179,9 @@ class DanaHistoryActivity : TranslatedDaggerAppCompatActivity() { } RecordTypes.RECORD_TYPE_DAILY -> { - holder.binding.dailyBasal.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.dailyBasal) - holder.binding.dailyBolus.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.dailyBolus) - holder.binding.dailyTotal.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.dailyBolus + record.dailyBasal) + holder.binding.dailyBasal.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.dailyBasal) + holder.binding.dailyBolus.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.dailyBolus) + holder.binding.dailyTotal.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.dailyBolus + record.dailyBasal) holder.binding.time.text = dateUtil.dateString(record.timestamp) holder.binding.time.visibility = View.VISIBLE holder.binding.value.visibility = View.GONE diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt index cae3f34270..eab7ce0a82 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt @@ -168,7 +168,7 @@ class DiaconnG8Fragment : DaggerFragment() { val agoHours = agoMsec.toDouble() / 60.0 / 60.0 / 1000.0 if (agoHours < 6) // max 6h back - binding.lastbolus.text = dateUtil.timeString(pump.lastBolusTime) + " " + dateUtil.sinceString(pump.lastBolusTime, rh) + " " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, pump.lastBolusAmount) + binding.lastbolus.text = dateUtil.timeString(pump.lastBolusTime) + " " + dateUtil.sinceString(pump.lastBolusTime, rh) + " " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, pump.lastBolusAmount) else binding.lastbolus.text = "" } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/activities/DiaconnG8HistoryActivity.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/activities/DiaconnG8HistoryActivity.kt index d611ee3d6e..9ce2560536 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/activities/DiaconnG8HistoryActivity.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/activities/DiaconnG8HistoryActivity.kt @@ -158,9 +158,9 @@ class DiaconnG8HistoryActivity : TranslatedDaggerAppCompatActivity() { } RecordTypes.RECORD_TYPE_DAILY -> { - holder.dailyBasal.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.dailyBasal) - holder.dailyBolus.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.dailyBolus) - holder.dailyTotal.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.dailyBolus + record.dailyBasal) + holder.dailyBasal.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.dailyBasal) + holder.dailyBolus.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.dailyBolus) + holder.dailyTotal.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.dailyBolus + record.dailyBasal) holder.time.text = dateUtil.dateString(record.timestamp) holder.time.visibility = View.VISIBLE holder.value.visibility = View.GONE diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt index 13392125bf..8291983817 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt @@ -131,8 +131,8 @@ class MedtrumOverviewViewModel @Inject constructor( if (!medtrumPump.bolusDone && medtrumPlugin.isInitialized()) { _activeBolusStatus.postValue( dateUtil.timeString(medtrumPump.bolusStartTime) + " " + dateUtil.sinceString(medtrumPump.bolusStartTime, rh) - + " " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, bolusAmount) + " / " + rh.gs( - info.nightscout.interfaces.R.string.format_insulin_units, medtrumPump.bolusAmountToBeDelivered + + " " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, bolusAmount) + " / " + rh.gs( + info.nightscout.core.ui.R.string.format_insulin_units, medtrumPump.bolusAmountToBeDelivered ) ) } @@ -186,7 +186,7 @@ class MedtrumOverviewViewModel @Inject constructor( // max 6h back _lastBolus.postValue( dateUtil.timeString(medtrumPump.lastBolusTime) + " " + dateUtil.sinceString(medtrumPump.lastBolusTime, rh) + " " + rh.gs( - info.nightscout.interfaces.R.string.format_insulin_units, medtrumPump.lastBolusAmount + info.nightscout.core.ui.R.string.format_insulin_units, medtrumPump.lastBolusAmount ) ) else _lastBolus.postValue("") diff --git a/pump/virtual/src/main/java/info/nightscout/pump/virtual/VirtualPumpFragment.kt b/pump/virtual/src/main/java/info/nightscout/pump/virtual/VirtualPumpFragment.kt index 64f8eab66e..bd0a99f0bf 100644 --- a/pump/virtual/src/main/java/info/nightscout/pump/virtual/VirtualPumpFragment.kt +++ b/pump/virtual/src/main/java/info/nightscout/pump/virtual/VirtualPumpFragment.kt @@ -11,6 +11,9 @@ import info.nightscout.core.extensions.toStringFull import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.profile.ProfileFunction +import info.nightscout.interfaces.pump.defs.DoseStepSize +import info.nightscout.interfaces.pump.defs.PumpTempBasalType +import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.pump.virtual.databinding.VirtualPumpFragmentBinding import info.nightscout.pump.virtual.events.EventVirtualPumpUpdateGui @@ -97,7 +100,7 @@ class VirtualPumpFragment : DaggerFragment() { binding.extendedbolus.text = iobCobCalculator.getExtendedBolus(dateUtil.now())?.toStringFull(dateUtil, decimalFormatter) ?: "" binding.battery.text = rh.gs(info.nightscout.core.ui.R.string.format_percent, virtualPumpPlugin.batteryPercent) - binding.reservoir.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, virtualPumpPlugin.reservoirInUnits.toDouble()) + binding.reservoir.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, virtualPumpPlugin.reservoirInUnits.toDouble()) virtualPumpPlugin.refreshConfiguration() val pumpType = virtualPumpPlugin.pumpType @@ -106,4 +109,23 @@ class VirtualPumpFragment : DaggerFragment() { binding.typeDef.text = pumpType?.getFullDescription(rh.gs(R.string.virtual_pump_pump_def), pumpType.hasExtendedBasals(), rh) binding.serialNumber.text = virtualPumpPlugin.serialNumber() } + + private fun getStep(step: String, stepSize: DoseStepSize?): String = + if (stepSize != null) step + " [" + stepSize.description + "] *" + else step + + private fun PumpType.getFullDescription(i18nTemplate: String, hasExtendedBasals: Boolean, rh: ResourceHelper): String { + val unit = if (pumpTempBasalType == PumpTempBasalType.Percent) "%" else "" + val eb = extendedBolusSettings ?: return "INVALID" + val tbr = tbrSettings ?: return "INVALID" + val extendedNote = if (hasExtendedBasals) rh.gs(R.string.def_extended_note) else "" + return String.format( + i18nTemplate, + getStep(bolusSize.toString(), specialBolusSize), + eb.step, eb.durationStep, eb.maxDuration / 60, + getStep(baseBasalRange(), baseBasalSpecialSteps), + tbr.minDose.toString() + unit + "-" + tbr.maxDose + unit, tbr.step.toString() + unit, + tbr.durationStep, tbr.maxDuration / 60, extendedNote + ) + } } diff --git a/pump/virtual/src/main/res/values/strings.xml b/pump/virtual/src/main/res/values/strings.xml index 3535a191cc..7d4db35bc2 100644 --- a/pump/virtual/src/main/res/values/strings.xml +++ b/pump/virtual/src/main/res/values/strings.xml @@ -10,4 +10,7 @@ VIRTUAL PUMP Virtual pump settings + + * Only discrete values no ranges are supported as granularity for basal/bolus in virtual pump. + diff --git a/ui/src/main/java/info/nightscout/ui/activities/TDDStatsActivity.kt b/ui/src/main/java/info/nightscout/ui/activities/TDDStatsActivity.kt index 11558479bf..5de99168bb 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/TDDStatsActivity.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/TDDStatsActivity.kt @@ -313,17 +313,17 @@ class TDDStatsActivity : TranslatedDaggerAppCompatActivity() { }) tr.addView(TextView(this@TDDStatsActivity).also { labelBASAL -> labelBASAL.id = 300 + i - labelBASAL.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.basalAmount) + labelBASAL.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.basalAmount) labelBASAL.setTextColor(rh.gac(this, info.nightscout.core.ui.R.attr.defaultTextColor)) }) tr.addView(TextView(this@TDDStatsActivity).also { labelBOLUS -> labelBOLUS.id = 400 + i - labelBOLUS.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, record.bolusAmount) + labelBOLUS.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, record.bolusAmount) labelBOLUS.setTextColor(rh.gac(this, info.nightscout.core.ui.R.attr.defaultTextColor)) }) tr.addView(TextView(this@TDDStatsActivity).also { labelTDD -> labelTDD.id = 500 + i - labelTDD.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, tdd) + labelTDD.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, tdd) labelTDD.setTextColor(rh.gac(this, info.nightscout.core.ui.R.attr.defaultTextColor)) }) tr.addView(TextView(this@TDDStatsActivity).also { labelRATIO -> @@ -361,7 +361,7 @@ class TDDStatsActivity : TranslatedDaggerAppCompatActivity() { ctr.addView(TextView(this@TDDStatsActivity).also { labelCUMTDD -> labelCUMTDD.id = 900 + i - labelCUMTDD.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, sum / i) + labelCUMTDD.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, sum / i) labelCUMTDD.setTextColor(rh.gac(this, info.nightscout.core.ui.R.attr.defaultTextColor)) }) @@ -413,9 +413,9 @@ class TDDStatsActivity : TranslatedDaggerAppCompatActivity() { etr.addView(TextView(this@TDDStatsActivity).also { labelEXPTDD -> labelEXPTDD.id = 1300 + i labelEXPTDD.text = """ - ${rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, weighted03)} - ${rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, weighted05)} - ${rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, weighted07)} + ${rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, weighted03)} + ${rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, weighted05)} + ${rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, weighted07)} """.trimIndent() labelEXPTDD.setTextColor(rh.gac(this, info.nightscout.core.ui.R.attr.defaultTextColor)) }) diff --git a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt index 47accd2bec..7798ae3208 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsBolusCarbsFragment.kt @@ -218,18 +218,18 @@ class TreatmentsBolusCarbsFragment : DaggerFragment(), MenuProvider { holder.binding.bolusLayout.visibility = (ml.bolus != null && (ml.bolus.isValid || showInvalidated)).toVisibility() ml.bolus?.let { bolus -> holder.binding.bolusTime.text = dateUtil.timeString(bolus.timestamp) - holder.binding.insulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, bolus.amount) + holder.binding.insulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, bolus.amount) holder.binding.bolusNs.visibility = (bolus.interfaceIDs.nightscoutId != null).toVisibility() holder.binding.bolusPump.visibility = bolus.interfaceIDs.isPumpHistory().toVisibility() holder.binding.bolusInvalid.visibility = bolus.isValid.not().toVisibility() val iob = bolus.iobCalc(activePlugin, System.currentTimeMillis(), profile.dia) if (iob.iobContrib > 0.01) { holder.binding.iob.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.activeColor)) - holder.binding.iob.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, iob.iobContrib) + holder.binding.iob.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, iob.iobContrib) holder.binding.iobLabel.visibility = View.VISIBLE holder.binding.iob.visibility = View.VISIBLE } else { - holder.binding.iob.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, 0.0) + holder.binding.iob.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, 0.0) holder.binding.iob.setTextColor(holder.binding.insulin.currentTextColor) holder.binding.iobLabel.visibility = View.GONE holder.binding.iob.visibility = View.GONE @@ -438,7 +438,7 @@ class TreatmentsBolusCarbsFragment : DaggerFragment(), MenuProvider { val mealLink = selectedItems.valueAt(0) val bolus = mealLink.bolus if (bolus != null) - return rh.gs(info.nightscout.core.ui.R.string.configbuilder_insulin) + ": " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, bolus.amount) + "\n" + + return rh.gs(info.nightscout.core.ui.R.string.configbuilder_insulin) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, bolus.amount) + "\n" + rh.gs(info.nightscout.core.ui.R.string.date) + ": " + dateUtil.dateAndTimeString(bolus.timestamp) val carbs = mealLink.carbs if (carbs != null) diff --git a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsExtendedBolusesFragment.kt b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsExtendedBolusesFragment.kt index 2e3f03c340..6b4a9b7698 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsExtendedBolusesFragment.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsExtendedBolusesFragment.kt @@ -154,9 +154,9 @@ class TreatmentsExtendedBolusesFragment : DaggerFragment(), MenuProvider { } val profile = profileFunction.getProfile(extendedBolus.timestamp) ?: return holder.binding.duration.text = rh.gs(info.nightscout.core.ui.R.string.format_mins, T.msecs(extendedBolus.duration).mins()) - holder.binding.insulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, extendedBolus.amount) + holder.binding.insulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, extendedBolus.amount) val iob = extendedBolus.iobCalc(System.currentTimeMillis(), profile, activePlugin.activeInsulin) - holder.binding.iob.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, iob.iob) + holder.binding.iob.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, iob.iob) holder.binding.ratio.text = rh.gs(info.nightscout.core.ui.R.string.pump_base_basal_rate, extendedBolus.rate) if (iob.iob != 0.0) holder.binding.iob.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.activeColor)) else holder.binding.iob.setTextColor(holder.binding.insulin.currentTextColor) holder.binding.cbRemove.visibility = (extendedBolus.isValid && actionHelper.isRemoving).toVisibility() diff --git a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsTemporaryBasalsFragment.kt b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsTemporaryBasalsFragment.kt index 0e3053eb41..561b854ad2 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsTemporaryBasalsFragment.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsTemporaryBasalsFragment.kt @@ -196,7 +196,7 @@ class TreatmentsTemporaryBasalsFragment : DaggerFragment(), MenuProvider { var iob = IobTotal(now) val profile = profileFunction.getProfile(now) if (profile != null) iob = tempBasal.iobCalc(now, profile, activePlugin.activeInsulin) - holder.binding.iob.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, iob.basaliob) + holder.binding.iob.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, iob.basaliob) holder.binding.extendedFlag.visibility = (tempBasal.type == TemporaryBasal.Type.FAKE_EXTENDED).toVisibility() holder.binding.suspendFlag.visibility = (tempBasal.type == TemporaryBasal.Type.PUMP_SUSPEND).toVisibility() holder.binding.emulatedSuspendFlag.visibility = (tempBasal.type == TemporaryBasal.Type.EMULATED_PUMP_SUSPEND).toVisibility() diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt index c0eac568c1..bc124586a0 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt @@ -95,7 +95,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { val durationInMinutes = binding.duration.value.toInt() val actions: LinkedList = LinkedList() val insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(Constraint(insulin)).value() - actions.add(rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, insulinAfterConstraint)) + actions.add(rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, insulinAfterConstraint)) actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_mins, durationInMinutes)) if (abs(insulinAfterConstraint - insulin) > 0.01) actions.add(rh.gs(info.nightscout.core.ui.R.string.constraint_applied).formatColor(context, rh, info.nightscout.core.ui.R.attr.warningColor)) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt index 288a9adfed..0bd001a4d9 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt @@ -165,7 +165,7 @@ class ProfileViewerDialog : DaggerDialogFragment() { binding.date.text = date binding.ic.text = it.getIcList(rh, dateUtil) binding.isf.text = it.getIsfList(rh, dateUtil) - binding.basal.text = "∑ " + rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, it.baseBasalSum()) + "\n" + it.getBasalList(rh, dateUtil) + binding.basal.text = "∑ " + rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, it.baseBasalSum()) + "\n" + it.getBasalList(rh, dateUtil) binding.target.text = it.getTargetList(rh, dateUtil) binding.basalGraph.show(it) binding.isfGraph.show(it) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt index f7aec305ff..319db875e9 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt @@ -407,7 +407,7 @@ class WizardDialog : DaggerDialogFragment() { binding.ttCheckbox.isEnabled = tempTarget is ValueWrapper.Existing binding.ttCheckboxIcon.visibility = binding.ttCheckbox.isEnabled.toVisibility() - binding.iobInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, -bolusIob.iob - basalIob.basaliob) + binding.iobInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, -bolusIob.iob - basalIob.basaliob) calculateInsulin() } @@ -482,18 +482,18 @@ class WizardDialog : DaggerDialogFragment() { wizard?.let { wizard -> binding.bg.text = rh.gs(R.string.format_bg_isf, valueToUnitsToString(profileUtil.convertToMgdl(bg, profileFunction.getUnits()), profileFunction.getUnits().asText), wizard.sens) - binding.bgInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.insulinFromBG) + binding.bgInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.insulinFromBG) binding.carbs.text = rh.gs(R.string.format_carbs_ic, carbs.toDouble(), wizard.ic) - binding.carbsInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.insulinFromCarbs) + binding.carbsInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.insulinFromCarbs) - binding.iobInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.insulinFromBolusIOB + wizard.insulinFromBasalIOB) + binding.iobInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.insulinFromBolusIOB + wizard.insulinFromBasalIOB) - binding.correctionInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.insulinFromCorrection) + binding.correctionInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.insulinFromCorrection) // Superbolus binding.sb.text = if (binding.sbCheckbox.isChecked) rh.gs(R.string.two_hours) else "" - binding.sbInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.insulinFromSuperBolus) + binding.sbInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.insulinFromSuperBolus) // Trend if (binding.bgTrendCheckbox.isChecked && wizard.glucoseStatus != null) { @@ -503,19 +503,19 @@ class WizardDialog : DaggerDialogFragment() { } else { binding.bgTrend.text = "" } - binding.bgTrendInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.insulinFromTrend) + binding.bgTrendInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.insulinFromTrend) // COB if (binding.cobCheckbox.isChecked) { binding.cob.text = rh.gs(R.string.format_cob_ic, cob, wizard.ic) - binding.cobInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.insulinFromCOB) + binding.cobInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.insulinFromCOB) } else { binding.cob.text = "" binding.cobInsulin.text = "" } if (wizard.calculatedTotalInsulin > 0.0 || carbsAfterConstraint > 0.0) { - val insulinText = if (wizard.calculatedTotalInsulin > 0.0) rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, wizard.calculatedTotalInsulin).formatColor(context, rh, info.nightscout.core.ui.R.attr.bolusColor) else "" + val insulinText = if (wizard.calculatedTotalInsulin > 0.0) rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.calculatedTotalInsulin).formatColor(context, rh, info.nightscout.core.ui.R.attr.bolusColor) else "" val carbsText = if (carbsAfterConstraint > 0.0) rh.gs(info.nightscout.core.main.R.string.format_carbs, carbsAfterConstraint).formatColor(context, rh, info.nightscout.core.ui.R.attr .carbsColor) else "" binding.total.text = HtmlHelper.fromHtml(rh.gs(R.string.result_insulin_carbs, insulinText, carbsText)) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/WizardInfoDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/WizardInfoDialog.kt index 90cf8bcc14..1a22c0291e 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/WizardInfoDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/WizardInfoDialog.kt @@ -60,31 +60,31 @@ class WizardInfoDialog : DaggerDialogFragment() { val trend = profileUtil.fromMgdlToStringInUnits(data.glucoseTrend * 3) // BG binding.bg.text = rh.gs(R.string.format_bg_isf, bgString, isf) - binding.bgInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.glucoseInsulin) + binding.bgInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.glucoseInsulin) binding.bgCheckbox.isChecked = data.wasGlucoseUsed binding.ttCheckbox.isChecked = data.wasTempTargetUsed // Trend binding.bgTrend.text = trend - binding.bgTrendInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.trendInsulin) + binding.bgTrendInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.trendInsulin) binding.bgTrendCheckbox.isChecked = data.wasTrendUsed // COB binding.cob.text = rh.gs(R.string.format_cob_ic, data.cob, data.ic) - binding.cobInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.cobInsulin) + binding.cobInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.cobInsulin) binding.cobCheckbox.isChecked = data.wasCOBUsed // Bolus IOB - binding.bolusIobInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.bolusIOB) + binding.bolusIobInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.bolusIOB) binding.bolusIobCheckbox.isChecked = data.wasBolusIOBUsed // Basal IOB - binding.basalIobInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.basalIOB) + binding.basalIobInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.basalIOB) binding.basalIobCheckbox.isChecked = data.wasBasalIOBUsed // Superbolus - binding.sbInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.superbolusInsulin) + binding.sbInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.superbolusInsulin) binding.sbCheckbox.isChecked = data.wasSuperbolusUsed // Carbs binding.carbs.text = rh.gs(R.string.format_carbs_ic, data.carbs, data.ic) - binding.carbsInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.carbsInsulin) + binding.carbsInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.carbsInsulin) // Correction - binding.correctionInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.otherCorrection) + binding.correctionInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.otherCorrection) // Profile binding.profile.text = data.profileName // Notes @@ -92,7 +92,7 @@ class WizardInfoDialog : DaggerDialogFragment() { // Percentage binding.percentUsed.text = rh.gs(info.nightscout.core.ui.R.string.format_percent, data.percentageCorrection) // Total - binding.totalInsulin.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, data.totalInsulin) + binding.totalInsulin.text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, data.totalInsulin) } override fun onStart() { From fb8b1a56c74a41d85e31c60218782a93275129d2 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 07:51:56 +0200 Subject: [PATCH 17/65] fix tests --- .../nightscout/automation/actions/ActionsTestBase.kt | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt index f88729ed43..1e5ede19a8 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt @@ -9,7 +9,6 @@ import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop -import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger @@ -62,16 +61,7 @@ ActionsTestBase : TestBaseWithProfile() { override fun goToZeroTemp(durationInMinutes: Int, profile: Profile, reason: OfflineEvent.Reason) {} override fun suspendLoop(durationInMinutes: Int) {} override fun disableCarbSuggestions(durationMinutes: Int) {} - override fun buildDeviceStatus( - dateUtil: DateUtil, - loop: Loop, - iobCobCalculatorPlugin: IobCobCalculator, - profileFunction: ProfileFunction, - pump: Pump, - receiverStatusStore: ReceiverStatusStore, - runningConfiguration: info.nightscout.sdk.interfaces.RunningConfiguration, - version: String - ): DeviceStatus? = null + override fun buildAndStoreDeviceStatus() {} override fun setPluginEnabled(type: PluginType, newState: Boolean) {} } From 005b7686af0a9bed2ce8f96aef830d68dbc9766c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:24:02 +0000 Subject: [PATCH 18/65] chore(deps): bump com.google.firebase:firebase-bom from 32.2.3 to 32.3.1 Bumps com.google.firebase:firebase-bom from 32.2.3 to 32.3.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- core/utils/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/utils/build.gradle b/core/utils/build.gradle index c3e792a20c..510fda7ba3 100644 --- a/core/utils/build.gradle +++ b/core/utils/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation project(':app-wear-shared:shared') //Firebase - api platform('com.google.firebase:firebase-bom:32.2.3') + api platform('com.google.firebase:firebase-bom:32.3.1') api "com.google.firebase:firebase-analytics-ktx" api "com.google.firebase:firebase-crashlytics-ktx" // StatsActivity not in use now From 91d19b51dc4d363473842cbb91747cbd946fdc69 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 10:29:12 +0200 Subject: [PATCH 19/65] New Crowdin updates (#2789) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Catalan) * New translations strings.xml (Slovak) * New translations strings.xml (Hebrew) * New translations strings.xml (Czech) * New translations strings.xml (Dutch) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations objectives.xml (Russian) * New translations arrays.xml (Russian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Portuguese) * New translations strings.xml (Turkish) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Croatian) * New translations strings.xml (Spanish) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Russian) * New translations objectives.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations protection.xml (Danish) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Croatian) * Update source file strings.xml * Update source file strings.xml * New translations strings.xml (Czech) * Update source file strings.xml * Update source file strings.xml * Update source file strings.xml * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Croatian) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Ukrainian) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (Greek) * New translations strings.xml (Turkish) * New translations strings.xml (Greek) * New translations strings.xml (Turkish) * New translations objectives.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Greek) * New translations strings.xml (Turkish) * New translations strings.xml (Danish) * New translations strings.xml (Turkish) --- .../src/main/res/values-cs-rCZ/strings.xml | 2 + .../src/main/res/values-el-rGR/strings.xml | 2 + .../src/main/res/values-es-rES/strings.xml | 2 + .../src/main/res/values-nl-rNL/strings.xml | 2 + .../src/main/res/values-no-rNO/strings.xml | 2 + .../src/main/res/values-ru-rRU/strings.xml | 46 +++++++++++++++++++ .../src/main/res/values-sk-rSK/strings.xml | 2 + .../src/main/res/values-tr-rTR/strings.xml | 2 + app/src/main/res/values-ru-rRU/strings.xml | 1 + .../src/main/res/values-af-rZA/strings.xml | 5 -- .../src/main/res/values-bg-rBG/strings.xml | 5 -- .../src/main/res/values-ca-rES/strings.xml | 5 -- .../src/main/res/values-cs-rCZ/strings.xml | 5 -- .../src/main/res/values-da-rDK/strings.xml | 5 -- .../src/main/res/values-de-rDE/strings.xml | 5 -- .../src/main/res/values-el-rGR/strings.xml | 5 -- .../src/main/res/values-es-rES/strings.xml | 5 -- .../src/main/res/values-fr-rFR/strings.xml | 5 -- .../src/main/res/values-hr-rHR/strings.xml | 4 -- .../src/main/res/values-hu-rHU/strings.xml | 4 -- .../src/main/res/values-it-rIT/strings.xml | 5 -- .../src/main/res/values-iw-rIL/strings.xml | 5 -- .../src/main/res/values-ko-rKR/strings.xml | 5 -- .../src/main/res/values-lt-rLT/strings.xml | 5 -- .../src/main/res/values-nl-rNL/strings.xml | 5 -- .../src/main/res/values-no-rNO/strings.xml | 5 -- .../src/main/res/values-pl-rPL/strings.xml | 5 -- .../src/main/res/values-pt-rBR/strings.xml | 5 -- .../src/main/res/values-pt-rPT/strings.xml | 5 -- .../src/main/res/values-ro-rRO/strings.xml | 6 --- .../src/main/res/values-ru-rRU/strings.xml | 5 -- .../src/main/res/values-sk-rSK/strings.xml | 5 -- .../src/main/res/values-sr-rCS/strings.xml | 2 - .../src/main/res/values-sv-rSE/strings.xml | 5 -- .../src/main/res/values-tr-rTR/strings.xml | 5 -- .../src/main/res/values-uk-rUA/strings.xml | 2 - .../src/main/res/values-zh-rCN/strings.xml | 5 -- .../src/main/res/values-ca-rES/strings.xml | 4 +- .../src/main/res/values-de-rDE/strings.xml | 4 +- .../src/main/res/values-fr-rFR/strings.xml | 4 +- .../src/main/res/values-hr-rHR/strings.xml | 4 +- .../src/main/res/values-it-rIT/strings.xml | 4 +- .../src/main/res/values-ko-rKR/strings.xml | 4 +- .../src/main/res/values-pt-rBR/strings.xml | 4 +- .../src/main/res/values-pt-rPT/strings.xml | 4 +- .../src/main/res/values-ro-rRO/strings.xml | 4 +- .../ui/src/main/res/values-af-rZA/strings.xml | 3 ++ .../ui/src/main/res/values-bg-rBG/strings.xml | 3 ++ .../ui/src/main/res/values-ca-rES/strings.xml | 3 ++ .../ui/src/main/res/values-cs-rCZ/strings.xml | 19 ++++++++ .../src/main/res/values-da-rDK/protection.xml | 22 ++++++++- .../ui/src/main/res/values-da-rDK/strings.xml | 19 ++++++++ .../ui/src/main/res/values-de-rDE/strings.xml | 3 ++ .../ui/src/main/res/values-el-rGR/strings.xml | 19 ++++++++ .../ui/src/main/res/values-es-rES/strings.xml | 3 ++ .../ui/src/main/res/values-fr-rFR/strings.xml | 3 ++ .../ui/src/main/res/values-hr-rHR/strings.xml | 3 ++ .../ui/src/main/res/values-hu-rHU/strings.xml | 3 ++ .../ui/src/main/res/values-it-rIT/strings.xml | 3 ++ .../ui/src/main/res/values-iw-rIL/strings.xml | 4 +- .../ui/src/main/res/values-ko-rKR/strings.xml | 3 ++ .../ui/src/main/res/values-lt-rLT/strings.xml | 3 ++ .../ui/src/main/res/values-nl-rNL/strings.xml | 3 ++ .../ui/src/main/res/values-no-rNO/strings.xml | 3 ++ .../ui/src/main/res/values-pl-rPL/strings.xml | 3 ++ .../ui/src/main/res/values-pt-rBR/strings.xml | 3 ++ .../ui/src/main/res/values-pt-rPT/strings.xml | 3 ++ .../ui/src/main/res/values-ro-rRO/strings.xml | 3 ++ .../ui/src/main/res/values-ru-rRU/strings.xml | 3 ++ .../ui/src/main/res/values-sk-rSK/strings.xml | 3 ++ .../ui/src/main/res/values-sr-rCS/strings.xml | 3 ++ .../ui/src/main/res/values-sv-rSE/strings.xml | 3 ++ .../ui/src/main/res/values-tr-rTR/strings.xml | 19 ++++++++ .../ui/src/main/res/values-uk-rUA/strings.xml | 3 ++ .../ui/src/main/res/values-zh-rCN/strings.xml | 3 ++ .../src/main/res/values-da-rDK/strings.xml | 1 + .../src/main/res/values-ca-rES/strings.xml | 2 +- .../src/main/res/values-da-rDK/strings.xml | 5 ++ .../src/main/res/values-sk-rSK/strings.xml | 1 + .../src/main/res/values-af-rZA/strings.xml | 8 ---- .../src/main/res/values-bg-rBG/strings.xml | 15 ------ .../src/main/res/values-ca-rES/strings.xml | 15 ------ .../src/main/res/values-cs-rCZ/strings.xml | 15 ------ .../src/main/res/values-da-rDK/strings.xml | 15 ------ .../src/main/res/values-de-rDE/strings.xml | 15 ------ .../src/main/res/values-el-rGR/strings.xml | 15 ------ .../src/main/res/values-es-rES/strings.xml | 15 ------ .../src/main/res/values-fr-rFR/strings.xml | 15 ------ .../src/main/res/values-hr-rHR/strings.xml | 8 ---- .../src/main/res/values-hu-rHU/strings.xml | 8 ---- .../src/main/res/values-it-rIT/strings.xml | 15 ------ .../src/main/res/values-iw-rIL/strings.xml | 15 ------ .../src/main/res/values-ko-rKR/strings.xml | 15 ------ .../src/main/res/values-lt-rLT/strings.xml | 15 ------ .../src/main/res/values-nl-rNL/strings.xml | 15 ------ .../src/main/res/values-no-rNO/strings.xml | 15 ------ .../src/main/res/values-pl-rPL/strings.xml | 15 ------ .../src/main/res/values-pt-rBR/strings.xml | 15 ------ .../src/main/res/values-pt-rPT/strings.xml | 15 ------ .../src/main/res/values-ro-rRO/strings.xml | 15 ------ .../src/main/res/values-ru-rRU/strings.xml | 15 ------ .../src/main/res/values-sk-rSK/strings.xml | 15 ------ .../src/main/res/values-sr-rCS/strings.xml | 1 - .../src/main/res/values-sv-rSE/strings.xml | 15 ------ .../src/main/res/values-tr-rTR/strings.xml | 15 ------ .../src/main/res/values-uk-rUA/strings.xml | 1 - .../src/main/res/values-zh-rCN/strings.xml | 15 ------ .../src/main/res/values-da-rDK/objectives.xml | 7 +++ .../src/main/res/values-ru-rRU/objectives.xml | 4 +- .../src/main/res/values-ru-rRU/strings.xml | 1 + .../src/main/res/values-da-rDK/strings.xml | 10 +++- .../src/main/res/values-ru-rRU/strings.xml | 3 ++ .../src/main/res/values-da-rDK/strings.xml | 46 +++++++++++++++++++ .../src/main/res/values-no-rNO/strings.xml | 1 + .../src/main/res/values-ru-rRU/arrays.xml | 13 +++++- .../src/main/res/values-ru-rRU/strings.xml | 13 ++++++ .../src/main/res/values-da-rDK/strings.xml | 3 ++ .../src/main/res/values-da-rDK/strings.xml | 13 ++++++ .../src/main/res/values-da-rDK/strings.xml | 1 + .../src/main/res/values-af-rZA/strings.xml | 1 + .../src/main/res/values-bg-rBG/strings.xml | 1 + .../src/main/res/values-ca-rES/strings.xml | 1 + .../src/main/res/values-cs-rCZ/strings.xml | 2 + .../src/main/res/values-da-rDK/strings.xml | 1 + .../src/main/res/values-de-rDE/strings.xml | 1 + .../src/main/res/values-el-rGR/strings.xml | 2 + .../src/main/res/values-es-rES/strings.xml | 1 + .../src/main/res/values-fr-rFR/strings.xml | 1 + .../src/main/res/values-hr-rHR/strings.xml | 1 + .../src/main/res/values-hu-rHU/strings.xml | 1 + .../src/main/res/values-it-rIT/strings.xml | 1 + .../src/main/res/values-iw-rIL/strings.xml | 1 + .../src/main/res/values-ko-rKR/strings.xml | 1 + .../src/main/res/values-lt-rLT/strings.xml | 1 + .../src/main/res/values-nl-rNL/strings.xml | 1 + .../src/main/res/values-no-rNO/strings.xml | 1 + .../src/main/res/values-pl-rPL/strings.xml | 1 + .../src/main/res/values-pt-rBR/strings.xml | 1 + .../src/main/res/values-pt-rPT/strings.xml | 1 + .../src/main/res/values-ro-rRO/strings.xml | 1 + .../src/main/res/values-ru-rRU/strings.xml | 1 + .../src/main/res/values-sk-rSK/strings.xml | 1 + .../src/main/res/values-sr-rCS/strings.xml | 1 + .../src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values-tr-rTR/strings.xml | 2 + .../src/main/res/values-uk-rUA/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 1 + ui/src/main/res/values-da-rDK/strings.xml | 1 + ui/src/main/res/values-ru-rRU/strings.xml | 2 +- wear/src/main/res/values-da-rDK/strings.xml | 24 ++++++++++ wear/src/main/res/values-ru-rRU/strings.xml | 9 ++++ wear/src/main/res/values-sk-rSK/strings.xml | 5 ++ 152 files changed, 430 insertions(+), 538 deletions(-) diff --git a/app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml b/app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml index 3ecf78da2a..487005d290 100644 --- a/app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml @@ -55,6 +55,7 @@ Zobrazit BGI Zobrazit trendovou šipku Zobrazit aktualizováno před + Zobrazit číslo týdne Výchozí ciferník. Můžete kliknout na tlačítko EXPORTOVAT CIFERNÍK pro vygenerování šablony Výchozí ciferník Tapeta @@ -81,6 +82,7 @@ AM nebo PM Jméno dne v týdnu Den (DD) + Číslo týdne (ww) Název měsíce (krátký) Stav smyčky a čas Trendová šipka diff --git a/app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml b/app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml index c9d67ec322..e8c20ac480 100644 --- a/app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml @@ -55,6 +55,7 @@ Εμφάνιση BGI Εμφάνιση Βέλους Κατεύθυνσης Εμφάνιση Πριν + Εμφάνιση αριθμού Εβδομάδας Προεπιλεγμένη πρόσοψη ρολογιού, μπορείτε να κάνετε κλικ στο κουμπί ΕΞΑΓΩΓΗ ΠΡΟΣΟΨΗΣ για να δημιουργήσετε ένα πρότυπο Προεπιλεγμένη πρόσοψη ρολογιού Εικόνα φόντου @@ -81,6 +82,7 @@ ΠΜ ή ΜΜ Όνομα της ημέρας της εβδομάδας Ημέρα (DD) + Αριθμός Εβδομάδας (ww) Όνομα μήνα (σύντομο) Κατάσταση κυκλώματος και πριν Βέλος κατεύθυνσης diff --git a/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml b/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml index 8f52bf8ca1..026bf80160 100644 --- a/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml @@ -55,6 +55,7 @@ Mostrar BGI (Índice de glucosa en sangre) Mostrar flecha de dirección Mostrar \"hace\" + Mostrar número de semana Esfera predeterminada, puedes hacer clic en el botón EXPORTAR ESFERA para generar una plantilla Esfera por defecto Imagen de fondo @@ -81,6 +82,7 @@ AM o PM Nombre del día de la semana Día (DD) + Número de semana (ww) Nombre del mes (corto) Estado del bucle y hace Flecha de dirección diff --git a/app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml b/app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml index 3c56825f8e..ecf4281832 100644 --- a/app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml @@ -55,6 +55,7 @@ Toon BGI Toon richtingspijl Toon tijd geleden + Weeknummer weergeven Standaard watchface, u kunt op de EXPORT WATCHFACE knop klikken om een sjabloon te genereren Standaard watchface Achtergrondafbeelding @@ -81,6 +82,7 @@ AM of PM Naam van de dag van de week Dag (DD) + Weeknummer (ww) Maand (kort) Loop status en tijd geleden Richtingspijl diff --git a/app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml b/app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml index 6778a9cc23..a6024c111f 100644 --- a/app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml @@ -55,6 +55,7 @@ Vis BS Vis retningspil Vis tid siden + Vis ukenummer Standard klokkebakgrunn, du kan klikke på EKSPORTER KLOKKEBAKGRUNN for å lage en mal Standard klokkebakgrunn Bakgrunnsbilde @@ -81,6 +82,7 @@ AM eller PM Navn på ukedag Dag (DD) + Ukenummer (ww) Navn på måned (kort) Loop-status og tid siden Retningspil diff --git a/app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml b/app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml index 3bbe6ac5ec..c2a98e4c23 100644 --- a/app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml @@ -34,5 +34,51 @@ разъединение Ожидание разъединения + Создано: %1$s + Автор: %1$s + Название: %1$s + Имя файла: %1$s + Версия плагина: %1$s + Информация: %1$s + Отображать IOB + Отображать IOB подробно + Отображать COB Отображать дельту + Отображать дельту подробно + Отображать усредненную дельту + Отображать заряд телефона + Отображать заряд батареи системы + Отображать базал + Отображать состояние цикла + Отображать ГК + Отображать BGI (ГКИ) + Отображать стрелку тренда + Циферблат по умолчанию, вы можете нажать на EXPORT WATCHFACE чтобы создать шаблон + Циферблат по умолчанию + Фоновое изображение + Графики (ГК, базал, линии прогнозов...) + Метка IOB, или общего IOB для подробного отображения + Общий IOB, или (IOB_болюса|IOB_базы) для подробного отображения + Метка COB + Значение COB + Краткая дельта ГК + Средняя дельта ГК (15 мин) + Заряд телефона (%) + Заряд системы ИПЖ (%) + Базальная скорость + Значение ГКИ + Время (ЧЧ:ММ или ЧЧ:ММ:СС) + Часы (ЧЧ) + Минуты (ММ) + Секунды (СС) + AM или PM + Название дня недели + Число (ДД) + Название месяца (краткое) + Стрелка тренда + Минут с последнего чтения ГК + Значение ГК + Изображение для часовой стрелки (Аналоговые часы) + Изображение для минутной стрелки (Аналоговые часы) + Изображение для секундной стрелки (Аналоговые часы) diff --git a/app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml b/app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml index 4f21d8558e..150cfd10f9 100644 --- a/app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml @@ -55,6 +55,7 @@ Zobraziť BGI Zobraziť trendovú šípku Zobraziť aktualizované pred + Zobraziť číslo týždňa Predvolený ciferník. Môžete kliknúť na tlačítko EXPORTOVAŤ CIFERNÍK pre vygenerovanie šablóny Predvolený ciferník Obrázok pozadia @@ -81,6 +82,7 @@ AM alebo PM Meno dňa v týždni Deň (DD) + Číslo týždňa (ww) Názov mesiaca (krátky) Stav uzavretého okruhu a čas Trendová šípka diff --git a/app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml b/app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml index ae53b7a84c..0b16af5b0d 100644 --- a/app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml @@ -55,6 +55,7 @@ KŞ Etkisi Göster Yön Oku Göster Önce Göster + Hafta sayısını göster Varsayılan saat arayüzü; bir şablon oluşturmak için SAAT ARAYÜZÜNÜ DIŞA AKTAR butonuna tıklayabilirsiniz Varsayılan saat arayüzü Arka plan görüntüsü @@ -81,6 +82,7 @@ AM veya PM Haftanın gününün adı Gün (GG) + Hafta sayısı Ay adı (kısa) Döngü durumu ve öncesi Yön Okları diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index fa31582530..1d99f8a737 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -11,6 +11,7 @@ Сохранить обновить профиль Коррекция + (ОТКЛЮЧЕНИЕ ОПАСНО) Только загрузка в NS Только загрузка в NS (синхронизация отключена). Не влияет на данные мониторинга если не выбран локальный источник, такой как xDrip. Профили, иные чем профиль NS не действуют.\n!!! ПРЕДУПРЕЖДЕНИЕ !!! Отключение этой опции может привести к сбою и передозировке инсулина, если какой-либо из компонентов (AAPS, NS, xDrip) настроен неправильно. Внимательно следите за тем, чтобы данные соответствовали состоянию помпы! Смарт-часы Wear о приложении diff --git a/core/interfaces/src/main/res/values-af-rZA/strings.xml b/core/interfaces/src/main/res/values-af-rZA/strings.xml index c21bf1d666..01a2c661d9 100644 --- a/core/interfaces/src/main/res/values-af-rZA/strings.xml +++ b/core/interfaces/src/main/res/values-af-rZA/strings.xml @@ -1,10 +1,5 @@ - - * Slegs diskrete waardes geen reekse word ondersteun as granulariteit vir basale/bolus in virtuele pomp. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-bg-rBG/strings.xml b/core/interfaces/src/main/res/values-bg-rBG/strings.xml index e6b37c5edb..ef4540b652 100644 --- a/core/interfaces/src/main/res/values-bg-rBG/strings.xml +++ b/core/interfaces/src/main/res/values-bg-rBG/strings.xml @@ -11,11 +11,6 @@ Нов формат Нов формат (незащитен) Непознат формат - - * Само конкретни стойности! Диапазони не се поддържат за базал/болус при виртуална помпа. Драйверът на помпата е променен. - - %1$.1fЕ - %1$.2fЕ diff --git a/core/interfaces/src/main/res/values-ca-rES/strings.xml b/core/interfaces/src/main/res/values-ca-rES/strings.xml index 8c8a9e07b0..3c1acc89ef 100644 --- a/core/interfaces/src/main/res/values-ca-rES/strings.xml +++ b/core/interfaces/src/main/res/values-ca-rES/strings.xml @@ -11,10 +11,5 @@ Format nou d\'encriptació Nou format de debug (no encriptat) Format d\'exportació desconegut - - * Només son acceptats valors discrets, no rangs, com a granularitat pels bolus/basals a la bomba virtual. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-cs-rCZ/strings.xml b/core/interfaces/src/main/res/values-cs-rCZ/strings.xml index f434c3b231..807b0646d9 100644 --- a/core/interfaces/src/main/res/values-cs-rCZ/strings.xml +++ b/core/interfaces/src/main/res/values-cs-rCZ/strings.xml @@ -11,11 +11,6 @@ Nový zašifrovaný formát Nový formát pro ladění (nešifrovaný) Neznámý formát souboru - - * Pouze diskrétní hodnoty a ne rozsahy jsou podporovány pro bazál/bolus ve virtuální pumpě. Změněn ovladač pumpy. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-da-rDK/strings.xml b/core/interfaces/src/main/res/values-da-rDK/strings.xml index 504d10a4dd..39c10df923 100644 --- a/core/interfaces/src/main/res/values-da-rDK/strings.xml +++ b/core/interfaces/src/main/res/values-da-rDK/strings.xml @@ -11,11 +11,6 @@ Nyt krypteret format Nyt debug format (ukrypteret) Ukendt eksportformat - - * Kun konkrete værdier, ingen intervaller, er understøttet som granularitet for basal/bolus i virtuel pumpe. Pumpe driver ændret. - - %1$.1f IE - %1$.2f IE diff --git a/core/interfaces/src/main/res/values-de-rDE/strings.xml b/core/interfaces/src/main/res/values-de-rDE/strings.xml index cd3ddab910..18c4c403e0 100644 --- a/core/interfaces/src/main/res/values-de-rDE/strings.xml +++ b/core/interfaces/src/main/res/values-de-rDE/strings.xml @@ -11,11 +11,6 @@ Neues verschlüsseltes Format Neues Debugformat (unverschlüsselt) Unbekanntes Export-Format - - * Bei der virtuellen Pumpe können nur einzelne Werte und keine Bereiche zur Festlegung der Basal/Bolus-Granularität gewählt werden. Pumpentreiber geändert. - - %1$.1f IE - %1$.2f IE diff --git a/core/interfaces/src/main/res/values-el-rGR/strings.xml b/core/interfaces/src/main/res/values-el-rGR/strings.xml index 662f08c236..4d51273452 100644 --- a/core/interfaces/src/main/res/values-el-rGR/strings.xml +++ b/core/interfaces/src/main/res/values-el-rGR/strings.xml @@ -11,11 +11,6 @@ Νέα κρυπτογραφημένη μορφή Νέα μορφή εντοπισμού σφαλμάτων (μη κρυπτογραφημένη) Άγνωστη μορφή εξαγωγής - - * Υποστηρίζονται μόνο διακριτές τιμές και όχι εύρος τιμών για βασικό/bolus στην εικονική αντλία. Ο οδηγός της αντλίας άλλαξε. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-es-rES/strings.xml b/core/interfaces/src/main/res/values-es-rES/strings.xml index d2a91d7f90..063a6c9005 100644 --- a/core/interfaces/src/main/res/values-es-rES/strings.xml +++ b/core/interfaces/src/main/res/values-es-rES/strings.xml @@ -11,11 +11,6 @@ Nuevo formato cifrado Nuevo formato de depuración (sin cifrar) Formato de exportación desconocido - - * Sólo se soportan valores discretos, no rangos, como entrada de datos para basal/bolo en la bomba virtual. Controlador de bomba cambiado - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-fr-rFR/strings.xml b/core/interfaces/src/main/res/values-fr-rFR/strings.xml index 9dff965ea7..3338dc695a 100644 --- a/core/interfaces/src/main/res/values-fr-rFR/strings.xml +++ b/core/interfaces/src/main/res/values-fr-rFR/strings.xml @@ -11,11 +11,6 @@ Nouveau format crypté Nouveau format de débug (non crypté) Format d\'export inconnu - - * Uniquement les valeurs unitaires sont acceptées. Les plages pour les basal/bolus ne sont pas supportées par les pompes virtuelles. Pilote pompe changé. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-hr-rHR/strings.xml b/core/interfaces/src/main/res/values-hr-rHR/strings.xml index 7032179468..01a2c661d9 100644 --- a/core/interfaces/src/main/res/values-hr-rHR/strings.xml +++ b/core/interfaces/src/main/res/values-hr-rHR/strings.xml @@ -1,9 +1,5 @@ - - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-hu-rHU/strings.xml b/core/interfaces/src/main/res/values-hu-rHU/strings.xml index 5aaeb878d0..7c21add268 100644 --- a/core/interfaces/src/main/res/values-hu-rHU/strings.xml +++ b/core/interfaces/src/main/res/values-hu-rHU/strings.xml @@ -5,9 +5,5 @@ Létrehozva AAPS verzió Build variant - - - %1$.1f E - %1$.2f E diff --git a/core/interfaces/src/main/res/values-it-rIT/strings.xml b/core/interfaces/src/main/res/values-it-rIT/strings.xml index f4101632c1..592d29f43e 100644 --- a/core/interfaces/src/main/res/values-it-rIT/strings.xml +++ b/core/interfaces/src/main/res/values-it-rIT/strings.xml @@ -11,11 +11,6 @@ Nuovo formato crittografato Nuovo formato di debug (non crittografato) Formato esportazione sconosciuto - - * Sono supportati solo valori discreti, non intervalli di valori, come incrementi per basale/bolo nel micro virtuale. Driver micro cambiato. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-iw-rIL/strings.xml b/core/interfaces/src/main/res/values-iw-rIL/strings.xml index e8a81aa412..fbf0d2a365 100644 --- a/core/interfaces/src/main/res/values-iw-rIL/strings.xml +++ b/core/interfaces/src/main/res/values-iw-rIL/strings.xml @@ -11,11 +11,6 @@ פורמט הצפנה חדש פורמט דיבאג חדש (בלתי מוצפן) פורמט ייצוא לא ידוע - - * רק ערכים בדידים, טווחים אינם נתמכים עבור ערכי בזאלי ובולוס במשאבה וירטואלית. מנהל התקן המשאבה שונה. - - %1$.1f יח\' - %1$.2f יח\' diff --git a/core/interfaces/src/main/res/values-ko-rKR/strings.xml b/core/interfaces/src/main/res/values-ko-rKR/strings.xml index ed4296a02f..8a16fa0155 100644 --- a/core/interfaces/src/main/res/values-ko-rKR/strings.xml +++ b/core/interfaces/src/main/res/values-ko-rKR/strings.xml @@ -11,11 +11,6 @@ 암호화된 새로운 형식 오류가 제거된 새로운 형식 (암호화되지 않음) 알려지지 않은 내보내기 형식 - - * 가상 펌프에서는 Basal/Bolus에 대해 범위로 지정이 될 수 없고, 이산값(discrete values)만 지원 됩니다. 펌프 드라이버가 변경되었습니다. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-lt-rLT/strings.xml b/core/interfaces/src/main/res/values-lt-rLT/strings.xml index 1d12788b51..c806d1c9e2 100644 --- a/core/interfaces/src/main/res/values-lt-rLT/strings.xml +++ b/core/interfaces/src/main/res/values-lt-rLT/strings.xml @@ -11,11 +11,6 @@ Naujas šifruotas formatas Naujas derinimo formatas (nešifruotas) Nežinomas eksporto formatas - - * Virtualioje pompoje palaikomos tik atskiros vertės, o ne diapazonas detalumui užtikrinti. Pompos valdik. pakeistas. - - %1$.1f vv - %1$.2f V diff --git a/core/interfaces/src/main/res/values-nl-rNL/strings.xml b/core/interfaces/src/main/res/values-nl-rNL/strings.xml index 27579b3b66..93f3ace0cc 100644 --- a/core/interfaces/src/main/res/values-nl-rNL/strings.xml +++ b/core/interfaces/src/main/res/values-nl-rNL/strings.xml @@ -11,11 +11,6 @@ Nieuwe versleutelde indeling Nieuwe debug indeling (onversleuteld) Onbekende export indeling - - * Alleen absolute waardes (geen van-tot bereik) worden ondersteund voor basaal / bolus in virtuele pomp. Pomp stuurprogramma gewijzigd. - - %1$.1f E - %1$.2f E diff --git a/core/interfaces/src/main/res/values-no-rNO/strings.xml b/core/interfaces/src/main/res/values-no-rNO/strings.xml index 53276e36c4..3b6346e562 100644 --- a/core/interfaces/src/main/res/values-no-rNO/strings.xml +++ b/core/interfaces/src/main/res/values-no-rNO/strings.xml @@ -11,11 +11,6 @@ Nytt krypteringsformat Nytt feilsøkingsformat (ukryptert) Ukjent eksportformat - - * Bare konkrete verdier støttes som granularitet for basal/bolus i virtuell pumpe, ingen verdiområder. Pumpedriver er endret. - - %1$.1f E - %1$.2f E diff --git a/core/interfaces/src/main/res/values-pl-rPL/strings.xml b/core/interfaces/src/main/res/values-pl-rPL/strings.xml index 27b482784d..40fba81898 100644 --- a/core/interfaces/src/main/res/values-pl-rPL/strings.xml +++ b/core/interfaces/src/main/res/values-pl-rPL/strings.xml @@ -11,11 +11,6 @@ Nowy zaszyfrowany format Nowy format testowy (niezaszyfrowany) Nieznany format eksportu - - *Tylko wartości dyskretne, nie zakresy są wspierane jako dawki bazowe/bolusy w pompie wirtualnej. Zmieniono ster. pompy. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-pt-rBR/strings.xml b/core/interfaces/src/main/res/values-pt-rBR/strings.xml index c4d93ee432..66140eec54 100644 --- a/core/interfaces/src/main/res/values-pt-rBR/strings.xml +++ b/core/interfaces/src/main/res/values-pt-rBR/strings.xml @@ -11,11 +11,6 @@ Novo formato de encriptação Novo formato de depuração (não encriptado) Formato de exportação desconhecido - - * Somente valores discretos nos intervalos são suportados como granularidade para basal/bolus na bomba virtual. Driver da bomba alterado. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-pt-rPT/strings.xml b/core/interfaces/src/main/res/values-pt-rPT/strings.xml index b9be5fe929..d4630959c7 100644 --- a/core/interfaces/src/main/res/values-pt-rPT/strings.xml +++ b/core/interfaces/src/main/res/values-pt-rPT/strings.xml @@ -11,11 +11,6 @@ Novo formato de encriptação Novo formato de depuração (não encriptado) Formato de exportação desconhecido - - * Somente valores discretos nos intervalos são suportados como granularidade para basal/bolus na bomba virtual. Driver da bomba trocado. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-ro-rRO/strings.xml b/core/interfaces/src/main/res/values-ro-rRO/strings.xml index 925b5dd387..3200efb550 100644 --- a/core/interfaces/src/main/res/values-ro-rRO/strings.xml +++ b/core/interfaces/src/main/res/values-ro-rRO/strings.xml @@ -11,12 +11,6 @@ Format nou criptat Format nou pentru debug (necriptat) Format de export necunoscut - - * Pompa virtuală acceptă doar valori specifice ca și incremente, nu și intervale de valori. -* Doar valorile specifice, nu şi intervalele de valori sunt suportate ca şi incremente în pompa virtuală. Driver-ul pompei a fost schimbat. - - %1$.1f U - %1$.2f U diff --git a/core/interfaces/src/main/res/values-ru-rRU/strings.xml b/core/interfaces/src/main/res/values-ru-rRU/strings.xml index 9c551cf408..704af18386 100644 --- a/core/interfaces/src/main/res/values-ru-rRU/strings.xml +++ b/core/interfaces/src/main/res/values-ru-rRU/strings.xml @@ -11,11 +11,6 @@ Новый зашифрованный формат Новый формат отладки (незашифрованный) Неизвестный формат экспорта - - * В виртуальной помпе поддерживаются только дискретные величины для обработки базала/болюса. Драйвер помпы изменен. - - %1$.1f ед - %1$.2f ед diff --git a/core/interfaces/src/main/res/values-sk-rSK/strings.xml b/core/interfaces/src/main/res/values-sk-rSK/strings.xml index eacbe3a0fb..e9ba2149cf 100644 --- a/core/interfaces/src/main/res/values-sk-rSK/strings.xml +++ b/core/interfaces/src/main/res/values-sk-rSK/strings.xml @@ -11,11 +11,6 @@ Nový šifrovaný formát Nový formát pre ladenie (nešifrovaný) Neznámy formát exportu - - * Iba diskrétne hodnoty a nie rozsahy sú podporované pre bazál/bolus vo virtuálnej pumpe. Ovládač pumpy zmenený. - - %1$.1f JI - %1$.2f JI diff --git a/core/interfaces/src/main/res/values-sr-rCS/strings.xml b/core/interfaces/src/main/res/values-sr-rCS/strings.xml index 893025a56d..01a2c661d9 100644 --- a/core/interfaces/src/main/res/values-sr-rCS/strings.xml +++ b/core/interfaces/src/main/res/values-sr-rCS/strings.xml @@ -1,7 +1,5 @@ - - diff --git a/core/interfaces/src/main/res/values-sv-rSE/strings.xml b/core/interfaces/src/main/res/values-sv-rSE/strings.xml index db317436c3..d82ff46d9d 100644 --- a/core/interfaces/src/main/res/values-sv-rSE/strings.xml +++ b/core/interfaces/src/main/res/values-sv-rSE/strings.xml @@ -11,11 +11,6 @@ Nytt krypterat format Nytt debug-format (okrypterat) Okänt exportformat - - * Inga spann stöds som granularitet för basal/bolus i den virtuella pumpen. Endast enkla värden. Pumpdrivr. byttes. - - %1$.1fU - %1$.2fU diff --git a/core/interfaces/src/main/res/values-tr-rTR/strings.xml b/core/interfaces/src/main/res/values-tr-rTR/strings.xml index 68b3062b35..f075013aaf 100644 --- a/core/interfaces/src/main/res/values-tr-rTR/strings.xml +++ b/core/interfaces/src/main/res/values-tr-rTR/strings.xml @@ -11,11 +11,6 @@ Yeni şifrelenmiş format Yeni hata ayıklama formatı (şifrelenmemiş) Bilinmeyen dışa aktarma formatı - - * Sanal pompada bazal/bolus ayrıntı düzeyi için yalnızca ayrık değerler desteklenir. Aralıklar değil. Pompa sürücüsü değişti. - - %1$.1f Ü - %1$.2f Ü diff --git a/core/interfaces/src/main/res/values-uk-rUA/strings.xml b/core/interfaces/src/main/res/values-uk-rUA/strings.xml index 893025a56d..01a2c661d9 100644 --- a/core/interfaces/src/main/res/values-uk-rUA/strings.xml +++ b/core/interfaces/src/main/res/values-uk-rUA/strings.xml @@ -1,7 +1,5 @@ - - diff --git a/core/interfaces/src/main/res/values-zh-rCN/strings.xml b/core/interfaces/src/main/res/values-zh-rCN/strings.xml index 66872d60b5..41936b4a76 100644 --- a/core/interfaces/src/main/res/values-zh-rCN/strings.xml +++ b/core/interfaces/src/main/res/values-zh-rCN/strings.xml @@ -11,11 +11,6 @@ 新的加密格式 新调试格式 (未加密) 未知的导出格式 - - *在虚拟泵中,基础率/大剂量仅支持离散值,不支持范围值。 泵驱动程序已变更 - - %1$.1f U - %1$.2f U diff --git a/core/main/src/main/res/values-ca-rES/strings.xml b/core/main/src/main/res/values-ca-rES/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-ca-rES/strings.xml +++ b/core/main/src/main/res/values-ca-rES/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-de-rDE/strings.xml b/core/main/src/main/res/values-de-rDE/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-de-rDE/strings.xml +++ b/core/main/src/main/res/values-de-rDE/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-fr-rFR/strings.xml b/core/main/src/main/res/values-fr-rFR/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-fr-rFR/strings.xml +++ b/core/main/src/main/res/values-fr-rFR/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-hr-rHR/strings.xml b/core/main/src/main/res/values-hr-rHR/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-hr-rHR/strings.xml +++ b/core/main/src/main/res/values-hr-rHR/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-it-rIT/strings.xml b/core/main/src/main/res/values-it-rIT/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-it-rIT/strings.xml +++ b/core/main/src/main/res/values-it-rIT/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-ko-rKR/strings.xml b/core/main/src/main/res/values-ko-rKR/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-ko-rKR/strings.xml +++ b/core/main/src/main/res/values-ko-rKR/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-pt-rBR/strings.xml b/core/main/src/main/res/values-pt-rBR/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-pt-rBR/strings.xml +++ b/core/main/src/main/res/values-pt-rBR/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-pt-rPT/strings.xml b/core/main/src/main/res/values-pt-rPT/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-pt-rPT/strings.xml +++ b/core/main/src/main/res/values-pt-rPT/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/main/src/main/res/values-ro-rRO/strings.xml b/core/main/src/main/res/values-ro-rRO/strings.xml index ddc4b0eb74..3ea04e700d 100644 --- a/core/main/src/main/res/values-ro-rRO/strings.xml +++ b/core/main/src/main/res/values-ro-rRO/strings.xml @@ -1,4 +1,2 @@ - - %1$d g - + diff --git a/core/ui/src/main/res/values-af-rZA/strings.xml b/core/ui/src/main/res/values-af-rZA/strings.xml index cb0d64803b..78f03d98cf 100644 --- a/core/ui/src/main/res/values-af-rZA/strings.xml +++ b/core/ui/src/main/res/values-af-rZA/strings.xml @@ -270,4 +270,7 @@ %1$d minute + + + diff --git a/core/ui/src/main/res/values-bg-rBG/strings.xml b/core/ui/src/main/res/values-bg-rBG/strings.xml index 3e0c8bdf8c..d231dc2498 100644 --- a/core/ui/src/main/res/values-bg-rBG/strings.xml +++ b/core/ui/src/main/res/values-bg-rBG/strings.xml @@ -580,4 +580,7 @@ Искате ли да изтриете базата данни\nТова ще премахне проследените промени и историята на данните, по-стари от 3 месеца. Искате ли да изтриете базата данни?\nТова ще премахне проследените промени и историята на данните, по-стари от 3 месеца.\nИзвършването му ще ускори драстично пълната синхронизация. Изчистени записи + + + diff --git a/core/ui/src/main/res/values-ca-rES/strings.xml b/core/ui/src/main/res/values-ca-rES/strings.xml index f89939c688..e0c229c4d5 100644 --- a/core/ui/src/main/res/values-ca-rES/strings.xml +++ b/core/ui/src/main/res/values-ca-rES/strings.xml @@ -433,4 +433,7 @@ %1$d minuts + + + diff --git a/core/ui/src/main/res/values-cs-rCZ/strings.xml b/core/ui/src/main/res/values-cs-rCZ/strings.xml index b2e3e43918..c5a899dc7b 100644 --- a/core/ui/src/main/res/values-cs-rCZ/strings.xml +++ b/core/ui/src/main/res/values-cs-rCZ/strings.xml @@ -586,4 +586,23 @@ Chcete vyčistit databázi?\nOdstraní sledované změny a historická data starší než 3 měsíce. Chcete vyčistit databázi?\nOdstraní sledované změny a historická data starší než 3 měsíce.\nVýrazně to urychlí plnou synchronizaci. Vymazané záznamy + + Ne + So + + Čt + St + Út + Po + + Po + Út + St + Čt + + So + Ne + + %1$.1f U + %1$.2f U diff --git a/core/ui/src/main/res/values-da-rDK/protection.xml b/core/ui/src/main/res/values-da-rDK/protection.xml index 3ea04e700d..bd05c6f561 100644 --- a/core/ui/src/main/res/values-da-rDK/protection.xml +++ b/core/ui/src/main/res/values-da-rDK/protection.xml @@ -1,2 +1,22 @@ - + + Godkendelse påkrævet + Placér fingeren på fingeraftrykslæseren for at bekræfte din identitet + Indstillinger beskyttelse + Applikation beskyttelse + Bolus beskyttelse + Indstillinger adgangskode + Indstillinger PIN + Applikation adgangskode + Applikation PIN + Bolus adgangskode + Bolus PIN + Adgangskode og PIN-fastholdelse [s] + Tid før adgangskode eller PIN skal indtastes + Biometrisk + Brugerdefineret adgangskode + Brugerdefineret PIN + Ingen beskyttelse + Usikkert Tilbagefald + For at være effektiv har biometrisk beskyttelse brug for en primær adgangskode i tilfælde af tilbagefald.\n\nAngiv venligst en primær adgangskode! + diff --git a/core/ui/src/main/res/values-da-rDK/strings.xml b/core/ui/src/main/res/values-da-rDK/strings.xml index 069b0e357c..79dfc8db6e 100644 --- a/core/ui/src/main/res/values-da-rDK/strings.xml +++ b/core/ui/src/main/res/values-da-rDK/strings.xml @@ -535,4 +535,23 @@ %1$d minutter + + Søn + Lør + Fre + Tor + Ons + Tir + Man + + M + T + O + T + F + L + S + + %1$.1f IE + %1$.2f IE diff --git a/core/ui/src/main/res/values-de-rDE/strings.xml b/core/ui/src/main/res/values-de-rDE/strings.xml index afff1890e6..be2e1cb1d4 100644 --- a/core/ui/src/main/res/values-de-rDE/strings.xml +++ b/core/ui/src/main/res/values-de-rDE/strings.xml @@ -580,4 +580,7 @@ Möchten Sie die Datenbank bereinigen?\nEs werden gespeicherte Änderungen und historische Daten gelöscht, die älter als 3 Monate sind. Möchten Sie die Datenbank bereinigen?\nEs werden gespeicherte Änderungen und historische Daten gelöscht, die älter als 3 Monate sind.\nDies beschleunigt die vollständige Synchronisierung dramatisch. Gelöschte Einträge + + + diff --git a/core/ui/src/main/res/values-el-rGR/strings.xml b/core/ui/src/main/res/values-el-rGR/strings.xml index ae98d8f0ac..6faccf945a 100644 --- a/core/ui/src/main/res/values-el-rGR/strings.xml +++ b/core/ui/src/main/res/values-el-rGR/strings.xml @@ -580,4 +580,23 @@ Θέλετε να καθαρίσετε τη βάση δεδομένων;\nΑυτή η ενέργεια θα αφαιρέσει την παρακολούθηση των αλλαγών και ιστορικά δεδομένα παλαιότερα από 3 μήνες. Θέλετε να εκκαθαρίσετε τη βάση δεδομένων;\nΑυτή η ενέργεια θα αφαιρέσει την παρακολούθηση των αλλαγών και ιστορικά δεδομένα παλαιότερα από 3 μήνες.\nΚάνοντας αυτό θα επιταχυνθεί δραματικά ο πλήρης συγχρονισμός. Έγινε εκκαθάριση των καταχωρήσεων + + Κυρ + Σαβ + Παρ + Πεμ + Τετ + Τρ + Δευτ + + Δ + Τρ + Τε + Πε + Πα + Σ + Κ + + %1$.1f U + %1$.2f U diff --git a/core/ui/src/main/res/values-es-rES/strings.xml b/core/ui/src/main/res/values-es-rES/strings.xml index 8fe61b985a..b5ec288252 100644 --- a/core/ui/src/main/res/values-es-rES/strings.xml +++ b/core/ui/src/main/res/values-es-rES/strings.xml @@ -580,4 +580,7 @@ ¿Deseas limpiar la base de datos?\nSe eliminarán los cambios registrados y los datos históricos de más de 3 meses ¿Deseas limpiar la base de datos?\nSe eliminarán los cambios registrados y los datos históricos de más de 3 meses.\nAl hacerlo, la sincronización completa se acelerará drásticamente Entradas eliminadas + + + diff --git a/core/ui/src/main/res/values-fr-rFR/strings.xml b/core/ui/src/main/res/values-fr-rFR/strings.xml index f08257a721..723f667f4e 100644 --- a/core/ui/src/main/res/values-fr-rFR/strings.xml +++ b/core/ui/src/main/res/values-fr-rFR/strings.xml @@ -580,4 +580,7 @@ Voulez-vous nettoyer la base de données ?\nCela supprimera les modifications suivies et les données historiques de plus de 3 mois. Voulez-vous nettoyer la base de données ?\nCela supprimera les modifications suivies et les données historiques de plus de 3 mois.\nCela accélérera la synchronisation complète de manière spectaculaire. Entrées effacées + + + diff --git a/core/ui/src/main/res/values-hr-rHR/strings.xml b/core/ui/src/main/res/values-hr-rHR/strings.xml index 4f34c1758b..a8245ea4e2 100644 --- a/core/ui/src/main/res/values-hr-rHR/strings.xml +++ b/core/ui/src/main/res/values-hr-rHR/strings.xml @@ -318,4 +318,7 @@ %1$d dana + + + diff --git a/core/ui/src/main/res/values-hu-rHU/strings.xml b/core/ui/src/main/res/values-hu-rHU/strings.xml index ad4e0444a7..95973ae98c 100644 --- a/core/ui/src/main/res/values-hu-rHU/strings.xml +++ b/core/ui/src/main/res/values-hu-rHU/strings.xml @@ -143,4 +143,7 @@ %1$d óra + + + diff --git a/core/ui/src/main/res/values-it-rIT/strings.xml b/core/ui/src/main/res/values-it-rIT/strings.xml index b9c4ba0a79..357b7aebb5 100644 --- a/core/ui/src/main/res/values-it-rIT/strings.xml +++ b/core/ui/src/main/res/values-it-rIT/strings.xml @@ -580,4 +580,7 @@ Vuoi pulire il database?\nIl processo rimuoverà i cambiamenti tracciati e i dati dello storico più vecchi di 3 mesi. Vuoi pulire il database?\nIl processo rimuoverà i cambiamenti tracciati e i dati dello storico più vecchi di 3 mesi.\nFarlo velocizzerà considerevolmente la sincronizzazione completa. Elementi cancellati + + + diff --git a/core/ui/src/main/res/values-iw-rIL/strings.xml b/core/ui/src/main/res/values-iw-rIL/strings.xml index 58fc9ec50f..7453cb2a1d 100644 --- a/core/ui/src/main/res/values-iw-rIL/strings.xml +++ b/core/ui/src/main/res/values-iw-rIL/strings.xml @@ -372,7 +372,6 @@ »הערך %1$s« %2$.2f מחוץ לתחום הקשיח ערך בזאלי - בולוס %1$.2f יח\' פחמימות %1$d גרם בולוס מושהה %1$.2f יח\' %2$d דק\' טען אירועים @@ -585,4 +584,7 @@ אתם בטוחים שברצונכם לנקות את מסד הנתונים? \nפעולה זו תמחק את הנתונים הישנים מ-3 החודשים האחרונים. האם ברצונכם לנקות את מסד הנתונים?\nשינויים הנמצאים במעקב ונתונים היסטוריים הישנים מ-3 חודשים יימחקו.\nפעולה זו תזרז משמעותית את מהירות הסינכרון המלא. רשומות שנמחקו + + + diff --git a/core/ui/src/main/res/values-ko-rKR/strings.xml b/core/ui/src/main/res/values-ko-rKR/strings.xml index f30a1e4ac3..5e3cd90a8e 100644 --- a/core/ui/src/main/res/values-ko-rKR/strings.xml +++ b/core/ui/src/main/res/values-ko-rKR/strings.xml @@ -577,4 +577,7 @@ 데이터베이스를 정리하시겠습니까?\n3개월 이상 경과한 추적된 변경 내용 및 기록 데이터가 제거됩니다. 데이터베이스를 정리하시겠습니까?\n3개월 이상 경과한 추적된 변경 내용 및 기록 데이터가 제거됩니다.\n이 작업을 수행하면 전체 동기화 속도가 크게 향상됩니다. 입력된 내용 제거됨 + + + diff --git a/core/ui/src/main/res/values-lt-rLT/strings.xml b/core/ui/src/main/res/values-lt-rLT/strings.xml index 2b70740dc9..3fb24b73b7 100644 --- a/core/ui/src/main/res/values-lt-rLT/strings.xml +++ b/core/ui/src/main/res/values-lt-rLT/strings.xml @@ -586,4 +586,7 @@ Ar tikrai norite išvalyti duombazę?\nIstoriniai duomenys ir pakeitimai, senesni nei 3 mėn., bus ištrinti. Ar norite išvalyti duombazę?\nIstoriniai duomenys ir pakeitimai, senesni nei 3 mėn., bus ištrinti.\nSinchronizacija reikšmingai pagreitės. Ištrinti įrašai + + + diff --git a/core/ui/src/main/res/values-nl-rNL/strings.xml b/core/ui/src/main/res/values-nl-rNL/strings.xml index 031720914c..4a7e9ffa8f 100644 --- a/core/ui/src/main/res/values-nl-rNL/strings.xml +++ b/core/ui/src/main/res/values-nl-rNL/strings.xml @@ -580,4 +580,7 @@ Wil je de database opschonen?\nHet zal bijgehouden wijzigingen en historische gegevens ouder dan 3 maanden verwijderen. Wil je de database opschonen?\nHet zal bijgehouden wijzigingen en historische gegevens ouder dan 3 maanden verwijderen.\nDit zal de volledige synchronisatie drastisch versnellen. Invoer gewist + + + diff --git a/core/ui/src/main/res/values-no-rNO/strings.xml b/core/ui/src/main/res/values-no-rNO/strings.xml index 64eeddb83f..62b2a77fe3 100644 --- a/core/ui/src/main/res/values-no-rNO/strings.xml +++ b/core/ui/src/main/res/values-no-rNO/strings.xml @@ -580,4 +580,7 @@ Vil du rydde opp i databasen?\nDet vil fjerne sporede endringer og historiske data eldre enn 3 måneder. Vil du rydde opp i databasen?\nDet vil fjerne sporede endringer og historiske data eldre enn 3 måneder.\nÅ gjøre dette vil øke hastigheten på synkronisering betydelig. Fjernet oppføringer + + + diff --git a/core/ui/src/main/res/values-pl-rPL/strings.xml b/core/ui/src/main/res/values-pl-rPL/strings.xml index 638b4d9897..92c853643d 100644 --- a/core/ui/src/main/res/values-pl-rPL/strings.xml +++ b/core/ui/src/main/res/values-pl-rPL/strings.xml @@ -586,4 +586,7 @@ Czy chcesz wyczyścić bazę danych?\nTa operacja usunie odnotowane zmiany i dane historyczne starsze niż 3 miesiące. Czy chcesz wyczyścić bazę danych?\nTa operacja usunie odnotowane zmiany i dane historyczne starsze niż 3 miesiące.\nWyczyszczenie bazy dramatycznie przyśpieszy pełną synchronizację. Usunięte wpisy + + + diff --git a/core/ui/src/main/res/values-pt-rBR/strings.xml b/core/ui/src/main/res/values-pt-rBR/strings.xml index 969bbf4574..af29782018 100644 --- a/core/ui/src/main/res/values-pt-rBR/strings.xml +++ b/core/ui/src/main/res/values-pt-rBR/strings.xml @@ -580,4 +580,7 @@ Você deseja limpar o banco de dados?\nIrá remover alterações registradas e histórico de dados com mais de 3 meses. Você deseja limpar a base de dados?\nIrá remover alterações rastreadas e dados históricos com mais de 3 meses.\nFazer isso irá acelerar a sincronização completa drasticamente. Entradas apagadas + + + diff --git a/core/ui/src/main/res/values-pt-rPT/strings.xml b/core/ui/src/main/res/values-pt-rPT/strings.xml index d61ab7db23..1d718d284b 100644 --- a/core/ui/src/main/res/values-pt-rPT/strings.xml +++ b/core/ui/src/main/res/values-pt-rPT/strings.xml @@ -489,4 +489,7 @@ %1$d minutos + + + diff --git a/core/ui/src/main/res/values-ro-rRO/strings.xml b/core/ui/src/main/res/values-ro-rRO/strings.xml index 10b5661322..126a78115a 100644 --- a/core/ui/src/main/res/values-ro-rRO/strings.xml +++ b/core/ui/src/main/res/values-ro-rRO/strings.xml @@ -583,4 +583,7 @@ Doriți să curățați baza de date?\nAceasta va elimina schimbările înregistrate și datele istorice mai vechi de 3 luni. Doriți să curățați baza de date?\nAceasta va elimina schimbările înregistrate și datele istorice mai vechi de 3 luni.\nFăcând acest lucru, veți accelera foarte mult sincronizarea completă. Înregistrări șterse + + + diff --git a/core/ui/src/main/res/values-ru-rRU/strings.xml b/core/ui/src/main/res/values-ru-rRU/strings.xml index a88b826b8b..6979c613bb 100644 --- a/core/ui/src/main/res/values-ru-rRU/strings.xml +++ b/core/ui/src/main/res/values-ru-rRU/strings.xml @@ -585,4 +585,7 @@ Вы хотите очистить базу данных?\nЭто удалит отслеживаемые изменения и данные старше 3 месяцев. Вы хотите очистить базу данных?\nЭто удалит отслеживаемые изменения и данные старше 3 месяцев.\nчто позволит значительно ускорить полную синхронизацию. Удалённые записи + + + diff --git a/core/ui/src/main/res/values-sk-rSK/strings.xml b/core/ui/src/main/res/values-sk-rSK/strings.xml index 4758e84c21..01ab41e329 100644 --- a/core/ui/src/main/res/values-sk-rSK/strings.xml +++ b/core/ui/src/main/res/values-sk-rSK/strings.xml @@ -586,4 +586,7 @@ Chcete vyčistiť databázu?\nOdstráni sledované zmeny a historické dáta staršie ako 3 mesiace. Chcete vyčistiť databázu?\nOdstráni sledované zmeny a historické dáta staršie ako 3 mesiace.\nVýrazne to urýchli úplnú synchronizáciu. Vymazané záznamy + + + diff --git a/core/ui/src/main/res/values-sr-rCS/strings.xml b/core/ui/src/main/res/values-sr-rCS/strings.xml index 519f92f617..c87e06216d 100644 --- a/core/ui/src/main/res/values-sr-rCS/strings.xml +++ b/core/ui/src/main/res/values-sr-rCS/strings.xml @@ -70,4 +70,7 @@ + + + diff --git a/core/ui/src/main/res/values-sv-rSE/strings.xml b/core/ui/src/main/res/values-sv-rSE/strings.xml index 89edd20476..3a12b637f7 100644 --- a/core/ui/src/main/res/values-sv-rSE/strings.xml +++ b/core/ui/src/main/res/values-sv-rSE/strings.xml @@ -580,4 +580,7 @@ Vill du rensa databasen?\nDet kommer att ta bort spårade ändringar och historiska data äldre än 3 månader. Vill du rensa databasen?\nDet kommer att ta bort spårade ändringar och historiska data äldre än 3 månader.\nAtt göra det kommer att påskynda full synkronisering dramatiskt. Rensade poster + + + diff --git a/core/ui/src/main/res/values-tr-rTR/strings.xml b/core/ui/src/main/res/values-tr-rTR/strings.xml index 3845f06b36..0a42490957 100644 --- a/core/ui/src/main/res/values-tr-rTR/strings.xml +++ b/core/ui/src/main/res/values-tr-rTR/strings.xml @@ -580,4 +580,23 @@ Veritabanını temizlemek istiyor musunuz?\nİzlenen değişiklikleri ve 3 aydan eski geçmiş verileri kaldıracak. Veritabanını temizlemek istiyor musunuz?\nBu, izlenen değişiklikleri ve 3 aydan daha eski geçmiş verileri kaldıracaktır.\nBunu yapmak, tam senkronizasyonu önemli ölçüde hızlandıracaktır. Temizlenen girdiler + + Pzr + Cts + Cum + Prş + Çrş + Salı + Pts + + P + S + Ç + P + C + C + P + + %1$.1f Ü + %1$.2f Ü diff --git a/core/ui/src/main/res/values-uk-rUA/strings.xml b/core/ui/src/main/res/values-uk-rUA/strings.xml index 9b7d416b40..ab8e4e6e5a 100644 --- a/core/ui/src/main/res/values-uk-rUA/strings.xml +++ b/core/ui/src/main/res/values-uk-rUA/strings.xml @@ -35,4 +35,7 @@ + + + diff --git a/core/ui/src/main/res/values-zh-rCN/strings.xml b/core/ui/src/main/res/values-zh-rCN/strings.xml index 79c7ee59f6..919f7292e1 100644 --- a/core/ui/src/main/res/values-zh-rCN/strings.xml +++ b/core/ui/src/main/res/values-zh-rCN/strings.xml @@ -528,4 +528,7 @@ %1$d 分钟 + + + diff --git a/implementation/src/main/res/values-da-rDK/strings.xml b/implementation/src/main/res/values-da-rDK/strings.xml index c89c775f44..77077ef6e6 100644 --- a/implementation/src/main/res/values-da-rDK/strings.xml +++ b/implementation/src/main/res/values-da-rDK/strings.xml @@ -19,4 +19,5 @@ Detaljerede 14 dage Dags TIR Nat TIR + Kulhydrater diff --git a/plugins/aps/src/main/res/values-ca-rES/strings.xml b/plugins/aps/src/main/res/values-ca-rES/strings.xml index 5cc4800452..c4de53665f 100644 --- a/plugins/aps/src/main/res/values-ca-rES/strings.xml +++ b/plugins/aps/src/main/res/values-ca-rES/strings.xml @@ -63,7 +63,7 @@ Habilitar SMB amb objectius temporals Habilitar SMB quan hi ha un objectiu temporal actiu (menjar aviat, esport) Habilitar SMB amb objectius temporals alts - Habilitar SMB quan un objectiu temporal alt està actiu (esport, > 100mg/dl o 5,5 mmol/l) + Habilitar SMB quan un objectiu temporal alt està actiu (esport, > 100mg/dl o 5,5 mmol/l) Max. minuts de basal als quals limitar SMB Max. minuts d\'UAM SMB Max. minuts de basal als quals limitar SMB per UAM diff --git a/plugins/aps/src/main/res/values-da-rDK/strings.xml b/plugins/aps/src/main/res/values-da-rDK/strings.xml index 1c89d53a81..630feef414 100644 --- a/plugins/aps/src/main/res/values-da-rDK/strings.xml +++ b/plugins/aps/src/main/res/values-da-rDK/strings.xml @@ -98,4 +98,9 @@ Ignorér 30m Basal sat korrekt APS + Midlertidig basal sat af pumpe + SMB indstillet af pumpe + Minimal anmodningsændring [%] + Åben Loop vil kun foreslå ny ændringsanmodning, hvis ændringen er større end denne værdi i %. Standardværdien er 20% + Tilbagefalder til SMB. Ikke nok TDD-data. diff --git a/plugins/aps/src/main/res/values-sk-rSK/strings.xml b/plugins/aps/src/main/res/values-sk-rSK/strings.xml index c2deb103a7..f504160375 100644 --- a/plugins/aps/src/main/res/values-sk-rSK/strings.xml +++ b/plugins/aps/src/main/res/values-sk-rSK/strings.xml @@ -114,4 +114,5 @@ SMB nastavené pumpou Minimálna požiadavka na zmenu [%] Otvorený okruh vytvorí novú žiadosť o zmenu iba v prípade, že zmena je väčšia ako táto hodnota v %. Štandardná hodnota je 20% + Použiť algoritmus SMB. Nedostatok dát o CDD. diff --git a/plugins/automation/src/main/res/values-af-rZA/strings.xml b/plugins/automation/src/main/res/values-af-rZA/strings.xml index d2cba784db..49d7de5e61 100644 --- a/plugins/automation/src/main/res/values-af-rZA/strings.xml +++ b/plugins/automation/src/main/res/values-af-rZA/strings.xml @@ -50,13 +50,6 @@ Tyd reeks Tyd is tussen %1$s en %2$s Tussen - Son - Sat - Vry - Don - Woens - Dins - Maan DEL ADD Kopieer @@ -86,6 +79,5 @@ WYSIG Snellers: Vereistes: - diff --git a/plugins/automation/src/main/res/values-bg-rBG/strings.xml b/plugins/automation/src/main/res/values-bg-rBG/strings.xml index 396e2698b0..9b6eb5651f 100644 --- a/plugins/automation/src/main/res/values-bg-rBG/strings.xml +++ b/plugins/automation/src/main/res/values-bg-rBG/strings.xml @@ -63,13 +63,6 @@ Времеви диапазон Часът е между %1$s и %2$s Между - Нед - Съб - Пет - Чет - Ср - Вт - Пон ИЗТР ДОБ КОП @@ -119,14 +112,6 @@ Стартирай автомаций Добавяне на правило Спри изпълнението - - П - Вт - Ср - Ч - П - С - Н Време за ядене!\Стартирайте болус съветника и направете изчисления отново. Време е за болус!\nВключи болус съветника и направи изчисление отново. diff --git a/plugins/automation/src/main/res/values-ca-rES/strings.xml b/plugins/automation/src/main/res/values-ca-rES/strings.xml index 9bc7028faa..8d548fa218 100644 --- a/plugins/automation/src/main/res/values-ca-rES/strings.xml +++ b/plugins/automation/src/main/res/values-ca-rES/strings.xml @@ -63,13 +63,6 @@ Interval de temps Temps entre %1$s i %2$s Entre - Dg - Ds - Dv - Dj - Dc - Dt - Dl ELIMR AFEGR COPIAR @@ -109,14 +102,6 @@ Esdeveniment d\'automatització Reordenar Acció de l’usuari - - Dl - Dt - Dc - Dj - Dv - Ds - Dg Hora d’aplicar bolus!\nExecuteu l\'assistent de bolus i torneu a fer els càlculs. diff --git a/plugins/automation/src/main/res/values-cs-rCZ/strings.xml b/plugins/automation/src/main/res/values-cs-rCZ/strings.xml index b41821bc35..007963c6a8 100644 --- a/plugins/automation/src/main/res/values-cs-rCZ/strings.xml +++ b/plugins/automation/src/main/res/values-cs-rCZ/strings.xml @@ -63,13 +63,6 @@ Časový rozsah Čas je mezi %1$s a %2$s Mezi - Ne - So - - Čt - St - Út - Po SMAZAT PŘIDAT KOPIE @@ -119,14 +112,6 @@ Spustit automatizace Přidat pravidlo Zastavit zpracovávání - - Po - Út - St - Čt - - So - Ne Čas k jídlu!\nSpusťte Bolusovou kalkulačku a proveďte výpočet znovu. Čas na bolus!\nSpusťte Bolusovou kalkulačku a proveďte výpočet znovu. diff --git a/plugins/automation/src/main/res/values-da-rDK/strings.xml b/plugins/automation/src/main/res/values-da-rDK/strings.xml index 7a52bf40a9..dbcf7bb1f0 100644 --- a/plugins/automation/src/main/res/values-da-rDK/strings.xml +++ b/plugins/automation/src/main/res/values-da-rDK/strings.xml @@ -63,13 +63,6 @@ Tidsinterval Tid er mellem%1$s og %2$s Mellem - Søn - Lør - Fre - Tor - Ons - Tir - Man SLET TILFØJ KOPIER @@ -117,14 +110,6 @@ Kør automatisering Tilføj regel Stop afvikling - - Ma - Ti - On - To - Fr - - Tid til bolus!\nKør Bolus-guiden og lav beregningen igen. diff --git a/plugins/automation/src/main/res/values-de-rDE/strings.xml b/plugins/automation/src/main/res/values-de-rDE/strings.xml index c4fe6b411e..5f3854aaa7 100644 --- a/plugins/automation/src/main/res/values-de-rDE/strings.xml +++ b/plugins/automation/src/main/res/values-de-rDE/strings.xml @@ -63,13 +63,6 @@ Zeitraum Für die Zeit zwischen %1$s und %2$s Zwischen - So - Sa - Fr - Do - Mi - Di - Mo ENTF HINZUFÜGEN KOPIEREN @@ -119,14 +112,6 @@ Automatisierungen ausführen Regel hinzufügen Verarbeitung beenden - - Mo - Di - Mi - Do - Fr - Sa - So Zeit für den nächsten Bolus!\nFühre den Bolus-Assistenten aus, um die Berechnung erneut durchzuführen. Zeit für den nächsten Bolus!\nFühre den Bolus-Assistenten aus, um die Berechnung erneut durchzuführen. diff --git a/plugins/automation/src/main/res/values-el-rGR/strings.xml b/plugins/automation/src/main/res/values-el-rGR/strings.xml index 88d9d33b6f..84bccb4f75 100644 --- a/plugins/automation/src/main/res/values-el-rGR/strings.xml +++ b/plugins/automation/src/main/res/values-el-rGR/strings.xml @@ -63,13 +63,6 @@ Εύρος χρόνου Ο χρόνος είναι μεταξύ %1$s και %2$s Ανάμεσα - Κυρ - Σαβ - Παρ - Πεμ - Τετ - Τρ - Δευτ ΔΙΑΓΡ Προσθ Αντιγραφή @@ -119,14 +112,6 @@ Εκτέλεση αυτοματισμών Προσθήκη κανόνα Διακοπή επεξεργασίας - - Δ - Τρ - Τε - Πε - Πα - Σ - Κ Ώρα για φαγητόt!\nΤρέξτε τον οδηγό Bolus και κάντε υπολογίστε ξανά. Ώρα για bolus!\nΤρέξτε τον οδηγό Bolus και κάντε υπολογισμό ξανά. diff --git a/plugins/automation/src/main/res/values-es-rES/strings.xml b/plugins/automation/src/main/res/values-es-rES/strings.xml index e019368b0a..959662b41c 100644 --- a/plugins/automation/src/main/res/values-es-rES/strings.xml +++ b/plugins/automation/src/main/res/values-es-rES/strings.xml @@ -63,13 +63,6 @@ Intervalo de tiempo El tiempo está entre %1$s y %2$s Entre - Dom - Sáb - Vie - Jue - Mie - Mar - Lun ELIMINAR AÑADIR COPIAR @@ -119,14 +112,6 @@ Ejecutar automatizaciones Añadir regla Parar procesamiento - - M - T - X - T - V - S - D ¡Hora de comer!\nEjecuta el asistente de bolo y calcula de nuevo. ¡Hora de comer!\nEjecutar el asistente de bolo y calcular de nuevo. diff --git a/plugins/automation/src/main/res/values-fr-rFR/strings.xml b/plugins/automation/src/main/res/values-fr-rFR/strings.xml index 79082b6634..15d433a6a1 100644 --- a/plugins/automation/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/automation/src/main/res/values-fr-rFR/strings.xml @@ -63,13 +63,6 @@ Plage horaire L\'heure est comprise entre %1$s et %2$s Entre - Dim - Sam - Ven - Jeu - Mer - Mar - Lun SUPPR AJOUT COPIE @@ -119,14 +112,6 @@ Exécuter les automatisations Ajouter une règle Arrêter le traitement - - L - M - M - J - V - S - D Il est temps de manger !\nExécutez l\'assistant Bolus et refaites le calcul. Il est temps de faire le bolus !\nExécutez l\'Assistant et faites de nouveau le calcul. diff --git a/plugins/automation/src/main/res/values-hr-rHR/strings.xml b/plugins/automation/src/main/res/values-hr-rHR/strings.xml index a9e556cff8..d0d4c22473 100644 --- a/plugins/automation/src/main/res/values-hr-rHR/strings.xml +++ b/plugins/automation/src/main/res/values-hr-rHR/strings.xml @@ -5,14 +5,6 @@ Nikada Aktivnost: Zaustavi obradu - - Po - Ut - Sr - Če - Pe - Su - Ne Vrijeme je za bolus!\nPokrenite čarobnjak za bolus i ponovite izračun. diff --git a/plugins/automation/src/main/res/values-hu-rHU/strings.xml b/plugins/automation/src/main/res/values-hu-rHU/strings.xml index 54989ab1ed..25bec54190 100644 --- a/plugins/automation/src/main/res/values-hu-rHU/strings.xml +++ b/plugins/automation/src/main/res/values-hu-rHU/strings.xml @@ -5,13 +5,6 @@ Riasztás: vagy %1$s %2$s - Vas - Szo - - Csü - Sze - Ke - Átmeneti cél %1$s WiFi SSID %1$s %2$s Autosens %1$s %2$s %% @@ -25,6 +18,5 @@ Feltétel: Feladat neve SZERK - diff --git a/plugins/automation/src/main/res/values-it-rIT/strings.xml b/plugins/automation/src/main/res/values-it-rIT/strings.xml index ac8cdb3e93..5675c0f163 100644 --- a/plugins/automation/src/main/res/values-it-rIT/strings.xml +++ b/plugins/automation/src/main/res/values-it-rIT/strings.xml @@ -63,13 +63,6 @@ Intervallo di tempo L\'intervallo di tempo è compreso tra %1$s e %2$s Tra - Dom - Sab - Ven - Gio - Mer - Mar - Lun CANC AGG COPIA @@ -119,14 +112,6 @@ Esegui automazioni Aggiungi regola Interrompere l\'elaborazione - - L - M - M - G - V - S - D Tempo di mangiare!\nEsegui il calcolatore e fai di nuovi i calcoli. Tempo di fare un bolo!\nEsegui il calcolatore e fai di nuovi i calcoli. diff --git a/plugins/automation/src/main/res/values-iw-rIL/strings.xml b/plugins/automation/src/main/res/values-iw-rIL/strings.xml index 2f4d687bf5..cd8ee6c081 100644 --- a/plugins/automation/src/main/res/values-iw-rIL/strings.xml +++ b/plugins/automation/src/main/res/values-iw-rIL/strings.xml @@ -63,13 +63,6 @@ טווח זמן הזמן בין %1$s ו- %2$s בין - א׳ - ש\' - ו׳ - ה\' - ד\' - ג\' - ב\' מחק הוספה העתקה @@ -119,14 +112,6 @@ הפעל אוטומציות הוספת כלל עצור עיבוד - - ב\' - ג\' - ד\' - ה\' - ו\' - ש\' - א\' זמן לאכול!\nהפעילו את אשף הבולוסים וחשבו בולוס חדש. זמן להזריק בולוס!\nהשתמשו במחשבון וחשבו מחדש. diff --git a/plugins/automation/src/main/res/values-ko-rKR/strings.xml b/plugins/automation/src/main/res/values-ko-rKR/strings.xml index e10387457c..cc3f6101c2 100644 --- a/plugins/automation/src/main/res/values-ko-rKR/strings.xml +++ b/plugins/automation/src/main/res/values-ko-rKR/strings.xml @@ -63,13 +63,6 @@ 시간 범위 시간은 %1$s 와 %2$s사이입니다 사이 - - - - - - - 삭제 추가 복사 @@ -119,14 +112,6 @@ 자동 설정 실행하기 규칙 추가하기 처리 중단하기 - - - - - - - - 식사할 시간입니다! \nBolus 마법사를 켜고 다시 계산하십시오. Bolus 주입할 시간입니다! \nBolus 마법사를 켜고 다시 계산하십시오 diff --git a/plugins/automation/src/main/res/values-lt-rLT/strings.xml b/plugins/automation/src/main/res/values-lt-rLT/strings.xml index 34d7e8793b..01b0035fa5 100644 --- a/plugins/automation/src/main/res/values-lt-rLT/strings.xml +++ b/plugins/automation/src/main/res/values-lt-rLT/strings.xml @@ -63,13 +63,6 @@ Laiko intervalas Laikas yra tarp %1$s ir %2$s Tarp - Sek - Šeš - Pen - Ket - Tre - An - Pir IŠTRINTI PRIDĖTI KOPIJUOTI @@ -119,14 +112,6 @@ Paleisti automatizacijas Pridėti taisyklę Stabdyti apdorojimą - - P - A - T - K - Pn - Š - S Laikas valgyti!\nĮjunkite Boluso patarėją ir atlikite skaičiavimą dar kartą. Laikas bolusui!\nĮjunkite Skaičiuotuvą ir pakartokite skaičiavimus. diff --git a/plugins/automation/src/main/res/values-nl-rNL/strings.xml b/plugins/automation/src/main/res/values-nl-rNL/strings.xml index f908861229..40cecd01ec 100644 --- a/plugins/automation/src/main/res/values-nl-rNL/strings.xml +++ b/plugins/automation/src/main/res/values-nl-rNL/strings.xml @@ -63,13 +63,6 @@ Tijdsinterval Tijd ligt tussen %1$s en %2$s Tussen - Zo - Za - Vr - Do - Woe - Di - Ma DEL TOEV COPY @@ -119,14 +112,6 @@ Automatisering uitvoeren Regel toevoegen Stop met verwerken - - M - T - W - T - F - S - S Tijd om te eten!\nStart de Bolus wizard en doe de berekening opnieuw. Tijd om te bolussen!\nVoer de boluswizard uit en maak de berekening opnieuw. diff --git a/plugins/automation/src/main/res/values-no-rNO/strings.xml b/plugins/automation/src/main/res/values-no-rNO/strings.xml index b5fb9d3085..b3c069256f 100644 --- a/plugins/automation/src/main/res/values-no-rNO/strings.xml +++ b/plugins/automation/src/main/res/values-no-rNO/strings.xml @@ -63,13 +63,6 @@ Tidsintervall Tid er mellom %1$s og %2$s Mellom - Søn - Lør - Fre - Tors - Ons - Tirs - Man SLETT LEGG TIL KOPIER @@ -119,14 +112,6 @@ Kjør automatiseringer Legg til regel Stopp prosessering - - M - T - O - T - F - L - S Nå må du spise!\nBruk bolusveiviser og gjør beregning på nytt. Tid for bolus!\nStart bolusveiviser og gjør beregning på nytt. diff --git a/plugins/automation/src/main/res/values-pl-rPL/strings.xml b/plugins/automation/src/main/res/values-pl-rPL/strings.xml index a69e12e221..ada4fb1f7b 100644 --- a/plugins/automation/src/main/res/values-pl-rPL/strings.xml +++ b/plugins/automation/src/main/res/values-pl-rPL/strings.xml @@ -63,13 +63,6 @@ Zakres czasu Czas mieści się w zakresie od %1$s do %2$s Pomiędzy - Nie - Sob - Pią - Czw - Śr - Wt - Pon USUŃ DODAJ KOPIUJ @@ -119,14 +112,6 @@ Uruchom automatyzację Dodaj regułę Zatrzymaj przetwarzanie - - P - W - Ś - C - P - S - N Czas na posiłek!\nUruchom Kalkulator bolusa aby ponownie wykonać obliczenia. Czas na bolus!\nUruchom Kalkulator bolusa aby ponownie wykonać obliczenia. diff --git a/plugins/automation/src/main/res/values-pt-rBR/strings.xml b/plugins/automation/src/main/res/values-pt-rBR/strings.xml index 46e736794d..b4ec1743c4 100644 --- a/plugins/automation/src/main/res/values-pt-rBR/strings.xml +++ b/plugins/automation/src/main/res/values-pt-rBR/strings.xml @@ -63,13 +63,6 @@ Intervalo de tempo O tempo está entre %1$s e %2$s Entre - Dom - Sáb - Sex - Qui - Qua - Ter - Seg APAGAR ADICIONAR COPIAR @@ -119,14 +112,6 @@ Executar automações Adicionar regra Parar processamento - - 2a - 3a - 4a - 5a - 6a - Sáb - Dom Hora de comer!\nAbra o assistente de bolus e faça o cálculo novamente. Hora do bolus!\nAbra o assistente de bolus e faça o cálculo novamente. diff --git a/plugins/automation/src/main/res/values-pt-rPT/strings.xml b/plugins/automation/src/main/res/values-pt-rPT/strings.xml index 0e6d33bba3..d3b10e5977 100644 --- a/plugins/automation/src/main/res/values-pt-rPT/strings.xml +++ b/plugins/automation/src/main/res/values-pt-rPT/strings.xml @@ -63,13 +63,6 @@ Intervalo de tempo O tempo está entre %1$s e %2$s Entre - Dom - Sáb - Sex - Qui - Qua - Ter - Seg APAGAR ADICIONAR COPIAR @@ -119,14 +112,6 @@ Executar automações Adicionar regra Parar processamento - - S - T - Qa - Qi - Se - Sa - D Hora de comer!\nExecutar assistente de Bólus e fazer cálculo novamente. Hora de fazer o bólus!\nExecute o assistente de bólus e faça o cálculo novamente. diff --git a/plugins/automation/src/main/res/values-ro-rRO/strings.xml b/plugins/automation/src/main/res/values-ro-rRO/strings.xml index b4b8ad01fa..96975060c1 100644 --- a/plugins/automation/src/main/res/values-ro-rRO/strings.xml +++ b/plugins/automation/src/main/res/values-ro-rRO/strings.xml @@ -63,13 +63,6 @@ Interval de timp Timpul este între %1$s și %2$s Între - Dum - Sâm - Vin - Joi - Mie - Mar - Lun ȘTRG ADAU COPI @@ -119,14 +112,6 @@ Rulează automatizările Adaugă regulă Oprire procesare - - L - Ma - Mi - J - V - S - D E timpul pentru a mânca!\nRulează asistentul de bolusare și refă calculele. Timpul sa faci bolus!\nRuleaza Calculatorul de Bolus pentru a face calculele din nou. diff --git a/plugins/automation/src/main/res/values-ru-rRU/strings.xml b/plugins/automation/src/main/res/values-ru-rRU/strings.xml index e0dd020252..e25a39a988 100644 --- a/plugins/automation/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/automation/src/main/res/values-ru-rRU/strings.xml @@ -63,13 +63,6 @@ Диапазон времени Время между %1$s и %2$s Между - Вс - Сб - Пт - Чт - Ср - Вт - Пн Удалить ДОБАВИТЬ КОПИРОВАТЬ @@ -119,14 +112,6 @@ Запустить автоматизацию Добавить правило Остановить обработку - - Пн - Вт - Ср - Чт - Пт - Сб - Вс Пора есть!\n Запустите помощник болюса снова для подсчета. Пора дать болюс!\nЗапустите помощник болюса и повторите расчет. diff --git a/plugins/automation/src/main/res/values-sk-rSK/strings.xml b/plugins/automation/src/main/res/values-sk-rSK/strings.xml index 4b8925ad92..abe62b694a 100644 --- a/plugins/automation/src/main/res/values-sk-rSK/strings.xml +++ b/plugins/automation/src/main/res/values-sk-rSK/strings.xml @@ -63,13 +63,6 @@ Časový rozsah Čas je medzi %1$s a %2$s Medzi - Ned - Sob - Pia - Štv - Str - Uto - Pon VYMAZAŤ PRIDAŤ KOPÍROVAŤ @@ -119,14 +112,6 @@ Spustiť automatizácie Pridať pravidlo Zastaviť spracovanie - - Po - Ut - St - Št - Pi - So - Ne Čas na jedlo!\nSpustite Bolusovú kalkulačku a urobte výpočet znova. Čas na bolus!\nSpustite Bolusovú kalkulačku a urobte výpočet znova. diff --git a/plugins/automation/src/main/res/values-sr-rCS/strings.xml b/plugins/automation/src/main/res/values-sr-rCS/strings.xml index b73b1e1ef6..6bb0687d44 100644 --- a/plugins/automation/src/main/res/values-sr-rCS/strings.xml +++ b/plugins/automation/src/main/res/values-sr-rCS/strings.xml @@ -1,6 +1,5 @@ Delta - diff --git a/plugins/automation/src/main/res/values-sv-rSE/strings.xml b/plugins/automation/src/main/res/values-sv-rSE/strings.xml index 0bf833e300..f4b9e966bd 100644 --- a/plugins/automation/src/main/res/values-sv-rSE/strings.xml +++ b/plugins/automation/src/main/res/values-sv-rSE/strings.xml @@ -63,13 +63,6 @@ Tidsintervall Klockan är mellan %1$s och %2$s Mellan - Sön - Lör - Fre - Tor - Ons - Tis - Mån RADERA LÄGG TILL KOPIERA @@ -119,14 +112,6 @@ Kör automatiseringar Lägg till regel Sluta bearbeta - - M - T - O - T - F - L - S Dags att äta!\nKör bolusguiden igen för ny beräkning. Dags för bolus!\nKör Bolusguiden och gör beräkningar igen. diff --git a/plugins/automation/src/main/res/values-tr-rTR/strings.xml b/plugins/automation/src/main/res/values-tr-rTR/strings.xml index ef200171c2..75e653c975 100644 --- a/plugins/automation/src/main/res/values-tr-rTR/strings.xml +++ b/plugins/automation/src/main/res/values-tr-rTR/strings.xml @@ -63,13 +63,6 @@ Zaman aralığı %1$s ile %2$s arasında Arasında - Pzr - Cts - Cum - Prş - Çrş - Salı - Pzt SİL EKLE KOPYALA @@ -119,14 +112,6 @@ Otomasyonları çalıştır Kural ekle İşlemeyi durdur - - Pzt - Sal - Çar - Per - Cum - Cmt - Paz Yemek zamanı!\nBolus sihirbazını çalıştırın ve hesaplamayı tekrar yapın. Bolus zamanı!\nBolus sihirbazını çalıştırın ve yeniden hesaplama yapın. diff --git a/plugins/automation/src/main/res/values-uk-rUA/strings.xml b/plugins/automation/src/main/res/values-uk-rUA/strings.xml index 121e8d7881..3961c975f2 100644 --- a/plugins/automation/src/main/res/values-uk-rUA/strings.xml +++ b/plugins/automation/src/main/res/values-uk-rUA/strings.xml @@ -1,5 +1,4 @@ - diff --git a/plugins/automation/src/main/res/values-zh-rCN/strings.xml b/plugins/automation/src/main/res/values-zh-rCN/strings.xml index cbc0489707..b73592ce5e 100644 --- a/plugins/automation/src/main/res/values-zh-rCN/strings.xml +++ b/plugins/automation/src/main/res/values-zh-rCN/strings.xml @@ -63,13 +63,6 @@ 时间范围 时间在 %1$s 和 %2$s 之间 在...之间 - 星期日 - 星期六 - 星期五 - 星期四 - 星期三 - 星期二 - 星期一 删除 添加 复制 @@ -116,14 +109,6 @@ 系统自动化 运行自动化 添加规则 - - 周一 - 周二 - 周三 - 周四 - 周五 - 周六 - 周日 输注胰岛素时间到了!\n请运行大剂量向导,然后再次进行计算。 diff --git a/plugins/constraints/src/main/res/values-da-rDK/objectives.xml b/plugins/constraints/src/main/res/values-da-rDK/objectives.xml index b044d92d50..d3e98fddd0 100644 --- a/plugins/constraints/src/main/res/values-da-rDK/objectives.xml +++ b/plugins/constraints/src/main/res/values-da-rDK/objectives.xml @@ -7,17 +7,24 @@ Mål %1$d ikke startet Opsætning af visualisering samt overvågning og analyse af basaler og forhold Kontroller, at BG er tilgængelig i Nightscout, og pumpens insulin data bliver uploadet + Du lavede den grundlæggende opsætning af AAPS-økosystemet. Nightscout er ikke nødvendigt for at køre AAPS, men det er nyttigt til rapportering eller overvågning af andre patienter. Det er ikke nødvendigt at være forbundet til NS hele tiden, hvis du bruger NS kun for dig selv. Du kan konfigurere NS til kun at uploade på hjemme-wifi og spare på batteriet. Starter på et åbent loop Kør i Open Loop mode i et par dage og aktiver manuelt masser af midlertidige basaler. Opsæt og brug midlertidige mål og standard midlertidige mål (f.eks. for aktivitet eller hypo behandling) + Åben loop kan bruges til anbefalinger, hvis du ikke har en kompatibel pumpe, eller du ikke er klar til at bruge lukket loop. Forstå dit åbne loop, herunder dens midlertidige basal anbefalinger Baseret på denne erfaring, beslut hvad max basal skal være og indstil det både på pumpen og i indstillinger + Vær opmærksom på sikkerhedsfunktionerne og juster sikkerhedsparametre, når det er nødvendigt. Begynde at bruge lukket loop med lav glukose suspendering Kør i lukket loop med max IOB = 0 i et par dage uden for mange LGS-begivenheder Tuning af lukket loop, hæv max IOB over 0 og sænk gradvist BG målet Kør i et par dage, og mindst én nat uden lave BG alarmer, før du sætter målet for BG ned Justér om nødvendigt basaler og forhold og aktivér derefter auto-sens 1 uges vellykket looping i dagtimerne med alle måltider tastet ind + Hvis dit Autosens-resultat ikke oscillerer omkring 100%, er din profil sandsynligvis forkert. Aktivering af yderligere funktioner til brug i dagtimerne, såsom SMB + Du skal læse wikien og hæve maxIOB for at få SMB\'er til at fungere fint! En god start er maxIOB=gennemsnitlig måltidsbolus + 3 x max daglig basal + Brug af SMB er dit mål. Oref1-algoritmen var designet til også at hjælpe dig med dine bolusser. Du bør ikke give fuld bolus for din mad, men kun en del af det og lade AAPS give dig resten, hvis det er nødvendigt. På denne måde har du mere plads til at fejlberegne kulhydrater. Vidste du, at du kan indstille en procentdel af boluslommeregnerens resultat for at reducere størrelsen af bolus? + Aktiverer yderligere funktioner til brug i dagtimerne, såsom Dynamisk sensitivitet-plugin Aktiverer automatisering Manuelle handlinger Udført: %1$s diff --git a/plugins/constraints/src/main/res/values-ru-rRU/objectives.xml b/plugins/constraints/src/main/res/values-ru-rRU/objectives.xml index b5e60af15b..e05576b854 100644 --- a/plugins/constraints/src/main/res/values-ru-rRU/objectives.xml +++ b/plugins/constraints/src/main/res/values-ru-rRU/objectives.xml @@ -8,7 +8,7 @@ Настройка интеграции с Nightscout, анализ базала и коэффициентов Убедитесь, что значения ГК и данные об инсулине передаются в Nightscout и соответствуют данным в помпе Вы сделали базовую настройку экосистемы AAPS. Nightscout не нужен для работы AAPS, но может быть полезен для отчетов и мониторинга других пациентов. Необходимости в постоянном подключении к NS нет, если вы используете NS только для себя. Вы можете установить загрузку в NS только через домашний wifi, чтобы сэкономить заряд батареи. - Запуск открытого цикла + Начните с открытого цикла Используйте режим Открытого цикла на протяжении нескольких дней и вручную выставляйте временные цели. Настройте ВЦ по умолчанию (ВЦ для Нагрузки, Гипо, Ожидания приема пищи) и используйте их. Открытый цикл может быть использован для получения рекомендаций по терапии, если у вас нет совместимой помпы или если вы не готовы закрыть цикл. Глубже понимаем работу открытого цикла, включая рекомендации по ВБС @@ -26,6 +26,8 @@ Активация в дневное время дополнительных функций, таких как СМБ Прочтите статью wiki и увеличьте maxIOB, чтобы SMB заработал как положено! Для начала рассчитайте maxIOB = средний болюс на еду + макс. суточная базальная скорость*3 Ваша цель - это использование СМБ. Алгоритм Oref1 предназначен также, чтобы помочь вам с болюсами. Вы не должны подавать полный болюс на еду, а только часть его, предоставив AAPS подать при необходимости остальную часть болюса. Таким образом вы можете иметь большее пространство для ошибки в подсчетах углеводов. Вы знаете, что можно установить проценты для уменьшения размера болюса? + Включение дополнительных функций для использования в дневное время, например - плагина Динамической чувствительности + Плагин Динамической чувствительности (Динамик) основан на идее о том, что суточная доза инсулина и текущий уровень ГК влияют на чувствительность. Динамик может индивидуально подстраивать Фактор чувствительности к инсулину (ISF). Включение автоматизации Прочтите документацию по автоматизации. Настройте свои первые простые правила. Вместо действия позвольте AAPS только выводить уведомления. Если вы уверены, что автоматизация инициируется в нужное время, замените уведомление реальными действиями. (https://wiki.aaps.app/en/latest/Usage/Automation.html) Автоматизация может быть хорошим слугой, но плохим хозяином. Не полагайтесь на нее сверх меры. Не пытайтесь заменить лежащий в основе алгоритм. Проверяйте перед использованием. diff --git a/plugins/constraints/src/main/res/values-ru-rRU/strings.xml b/plugins/constraints/src/main/res/values-ru-rRU/strings.xml index eff4a0b05a..e46c756381 100644 --- a/plugins/constraints/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/constraints/src/main/res/values-ru-rRU/strings.xml @@ -10,6 +10,7 @@ старая версия очень старая версия Истек срок действия приложения + Вы не проверяли наличие новой версии по крайней мере %1$d дней! Через %2$d дней будет включен режим LGS (приостановка на низкой ГК), цикл будет отключён через %3$d дней. Восстановите интернет-соединение! Мы обнаружили, что вы используете недопустимую версию. Цикл отключен! Доступна версия %1$s Версия: %1$s истекает %2$s diff --git a/plugins/smoothing/src/main/res/values-da-rDK/strings.xml b/plugins/smoothing/src/main/res/values-da-rDK/strings.xml index 3ea04e700d..e9d0628a1a 100644 --- a/plugins/smoothing/src/main/res/values-da-rDK/strings.xml +++ b/plugins/smoothing/src/main/res/values-da-rDK/strings.xml @@ -1,2 +1,10 @@ - + + UDJÆVNET + Eksponentiel udjævning + "Anden-ordens eksponentiel udjævning-algoritme" + Gennemsnitlig udjævning + "Gennemsnitlig udjævningsalgoritme, nyeste værdi påvirkes ikke" + Ingen udjævning + "Ingen udjævning udført på glucose data. Benyt denne indstilling, når du allerede har filtreret data f.eks. fra BYODA G6." + diff --git a/pump/combov2/src/main/res/values-ru-rRU/strings.xml b/pump/combov2/src/main/res/values-ru-rRU/strings.xml index d564b3c8cc..1731474032 100644 --- a/pump/combov2/src/main/res/values-ru-rRU/strings.xml +++ b/pump/combov2/src/main/res/values-ru-rRU/strings.xml @@ -47,6 +47,7 @@ Тайм-аут сканирования Combo Сопряжение не состоялось из-за ошибки: %1$s Сопряжение прервано по неизвестной причине + "Недопустимая длина PIN-кода соединения: надо %1$d цифр, указано %2$d" Поиск помпы Установка Bluetooth-соединения (попытка № %1$d) Cинхронизация связи с помпой @@ -125,4 +126,6 @@ Обновление статуса помпы после сообщения об ошибке Назад Невозможно выполнить сопряжение, т. к. драйвер не инициализирован. Обычно это происходит, потому что не были предоставлены необходимые разрешения Bluetooth. Вернитесь назад, предоставьте разрешения Bluetooth, а затем попробуйте еще раз. + Невозможно запустить драйвер - Bluetooth отключен + Драйвер не может запуститься - это устройство не поддерживает Bluetooth diff --git a/pump/eopatch/src/main/res/values-da-rDK/strings.xml b/pump/eopatch/src/main/res/values-da-rDK/strings.xml index 192a43bfbc..a71bac2b26 100644 --- a/pump/eopatch/src/main/res/values-da-rDK/strings.xml +++ b/pump/eopatch/src/main/res/values-da-rDK/strings.xml @@ -6,7 +6,53 @@ Midlertidig basal rate Total afgivet dag + Resterende insulin + Resterende tid Afslut + Kassér + Kassér Patch-Kommunikationsfejl under kassering + For normal deaktivering skal du trykke på \'Forsøg igen\'.\nFor ensidig deaktivering skal du trykke på \'Kassér\'. + For normal deaktivering skal du trykke på \'Forsøg igen\'. + For ensidig deaktivering skal du trykke på \'Kassér\'. + Slukker manuelt for Patchens alarm + Hvis deaktiveret ensidigt under en kommunikationsfejl, vil alarmen fra Patchen muligvis ikke stoppe. + I dette tilfælde kan du stoppe den helt ved at prikke til den manuelle alarmfrigivelsesport på Patchen som vist nedenfor: + 1. Fjern Patchen fra kroppen og træk det selvklæbende plaster af. + 2. Ved hjælp af enden af en papirclips, prik hårdt i hullet ved siden af insulinpåfyldningsporten. + Påfylder Insulin + 1/6 + 1. + Fyld en ny Patch med insulin ved stuetemperatur. Kontrollér injektionssprøjtens vinkel. + 2. + Lyt efter ét bip. + Start parring + 2/6 + Forberéd dig på vedhæftning af Patchen + 3/6 + Fjern den klæbelige tape og tryk derefter på \'Næste\'. + [Caution1] Hvis en nål stikker ud, skal du trykke på \'Kassér\'. + 4/6 + Rens og tør påføringsstedet, og sæt derefter Patchen på huden. + Kontrollér infusionsstedet, og tryk derefter på \'Start sikkerhedskontrol\'. + Start sikkerhedstjek + Sikkerhedstjek… + 5/6 + Det tager omkring 30 sekunder. + [Caution] For sikker brug må du ikke fjerne nåleaktionsgrebet før sikkerhedskontrollen er fuldført! + Indsætter nålen + 6/6 + Drej nåleaktionsgrebet mere end 100 ° for at stikke nålen ind, og drej derefter helt for at fjerne den + Lyt efter 1 bip, og tryk derefter på \'Næste\'. + Lyt efter 1 bip, og tryk derefter på \'Prøv igen\'. + Patch-aktivering fuldført! + \'%1$s\' program er blevet aktiveret. + Advarer dig når Patchen nærmer sig sin udløbstid.\nÆndr påmindelsestiden hvis nødvendigt. + Patch Udløbspåmindelser + Patch-aktiveringspåmindelser + Patch-aktivering er ikke blevet fuldført.\n Fortsæt. + Patch-kommunikationstjek + Kontrollerer Patch-kommunikation… + Placér din mobil tættere på Patchen. dage Genoptag Suspendér diff --git a/pump/medtrum/src/main/res/values-no-rNO/strings.xml b/pump/medtrum/src/main/res/values-no-rNO/strings.xml index 12cf4bd90e..82f40c255a 100644 --- a/pump/medtrum/src/main/res/values-no-rNO/strings.xml +++ b/pump/medtrum/src/main/res/values-no-rNO/strings.xml @@ -3,6 +3,7 @@ Medtrum MT + Pumpeintegrasjon for Medtrum Nano og Medtrum 300U Medtrum pumpeinnstillinger Pumpefeil: %1$s!! Pumpen er pauset diff --git a/pump/medtrum/src/main/res/values-ru-rRU/arrays.xml b/pump/medtrum/src/main/res/values-ru-rRU/arrays.xml index 3ea04e700d..b0d1af77b3 100644 --- a/pump/medtrum/src/main/res/values-ru-rRU/arrays.xml +++ b/pump/medtrum/src/main/res/values-ru-rRU/arrays.xml @@ -1,2 +1,13 @@ - + + + Подсветка, вибрация и звук + Подсветка и вибрация + Подсветка и звук + Подсветка + Вибрация и звук + Вибрация + Звук + Бесшумно + + diff --git a/pump/medtrum/src/main/res/values-ru-rRU/strings.xml b/pump/medtrum/src/main/res/values-ru-rRU/strings.xml index 36c8a820fe..6f1b6286d6 100644 --- a/pump/medtrum/src/main/res/values-ru-rRU/strings.xml +++ b/pump/medtrum/src/main/res/values-ru-rRU/strings.xml @@ -1,7 +1,20 @@ + Medtrum + MT + Настройки Medtrum + Ошибка помпы: %1$s !! + Статус BT + Последнее подключение + Статус помпы + %.2f ед + %.2f V + Тип базала + Базальная скорость + Тип помпы + Версия ПО diff --git a/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml b/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml index 6d66369ff7..a158a61f21 100644 --- a/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml +++ b/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml @@ -104,6 +104,9 @@ Vis knappen \"Suspendér levering\" i Omnipod fanen Automatisk tidszone og sommer/vintertid aktiveret Udløbspåmindelse aktiveret + Påmindelse i timer før udløb (72 timer) + Udløbspåmindelse aktiveret + Advarsel i timer før nedlukning (80 timer) Lav reservoir alarm aktiveret Antal enheder Automatisk lydløse Pod alarmer diff --git a/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml b/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml index f527b7ed0c..df303f986d 100644 --- a/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml +++ b/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml @@ -6,6 +6,7 @@ Pod Historik Beskrivelse + Mængde Kilde Dato Type: @@ -31,11 +32,23 @@ Kommando ikke sendt Kommando ikke modtaget af poden Ukendt tilstand for kommandoen + %1$.2f IE/t, %2$d minutter %1$.2f IE Insulintilførslen suspenderet + Levering i alt: %1$.2f IE Mistede forbindelse til pod En anden bolus er ved at blive afgivet Ikke nok insulin tilbage i pod. Ubekræftet kommando Anmodet af bruger + Profil sat OK + Pausér insulintilførsel er ubekræftet! Genstart venligst manuelt Pod-statussen fra Omnipod-fanen og start tilførsel igen hvis nødvendigt. + Insulintilførsel pauseret + Kunne ikke indstille den nye basalprofil. Levering pauseret + Indstilling af basalprofil mislykkedes måske. Insulintilførsel kan være pauseret! Opdatér venligst Pod-status manuelt fra Omnipod-fanen og genoptag tilførslen hvis nødvendigt. + Bolustilførselsstatus usikker. Opdatér pod-status for at bekræfte eller afvise. + Midlertidig basal-status ikke som forventet! Hvis en midlertidig basal kørte tidligere, er den blevet aflyst. Tjek venligst tilført insulin og pod-historie + Kontrollerer leveringsstatus + Indstilling af midlertidig basal mislykkedes måske. Hvis en midlertidig basal tidligere var kørt, er den blevet annulleret. Opdatér venligst Pod-status manuelt fra Omnipod-fanen. + Annullér midlertidig basal-resultat er usikkert diff --git a/pump/pump-common/src/main/res/values-da-rDK/strings.xml b/pump/pump-common/src/main/res/values-da-rDK/strings.xml index 3956345c51..0f9f34633d 100644 --- a/pump/pump-common/src/main/res/values-da-rDK/strings.xml +++ b/pump/pump-common/src/main/res/values-da-rDK/strings.xml @@ -5,6 +5,7 @@ Operationen er ikke understøttet af pumpen ENDNU. OK Pumpe Serienummer + %1$.2f IE / %2$.2f IE leveret Ikke initialiseret Initialiseret diff --git a/pump/virtual/src/main/res/values-af-rZA/strings.xml b/pump/virtual/src/main/res/values-af-rZA/strings.xml index accee86fc9..aee8423793 100644 --- a/pump/virtual/src/main/res/values-af-rZA/strings.xml +++ b/pump/virtual/src/main/res/values-af-rZA/strings.xml @@ -3,4 +3,5 @@ Pomp integrasie vir pompe wat nog nie enige drywer het nie (oop lus) Virtuele pomp instellings + diff --git a/pump/virtual/src/main/res/values-bg-rBG/strings.xml b/pump/virtual/src/main/res/values-bg-rBG/strings.xml index bbee324de8..eabc5f5d84 100644 --- a/pump/virtual/src/main/res/values-bg-rBG/strings.xml +++ b/pump/virtual/src/main/res/values-bg-rBG/strings.xml @@ -8,4 +8,5 @@ За помпи, който все още не работят с AndroidAPS(Open Loop) ВИРТУАЛНА ПОМПА Настойки Виртуална Помпа + diff --git a/pump/virtual/src/main/res/values-ca-rES/strings.xml b/pump/virtual/src/main/res/values-ca-rES/strings.xml index 18af45c7b1..b540962cca 100644 --- a/pump/virtual/src/main/res/values-ca-rES/strings.xml +++ b/pump/virtual/src/main/res/values-ca-rES/strings.xml @@ -3,4 +3,5 @@ Integració de bombes d\'insulina per les quals encara no existeix driver/controlador (Llaç obert) Configuració bomba virtual + diff --git a/pump/virtual/src/main/res/values-cs-rCZ/strings.xml b/pump/virtual/src/main/res/values-cs-rCZ/strings.xml index 3619831597..a39bdf80d6 100644 --- a/pump/virtual/src/main/res/values-cs-rCZ/strings.xml +++ b/pump/virtual/src/main/res/values-cs-rCZ/strings.xml @@ -8,4 +8,6 @@ Ovladač pumpy pro uživatele bez podporované pumpy (Otevřená smyčka) VIRTUÁLNÍ PUMPA Nastavení virtuální pumpy + + * Pouze diskrétní hodnoty a ne rozsahy jsou podporovány pro bazál/bolus ve virtuální pumpě. diff --git a/pump/virtual/src/main/res/values-da-rDK/strings.xml b/pump/virtual/src/main/res/values-da-rDK/strings.xml index 6518adaca0..3ba5cdb52a 100644 --- a/pump/virtual/src/main/res/values-da-rDK/strings.xml +++ b/pump/virtual/src/main/res/values-da-rDK/strings.xml @@ -3,4 +3,5 @@ Pumpeintegration til pumper, som endnu ikke har nogen driver (Åbent Loop) Indstillinger for virtuel pumpe + diff --git a/pump/virtual/src/main/res/values-de-rDE/strings.xml b/pump/virtual/src/main/res/values-de-rDE/strings.xml index a34b4e9c76..e6afb946f9 100644 --- a/pump/virtual/src/main/res/values-de-rDE/strings.xml +++ b/pump/virtual/src/main/res/values-de-rDE/strings.xml @@ -8,4 +8,5 @@ Pumpenintegration für Pumpen, die noch nicht über einen Treiber verfügen (Open Loop) VIRTUELLE PUMPE Einstellungen der virtuellen Pumpe + diff --git a/pump/virtual/src/main/res/values-el-rGR/strings.xml b/pump/virtual/src/main/res/values-el-rGR/strings.xml index 76e21e365b..0ba7eea613 100644 --- a/pump/virtual/src/main/res/values-el-rGR/strings.xml +++ b/pump/virtual/src/main/res/values-el-rGR/strings.xml @@ -8,4 +8,6 @@ Ολοκλήρωση αντλίας για αντλίες που δεν έχουν κανέναν οδηγό ακόμα (Ανοιχτό Κύκλωμα) ΕΙΚΟΝΙΚΗ ΑΝΤΛΙΑ Ρυθμίσεις Εικονικής αντλίας + + * Υποστηρίζονται μόνο διακριτές τιμές και όχι εύρος τιμών για βασικό/bolus στην εικονική αντλία. diff --git a/pump/virtual/src/main/res/values-es-rES/strings.xml b/pump/virtual/src/main/res/values-es-rES/strings.xml index 2361488026..5b8efa9269 100644 --- a/pump/virtual/src/main/res/values-es-rES/strings.xml +++ b/pump/virtual/src/main/res/values-es-rES/strings.xml @@ -8,4 +8,5 @@ Integración de bombas de insulina que aún no tienen ningún controlador disponible (bucle abierto) BOMBA VIRTUAL Ajustes de bomba virtual + diff --git a/pump/virtual/src/main/res/values-fr-rFR/strings.xml b/pump/virtual/src/main/res/values-fr-rFR/strings.xml index 0d1d572148..5aea7cdfd9 100644 --- a/pump/virtual/src/main/res/values-fr-rFR/strings.xml +++ b/pump/virtual/src/main/res/values-fr-rFR/strings.xml @@ -8,4 +8,5 @@ Intégration pour les pompes qui n’ont pas encore de pilote (Boucle Ouverte) POMPE VIRTUELLE Paramètres pompe virtuelle + diff --git a/pump/virtual/src/main/res/values-hr-rHR/strings.xml b/pump/virtual/src/main/res/values-hr-rHR/strings.xml index aaefd79c4e..df21fece8b 100644 --- a/pump/virtual/src/main/res/values-hr-rHR/strings.xml +++ b/pump/virtual/src/main/res/values-hr-rHR/strings.xml @@ -6,4 +6,5 @@ VPUMP Integracija pumpe za pumpe koje još nemaju upravljački program (otvorena petlja) Postavke virtualne pumpe + diff --git a/pump/virtual/src/main/res/values-hu-rHU/strings.xml b/pump/virtual/src/main/res/values-hu-rHU/strings.xml index 5f1fadd4ab..d950e08e37 100644 --- a/pump/virtual/src/main/res/values-hu-rHU/strings.xml +++ b/pump/virtual/src/main/res/values-hu-rHU/strings.xml @@ -1,4 +1,5 @@ + diff --git a/pump/virtual/src/main/res/values-it-rIT/strings.xml b/pump/virtual/src/main/res/values-it-rIT/strings.xml index cc2658bd80..8c9ea4e00f 100644 --- a/pump/virtual/src/main/res/values-it-rIT/strings.xml +++ b/pump/virtual/src/main/res/values-it-rIT/strings.xml @@ -8,4 +8,5 @@ Per microinfusori che non hanno ancora alcun driver (Loop aperto) MICRO VIRTUALE Impostazioni micro virtuale + diff --git a/pump/virtual/src/main/res/values-iw-rIL/strings.xml b/pump/virtual/src/main/res/values-iw-rIL/strings.xml index c570af57c5..eed8acfe4e 100644 --- a/pump/virtual/src/main/res/values-iw-rIL/strings.xml +++ b/pump/virtual/src/main/res/values-iw-rIL/strings.xml @@ -8,4 +8,5 @@ שימוש במשאבות אשר עדיין אין להם מנהל התקן כלשהו (לולאה פתוחה) משאבה וירטואלית הגדרות משאבה וירטואלית + diff --git a/pump/virtual/src/main/res/values-ko-rKR/strings.xml b/pump/virtual/src/main/res/values-ko-rKR/strings.xml index 409981d1bb..2ed7db85ab 100644 --- a/pump/virtual/src/main/res/values-ko-rKR/strings.xml +++ b/pump/virtual/src/main/res/values-ko-rKR/strings.xml @@ -8,4 +8,5 @@ 가상용 펌프를 위한 설정(Open Loop) 가상 펌프 가상펌프 설정 + diff --git a/pump/virtual/src/main/res/values-lt-rLT/strings.xml b/pump/virtual/src/main/res/values-lt-rLT/strings.xml index 9a64e1561f..4ccbaf82e1 100644 --- a/pump/virtual/src/main/res/values-lt-rLT/strings.xml +++ b/pump/virtual/src/main/res/values-lt-rLT/strings.xml @@ -8,4 +8,5 @@ Integracija pompoms, kurios dar neturi reikalingo valdiklio (Atviras Ciklas) VIRTUALI POMPA Virtualios pompos nustatymai + diff --git a/pump/virtual/src/main/res/values-nl-rNL/strings.xml b/pump/virtual/src/main/res/values-nl-rNL/strings.xml index e32f844516..14b441280d 100644 --- a/pump/virtual/src/main/res/values-nl-rNL/strings.xml +++ b/pump/virtual/src/main/res/values-nl-rNL/strings.xml @@ -8,4 +8,5 @@ Pomp integratie voor pompen, waar nog geen driver voor is (Open Loop) VIRTUELE POMP Virtuele pomp instellingen + diff --git a/pump/virtual/src/main/res/values-no-rNO/strings.xml b/pump/virtual/src/main/res/values-no-rNO/strings.xml index a4f477f0db..5b349041ed 100644 --- a/pump/virtual/src/main/res/values-no-rNO/strings.xml +++ b/pump/virtual/src/main/res/values-no-rNO/strings.xml @@ -8,4 +8,5 @@ Integrasjon mot pumper som ikke støttes av AndroidAPS (åpen loop) VIRTUELL PUMPE Innstillinger for virtuell pumpe + diff --git a/pump/virtual/src/main/res/values-pl-rPL/strings.xml b/pump/virtual/src/main/res/values-pl-rPL/strings.xml index 4ca913a84d..d656e8a5de 100644 --- a/pump/virtual/src/main/res/values-pl-rPL/strings.xml +++ b/pump/virtual/src/main/res/values-pl-rPL/strings.xml @@ -8,4 +8,5 @@ Integracja z pompami, które nie posiadają jeszcze żadnego sterownika (Open Loop) POMPA WIRTUALNA Ustawienia pompy wirtualnej + diff --git a/pump/virtual/src/main/res/values-pt-rBR/strings.xml b/pump/virtual/src/main/res/values-pt-rBR/strings.xml index b90fe593c0..0839dd984d 100644 --- a/pump/virtual/src/main/res/values-pt-rBR/strings.xml +++ b/pump/virtual/src/main/res/values-pt-rBR/strings.xml @@ -8,4 +8,5 @@ Integração para as bombas que não têm qualquer driver ainda (Open Loop) BOMBA VIRTUAL Definições da bomba virtual + diff --git a/pump/virtual/src/main/res/values-pt-rPT/strings.xml b/pump/virtual/src/main/res/values-pt-rPT/strings.xml index 2cfb3ebf48..80f66c9cbe 100644 --- a/pump/virtual/src/main/res/values-pt-rPT/strings.xml +++ b/pump/virtual/src/main/res/values-pt-rPT/strings.xml @@ -8,4 +8,5 @@ Integração para as bombas que não têm qualquer driver ainda (Open Loop) VIRTUAL PUMP Definições da bomba virtual + diff --git a/pump/virtual/src/main/res/values-ro-rRO/strings.xml b/pump/virtual/src/main/res/values-ro-rRO/strings.xml index ce426b54c8..3730a6c2ee 100644 --- a/pump/virtual/src/main/res/values-ro-rRO/strings.xml +++ b/pump/virtual/src/main/res/values-ro-rRO/strings.xml @@ -3,4 +3,5 @@ Integrare cu pompele ce nu au încă un driver software disponibil (Buclă Deschisă) Setări pompă virtuală + diff --git a/pump/virtual/src/main/res/values-ru-rRU/strings.xml b/pump/virtual/src/main/res/values-ru-rRU/strings.xml index 988e7c4de3..829a5c843b 100644 --- a/pump/virtual/src/main/res/values-ru-rRU/strings.xml +++ b/pump/virtual/src/main/res/values-ru-rRU/strings.xml @@ -8,4 +8,5 @@ Интеграция с помпами, еще не имеющими драйвера (незамкнутый цикл) ВИРТУАЛЬНАЯ ПОМПА настройки вирт помпы + diff --git a/pump/virtual/src/main/res/values-sk-rSK/strings.xml b/pump/virtual/src/main/res/values-sk-rSK/strings.xml index ddef7cf91f..14961415da 100644 --- a/pump/virtual/src/main/res/values-sk-rSK/strings.xml +++ b/pump/virtual/src/main/res/values-sk-rSK/strings.xml @@ -8,4 +8,5 @@ Ovládač pumpy pre užívateľov bez podporovanej pumpy (Otvorený okruh) Virtuálna pumpa Nastavenie virtuálnej pumpy + diff --git a/pump/virtual/src/main/res/values-sr-rCS/strings.xml b/pump/virtual/src/main/res/values-sr-rCS/strings.xml index 247064374a..4b4f7ef244 100644 --- a/pump/virtual/src/main/res/values-sr-rCS/strings.xml +++ b/pump/virtual/src/main/res/values-sr-rCS/strings.xml @@ -2,4 +2,5 @@ Integracija pumpe za pumpe koje još uvek nemaju upravljački program (Open Loop) + diff --git a/pump/virtual/src/main/res/values-sv-rSE/strings.xml b/pump/virtual/src/main/res/values-sv-rSE/strings.xml index 930172d423..64780b50e7 100644 --- a/pump/virtual/src/main/res/values-sv-rSE/strings.xml +++ b/pump/virtual/src/main/res/values-sv-rSE/strings.xml @@ -8,4 +8,5 @@ Integration för pumpar som ännu inte stöds av AndroidAPS (Open loop) VIRTUELL PUMP Inställningar för Virtuell pump + diff --git a/pump/virtual/src/main/res/values-tr-rTR/strings.xml b/pump/virtual/src/main/res/values-tr-rTR/strings.xml index 7fc309b1bb..7d5dec102e 100644 --- a/pump/virtual/src/main/res/values-tr-rTR/strings.xml +++ b/pump/virtual/src/main/res/values-tr-rTR/strings.xml @@ -8,4 +8,6 @@ Henüz herhangi bir sürücüye sahip olmayan pompalar için pompa entegrasyonu (Açık Döngü) SANAL POMPA Sanal pompa ayarları + + * Sanal pompada bazal/bolus ayrıntı düzeyi için yalnızca ayrık değerler desteklenir. Aralıklar değil. diff --git a/pump/virtual/src/main/res/values-uk-rUA/strings.xml b/pump/virtual/src/main/res/values-uk-rUA/strings.xml index 5f1fadd4ab..d950e08e37 100644 --- a/pump/virtual/src/main/res/values-uk-rUA/strings.xml +++ b/pump/virtual/src/main/res/values-uk-rUA/strings.xml @@ -1,4 +1,5 @@ + diff --git a/pump/virtual/src/main/res/values-zh-rCN/strings.xml b/pump/virtual/src/main/res/values-zh-rCN/strings.xml index b3d2f3dbb0..0edd9cbd18 100644 --- a/pump/virtual/src/main/res/values-zh-rCN/strings.xml +++ b/pump/virtual/src/main/res/values-zh-rCN/strings.xml @@ -3,4 +3,5 @@ 与我们还没有其驱动的泵集成(开环) 虚拟泵设置 + diff --git a/ui/src/main/res/values-da-rDK/strings.xml b/ui/src/main/res/values-da-rDK/strings.xml index 023c49bb79..e286b2e613 100644 --- a/ui/src/main/res/values-da-rDK/strings.xml +++ b/ui/src/main/res/values-da-rDK/strings.xml @@ -152,4 +152,5 @@ Midlertidigt mål beregning Beregning i procent Program standard + træk og slip-håndtag diff --git a/ui/src/main/res/values-ru-rRU/strings.xml b/ui/src/main/res/values-ru-rRU/strings.xml index ed7001d123..00cb9201f0 100644 --- a/ui/src/main/res/values-ru-rRU/strings.xml +++ b/ui/src/main/res/values-ru-rRU/strings.xml @@ -2,7 +2,7 @@ применено ограничение болюса применено ограничение углеводов - TT + ВЦ Диалог отменен Включить временную цель TT Нагрузка Включить временную цель TT Ожидаемый прием пищи diff --git a/wear/src/main/res/values-da-rDK/strings.xml b/wear/src/main/res/values-da-rDK/strings.xml index 3ade6adc58..ebd5ce13a8 100644 --- a/wear/src/main/res/values-da-rDK/strings.xml +++ b/wear/src/main/res/values-da-rDK/strings.xml @@ -11,6 +11,7 @@ AAPS(Cockpit) AAPS(Steampunk) AAPS (DigitalStil) + AAPS(Brugerdefineret) AAPS (Handlinger) AAPS(Midl. Mål) AAPS(Hurtig Guide) @@ -22,20 +23,30 @@ AAPS data er %1$s gammel! Tjek din sensor, xDrip+, NS, AAPS config eller lign.! Vibrér ved bolus Enheder for handlinger + IE + Display + Graf + Interface + Øvrige + Komplikation Vis dato Vis IOB + Vis detaljeret IOB Vis COB Vis Delta + Vis detaljeret Delta Show GnsDelta Vis Telefonbatteri Vis Rig Batteri Vis Basal Rate Vis Loop Status Vis BG + Vis BSI Vis Retningspil Vis Siden Mørk Fremhæv Basaler + Vis forudsigelser Matchende skilletegn Graf tidsspænd 1 time @@ -143,6 +154,7 @@ Vis kun tid og BG Vibrér hver time Vis ugenummer + Vis sekunder Din stil: ingen stil minimalistisk stil @@ -176,6 +188,9 @@ --IE --g -.--E/t + IE: ---% + S: -- + -- Minutter siden --- mg/dl Ingen Loop Status 000g @@ -183,4 +198,13 @@ 0,00E AAPS Snooze Alarm Sender snooze til AAPS + t + u + d + t + %1$s:%2$s + %1$s %2$s %3$s + gammel + !gammel! + Puls diff --git a/wear/src/main/res/values-ru-rRU/strings.xml b/wear/src/main/res/values-ru-rRU/strings.xml index f27ada1b69..00028b1cd3 100644 --- a/wear/src/main/res/values-ru-rRU/strings.xml +++ b/wear/src/main/res/values-ru-rRU/strings.xml @@ -23,16 +23,25 @@ Данные AAPS отстают на %1$s! Проверьте сенсор, xDrip+, NS, конфигурацию AAPS, другое! Вибрировать при болюсе Единицы для начала действий + ед + Экран + График + Интерфейс + Другое + Дополнения Показать дату Показать акт инс IOB + Отображать IOB подробно Показать акт угл COB Показывать дельту + Отображать дельту подробно Показывать среднюю дельту Показывать заряд батареи телефона Показывать заряд батареи системы Показать базальную скорость Показывать состояние цикла Показывать ГК + Отображать ГКИ (BGI) Показывать стрелку тренда Показывать ретро события Тёмная diff --git a/wear/src/main/res/values-sk-rSK/strings.xml b/wear/src/main/res/values-sk-rSK/strings.xml index d4bfc99adb..27a7110aad 100644 --- a/wear/src/main/res/values-sk-rSK/strings.xml +++ b/wear/src/main/res/values-sk-rSK/strings.xml @@ -24,6 +24,11 @@ Zavibrovať pri boluse Jednotky (mmol/l alebo mg/dl) J + Displej + Graf + Rozhranie + Ostatné + Komplikácia Zobraziť dátum Zobraziť IOB Zobraziť detailný IOB From 46c2abdc5b77b2ce39f7c817720830d5c79f422c Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 14:23:00 +0200 Subject: [PATCH 20/65] simplify :core:interfaces --- .../interfaces/maintenance/PrefMetadata.kt | 7 +++ .../maintenance/PrefsMetadataKey.kt | 11 ++++ .../interfaces/maintenance/PrefsStatus.kt | 8 +++ .../src/main/res/values/strings.xml | 12 ---- .../utils/DecimalFormatterImpl.kt | 1 - plugins/configuration/build.gradle | 1 + .../maintenance/ImportExportPrefsImpl.kt | 23 ++++---- .../maintenance/PrefFileListProviderImpl.kt | 28 ++++----- .../maintenance/PrefsMetadataKeyImpl.kt | 47 +++------------ .../activities/PrefImportListActivity.kt | 16 ++--- .../dialogs/PrefImportSummaryDialog.kt | 12 ++-- .../formats/EncryptedPrefsFormat.kt | 58 ++++++++++--------- .../interfaces/maintenance/PrefsFormat.kt | 37 ++++++++++++ .../src/main/res/drawable/ic_meta_date.xml | 0 .../main/res/drawable/ic_meta_encryption.xml | 0 .../src/main/res/drawable/ic_meta_error.xml | 0 .../src/main/res/drawable/ic_meta_flavour.xml | 0 .../src/main/res/drawable/ic_meta_format.xml | 0 .../src/main/res/drawable/ic_meta_model.xml | 0 .../src/main/res/drawable/ic_meta_name.xml | 0 .../src/main/res/drawable/ic_meta_ok.xml | 0 .../src/main/res/drawable/ic_meta_version.xml | 0 .../src/main/res/drawable/ic_meta_warning.xml | 0 .../src/main/res/values/strings.xml | 12 ++++ .../fragments/TreatmentsUserEntryFragment.kt | 2 +- 25 files changed, 154 insertions(+), 121 deletions(-) create mode 100644 core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefMetadata.kt create mode 100644 core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsMetadataKey.kt create mode 100644 core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsStatus.kt rename core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt => plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefsMetadataKeyImpl.kt (52%) create mode 100644 plugins/configuration/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_date.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_encryption.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_error.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_flavour.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_format.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_model.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_name.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_ok.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_version.xml (100%) rename {core/interfaces => plugins/configuration}/src/main/res/drawable/ic_meta_warning.xml (100%) diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefMetadata.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefMetadata.kt new file mode 100644 index 0000000000..a8953b2fe6 --- /dev/null +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefMetadata.kt @@ -0,0 +1,7 @@ +package info.nightscout.interfaces.maintenance + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class PrefMetadata(var value: String, var status: PrefsStatus, var info: String? = null) : Parcelable diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsMetadataKey.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsMetadataKey.kt new file mode 100644 index 0000000000..80c81ec0fb --- /dev/null +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsMetadataKey.kt @@ -0,0 +1,11 @@ +package info.nightscout.interfaces.maintenance + +import android.content.Context + +interface PrefsMetadataKey { + + val key: String + val icon: Int + val label: Int + fun formatForDisplay(context: Context, value: String): String +} \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsStatus.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsStatus.kt new file mode 100644 index 0000000000..e3df9f692e --- /dev/null +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsStatus.kt @@ -0,0 +1,8 @@ +package info.nightscout.interfaces.maintenance + +import android.os.Parcelable + +interface PrefsStatus : Parcelable { + + val icon: Int +} \ No newline at end of file diff --git a/core/interfaces/src/main/res/values/strings.xml b/core/interfaces/src/main/res/values/strings.xml index bc7e2675d6..983f5ad355 100644 --- a/core/interfaces/src/main/res/values/strings.xml +++ b/core/interfaces/src/main/res/values/strings.xml @@ -1,17 +1,5 @@ - - File format - Created at - AAPS Version - Build Variant - Exporting device patient name - Exporting device model - File encryption - New encrypted format - New debug format (unencrypted) - Unknown export format - Pump driver changed. diff --git a/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt b/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt index f627734e9a..dde9b43d80 100644 --- a/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/utils/DecimalFormatterImpl.kt @@ -1,6 +1,5 @@ package info.nightscout.implementation.utils -import info.nightscout.interfaces.R import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.shared.interfaces.ResourceHelper import java.text.DecimalFormat diff --git a/plugins/configuration/build.gradle b/plugins/configuration/build.gradle index 8b66f55e8e..e407d97d9e 100644 --- a/plugins/configuration/build.gradle +++ b/plugins/configuration/build.gradle @@ -3,6 +3,7 @@ plugins { id 'kotlin-android' id 'kotlin-kapt' id 'kotlin-allopen' + id 'kotlin-parcelize' } apply from: "${project.rootDir}/core/main/android_dependencies.gradle" diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/ImportExportPrefsImpl.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/ImportExportPrefsImpl.kt index e3aae49ae9..0a765eab2a 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/ImportExportPrefsImpl.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/ImportExportPrefsImpl.kt @@ -44,7 +44,7 @@ import info.nightscout.interfaces.maintenance.Prefs import info.nightscout.interfaces.maintenance.PrefsFile import info.nightscout.interfaces.maintenance.PrefsFormat import info.nightscout.interfaces.maintenance.PrefsMetadataKey -import info.nightscout.interfaces.maintenance.PrefsStatus +import info.nightscout.interfaces.maintenance.PrefsStatusImpl import info.nightscout.interfaces.protection.PasswordCheck import info.nightscout.interfaces.storage.Storage import info.nightscout.interfaces.ui.UiInteraction @@ -114,12 +114,12 @@ class ImportExportPrefsImpl @Inject constructor( val metadata: MutableMap = mutableMapOf() - metadata[PrefsMetadataKey.DEVICE_NAME] = PrefMetadata(detectUserName(context), PrefsStatus.OK) - metadata[PrefsMetadataKey.CREATED_AT] = PrefMetadata(dateUtil.toISOString(dateUtil.now()), PrefsStatus.OK) - metadata[PrefsMetadataKey.AAPS_VERSION] = PrefMetadata(config.VERSION_NAME, PrefsStatus.OK) - metadata[PrefsMetadataKey.AAPS_FLAVOUR] = PrefMetadata(config.FLAVOR, PrefsStatus.OK) - metadata[PrefsMetadataKey.DEVICE_MODEL] = PrefMetadata(config.currentDeviceModelString, PrefsStatus.OK) - metadata[PrefsMetadataKey.ENCRYPTION] = PrefMetadata("Enabled", PrefsStatus.OK) + metadata[PrefsMetadataKeyImpl.DEVICE_NAME] = PrefMetadata(detectUserName(context), PrefsStatusImpl.OK) + metadata[PrefsMetadataKeyImpl.CREATED_AT] = PrefMetadata(dateUtil.toISOString(dateUtil.now()), PrefsStatusImpl.OK) + metadata[PrefsMetadataKeyImpl.AAPS_VERSION] = PrefMetadata(config.VERSION_NAME, PrefsStatusImpl.OK) + metadata[PrefsMetadataKeyImpl.AAPS_FLAVOUR] = PrefMetadata(config.FLAVOR, PrefsStatusImpl.OK) + metadata[PrefsMetadataKeyImpl.DEVICE_MODEL] = PrefMetadata(config.currentDeviceModelString, PrefsStatusImpl.OK) + metadata[PrefsMetadataKeyImpl.ENCRYPTION] = PrefMetadata("Enabled", PrefsStatusImpl.OK) return metadata } @@ -133,7 +133,7 @@ class ImportExportPrefsImpl @Inject constructor( if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S || ActivityCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) { (context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager?)?.adapter?.name } else null - } catch (e: Exception){ + } catch (e: Exception) { null } val n4 = Settings.System.getString(context.contentResolver, "device_name") @@ -219,7 +219,7 @@ class ImportExportPrefsImpl @Inject constructor( ) { // current master password was not the one used for decryption, so we prompt for old password... - if (!importOk && (prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status == PrefsStatus.ERROR)) { + if (!importOk && (prefs.metadata[PrefsMetadataKeyImpl.ENCRYPTION]?.status == PrefsStatusImpl.ERROR)) { askForEncryptionPass( activity, R.string.preferences_import_canceled, R.string.old_master_password, R.string.different_password_used, R.string.master_password_will_be_replaced @@ -303,6 +303,7 @@ class ImportExportPrefsImpl @Inject constructor( override fun importCustomWatchface(fragment: Fragment) { fragment.activity?.let { importCustomWatchface(it) } } + override fun importCustomWatchface(activity: FragmentActivity) { try { if (activity is DaggerAppCompatActivityWithResult) @@ -317,7 +318,7 @@ class ImportExportPrefsImpl @Inject constructor( override fun exportCustomWatchface(customWatchface: CwfData, withDate: Boolean) { prefFileList.ensureExportDirExists() - val newFile = prefFileList.newCwfFile(customWatchface.metadata[CwfMetadataKey.CWF_FILENAME] ?:"", withDate) + val newFile = prefFileList.newCwfFile(customWatchface.metadata[CwfMetadataKey.CWF_FILENAME] ?: "", withDate) ZipWatchfaceFormat.saveCustomWatchface(newFile, customWatchface) } @@ -374,7 +375,7 @@ class ImportExportPrefsImpl @Inject constructor( var importOk = true for ((_, value) in prefs.metadata) { - if (value.status == PrefsStatus.ERROR) + if (value.status == PrefsStatusImpl.ERROR) importOk = false } return importOk diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefFileListProviderImpl.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefFileListProviderImpl.kt index ebef240c4b..cde245a724 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefFileListProviderImpl.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefFileListProviderImpl.kt @@ -14,7 +14,7 @@ import info.nightscout.interfaces.maintenance.PrefMetadataMap import info.nightscout.interfaces.maintenance.PrefsFile import info.nightscout.interfaces.maintenance.PrefsImportDir import info.nightscout.interfaces.maintenance.PrefsMetadataKey -import info.nightscout.interfaces.maintenance.PrefsStatus +import info.nightscout.interfaces.maintenance.PrefsStatusImpl import info.nightscout.interfaces.storage.Storage import info.nightscout.interfaces.versionChecker.VersionCheckerUtils import info.nightscout.rx.bus.RxBus @@ -89,8 +89,8 @@ class PrefFileListProviderImpl @Inject constructor( // we sort only if we have metadata to be used for that if (loadMetadata) { prefFiles.sortWith( - compareByDescending { it.metadata[PrefsMetadataKey.AAPS_FLAVOUR]?.status } - .thenByDescending { it.metadata[PrefsMetadataKey.CREATED_AT]?.value } + compareByDescending { it.metadata[PrefsMetadataKeyImpl.AAPS_FLAVOUR]?.status as PrefsStatusImpl } + .thenByDescending { it.metadata[PrefsMetadataKeyImpl.CREATED_AT]?.value } ) } @@ -169,29 +169,29 @@ class PrefFileListProviderImpl @Inject constructor( override fun newCwfFile(filename: String, withDate: Boolean): File { val timeLocal = LocalDateTime.now().toString(DateTimeFormat.forPattern("yyyy-MM-dd'_'HHmmss")) - return if (withDate) File(exportsPath, "${filename}_$timeLocal${ZipWatchfaceFormat.CWF_EXTENTION}") else File(exportsPath,"${filename}${ZipWatchfaceFormat.CWF_EXTENTION}") + return if (withDate) File(exportsPath, "${filename}_$timeLocal${ZipWatchfaceFormat.CWF_EXTENTION}") else File(exportsPath, "${filename}${ZipWatchfaceFormat.CWF_EXTENTION}") } // check metadata for known issues, change their status and add info with explanations override fun checkMetadata(metadata: Map): Map { val meta = metadata.toMutableMap() - meta[PrefsMetadataKey.AAPS_FLAVOUR]?.let { flavour -> + meta[PrefsMetadataKeyImpl.AAPS_FLAVOUR]?.let { flavour -> val flavourOfPrefs = flavour.value if (flavour.value != config.get().FLAVOR) { - flavour.status = PrefsStatus.WARN + flavour.status = PrefsStatusImpl.WARN flavour.info = rh.gs(R.string.metadata_warning_different_flavour, flavourOfPrefs, config.get().FLAVOR) } } - meta[PrefsMetadataKey.DEVICE_MODEL]?.let { model -> + meta[PrefsMetadataKeyImpl.DEVICE_MODEL]?.let { model -> if (model.value != config.get().currentDeviceModelString) { - model.status = PrefsStatus.WARN + model.status = PrefsStatusImpl.WARN model.info = rh.gs(R.string.metadata_warning_different_device) } } - meta[PrefsMetadataKey.CREATED_AT]?.let { createdAt -> + meta[PrefsMetadataKeyImpl.CREATED_AT]?.let { createdAt -> try { val date1 = DateTime.parse(createdAt.value) val date2 = DateTime.now() @@ -199,26 +199,26 @@ class PrefFileListProviderImpl @Inject constructor( val daysOld = Days.daysBetween(date1.toLocalDate(), date2.toLocalDate()).days if (daysOld > IMPORT_AGE_NOT_YET_OLD_DAYS) { - createdAt.status = PrefsStatus.WARN + createdAt.status = PrefsStatusImpl.WARN createdAt.info = rh.gs(R.string.metadata_warning_old_export, daysOld.toString()) } } catch (e: Exception) { - createdAt.status = PrefsStatus.WARN + createdAt.status = PrefsStatusImpl.WARN createdAt.info = rh.gs(R.string.metadata_warning_date_format) } } - meta[PrefsMetadataKey.AAPS_VERSION]?.let { version -> + meta[PrefsMetadataKeyImpl.AAPS_VERSION]?.let { version -> val currentAppVer = versionCheckerUtils.versionDigits(config.get().VERSION_NAME) val metadataVer = versionCheckerUtils.versionDigits(version.value) if ((currentAppVer.size >= 2) && (metadataVer.size >= 2) && (abs(currentAppVer[1] - metadataVer[1]) > 1)) { - version.status = PrefsStatus.WARN + version.status = PrefsStatusImpl.WARN version.info = rh.gs(R.string.metadata_warning_different_version) } if ((currentAppVer.isNotEmpty()) && (metadataVer.isNotEmpty()) && (currentAppVer[0] != metadataVer[0])) { - version.status = PrefsStatus.WARN + version.status = PrefsStatusImpl.WARN version.info = rh.gs(R.string.metadata_urgent_different_version) } } diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefsMetadataKeyImpl.kt similarity index 52% rename from core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt rename to plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefsMetadataKeyImpl.kt index 4fbfa1a262..c38853de35 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/PrefsMetadataKeyImpl.kt @@ -1,14 +1,13 @@ -package info.nightscout.interfaces.maintenance +package info.nightscout.configuration.maintenance import android.content.Context -import android.os.Parcelable import androidx.annotation.DrawableRes import androidx.annotation.StringRes -import info.nightscout.interfaces.R -import kotlinx.parcelize.Parcelize -import java.io.File +import info.nightscout.configuration.R +import info.nightscout.interfaces.maintenance.PrefsFormat +import info.nightscout.interfaces.maintenance.PrefsMetadataKey -enum class PrefsMetadataKey(val key: String, @DrawableRes val icon: Int, @StringRes val label: Int) { +enum class PrefsMetadataKeyImpl(override val key: String, @DrawableRes override val icon: Int, @StringRes override val label: Int) : PrefsMetadataKey { FILE_FORMAT("format", R.drawable.ic_meta_format, R.string.metadata_label_format), CREATED_AT("created_at", R.drawable.ic_meta_date, R.string.metadata_label_created_at), @@ -35,48 +34,16 @@ enum class PrefsMetadataKey(val key: String, @DrawableRes val icon: Int, @String } - fun formatForDisplay(context: Context, value: String): String { + override fun formatForDisplay(context: Context, value: String): String { return when (this) { FILE_FORMAT -> when (value) { PrefsFormat.FORMAT_KEY_ENC -> context.getString(R.string.metadata_format_new) PrefsFormat.FORMAT_KEY_NOENC -> context.getString(R.string.metadata_format_debug) else -> context.getString(R.string.metadata_format_other) } + CREATED_AT -> value.replace("T", " ").replace("Z", " (UTC)") else -> value } } - } - -@Parcelize -data class PrefMetadata(var value: String, var status: PrefsStatus, var info: String? = null) : Parcelable - -typealias PrefMetadataMap = Map - -data class Prefs(val values: Map, var metadata: PrefMetadataMap) - -interface PrefsFormat { - companion object { - - const val FORMAT_KEY_ENC = "aaps_encrypted" - const val FORMAT_KEY_NOENC = "aaps_structured" - } - - fun savePreferences(file: File, prefs: Prefs, masterPassword: String? = null) - fun loadPreferences(file: File, masterPassword: String? = null): Prefs - fun loadMetadata(contents: String? = null): PrefMetadataMap - fun isPreferencesFile(file: File, preloadedContents: String? = null): Boolean -} - -enum class PrefsStatus(@DrawableRes val icon: Int) { - OK(R.drawable.ic_meta_ok), - WARN(R.drawable.ic_meta_warning), - ERROR(R.drawable.ic_meta_error), - UNKNOWN(R.drawable.ic_meta_error), - DISABLED(R.drawable.ic_meta_error) -} - -class PrefFileNotFoundError(message: String) : Exception(message) -class PrefIOError(message: String) : Exception(message) -class PrefFormatError(message: String) : Exception(message) diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/PrefImportListActivity.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/PrefImportListActivity.kt index 8af1fd129d..9cfabb3fce 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/PrefImportListActivity.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/PrefImportListActivity.kt @@ -12,11 +12,11 @@ import info.nightscout.configuration.R import info.nightscout.configuration.databinding.MaintenanceImportListActivityBinding import info.nightscout.configuration.databinding.MaintenanceImportListItemBinding import info.nightscout.configuration.maintenance.PrefsFileContract +import info.nightscout.configuration.maintenance.PrefsMetadataKeyImpl import info.nightscout.core.ui.activities.TranslatedDaggerAppCompatActivity import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.maintenance.PrefsFile -import info.nightscout.interfaces.maintenance.PrefsMetadataKey -import info.nightscout.interfaces.maintenance.PrefsStatus +import info.nightscout.interfaces.maintenance.PrefsStatusImpl import info.nightscout.shared.interfaces.ResourceHelper import javax.inject.Inject @@ -82,23 +82,23 @@ class PrefImportListActivity : TranslatedDaggerAppCompatActivity() { metaDateTimeIcon.visibility = View.VISIBLE metaAppVersion.visibility = View.VISIBLE - prefFile.metadata[PrefsMetadataKey.AAPS_FLAVOUR]?.let { + prefFile.metadata[PrefsMetadataKeyImpl.AAPS_FLAVOUR]?.let { metaVariantFormat.text = it.value - val colorAttr = if (it.status == PrefsStatus.OK) info.nightscout.core.ui.R.attr.metadataTextOkColor else info.nightscout.core.ui.R.attr.metadataTextWarningColor + val colorAttr = if (it.status == PrefsStatusImpl.OK) info.nightscout.core.ui.R.attr.metadataTextOkColor else info.nightscout.core.ui.R.attr.metadataTextWarningColor metaVariantFormat.setTextColor(rh.gac(metaVariantFormat.context, colorAttr)) } - prefFile.metadata[PrefsMetadataKey.CREATED_AT]?.let { + prefFile.metadata[PrefsMetadataKeyImpl.CREATED_AT]?.let { metaDateTime.text = prefFileListProvider.formatExportedAgo(it.value) } - prefFile.metadata[PrefsMetadataKey.AAPS_VERSION]?.let { + prefFile.metadata[PrefsMetadataKeyImpl.AAPS_VERSION]?.let { metaAppVersion.text = it.value - val colorAttr = if (it.status == PrefsStatus.OK) info.nightscout.core.ui.R.attr.metadataTextOkColor else info.nightscout.core.ui.R.attr.metadataTextWarningColor + val colorAttr = if (it.status == PrefsStatusImpl.OK) info.nightscout.core.ui.R.attr.metadataTextOkColor else info.nightscout.core.ui.R.attr.metadataTextWarningColor metaAppVersion.setTextColor(rh.gac(metaVariantFormat.context, colorAttr)) } - prefFile.metadata[PrefsMetadataKey.DEVICE_NAME]?.let { + prefFile.metadata[PrefsMetadataKeyImpl.DEVICE_NAME]?.let { metaDeviceName.text = it.value } diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/dialogs/PrefImportSummaryDialog.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/dialogs/PrefImportSummaryDialog.kt index e6e1f5010f..d35161898a 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/dialogs/PrefImportSummaryDialog.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/dialogs/PrefImportSummaryDialog.kt @@ -20,7 +20,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import info.nightscout.configuration.R import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.interfaces.maintenance.Prefs -import info.nightscout.interfaces.maintenance.PrefsStatus +import info.nightscout.interfaces.maintenance.PrefsStatusImpl import info.nightscout.shared.extensions.runOnUiThread import java.util.LinkedList @@ -57,8 +57,8 @@ object PrefImportSummaryDialog { (rowLayout.findViewById(R.id.summary_icon) as ImageView).setImageResource(metaKey.icon) (rowLayout.findViewById(R.id.status_icon) as ImageView).setImageResource(metaEntry.status.icon) - if (metaEntry.status == PrefsStatus.WARN) label.setTextColor(themedCtx.getColor(info.nightscout.interfaces.R.color.metadataTextWarning)) - else if (metaEntry.status == PrefsStatus.ERROR) label.setTextColor(themedCtx.getColor(info.nightscout.interfaces.R.color.metadataTextError)) + if (metaEntry.status == PrefsStatusImpl.WARN) label.setTextColor(themedCtx.getColor(info.nightscout.interfaces.R.color.metadataTextWarning)) + else if (metaEntry.status == PrefsStatusImpl.ERROR) label.setTextColor(themedCtx.getColor(info.nightscout.interfaces.R.color.metadataTextError)) if (metaEntry.info != null) { details.add("${context.getString(metaKey.label)}: ${metaEntry.value}
${metaEntry.info}") @@ -66,9 +66,9 @@ object PrefImportSummaryDialog { rowLayout.setOnClickListener { val msg = "[${context.getString(metaKey.label)}] ${metaEntry.info}" when (metaEntry.status) { - PrefsStatus.WARN -> ToastUtils.Long.warnToast(context, msg) - PrefsStatus.ERROR -> ToastUtils.Long.errorToast(context, msg) - else -> ToastUtils.Long.infoToast(context, msg) + PrefsStatusImpl.WARN -> ToastUtils.Long.warnToast(context, msg) + PrefsStatusImpl.ERROR -> ToastUtils.Long.errorToast(context, msg) + else -> ToastUtils.Long.infoToast(context, msg) } } } else { diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormat.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormat.kt index c1c9d7abab..d11cfa3a39 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormat.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormat.kt @@ -1,6 +1,7 @@ package info.nightscout.configuration.maintenance.formats import info.nightscout.configuration.R +import info.nightscout.configuration.maintenance.PrefsMetadataKeyImpl import info.nightscout.core.utils.CryptoUtil import info.nightscout.core.utils.hexStringToByteArray import info.nightscout.core.utils.toHex @@ -13,6 +14,7 @@ import info.nightscout.interfaces.maintenance.Prefs import info.nightscout.interfaces.maintenance.PrefsFormat import info.nightscout.interfaces.maintenance.PrefsMetadataKey import info.nightscout.interfaces.maintenance.PrefsStatus +import info.nightscout.interfaces.maintenance.PrefsStatusImpl import info.nightscout.interfaces.storage.Storage import info.nightscout.shared.interfaces.ResourceHelper import org.json.JSONException @@ -59,8 +61,8 @@ class EncryptedPrefsFormat @Inject constructor( val content = JSONObject() val meta = JSONObject() - val encStatus = prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status ?: PrefsStatus.OK - var encrypted = encStatus == PrefsStatus.OK && masterPassword != null + val encStatus = prefs.metadata[PrefsMetadataKeyImpl.ENCRYPTION]?.status ?: PrefsStatusImpl.OK + var encrypted = encStatus == PrefsStatusImpl.OK && masterPassword != null try { for ((key, value) in prefs.values.toSortedMap()) { @@ -68,14 +70,14 @@ class EncryptedPrefsFormat @Inject constructor( } for ((metaKey, metaEntry) in prefs.metadata) { - if (metaKey == PrefsMetadataKey.FILE_FORMAT) + if (metaKey == PrefsMetadataKeyImpl.FILE_FORMAT) continue - if (metaKey == PrefsMetadataKey.ENCRYPTION) + if (metaKey == PrefsMetadataKeyImpl.ENCRYPTION) continue meta.put(metaKey.key, metaEntry.value) } - container.put(PrefsMetadataKey.FILE_FORMAT.key, if (encrypted) PrefsFormat.FORMAT_KEY_ENC else PrefsFormat.FORMAT_KEY_NOENC) + container.put(PrefsMetadataKeyImpl.FILE_FORMAT.key, if (encrypted) PrefsFormat.FORMAT_KEY_ENC else PrefsFormat.FORMAT_KEY_NOENC) container.put("metadata", meta) val security = JSONObject() @@ -130,22 +132,22 @@ class EncryptedPrefsFormat @Inject constructor( val container = JSONObject(jsonBody) val metadata: MutableMap = loadMetadata(container) - if (container.has(PrefsMetadataKey.FILE_FORMAT.key) && container.has("security") && container.has("content")) { - val fileFormat = container.getString(PrefsMetadataKey.FILE_FORMAT.key) + if (container.has(PrefsMetadataKeyImpl.FILE_FORMAT.key) && container.has("security") && container.has("content")) { + val fileFormat = container.getString(PrefsMetadataKeyImpl.FILE_FORMAT.key) val security = container.getJSONObject("security") val encrypted = fileFormat == PrefsFormat.FORMAT_KEY_ENC - var secure: PrefsStatus = PrefsStatus.OK + var secure: PrefsStatus = PrefsStatusImpl.OK var decryptedOk = false var contentJsonObj: JSONObject? = null var insecurityReason = rh.gs(R.string.prefdecrypt_settings_tampered) if (security.has("file_hash")) { if (calculatedFileHash != security.getString("file_hash")) { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_modified)) } } else { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_missing_file_hash)) } @@ -164,38 +166,38 @@ class EncryptedPrefsFormat @Inject constructor( contentJsonObj = JSONObject(decrypted) decryptedOk = true } else { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_modified)) } } catch (e: JSONException) { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_parsing)) } } else { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_wrong_pass)) insecurityReason = rh.gs(R.string.prefdecrypt_wrong_password) } } else { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_wrong_format)) } } else { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_wrong_algorithm)) } } else { - if (secure == PrefsStatus.OK) { - secure = PrefsStatus.WARN + if (secure == PrefsStatusImpl.OK) { + secure = PrefsStatusImpl.WARN } if (!(security.has("algorithm") && security.get("algorithm") == "none")) { - secure = PrefsStatus.ERROR + secure = PrefsStatusImpl.ERROR issues.add(rh.gs(R.string.prefdecrypt_issue_wrong_algorithm)) } @@ -211,12 +213,12 @@ class EncryptedPrefsFormat @Inject constructor( val issuesStr: String? = if (issues.size > 0) issues.joinToString("\n") else null val encryptionDescStr = if (encrypted) { - if (secure == PrefsStatus.OK) rh.gs(R.string.prefdecrypt_settings_secure) else insecurityReason + if (secure == PrefsStatusImpl.OK) rh.gs(R.string.prefdecrypt_settings_secure) else insecurityReason } else { - if (secure != PrefsStatus.ERROR) rh.gs(R.string.prefdecrypt_settings_unencrypted) else rh.gs(R.string.prefdecrypt_settings_tampered) + if (secure != PrefsStatusImpl.ERROR) rh.gs(R.string.prefdecrypt_settings_unencrypted) else rh.gs(R.string.prefdecrypt_settings_tampered) } - metadata[PrefsMetadataKey.ENCRYPTION] = PrefMetadata(encryptionDescStr, secure, issuesStr) + metadata[PrefsMetadataKeyImpl.ENCRYPTION] = PrefMetadata(encryptionDescStr, secure, issuesStr) } return Prefs(entries, metadata) @@ -243,22 +245,22 @@ class EncryptedPrefsFormat @Inject constructor( private fun loadMetadata(container: JSONObject): MutableMap { val metadata: MutableMap = mutableMapOf() - if (container.has(PrefsMetadataKey.FILE_FORMAT.key) && container.has("security") && container.has("content") && container.has("metadata")) { - val fileFormat = container.getString(PrefsMetadataKey.FILE_FORMAT.key) + if (container.has(PrefsMetadataKeyImpl.FILE_FORMAT.key) && container.has("security") && container.has("content") && container.has("metadata")) { + val fileFormat = container.getString(PrefsMetadataKeyImpl.FILE_FORMAT.key) if ((fileFormat != PrefsFormat.FORMAT_KEY_ENC) && (fileFormat != PrefsFormat.FORMAT_KEY_NOENC)) { - metadata[PrefsMetadataKey.FILE_FORMAT] = PrefMetadata(rh.gs(info.nightscout.interfaces.R.string.metadata_format_other), PrefsStatus.ERROR) + metadata[PrefsMetadataKeyImpl.FILE_FORMAT] = PrefMetadata(rh.gs(R.string.metadata_format_other), PrefsStatusImpl.ERROR) } else { val meta = container.getJSONObject("metadata") - metadata[PrefsMetadataKey.FILE_FORMAT] = PrefMetadata(fileFormat, PrefsStatus.OK) + metadata[PrefsMetadataKeyImpl.FILE_FORMAT] = PrefMetadata(fileFormat, PrefsStatusImpl.OK) for (key in meta.keys()) { - val metaKey = PrefsMetadataKey.fromKey(key) + val metaKey = PrefsMetadataKeyImpl.fromKey(key) if (metaKey != null) { - metadata[metaKey] = PrefMetadata(meta.getString(key), PrefsStatus.OK) + metadata[metaKey] = PrefMetadata(meta.getString(key), PrefsStatusImpl.OK) } } } } else { - metadata[PrefsMetadataKey.FILE_FORMAT] = PrefMetadata(rh.gs(R.string.prefdecrypt_wrong_json), PrefsStatus.ERROR) + metadata[PrefsMetadataKeyImpl.FILE_FORMAT] = PrefMetadata(rh.gs(R.string.prefdecrypt_wrong_json), PrefsStatusImpl.ERROR) } return metadata diff --git a/plugins/configuration/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt b/plugins/configuration/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt new file mode 100644 index 0000000000..41218068a3 --- /dev/null +++ b/plugins/configuration/src/main/java/info/nightscout/interfaces/maintenance/PrefsFormat.kt @@ -0,0 +1,37 @@ +package info.nightscout.interfaces.maintenance + +import androidx.annotation.DrawableRes +import info.nightscout.configuration.R +import kotlinx.parcelize.Parcelize +import java.io.File + +typealias PrefMetadataMap = Map + +data class Prefs(val values: Map, var metadata: PrefMetadataMap) + +interface PrefsFormat { + companion object { + + const val FORMAT_KEY_ENC = "aaps_encrypted" + const val FORMAT_KEY_NOENC = "aaps_structured" + } + + fun savePreferences(file: File, prefs: Prefs, masterPassword: String? = null) + fun loadPreferences(file: File, masterPassword: String? = null): Prefs + fun loadMetadata(contents: String? = null): PrefMetadataMap + fun isPreferencesFile(file: File, preloadedContents: String? = null): Boolean +} + +@Parcelize +enum class PrefsStatusImpl(@DrawableRes override val icon: Int) : PrefsStatus { + + OK(R.drawable.ic_meta_ok), + WARN(R.drawable.ic_meta_warning), + ERROR(R.drawable.ic_meta_error), + UNKNOWN(R.drawable.ic_meta_error), + DISABLED(R.drawable.ic_meta_error) +} + +class PrefFileNotFoundError(message: String) : Exception(message) +class PrefIOError(message: String) : Exception(message) +class PrefFormatError(message: String) : Exception(message) diff --git a/core/interfaces/src/main/res/drawable/ic_meta_date.xml b/plugins/configuration/src/main/res/drawable/ic_meta_date.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_date.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_date.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_encryption.xml b/plugins/configuration/src/main/res/drawable/ic_meta_encryption.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_encryption.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_encryption.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_error.xml b/plugins/configuration/src/main/res/drawable/ic_meta_error.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_error.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_error.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_flavour.xml b/plugins/configuration/src/main/res/drawable/ic_meta_flavour.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_flavour.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_flavour.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_format.xml b/plugins/configuration/src/main/res/drawable/ic_meta_format.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_format.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_format.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_model.xml b/plugins/configuration/src/main/res/drawable/ic_meta_model.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_model.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_model.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_name.xml b/plugins/configuration/src/main/res/drawable/ic_meta_name.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_name.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_name.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_ok.xml b/plugins/configuration/src/main/res/drawable/ic_meta_ok.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_ok.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_ok.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_version.xml b/plugins/configuration/src/main/res/drawable/ic_meta_version.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_version.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_version.xml diff --git a/core/interfaces/src/main/res/drawable/ic_meta_warning.xml b/plugins/configuration/src/main/res/drawable/ic_meta_warning.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_meta_warning.xml rename to plugins/configuration/src/main/res/drawable/ic_meta_warning.xml diff --git a/plugins/configuration/src/main/res/values/strings.xml b/plugins/configuration/src/main/res/values/strings.xml index b66f4f8039..a87c290175 100644 --- a/plugins/configuration/src/main/res/values/strings.xml +++ b/plugins/configuration/src/main/res/values/strings.xml @@ -170,4 +170,16 @@ Please reboot your phone or restart AAPS from the System Settings \notherwise Android APS will not have logging (important to track and verify that the algorithms are working correctly)! + + File format + Created at + AAPS Version + Build Variant + Exporting device patient name + Exporting device model + File encryption + New encrypted format + New debug format (unencrypted) + Unknown export format +
\ No newline at end of file diff --git a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsUserEntryFragment.kt b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsUserEntryFragment.kt index 6b797c5b42..03c0265a4b 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsUserEntryFragment.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/fragments/TreatmentsUserEntryFragment.kt @@ -120,7 +120,7 @@ class TreatmentsUserEntryFragment : DaggerFragment(), MenuProvider { _binding = null } - inner class UserEntryAdapter internal constructor(var entries: List) : RecyclerView.Adapter() { + inner class UserEntryAdapter internal constructor(private var entries: List) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserEntryViewHolder { val view: View = LayoutInflater.from(parent.context).inflate(R.layout.treatments_user_entry_item, parent, false) From e9e10ffec5abe9ac1c0051855fe1df9242b323d1 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 14:44:15 +0200 Subject: [PATCH 21/65] simplify :core:interfaces --- .../interfaces/pump/actions/CustomAction.kt | 13 ++++++------- .../main/res/drawable/ic_actions_profileswitch.xml | 0 .../userEntry/UserEntryPresentationHelperImpl.kt | 2 +- .../automation/actions/ActionProfileSwitch.kt | 2 +- .../actions/ActionProfileSwitchPercent.kt | 2 +- .../automation/actions/ActionRunAutotune.kt | 2 +- .../automation/triggers/TriggerProfilePercent.kt | 2 +- .../plugins/pump/medtronic/MedtronicPumpPlugin.kt | 7 ++++--- 8 files changed, 15 insertions(+), 15 deletions(-) rename core/{interfaces => ui}/src/main/res/drawable/ic_actions_profileswitch.xml (100%) diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/pump/actions/CustomAction.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/pump/actions/CustomAction.kt index e3eb80b606..a789e3f026 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/pump/actions/CustomAction.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/pump/actions/CustomAction.kt @@ -1,9 +1,8 @@ package info.nightscout.interfaces.pump.actions -import info.nightscout.interfaces.R - -class CustomAction @JvmOverloads constructor(val name: Int, val customActionType: CustomActionType, val iconResourceId: Int = R.drawable.ic_actions_profileswitch, var isEnabled: Boolean = true) { - - constructor(nameResourceId: Int, actionType: CustomActionType, enabled: Boolean) : - this(nameResourceId, actionType, R.drawable.ic_actions_profileswitch, enabled) -} \ No newline at end of file +data class CustomAction( + val name: Int, + val customActionType: CustomActionType, + val iconResourceId: Int, + var isEnabled: Boolean = true +) \ No newline at end of file diff --git a/core/interfaces/src/main/res/drawable/ic_actions_profileswitch.xml b/core/ui/src/main/res/drawable/ic_actions_profileswitch.xml similarity index 100% rename from core/interfaces/src/main/res/drawable/ic_actions_profileswitch.xml rename to core/ui/src/main/res/drawable/ic_actions_profileswitch.xml diff --git a/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt b/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt index 288e9f7d82..c13a78e140 100644 --- a/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt @@ -49,7 +49,7 @@ class UserEntryPresentationHelperImpl @Inject constructor( Sources.QuickWizard -> R.drawable.ic_quick_wizard Sources.ExtendedBolusDialog -> R.drawable.ic_actions_start_extended_bolus Sources.TTDialog -> R.drawable.ic_temptarget_high - Sources.ProfileSwitchDialog -> info.nightscout.interfaces.R.drawable.ic_actions_profileswitch + Sources.ProfileSwitchDialog -> info.nightscout.core.ui.R.drawable.ic_actions_profileswitch Sources.LoopDialog -> R.drawable.ic_loop_closed Sources.TempBasalDialog -> R.drawable.ic_actions_start_temp_basal Sources.CalibrationDialog -> R.drawable.ic_calibration diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt index a425eb971d..82fc7e4a97 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt @@ -32,7 +32,7 @@ class ActionProfileSwitch(injector: HasAndroidInjector) : Action(injector) { override fun friendlyName(): Int = R.string.profilename override fun shortDescription(): String = rh.gs(R.string.changengetoprofilename, inputProfileName.value) - @DrawableRes override fun icon(): Int = info.nightscout.interfaces.R.drawable.ic_actions_profileswitch + @DrawableRes override fun icon(): Int = info.nightscout.core.ui.R.drawable.ic_actions_profileswitch override fun doAction(callback: Callback) { val activeProfileName = profileFunction.getProfileName() diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt index 0dc585d2ca..2e2de7f32f 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt @@ -35,7 +35,7 @@ class ActionProfileSwitchPercent(injector: HasAndroidInjector) : Action(injector if (duration.value == 0) rh.gs(R.string.startprofileforever, pct.value.toInt()) else rh.gs(info.nightscout.core.ui.R.string.startprofile, pct.value.toInt(), duration.value) - @DrawableRes override fun icon(): Int = info.nightscout.interfaces.R.drawable.ic_actions_profileswitch + @DrawableRes override fun icon(): Int = info.nightscout.core.ui.R.drawable.ic_actions_profileswitch init { precondition = TriggerProfilePercent(injector, 100.0, Comparator.Compare.IS_EQUAL) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt index c2dceab6dc..cd008a2e39 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt @@ -36,7 +36,7 @@ class ActionRunAutotune(injector: HasAndroidInjector) : Action(injector) { override fun friendlyName(): Int = info.nightscout.core.ui.R.string.autotune_run override fun shortDescription(): String = resourceHelper.gs(info.nightscout.core.ui.R.string.autotune_profile_name, inputProfileName.value) - @DrawableRes override fun icon(): Int = info.nightscout.interfaces.R.drawable.ic_actions_profileswitch + @DrawableRes override fun icon(): Int = info.nightscout.core.ui.R.drawable.ic_actions_profileswitch override fun doAction(callback: Callback) { val autoSwitch = sp.getBoolean(info.nightscout.core.utils.R.string.key_autotune_auto, false) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt index 09c9ef8f90..55b996f188 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt @@ -86,7 +86,7 @@ class TriggerProfilePercent(injector: HasAndroidInjector) : Trigger(injector) { override fun friendlyDescription(): String = rh.gs(R.string.percentagecompared, rh.gs(comparator.value.stringRes), pct.value.toInt()) - override fun icon(): Optional = Optional.of(info.nightscout.interfaces.R.drawable.ic_actions_profileswitch) + override fun icon(): Optional = Optional.of(info.nightscout.core.ui.R.drawable.ic_actions_profileswitch) override fun duplicate(): Trigger = TriggerProfilePercent(injector, this) 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 a80c4540a8..38b08f12eb 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 @@ -1170,13 +1170,14 @@ class MedtronicPumpPlugin @Inject constructor( private var customActions: List? = null private val customActionWakeUpAndTune = CustomAction( R.string.medtronic_custom_action_wake_and_tune, - MedtronicCustomActionType.WakeUpAndTune + MedtronicCustomActionType.WakeUpAndTune, + info.nightscout.core.ui.R.drawable.ic_actions_profileswitch ) private val customActionClearBolusBlock = CustomAction( - R.string.medtronic_custom_action_clear_bolus_block, MedtronicCustomActionType.ClearBolusBlock, false + R.string.medtronic_custom_action_clear_bolus_block, MedtronicCustomActionType.ClearBolusBlock, info.nightscout.core.ui.R.drawable.ic_actions_profileswitch, false ) private val customActionResetRLConfig = CustomAction( - R.string.medtronic_custom_action_reset_rileylink, MedtronicCustomActionType.ResetRileyLinkConfiguration, true + R.string.medtronic_custom_action_reset_rileylink, MedtronicCustomActionType.ResetRileyLinkConfiguration, info.nightscout.core.ui.R.drawable.ic_actions_profileswitch, true ) override fun getCustomActions(): List? { From 98fc8290f2f22de13a0297a91ba63c146e645b75 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 15:13:47 +0200 Subject: [PATCH 22/65] fix test --- .../formats/EncryptedPrefsFormatTest.kt | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/plugins/configuration/src/test/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormatTest.kt b/plugins/configuration/src/test/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormatTest.kt index bf76df1f30..57c5ce8135 100644 --- a/plugins/configuration/src/test/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormatTest.kt +++ b/plugins/configuration/src/test/java/info/nightscout/configuration/maintenance/formats/EncryptedPrefsFormatTest.kt @@ -1,13 +1,13 @@ package info.nightscout.configuration.maintenance.formats import com.google.common.truth.TruthJUnit.assume +import info.nightscout.configuration.maintenance.PrefsMetadataKeyImpl import info.nightscout.core.utils.CryptoUtil import info.nightscout.interfaces.maintenance.PrefFormatError import info.nightscout.interfaces.maintenance.PrefMetadata import info.nightscout.interfaces.maintenance.Prefs import info.nightscout.interfaces.maintenance.PrefsFormat -import info.nightscout.interfaces.maintenance.PrefsMetadataKey -import info.nightscout.interfaces.maintenance.PrefsStatus +import info.nightscout.interfaces.maintenance.PrefsStatusImpl import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions @@ -66,9 +66,9 @@ open class EncryptedPrefsFormatTest : TestBase() { Assertions.assertEquals(prefs.values["key1"], "A") Assertions.assertEquals(prefs.values["keyB"], "2") - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.status, PrefsStatus.OK) - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.OK) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.FILE_FORMAT]?.status, PrefsStatusImpl.OK) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.ENCRYPTION]?.status, PrefsStatusImpl.OK) } @Test @@ -81,7 +81,7 @@ open class EncryptedPrefsFormatTest : TestBase() { "keyB" to "2" ), mapOf( - PrefsMetadataKey.ENCRYPTION to PrefMetadata(PrefsFormat.FORMAT_KEY_ENC, PrefsStatus.OK) + PrefsMetadataKeyImpl.ENCRYPTION to PrefMetadata(PrefsFormat.FORMAT_KEY_ENC, PrefsStatusImpl.OK) ) ) encryptedFormat.savePreferences(getMockedFile(), prefs, "sikret") @@ -98,7 +98,7 @@ open class EncryptedPrefsFormatTest : TestBase() { "testpref2" to "another" ), mapOf( - PrefsMetadataKey.ENCRYPTION to PrefMetadata(PrefsFormat.FORMAT_KEY_ENC, PrefsStatus.OK) + PrefsMetadataKeyImpl.ENCRYPTION to PrefMetadata(PrefsFormat.FORMAT_KEY_ENC, PrefsStatusImpl.OK) ) ) encryptedFormat.savePreferences(getMockedFile(), prefsIn, "tajemnica") @@ -110,9 +110,9 @@ open class EncryptedPrefsFormatTest : TestBase() { Assertions.assertEquals(prefsOut.values["testpref1"], "--1--") Assertions.assertEquals(prefsOut.values["testpref2"], "another") - Assertions.assertEquals(prefsOut.metadata[PrefsMetadataKey.FILE_FORMAT]?.status, PrefsStatus.OK) - Assertions.assertEquals(prefsOut.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) - Assertions.assertEquals(prefsOut.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.OK) + Assertions.assertEquals(prefsOut.metadata[PrefsMetadataKeyImpl.FILE_FORMAT]?.status, PrefsStatusImpl.OK) + Assertions.assertEquals(prefsOut.metadata[PrefsMetadataKeyImpl.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) + Assertions.assertEquals(prefsOut.metadata[PrefsMetadataKeyImpl.ENCRYPTION]?.status, PrefsStatusImpl.OK) } @Test @@ -135,9 +135,9 @@ open class EncryptedPrefsFormatTest : TestBase() { Assertions.assertEquals(prefs.values.size, 0) - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.status, PrefsStatus.OK) - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.ERROR) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.FILE_FORMAT]?.status, PrefsStatusImpl.OK) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.FILE_FORMAT]?.value, PrefsFormat.FORMAT_KEY_ENC) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.ENCRYPTION]?.status, PrefsStatusImpl.ERROR) } @Test @@ -166,7 +166,7 @@ open class EncryptedPrefsFormatTest : TestBase() { Assertions.assertEquals(prefs.values.size, 2) // but checksum fails on metadata, so overall security fails - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.ERROR) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.ENCRYPTION]?.status, PrefsStatusImpl.ERROR) } @Test @@ -188,7 +188,7 @@ open class EncryptedPrefsFormatTest : TestBase() { val prefs = encryptedFormat.loadPreferences(getMockedFile(), "sikret") Assertions.assertEquals(prefs.values.size, 0) - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.ENCRYPTION]?.status, PrefsStatus.ERROR) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.ENCRYPTION]?.status, PrefsStatusImpl.ERROR) } @Test @@ -203,7 +203,7 @@ open class EncryptedPrefsFormatTest : TestBase() { val prefs = encryptedFormat.loadPreferences(getMockedFile(), "sikret") Assertions.assertEquals(prefs.values.size, 0) - Assertions.assertEquals(prefs.metadata[PrefsMetadataKey.FILE_FORMAT]?.status, PrefsStatus.ERROR) + Assertions.assertEquals(prefs.metadata[PrefsMetadataKeyImpl.FILE_FORMAT]?.status, PrefsStatusImpl.ERROR) } @Test From 739ba4902b6226c996d045efcb72546f708595f7 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 15:16:42 +0200 Subject: [PATCH 23/65] merge :pump:pump-core and :pump:pump-common --- app/build.gradle | 1 - pump/medtronic/build.gradle | 1 - pump/omnipod-eros/build.gradle | 1 - .../pump/core/defs/PumpDeviceState.kt | 2 +- .../nightscout/pump/core/utils/ByteUtil.java | 0 .../pump/core/utils/StringUtil.java | 0 .../pump/core/utils/ThreadUtil.java | 0 .../src/main/res/values/strings.xml | 10 +++++++++ pump/pump-core/.gitignore | 1 - pump/pump-core/build.gradle | 19 ----------------- pump/pump-core/consumer-rules.pro | 0 pump/pump-core/proguard-rules.pro | 21 ------------------- pump/pump-core/src/main/AndroidManifest.xml | 4 ---- .../src/main/res/values-af-rZA/strings.xml | 11 ---------- .../src/main/res/values-bg-rBG/strings.xml | 12 ----------- .../src/main/res/values-ca-rES/strings.xml | 11 ---------- .../src/main/res/values-cs-rCZ/strings.xml | 12 ----------- .../src/main/res/values-da-rDK/strings.xml | 11 ---------- .../src/main/res/values-de-rDE/strings.xml | 12 ----------- .../src/main/res/values-el-rGR/strings.xml | 12 ----------- .../src/main/res/values-es-rES/strings.xml | 12 ----------- .../src/main/res/values-fr-rFR/strings.xml | 12 ----------- .../src/main/res/values-ga-rIE/strings.xml | 5 ----- .../src/main/res/values-hr-rHR/strings.xml | 5 ----- .../src/main/res/values-hu-rHU/strings.xml | 5 ----- .../src/main/res/values-it-rIT/strings.xml | 12 ----------- .../src/main/res/values-iw-rIL/strings.xml | 12 ----------- .../src/main/res/values-ja-rJP/strings.xml | 4 ---- .../src/main/res/values-ko-rKR/strings.xml | 12 ----------- .../src/main/res/values-lt-rLT/strings.xml | 12 ----------- .../src/main/res/values-nl-rNL/strings.xml | 12 ----------- .../src/main/res/values-no-rNO/strings.xml | 12 ----------- .../src/main/res/values-pl-rPL/strings.xml | 12 ----------- .../src/main/res/values-pt-rBR/strings.xml | 12 ----------- .../src/main/res/values-pt-rPT/strings.xml | 12 ----------- .../src/main/res/values-ro-rRO/strings.xml | 11 ---------- .../src/main/res/values-ru-rRU/strings.xml | 12 ----------- .../src/main/res/values-sk-rSK/strings.xml | 12 ----------- .../src/main/res/values-sr-rCS/strings.xml | 4 ---- .../src/main/res/values-sv-rSE/strings.xml | 12 ----------- .../src/main/res/values-tr-rTR/strings.xml | 12 ----------- .../src/main/res/values-uk-rUA/strings.xml | 4 ---- .../src/main/res/values-zh-rCN/strings.xml | 11 ---------- .../pump-core/src/main/res/values/strings.xml | 14 ------------- pump/rileylink/build.gradle | 2 +- settings.gradle | 1 - 46 files changed, 12 insertions(+), 375 deletions(-) rename pump/{pump-core => pump-common}/src/main/java/info/nightscout/pump/core/defs/PumpDeviceState.kt (94%) rename pump/{pump-core => pump-common}/src/main/java/info/nightscout/pump/core/utils/ByteUtil.java (100%) rename pump/{pump-core => pump-common}/src/main/java/info/nightscout/pump/core/utils/StringUtil.java (100%) rename pump/{pump-core => pump-common}/src/main/java/info/nightscout/pump/core/utils/ThreadUtil.java (100%) delete mode 100644 pump/pump-core/.gitignore delete mode 100644 pump/pump-core/build.gradle delete mode 100644 pump/pump-core/consumer-rules.pro delete mode 100644 pump/pump-core/proguard-rules.pro delete mode 100644 pump/pump-core/src/main/AndroidManifest.xml delete mode 100644 pump/pump-core/src/main/res/values-af-rZA/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-bg-rBG/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-ca-rES/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-cs-rCZ/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-da-rDK/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-de-rDE/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-el-rGR/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-es-rES/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-fr-rFR/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-ga-rIE/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-hr-rHR/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-hu-rHU/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-it-rIT/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-iw-rIL/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-ja-rJP/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-ko-rKR/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-lt-rLT/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-nl-rNL/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-no-rNO/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-pl-rPL/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-pt-rBR/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-pt-rPT/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-ro-rRO/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-ru-rRU/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-sk-rSK/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-sr-rCS/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-sv-rSE/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-tr-rTR/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-uk-rUA/strings.xml delete mode 100644 pump/pump-core/src/main/res/values-zh-rCN/strings.xml delete mode 100644 pump/pump-core/src/main/res/values/strings.xml diff --git a/app/build.gradle b/app/build.gradle index 53ed090fee..98fb131cb4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -216,7 +216,6 @@ dependencies { implementation project(':insight') implementation project(':pump:medtronic') implementation project(':pump:pump-common') - implementation project(':pump:pump-core') implementation project(':pump:omnipod-common') implementation project(':pump:omnipod-eros') implementation project(':pump:omnipod-dash') diff --git a/pump/medtronic/build.gradle b/pump/medtronic/build.gradle index 507aedc398..b44c33cb15 100644 --- a/pump/medtronic/build.gradle +++ b/pump/medtronic/build.gradle @@ -22,7 +22,6 @@ dependencies { implementation project(':core:utils') implementation project(':core:validators') implementation project(':pump:pump-common') - implementation project(':pump:pump-core') implementation project(':pump:rileylink') testImplementation project(':app-wear-shared:shared-tests') diff --git a/pump/omnipod-eros/build.gradle b/pump/omnipod-eros/build.gradle index a2404ee8ed..c3ff28071f 100644 --- a/pump/omnipod-eros/build.gradle +++ b/pump/omnipod-eros/build.gradle @@ -34,7 +34,6 @@ dependencies { implementation project(':core:ui') implementation project(':core:validators') implementation project(':pump:pump-common') - implementation project(':pump:pump-core') implementation project(':pump:rileylink') implementation project(':pump:omnipod-common') diff --git a/pump/pump-core/src/main/java/info/nightscout/pump/core/defs/PumpDeviceState.kt b/pump/pump-common/src/main/java/info/nightscout/pump/core/defs/PumpDeviceState.kt similarity index 94% rename from pump/pump-core/src/main/java/info/nightscout/pump/core/defs/PumpDeviceState.kt rename to pump/pump-common/src/main/java/info/nightscout/pump/core/defs/PumpDeviceState.kt index 9ebe3463e3..111b7d559f 100644 --- a/pump/pump-core/src/main/java/info/nightscout/pump/core/defs/PumpDeviceState.kt +++ b/pump/pump-common/src/main/java/info/nightscout/pump/core/defs/PumpDeviceState.kt @@ -1,6 +1,6 @@ package info.nightscout.pump.core.defs -import info.nightscout.pump.core.R +import info.nightscout.pump.common.R enum class PumpDeviceState(var resourceId: Int) { diff --git a/pump/pump-core/src/main/java/info/nightscout/pump/core/utils/ByteUtil.java b/pump/pump-common/src/main/java/info/nightscout/pump/core/utils/ByteUtil.java similarity index 100% rename from pump/pump-core/src/main/java/info/nightscout/pump/core/utils/ByteUtil.java rename to pump/pump-common/src/main/java/info/nightscout/pump/core/utils/ByteUtil.java diff --git a/pump/pump-core/src/main/java/info/nightscout/pump/core/utils/StringUtil.java b/pump/pump-common/src/main/java/info/nightscout/pump/core/utils/StringUtil.java similarity index 100% rename from pump/pump-core/src/main/java/info/nightscout/pump/core/utils/StringUtil.java rename to pump/pump-common/src/main/java/info/nightscout/pump/core/utils/StringUtil.java diff --git a/pump/pump-core/src/main/java/info/nightscout/pump/core/utils/ThreadUtil.java b/pump/pump-common/src/main/java/info/nightscout/pump/core/utils/ThreadUtil.java similarity index 100% rename from pump/pump-core/src/main/java/info/nightscout/pump/core/utils/ThreadUtil.java rename to pump/pump-common/src/main/java/info/nightscout/pump/core/utils/ThreadUtil.java diff --git a/pump/pump-common/src/main/res/values/strings.xml b/pump/pump-common/src/main/res/values/strings.xml index 6a683fd37d..d7323a40f3 100644 --- a/pump/pump-common/src/main/res/values/strings.xml +++ b/pump/pump-common/src/main/res/values/strings.xml @@ -77,6 +77,16 @@ Type: + + Never contacted + Sleeping + Waking up + Active + Error with communication + Timeout on communication + Pump unreachable + Invalid configuration + %1$d day %1$d days diff --git a/pump/pump-core/.gitignore b/pump/pump-core/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/pump/pump-core/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/pump/pump-core/build.gradle b/pump/pump-core/build.gradle deleted file mode 100644 index 459c464237..0000000000 --- a/pump/pump-core/build.gradle +++ /dev/null @@ -1,19 +0,0 @@ -plugins { - id 'com.android.library' - id 'kotlin-android' - id 'kotlin-kapt' - id 'kotlin-allopen' -} - -apply from: "${project.rootDir}/core/main/android_dependencies.gradle" -apply from: "${project.rootDir}/core/main/android_module_dependencies.gradle" -apply from: "${project.rootDir}/core/main/allopen_dependencies.gradle" -apply from: "${project.rootDir}/core/main/test_dependencies.gradle" -apply from: "${project.rootDir}/core/main/jacoco_global.gradle" -android { - namespace 'info.nightscout.pump.core' -} - -dependencies { - api "net.danlew:android.joda:$joda_version" -} diff --git a/pump/pump-core/consumer-rules.pro b/pump/pump-core/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/pump/pump-core/proguard-rules.pro b/pump/pump-core/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/pump/pump-core/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/pump/pump-core/src/main/AndroidManifest.xml b/pump/pump-core/src/main/AndroidManifest.xml deleted file mode 100644 index 44008a4332..0000000000 --- a/pump/pump-core/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/pump/pump-core/src/main/res/values-af-rZA/strings.xml b/pump/pump-core/src/main/res/values-af-rZA/strings.xml deleted file mode 100644 index fdb48a3660..0000000000 --- a/pump/pump-core/src/main/res/values-af-rZA/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - Slaap - Besig om te wek - Aktief - Fout met kommunikasie - Te lank op kommunikasie gewag - Pomp onbereikbaar - Ongeldige konfigirasie - diff --git a/pump/pump-core/src/main/res/values-bg-rBG/strings.xml b/pump/pump-core/src/main/res/values-bg-rBG/strings.xml deleted file mode 100644 index 31c39d7fec..0000000000 --- a/pump/pump-core/src/main/res/values-bg-rBG/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Никога не е свързвана - Спинка си - Събуждане - Активна - Грешка в комуникацията - Изтече времето за връзка - Помпата е недостъпна - Грешна конфигурация - diff --git a/pump/pump-core/src/main/res/values-ca-rES/strings.xml b/pump/pump-core/src/main/res/values-ca-rES/strings.xml deleted file mode 100644 index 5b33ffc3fe..0000000000 --- a/pump/pump-core/src/main/res/values-ca-rES/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - En suspens - Iniciant - Activa - Error de comunicació - Temps d\'espera excedit en la comunicació - Bomba no accessible - Configuració no vàlida - diff --git a/pump/pump-core/src/main/res/values-cs-rCZ/strings.xml b/pump/pump-core/src/main/res/values-cs-rCZ/strings.xml deleted file mode 100644 index d4396a70be..0000000000 --- a/pump/pump-core/src/main/res/values-cs-rCZ/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Nikdy nekontaktováno - Spící - Probouzení - Aktivní - Chyba komunikace - Vypršel časový limit komunikace - Pumpa nedostupná - Neplatná konfigurace - diff --git a/pump/pump-core/src/main/res/values-da-rDK/strings.xml b/pump/pump-core/src/main/res/values-da-rDK/strings.xml deleted file mode 100644 index ff99fdabc1..0000000000 --- a/pump/pump-core/src/main/res/values-da-rDK/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - Sover - Vågner - Aktiv - Fejl i kommunikation - Timeout ved kommunikation - Pumpe utilgængelig - Ugyldig konfiguration - diff --git a/pump/pump-core/src/main/res/values-de-rDE/strings.xml b/pump/pump-core/src/main/res/values-de-rDE/strings.xml deleted file mode 100644 index ed19114729..0000000000 --- a/pump/pump-core/src/main/res/values-de-rDE/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Noch nie verbunden - Schlafen - Aufwecken - Aktiv - Fehler bei der Kommunikation - Zeitüberschreitung bei Kommunikation - Pumpe nicht erreichbar - Ungültige Einstellung - diff --git a/pump/pump-core/src/main/res/values-el-rGR/strings.xml b/pump/pump-core/src/main/res/values-el-rGR/strings.xml deleted file mode 100644 index 8f7cca6085..0000000000 --- a/pump/pump-core/src/main/res/values-el-rGR/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Δεν επικοινωνήθηκε ποτέ - Sleeping - Ξύπνημα - Ενεργή - Σφάλμα με επικοινωνία - Λήξη χρόνου επικοινωνίας - Η αντλία δεν είναι διαθέσιμη - Μη έγκυρη παραμετροποίηση - diff --git a/pump/pump-core/src/main/res/values-es-rES/strings.xml b/pump/pump-core/src/main/res/values-es-rES/strings.xml deleted file mode 100644 index 8f5eff070a..0000000000 --- a/pump/pump-core/src/main/res/values-es-rES/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Nunca contactado - Durmiendo - Activando - Activo - Error con la comunicación - Tiempo de espera en la comunicación - Bomba no alcanzable - Configuración inválida - diff --git a/pump/pump-core/src/main/res/values-fr-rFR/strings.xml b/pump/pump-core/src/main/res/values-fr-rFR/strings.xml deleted file mode 100644 index 452f916a90..0000000000 --- a/pump/pump-core/src/main/res/values-fr-rFR/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Jamais contacté - En veille - Réveil en cours - Actif - Erreur de communication - Expiration du délai d\'attente de la communication - Pompe hors de portée - Configuration invalide - diff --git a/pump/pump-core/src/main/res/values-ga-rIE/strings.xml b/pump/pump-core/src/main/res/values-ga-rIE/strings.xml deleted file mode 100644 index 1727c5749f..0000000000 --- a/pump/pump-core/src/main/res/values-ga-rIE/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - Gníomhach - diff --git a/pump/pump-core/src/main/res/values-hr-rHR/strings.xml b/pump/pump-core/src/main/res/values-hr-rHR/strings.xml deleted file mode 100644 index ca36794d35..0000000000 --- a/pump/pump-core/src/main/res/values-hr-rHR/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - Pumpa nedostupna - diff --git a/pump/pump-core/src/main/res/values-hu-rHU/strings.xml b/pump/pump-core/src/main/res/values-hu-rHU/strings.xml deleted file mode 100644 index d67c9a4181..0000000000 --- a/pump/pump-core/src/main/res/values-hu-rHU/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - Pumpa nem elérhető - diff --git a/pump/pump-core/src/main/res/values-it-rIT/strings.xml b/pump/pump-core/src/main/res/values-it-rIT/strings.xml deleted file mode 100644 index b392418f5c..0000000000 --- a/pump/pump-core/src/main/res/values-it-rIT/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Mai contattato - In sospensione - Risveglio - Attivo - Errore nella comunicazione - Timeout della comunicazione - Micro irraggiungibile - Configurazione non valida - diff --git a/pump/pump-core/src/main/res/values-iw-rIL/strings.xml b/pump/pump-core/src/main/res/values-iw-rIL/strings.xml deleted file mode 100644 index 0ee0da1cab..0000000000 --- a/pump/pump-core/src/main/res/values-iw-rIL/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - מעולם לא נוצר קשר - שינה - מתעורר - פעיל - שגיאת תקשורת - חריגה ממגבלת הזמן לתקשורת - המשאבה לא זמינה - תצורה לא חוקית - diff --git a/pump/pump-core/src/main/res/values-ja-rJP/strings.xml b/pump/pump-core/src/main/res/values-ja-rJP/strings.xml deleted file mode 100644 index d287b59687..0000000000 --- a/pump/pump-core/src/main/res/values-ja-rJP/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/pump/pump-core/src/main/res/values-ko-rKR/strings.xml b/pump/pump-core/src/main/res/values-ko-rKR/strings.xml deleted file mode 100644 index a4564d92ac..0000000000 --- a/pump/pump-core/src/main/res/values-ko-rKR/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - 연결되지 않음 - 수면 - 시작중 - 활성 - 연결오류 - 연결시간초과 - 펌프에 연결할 수 없습니다. - 유효하지 않은 설정 - diff --git a/pump/pump-core/src/main/res/values-lt-rLT/strings.xml b/pump/pump-core/src/main/res/values-lt-rLT/strings.xml deleted file mode 100644 index a4d9c7e9e3..0000000000 --- a/pump/pump-core/src/main/res/values-lt-rLT/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Niekada nebuvo sujungta - Miego režime - Pažadinimas - Aktyvi - Ryšio klaida - Ryšiui skirtas laikas baigėsi - Pompa nepasiekiama - Neteisinga konfigūracija - diff --git a/pump/pump-core/src/main/res/values-nl-rNL/strings.xml b/pump/pump-core/src/main/res/values-nl-rNL/strings.xml deleted file mode 100644 index 5bcb0f531b..0000000000 --- a/pump/pump-core/src/main/res/values-nl-rNL/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Nooit verbonden - Slapen - Actief worden - Actief - Communicatiefout - Time-out bij communicatie - Pomp niet beschikbaar - Ongeldige configuratie - diff --git a/pump/pump-core/src/main/res/values-no-rNO/strings.xml b/pump/pump-core/src/main/res/values-no-rNO/strings.xml deleted file mode 100644 index 7dcc8aa0ca..0000000000 --- a/pump/pump-core/src/main/res/values-no-rNO/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Aldri kontaktet - Hvilemodus - Våkner opp - Aktiv - Feil med kommunikasjonen - Tidsavbrudd ved kommunikasjonen - Pumpe er utilgjengelig - Ugyldig oppsett av pumpe - diff --git a/pump/pump-core/src/main/res/values-pl-rPL/strings.xml b/pump/pump-core/src/main/res/values-pl-rPL/strings.xml deleted file mode 100644 index e73238e7b2..0000000000 --- a/pump/pump-core/src/main/res/values-pl-rPL/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Nigdy nie połączona - Uśpiona - Wybudzanie - Aktywna - Błąd komunikacji - Przekroczony limit czasu połączenia - Pompa nieosiągalna - Nieprawidłowe ustawienia - diff --git a/pump/pump-core/src/main/res/values-pt-rBR/strings.xml b/pump/pump-core/src/main/res/values-pt-rBR/strings.xml deleted file mode 100644 index c728ae0625..0000000000 --- a/pump/pump-core/src/main/res/values-pt-rBR/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Nunca contatado - Dormindo - Acordar - Ativo - Erro com comunicação - Tempo limite para comunicação - Bomba inacessível - Configuração inválida - diff --git a/pump/pump-core/src/main/res/values-pt-rPT/strings.xml b/pump/pump-core/src/main/res/values-pt-rPT/strings.xml deleted file mode 100644 index a542775ac3..0000000000 --- a/pump/pump-core/src/main/res/values-pt-rPT/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Nunca contactado - A dormir - A acordar - Activo - Erro com comunicação - Tempo limite para comunicação - Bomba inacessível - Configuração inválida - diff --git a/pump/pump-core/src/main/res/values-ro-rRO/strings.xml b/pump/pump-core/src/main/res/values-ro-rRO/strings.xml deleted file mode 100644 index 45f733d374..0000000000 --- a/pump/pump-core/src/main/res/values-ro-rRO/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - În repaus - Se pornește - Activă - Eroare de comunicație - Comunicația nu a reușit la timp - Pompă indisponibilă - Configurație invalidă - diff --git a/pump/pump-core/src/main/res/values-ru-rRU/strings.xml b/pump/pump-core/src/main/res/values-ru-rRU/strings.xml deleted file mode 100644 index 2b814ec715..0000000000 --- a/pump/pump-core/src/main/res/values-ru-rRU/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Никогда не подключалась - Спящий режим - Пробуждение - Работает - Ошибка связи - Таймаут связи - Помпа недоступна - Недопустимая конфигурация - diff --git a/pump/pump-core/src/main/res/values-sk-rSK/strings.xml b/pump/pump-core/src/main/res/values-sk-rSK/strings.xml deleted file mode 100644 index 0ca4cf05f8..0000000000 --- a/pump/pump-core/src/main/res/values-sk-rSK/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Nikdy nepripojené - Spiaca - Prebúdzanie - Aktívna - Chyba komunikácie - Uplynul časový limit komunikácie - Pumpa nedostupná - Neplatná konfigurácia - diff --git a/pump/pump-core/src/main/res/values-sr-rCS/strings.xml b/pump/pump-core/src/main/res/values-sr-rCS/strings.xml deleted file mode 100644 index d287b59687..0000000000 --- a/pump/pump-core/src/main/res/values-sr-rCS/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/pump/pump-core/src/main/res/values-sv-rSE/strings.xml b/pump/pump-core/src/main/res/values-sv-rSE/strings.xml deleted file mode 100644 index acb1355a65..0000000000 --- a/pump/pump-core/src/main/res/values-sv-rSE/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Aldrig ansluten - Sover - Väcker - Aktiv - Kommunikationsfel - Kommunikationstimeout - Pumpen kan inte nås - Felaktig konfiguration - diff --git a/pump/pump-core/src/main/res/values-tr-rTR/strings.xml b/pump/pump-core/src/main/res/values-tr-rTR/strings.xml deleted file mode 100644 index 5f95481717..0000000000 --- a/pump/pump-core/src/main/res/values-tr-rTR/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Hiç bağlantı yapılmadı - Uyuyor - Uyanıyor - Aktif - İletişim hatası - İletişimde zaman aşımı - Pompa ulaşılamıyor - Geçersiz yapılandırma - diff --git a/pump/pump-core/src/main/res/values-uk-rUA/strings.xml b/pump/pump-core/src/main/res/values-uk-rUA/strings.xml deleted file mode 100644 index d287b59687..0000000000 --- a/pump/pump-core/src/main/res/values-uk-rUA/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/pump/pump-core/src/main/res/values-zh-rCN/strings.xml b/pump/pump-core/src/main/res/values-zh-rCN/strings.xml deleted file mode 100644 index 1565a7375e..0000000000 --- a/pump/pump-core/src/main/res/values-zh-rCN/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - 休眠 - 唤醒中 - 启用 - 通信出错 - 通信超时 - 泵无法连接 - 无效配置 - diff --git a/pump/pump-core/src/main/res/values/strings.xml b/pump/pump-core/src/main/res/values/strings.xml deleted file mode 100644 index d1ffb7471e..0000000000 --- a/pump/pump-core/src/main/res/values/strings.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Never contacted - Sleeping - Waking up - Active - Error with communication - Timeout on communication - Pump unreachable - Invalid configuration - - diff --git a/pump/rileylink/build.gradle b/pump/rileylink/build.gradle index 36a7318e18..03620015ee 100644 --- a/pump/rileylink/build.gradle +++ b/pump/rileylink/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') implementation project(':core:ui') - implementation project(':pump:pump-core') + implementation project(':pump:pump-common') testImplementation project(':app-wear-shared:shared-tests') } diff --git a/settings.gradle b/settings.gradle index 19da8bf565..816e1ae58d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -39,7 +39,6 @@ include ':pump:omnipod-common' include ':pump:omnipod-eros' include ':pump:omnipod-dash' include ':pump:pump-common' -include ':pump:pump-core' include ':pump:rileylink' include ':pump:virtual' include ':implementation' From 79135e6262b45edc193cc7bfad8e83a04ca39f13 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 16:07:53 +0200 Subject: [PATCH 24/65] simplify :core:interfaces --- .../info/nightscout/interfaces/ApsMode.kt | 2 +- .../interfaces/aps/AutosensResult.kt | 25 +++----- .../nightscout/interfaces/nsclient/NSAlarm.kt | 32 +++------- .../nightscout/interfaces/nsclient/NSSgv.kt | 15 +---- .../core/extensions/ProfileSwitchExtension.kt | 2 +- .../nightscout/core/wizard/BolusWizard.kt | 2 +- .../core/wizard/QuickWizardEntry.kt | 4 +- .../nightscout/core/utils/JsonHelperTest.kt | 1 - .../info/nightscout/core}/utils/HtmlHelper.kt | 2 +- .../info/nightscout/core}/utils/JsonHelper.kt | 2 +- .../profile/ProfileStoreObject.kt | 2 +- .../queue/CommandQueueImplementation.kt | 2 +- .../UserEntryPresentationHelperImpl.kt | 2 +- .../pump/insight/InsightAlertService.java | 14 ++--- .../activities/InsightAlertActivity.java | 2 +- .../nightscout/plugins/aps/APSResultObject.kt | 2 +- .../nightscout/plugins/aps/OpenAPSFragment.kt | 15 ++++- .../plugins/aps/loop/LoopFragment.kt | 2 +- .../plugins/aps/utils/JSONFormatter.kt | 2 +- .../general/autotune/AutotunePlugin.kt | 26 ++++---- .../plugins/aps/loop/APSResultTest.kt | 2 +- .../general/autotune/AutotuneCoreTest.kt | 2 +- .../general/autotune/AutotunePrepTest.kt | 2 +- .../automation/AutomationFragment.kt | 8 +-- .../automation/actions/ActionAlarm.kt | 4 +- .../actions/ActionCarePortalEvent.kt | 2 +- .../automation/actions/ActionLoopSuspend.kt | 2 +- .../automation/actions/ActionNotification.kt | 2 +- .../automation/actions/ActionProfileSwitch.kt | 2 +- .../actions/ActionProfileSwitchPercent.kt | 2 +- .../automation/actions/ActionRunAutotune.kt | 4 +- .../automation/actions/ActionSendSMS.kt | 2 +- .../actions/ActionStartTempTarget.kt | 4 +- .../triggers/TriggerAutosensValue.kt | 4 +- .../automation/triggers/TriggerBTDevice.kt | 2 +- .../automation/triggers/TriggerBg.kt | 2 +- .../automation/triggers/TriggerBolusAgo.kt | 4 +- .../automation/triggers/TriggerCOB.kt | 4 +- .../automation/triggers/TriggerConnector.kt | 2 +- .../automation/triggers/TriggerDelta.kt | 2 +- .../automation/triggers/TriggerHeartRate.kt | 4 +- .../automation/triggers/TriggerIob.kt | 2 +- .../automation/triggers/TriggerLocation.kt | 2 +- .../triggers/TriggerProfilePercent.kt | 2 +- .../triggers/TriggerPumpLastConnection.kt | 4 +- .../triggers/TriggerRecurringTime.kt | 2 +- .../automation/triggers/TriggerTempTarget.kt | 2 +- .../triggers/TriggerTempTargetValue.kt | 2 +- .../automation/triggers/TriggerTime.kt | 2 +- .../automation/triggers/TriggerTimeRange.kt | 2 +- .../automation/triggers/TriggerWifiSsid.kt | 2 +- .../maintenance/MaintenanceFragment.kt | 2 +- .../objectives/ObjectivesFragment.kt | 19 ++++-- .../general/overview/OverviewFragment.kt | 6 +- .../SmsCommunicatorFragment.kt | 2 +- .../plugins/profile/ProfilePlugin.kt | 2 +- .../info/nightscout/source/PoctechPlugin.kt | 2 +- .../plugins/sync/nsShared/NSAlarm.kt | 42 +++++++++++++ .../plugins/sync/nsShared/NSClientFragment.kt | 3 +- .../nightscout/plugins/sync/nsShared/NSSgv.kt | 33 ++++++++++ .../sync/nsShared/NsIncomingDataProcessor.kt | 5 +- .../sync/nsclient/DataSyncSelectorV1.kt | 2 +- .../nsclient/data/NSDeviceStatusHandler.kt | 6 +- .../plugins/sync/nsclient/data/NSMbg.kt | 2 +- .../nsclient/data/NSSettingsStatusImpl.kt | 2 +- .../data/ProcessedDeviceStatusDataImpl.kt | 63 ++++++++++--------- .../BolusCalculatorResultExtension.kt | 2 +- .../nsclient/extensions/BolusExtension.kt | 2 +- .../nsclient/extensions/CarbsExtension.kt | 2 +- .../EffectiveProfileSwitchExtension.kt | 2 +- .../extensions/ExtendedBolusExtension.kt | 2 +- .../sync/nsclient/extensions/FoodExtension.kt | 2 +- .../extensions/OfflineEventExtension.kt | 2 +- .../extensions/ProfileSwitchExtension.kt | 2 +- .../extensions/TemporaryBasalExtension.kt | 2 +- .../extensions/TemporaryTargetExtension.kt | 2 +- .../extensions/TherapyEventExtension.kt | 2 +- .../sync/nsclient/services/NSClientService.kt | 12 ++-- .../workers/NSClientAddUpdateWorker.kt | 2 +- .../sync/nsclientV3/DataSyncSelectorV3.kt | 2 +- .../sync/nsclientV3/NSClientV3Plugin.kt | 7 ++- .../workers/LoadProfileStoreWorker.kt | 2 +- .../plugins/sync/tidepool/TidepoolPlugin.kt | 2 +- .../sync/xdrip/DataSyncSelectorXdripImpl.kt | 2 +- .../plugins/sync/xdrip/XdripPlugin.kt | 2 +- .../ui/dialogs/CalibrationDialog.kt | 2 +- .../info/nightscout/ui/dialogs/CarbsDialog.kt | 9 ++- .../info/nightscout/ui/dialogs/CareDialog.kt | 2 +- .../ui/dialogs/ExtendedBolusDialog.kt | 2 +- .../info/nightscout/ui/dialogs/FillDialog.kt | 6 +- .../nightscout/ui/dialogs/InsulinDialog.kt | 6 +- .../ui/dialogs/ProfileSwitchDialog.kt | 2 +- .../ui/dialogs/ProfileViewerDialog.kt | 2 +- .../nightscout/ui/dialogs/TempBasalDialog.kt | 2 +- .../nightscout/ui/dialogs/TempTargetDialog.kt | 15 +++-- .../nightscout/ui/dialogs/TreatmentDialog.kt | 10 ++- .../nightscout/ui/dialogs/WizardDialog.kt | 12 ++-- 97 files changed, 315 insertions(+), 239 deletions(-) rename core/{interfaces/src/main/java/info/nightscout/interfaces => utils/src/main/java/info/nightscout/core}/utils/HtmlHelper.kt (88%) rename core/{interfaces/src/main/java/info/nightscout/interfaces => utils/src/main/java/info/nightscout/core}/utils/JsonHelper.kt (99%) create mode 100644 plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSAlarm.kt create mode 100644 plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSSgv.kt diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/ApsMode.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/ApsMode.kt index 2af064a34c..24ee4b3454 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/ApsMode.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/ApsMode.kt @@ -1,6 +1,6 @@ package info.nightscout.interfaces -enum class ApsMode() { +enum class ApsMode { OPEN, CLOSED, LGS, diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/aps/AutosensResult.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/aps/AutosensResult.kt index 3460b3e78e..f2dd39f830 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/aps/AutosensResult.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/aps/AutosensResult.kt @@ -1,22 +1,11 @@ package info.nightscout.interfaces.aps -import org.json.JSONObject - -class AutosensResult { +data class AutosensResult( //default values to show when autosens algorithm is not called - var ratio = 1.0 - var carbsAbsorbed = 0.0 - var sensResult = "autosens not available" - var pastSensitivity = "" - var ratioLimit = "" - - fun json(): JSONObject = JSONObject() - .put("ratio", ratio) - .put("ratioLimit", ratioLimit) - .put("pastSensitivity", pastSensitivity) - .put("sensResult", sensResult) - .put("ratio", ratio) - - override fun toString(): String = json().toString() -} \ No newline at end of file + var ratio: Double = 1.0, + var carbsAbsorbed: Double = 0.0, + var sensResult: String = "autosens not available", + var pastSensitivity: String = "", + var ratioLimit: String = "" +) \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSAlarm.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSAlarm.kt index 18357c877f..d90b10ce02 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSAlarm.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSAlarm.kt @@ -1,9 +1,6 @@ package info.nightscout.interfaces.nsclient -import info.nightscout.interfaces.utils.JsonHelper -import org.json.JSONObject - -class NSAlarm(private var data: JSONObject) { +interface NSAlarm { /* { "level":2, @@ -18,24 +15,11 @@ class NSAlarm(private var data: JSONObject) { } */ - fun level(): Int = - JsonHelper.safeGetInt(data, "level", 0) - - fun group(): String = - JsonHelper.safeGetString(data, "group", "N/A") - - fun title(): String = - JsonHelper.safeGetString(data, "title", "N/A") - - fun message(): String = - JsonHelper.safeGetString(data, "message", "N/A") - - fun low() :Boolean = - JsonHelper.safeGetString(data, "eventName", "") == "low" - - fun high() :Boolean = - JsonHelper.safeGetString(data, "eventName", "") == "high" - - fun timeago() :Boolean = - JsonHelper.safeGetString(data, "eventName", "") == "timeago" + fun level(): Int + fun group(): String + fun title(): String + fun message(): String + fun low(): Boolean + fun high(): Boolean + fun timeago(): Boolean } \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSSgv.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSSgv.kt index 3bdddfa462..bf7c81c965 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSSgv.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/NSSgv.kt @@ -1,32 +1,19 @@ package info.nightscout.interfaces.nsclient -import info.nightscout.interfaces.utils.JsonHelper -import org.json.JSONObject - /** * * {"mgdl":105,"mills":1455136282375,"device":"xDrip-BluetoothWixel","direction":"Flat","filtered":98272,"unfiltered":98272,"noise":1,"rssi":100} */ @Suppress("SpellCheckingInspection") -class NSSgv(val data: JSONObject) { +interface NSSgv { val mgdl: Int? - get() = JsonHelper.safeGetIntAllowNull(data, "mgdl") val filtered: Int? - get() = JsonHelper.safeGetIntAllowNull(data, "filtered") val unfiltered: Int? - get() = JsonHelper.safeGetIntAllowNull(data, "unfiltered") val noise: Int? - get() = JsonHelper.safeGetIntAllowNull(data, "noise") val rssi: Int? - get() = JsonHelper.safeGetIntAllowNull(data, "rssi") val mills: Long? - get() = JsonHelper.safeGetLongAllowNull(data, "mills") val device: String? - get() = JsonHelper.safeGetStringAllowNull(data, "device", null) val direction: String? - get() = JsonHelper.safeGetStringAllowNull(data, "direction", null) val id: String? - get() = JsonHelper.safeGetStringAllowNull(data, "_id", null) - } \ No newline at end of file diff --git a/core/main/src/main/java/info/nightscout/core/extensions/ProfileSwitchExtension.kt b/core/main/src/main/java/info/nightscout/core/extensions/ProfileSwitchExtension.kt index 926b52c153..0fc2dd84a4 100644 --- a/core/main/src/main/java/info/nightscout/core/extensions/ProfileSwitchExtension.kt +++ b/core/main/src/main/java/info/nightscout/core/extensions/ProfileSwitchExtension.kt @@ -1,12 +1,12 @@ package info.nightscout.core.extensions import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.ProfileSwitch import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.profile.PureProfile import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import org.json.JSONObject diff --git a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt index be814c2ea3..3c925fe15b 100644 --- a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt +++ b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt @@ -8,6 +8,7 @@ import info.nightscout.core.extensions.highValueToUnitsToString import info.nightscout.core.extensions.lowValueToUnitsToString import info.nightscout.core.iob.round import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.BolusCalculatorResult import info.nightscout.database.entities.OfflineEvent @@ -36,7 +37,6 @@ import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.interfaces.utils.Round import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventRefreshOverview diff --git a/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt b/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt index e529442e93..eeb936de5d 100644 --- a/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt +++ b/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt @@ -4,6 +4,8 @@ import dagger.android.HasAndroidInjector import info.nightscout.annotations.OpenForTesting import info.nightscout.core.extensions.valueToUnits import info.nightscout.core.iob.round +import info.nightscout.core.utils.JsonHelper.safeGetInt +import info.nightscout.core.utils.JsonHelper.safeGetString import info.nightscout.core.utils.MidnightUtils import info.nightscout.database.ValueWrapper import info.nightscout.interfaces.aps.Loop @@ -14,8 +16,6 @@ import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.interfaces.utils.JsonHelper.safeGetInt -import info.nightscout.interfaces.utils.JsonHelper.safeGetString import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil diff --git a/core/main/src/test/java/info/nightscout/core/utils/JsonHelperTest.kt b/core/main/src/test/java/info/nightscout/core/utils/JsonHelperTest.kt index 3681f7ef23..2b0c1e686f 100644 --- a/core/main/src/test/java/info/nightscout/core/utils/JsonHelperTest.kt +++ b/core/main/src/test/java/info/nightscout/core/utils/JsonHelperTest.kt @@ -1,6 +1,5 @@ package info.nightscout.core.utils -import info.nightscout.interfaces.utils.JsonHelper import org.json.JSONObject import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/utils/HtmlHelper.kt b/core/utils/src/main/java/info/nightscout/core/utils/HtmlHelper.kt similarity index 88% rename from core/interfaces/src/main/java/info/nightscout/interfaces/utils/HtmlHelper.kt rename to core/utils/src/main/java/info/nightscout/core/utils/HtmlHelper.kt index 004010e0bf..2802deb92e 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/utils/HtmlHelper.kt +++ b/core/utils/src/main/java/info/nightscout/core/utils/HtmlHelper.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.utils +package info.nightscout.core.utils import android.text.Html import android.text.SpannableStringBuilder diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/utils/JsonHelper.kt b/core/utils/src/main/java/info/nightscout/core/utils/JsonHelper.kt similarity index 99% rename from core/interfaces/src/main/java/info/nightscout/interfaces/utils/JsonHelper.kt rename to core/utils/src/main/java/info/nightscout/core/utils/JsonHelper.kt index a19e58b55e..fc7ecb608b 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/utils/JsonHelper.kt +++ b/core/utils/src/main/java/info/nightscout/core/utils/JsonHelper.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.utils +package info.nightscout.core.utils import org.json.JSONException import org.json.JSONObject diff --git a/implementation/src/main/java/info/nightscout/implementation/profile/ProfileStoreObject.kt b/implementation/src/main/java/info/nightscout/implementation/profile/ProfileStoreObject.kt index 6889af489d..8025ad4e70 100644 --- a/implementation/src/main/java/info/nightscout/implementation/profile/ProfileStoreObject.kt +++ b/implementation/src/main/java/info/nightscout/implementation/profile/ProfileStoreObject.kt @@ -4,12 +4,12 @@ import androidx.collection.ArrayMap import dagger.android.HasAndroidInjector import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.Config import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileStore import info.nightscout.interfaces.profile.PureProfile import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.bus.RxBus import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.interfaces.ResourceHelper 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 7d8a80b4c5..e66580353d 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt @@ -12,6 +12,7 @@ import info.nightscout.annotations.OpenForTesting import info.nightscout.core.events.EventNewNotification import info.nightscout.core.extensions.getCustomizedName import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.ValueWrapper import info.nightscout.database.entities.EffectiveProfileSwitch @@ -58,7 +59,6 @@ import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CustomCommand import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventDismissBolusProgressIfRunning diff --git a/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt b/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt index c13a78e140..6a2c4fe9d1 100644 --- a/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt @@ -3,6 +3,7 @@ package info.nightscout.implementation.userEntry import android.text.Spanned import dagger.Reusable import info.nightscout.core.main.R +import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.ColorGroup @@ -13,7 +14,6 @@ import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.Translator import info.nightscout.interfaces.userEntry.UserEntryPresentationHelper import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.utils.DateUtil diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java index 8225c18870..3ea11c6ec3 100644 --- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java +++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/InsightAlertService.java @@ -34,24 +34,22 @@ import info.nightscout.androidaps.plugins.pump.insight.exceptions.InsightExcepti import info.nightscout.androidaps.plugins.pump.insight.exceptions.app_layer_errors.AppLayerErrorException; import info.nightscout.androidaps.plugins.pump.insight.utils.AlertUtils; import info.nightscout.androidaps.plugins.pump.insight.utils.ExceptionTranslator; -import info.nightscout.interfaces.utils.HtmlHelper; +import info.nightscout.core.utils.HtmlHelper; import info.nightscout.rx.logging.AAPSLogger; import info.nightscout.rx.logging.LTag; import info.nightscout.shared.interfaces.ResourceHelper; public class InsightAlertService extends DaggerService implements InsightConnectionService.StateCallback { + private static final int NOTIFICATION_ID = 31345; + private final LocalBinder localBinder = new LocalBinder(); + private final Object $alertLock = new Object[0]; + private final MutableLiveData alertLiveData = new MutableLiveData<>(); @Inject AAPSLogger aapsLogger; @Inject ResourceHelper rh; @Inject AlertUtils alertUtils; - - private static final int NOTIFICATION_ID = 31345; - - private final LocalBinder localBinder = new LocalBinder(); private boolean connectionRequested; - private final Object $alertLock = new Object[0]; private Alert alert = null; - private final MutableLiveData alertLiveData = new MutableLiveData<>(); private Thread thread; private Vibrator vibrator; private boolean vibrating; @@ -100,7 +98,7 @@ public class InsightAlertService extends DaggerService implements InsightConnect public void onCreate() { super.onCreate(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - vibrator = ((VibratorManager)(getSystemService(Context.VIBRATOR_MANAGER_SERVICE))).getDefaultVibrator(); + vibrator = ((VibratorManager) (getSystemService(Context.VIBRATOR_MANAGER_SERVICE))).getDefaultVibrator(); } else { vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); } diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java index e1cb05d8e7..6ec58bff24 100644 --- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java +++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightAlertActivity.java @@ -22,7 +22,7 @@ import info.nightscout.androidaps.plugins.pump.insight.InsightAlertService; import info.nightscout.androidaps.plugins.pump.insight.descriptors.Alert; import info.nightscout.androidaps.plugins.pump.insight.descriptors.AlertStatus; import info.nightscout.androidaps.plugins.pump.insight.utils.AlertUtils; -import info.nightscout.interfaces.utils.HtmlHelper; +import info.nightscout.core.utils.HtmlHelper; public class InsightAlertActivity extends DaggerAppCompatActivity { diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt index ab715bab53..c630615858 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt @@ -5,6 +5,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.core.extensions.convertedToAbsolute import info.nightscout.core.extensions.convertedToPercent import info.nightscout.core.ui.R +import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.entities.GlucoseValue import info.nightscout.interfaces.aps.APSResult import info.nightscout.interfaces.constraints.Constraint @@ -15,7 +16,6 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.defs.PumpDescription import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt index 293e048e61..568819f482 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt @@ -15,6 +15,7 @@ import androidx.core.view.MenuProvider import androidx.lifecycle.Lifecycle import dagger.android.support.DaggerFragment import info.nightscout.core.utils.fabric.FabricPrivacy +import info.nightscout.interfaces.aps.AutosensResult import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.plugins.aps.databinding.OpenapsFragmentBinding import info.nightscout.plugins.aps.events.EventOpenAPSUpdateGui @@ -30,6 +31,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import org.json.JSONArray import org.json.JSONException +import org.json.JSONObject import javax.inject.Inject class OpenAPSFragment : DaggerFragment(), MenuProvider { @@ -64,7 +66,11 @@ class OpenAPSFragment : DaggerFragment(), MenuProvider { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.swipeRefresh.setColorSchemeColors(rh.gac(context, android.R.attr.colorPrimaryDark), rh.gac(context, android.R.attr.colorPrimary), rh.gac(context,com.google.android.material.R.attr.colorSecondary)) + binding.swipeRefresh.setColorSchemeColors( + rh.gac(context, android.R.attr.colorPrimaryDark), + rh.gac(context, android.R.attr.colorPrimary), + rh.gac(context, com.google.android.material.R.attr.colorSecondary) + ) binding.swipeRefresh.setOnRefreshListener { binding.lastrun.text = rh.gs(R.string.executing) handler.post { activePlugin.activeAPS.invoke("OpenAPS swipe refresh", false) } @@ -156,6 +162,13 @@ class OpenAPSFragment : DaggerFragment(), MenuProvider { binding.swipeRefresh.isRefreshing = false } + private fun AutosensResult.json(): JSONObject = JSONObject() + .put("ratio", ratio) + .put("ratioLimit", ratioLimit) + .put("pastSensitivity", pastSensitivity) + .put("sensResult", sensResult) + .put("ratio", ratio) + @Synchronized private fun resetGUI(text: String) { if (_binding == null) return diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt index 0c4b99e3a7..031f100c20 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt @@ -14,11 +14,11 @@ import androidx.core.view.MenuProvider import androidx.lifecycle.Lifecycle import dagger.android.support.DaggerFragment import info.nightscout.core.pump.toHtml +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.plugins.aps.R import info.nightscout.plugins.aps.databinding.LoopFragmentBinding import info.nightscout.plugins.aps.loop.events.EventLoopSetLastRunGui diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/utils/JSONFormatter.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/utils/JSONFormatter.kt index 2eb96c04d8..8603cd6d9c 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/utils/JSONFormatter.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/utils/JSONFormatter.kt @@ -1,7 +1,7 @@ package info.nightscout.plugins.aps.utils import android.text.Spanned -import info.nightscout.interfaces.utils.HtmlHelper +import info.nightscout.core.utils.HtmlHelper import info.nightscout.rx.logging.AAPSLogger import org.json.JSONArray import org.json.JSONException diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt index 46bd06c7ff..cf0bcb7208 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt @@ -7,6 +7,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.profile.ProfileSealed import info.nightscout.core.ui.elements.WeekDay +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit import info.nightscout.interfaces.Config @@ -20,7 +21,6 @@ import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.interfaces.utils.MidnightTime import info.nightscout.plugins.aps.R import info.nightscout.plugins.general.autotune.data.ATProfile @@ -153,7 +153,7 @@ class AutotunePlugin @Inject constructor( } autotuneFS.exportPumpProfile(pumpProfile) - if (calcDays==0) { + if (calcDays == 0) { result = rh.gs(info.nightscout.core.ui.R.string.autotune_error_more_days) log(result) calculationRunning = false @@ -429,7 +429,7 @@ class AutotunePlugin @Inject constructor( } } for (i in days.weekdays.indices) - days.weekdays[i] = JsonHelper.safeGetBoolean(json, WeekDay.DayOfWeek.values()[i].name,true) + days.weekdays[i] = JsonHelper.safeGetBoolean(json, WeekDay.DayOfWeek.values()[i].name, true) result = JsonHelper.safeGetString(json, "result", "") updateButtonVisibility = JsonHelper.safeGetInt(json, "updateButtonVisibility") lastRunSuccess = true @@ -438,17 +438,17 @@ class AutotunePlugin @Inject constructor( } } - fun calcDays(daysBack:Int): Int { - var endTime = MidnightTime.calc(dateUtil.now()) + autotuneStartHour * 60 * 60 * 1000L - if (endTime > dateUtil.now()) endTime -= T.days(1).msecs() // Check if 4 AM is before now - val startTime = endTime - daysBack * T.days(1).msecs() - var result = 0 - for (i in 0 until daysBack) { - if (days.isSet(startTime + i * T.days(1).msecs())) - result++ - } - return result + fun calcDays(daysBack: Int): Int { + var endTime = MidnightTime.calc(dateUtil.now()) + autotuneStartHour * 60 * 60 * 1000L + if (endTime > dateUtil.now()) endTime -= T.days(1).msecs() // Check if 4 AM is before now + val startTime = endTime - daysBack * T.days(1).msecs() + var result = 0 + for (i in 0 until daysBack) { + if (days.isSet(startTime + i * T.days(1).msecs())) + result++ } + return result + } private fun log(message: String) { atLog("[Plugin] $message") diff --git a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt index 33864b225b..422da5253c 100644 --- a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt +++ b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt @@ -2,12 +2,12 @@ package info.nightscout.plugins.aps.loop import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.utils.JsonHelper.safeGetDouble import info.nightscout.database.entities.TemporaryBasal import info.nightscout.interfaces.aps.APSResult import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.pump.defs.PumpType -import info.nightscout.interfaces.utils.JsonHelper.safeGetDouble import info.nightscout.sharedtests.TestBaseWithProfile import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach diff --git a/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotuneCoreTest.kt b/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotuneCoreTest.kt index 8bf18b6d83..daa4dd7287 100644 --- a/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotuneCoreTest.kt +++ b/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotuneCoreTest.kt @@ -1,11 +1,11 @@ package info.nightscout.plugins.general.autotune import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.data.Block import info.nightscout.database.entities.data.TargetBlock import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.profile.PureProfile -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.general.autotune.data.ATProfile import info.nightscout.plugins.general.autotune.data.PreppedGlucose import info.nightscout.shared.utils.DateUtil diff --git a/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotunePrepTest.kt b/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotunePrepTest.kt index b6127197e3..f5e0038be1 100644 --- a/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotunePrepTest.kt +++ b/plugins/aps/src/test/java/info/nightscout/plugins/general/autotune/AutotunePrepTest.kt @@ -2,6 +2,7 @@ package info.nightscout.plugins.general.autotune import info.nightscout.core.extensions.shiftBlock import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.Bolus import info.nightscout.database.entities.Carbs import info.nightscout.database.entities.GlucoseValue @@ -12,7 +13,6 @@ import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.iob.IobTotal import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.PureProfile -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.general.autotune.data.PreppedGlucose import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP diff --git a/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt b/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt index 610ae67a12..0a4406b3b1 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt @@ -32,6 +32,7 @@ import info.nightscout.automation.events.EventAutomationUpdateGui import info.nightscout.automation.triggers.TriggerConnector import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.utils.ActionModeHelper +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Sources @@ -39,7 +40,6 @@ import info.nightscout.interfaces.dragHelpers.ItemTouchHelperAdapter import info.nightscout.interfaces.dragHelpers.OnStartDragListener import info.nightscout.interfaces.dragHelpers.SimpleItemTouchHelperCallback import info.nightscout.interfaces.logging.UserEntryLogger -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.shared.extensions.toVisibility @@ -104,17 +104,17 @@ class AutomationFragment : DaggerFragment(), OnStartDragListener, MenuProvider { override fun onMenuItemSelected(item: MenuItem): Boolean = if (actionHelper.onOptionsItemSelected(item)) true else when (item.itemId) { - ID_MENU_RUN -> { + ID_MENU_RUN -> { Thread { automationPlugin.processActions() }.start() true } - ID_MENU_ADD -> { + ID_MENU_ADD -> { add() true } - else -> super.onContextItemSelected(item) + else -> super.onContextItemSelected(item) } @SuppressLint("NotifyDataSetChanged") diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt index eb87995ed2..64a648719a 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionAlarm.kt @@ -8,11 +8,11 @@ import info.nightscout.automation.R import info.nightscout.automation.elements.InputString import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder +import info.nightscout.automation.ui.TimerUtil +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.Config import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper -import info.nightscout.automation.ui.TimerUtil import info.nightscout.rx.bus.RxBus import info.nightscout.shared.utils.DateUtil import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionCarePortalEvent.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionCarePortalEvent.kt index 2bcd2b2e0e..7e30ba1f84 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionCarePortalEvent.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionCarePortalEvent.kt @@ -9,6 +9,7 @@ import info.nightscout.automation.elements.InputString import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.core.extensions.fromConstant +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit @@ -18,7 +19,6 @@ import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt index 1aed6376a0..2601c8d736 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopSuspend.kt @@ -7,6 +7,7 @@ import info.nightscout.automation.R import info.nightscout.automation.elements.InputDuration import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.ValueWithUnit @@ -14,7 +15,6 @@ import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventRefreshOverview import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt index c3d07d8e15..c8d1700e04 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionNotification.kt @@ -8,12 +8,12 @@ import info.nightscout.automation.elements.InputString import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.core.events.EventNewNotification +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.transactions.InsertTherapyEventAnnouncementTransaction import info.nightscout.interfaces.notifications.NotificationUserMessage import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventRefreshOverview import io.reactivex.rxjava3.disposables.CompositeDisposable diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt index 82fc7e4a97..f051b81063 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitch.kt @@ -7,6 +7,7 @@ import info.nightscout.automation.R import info.nightscout.automation.elements.InputProfileName import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.ValueWithUnit @@ -15,7 +16,6 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.utils.DateUtil import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt index 2e2de7f32f..4c488402c2 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionProfileSwitchPercent.kt @@ -10,6 +10,7 @@ import info.nightscout.automation.elements.InputPercent import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.triggers.TriggerProfilePercent +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.ValueWithUnit @@ -17,7 +18,6 @@ import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject import javax.inject.Inject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt index cd008a2e39..5b70267c56 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionRunAutotune.kt @@ -9,12 +9,12 @@ import info.nightscout.automation.elements.InputWeekDay import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.core.ui.elements.WeekDay +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.autotune.Autotune import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP @@ -89,7 +89,7 @@ class ActionRunAutotune(injector: HasAndroidInjector) : Action(injector) { override fun fromJSON(data: String): Action { val o = JSONObject(data) for (i in days.weekdays.indices) - days.weekdays[i] = JsonHelper.safeGetBoolean(o, WeekDay.DayOfWeek.values()[i].name,true) + days.weekdays[i] = JsonHelper.safeGetBoolean(o, WeekDay.DayOfWeek.values()[i].name, true) inputProfileName.value = JsonHelper.safeGetString(o, "profileToTune", "") defaultValue = JsonHelper.safeGetInt(o, "tunedays") if (defaultValue == 0) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt index 051a2a0261..692ce192fe 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionSendSMS.kt @@ -6,10 +6,10 @@ import info.nightscout.automation.R import info.nightscout.automation.elements.InputString import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.smsCommunicator.SmsCommunicator -import info.nightscout.interfaces.utils.JsonHelper import org.json.JSONObject import javax.inject.Inject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt index 96628ad1f7..da2f074488 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt @@ -11,6 +11,8 @@ import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.triggers.TriggerTempTarget import info.nightscout.core.extensions.friendlyDescription +import info.nightscout.core.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper.safeGetDouble import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry.Sources @@ -24,8 +26,6 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.interfaces.utils.JsonHelper -import info.nightscout.interfaces.utils.JsonHelper.safeGetDouble import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.utils.DateUtil diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerAutosensValue.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerAutosensValue.kt index e37dcdd48c..8021265c1c 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerAutosensValue.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerAutosensValue.kt @@ -9,8 +9,8 @@ import info.nightscout.automation.elements.InputDouble import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel -import info.nightscout.interfaces.utils.JsonHelper.safeGetDouble -import info.nightscout.interfaces.utils.JsonHelper.safeGetString +import info.nightscout.core.utils.JsonHelper.safeGetDouble +import info.nightscout.core.utils.JsonHelper.safeGetString import info.nightscout.rx.logging.LTag import org.json.JSONObject import java.text.DecimalFormat diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBTDevice.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBTDevice.kt index b4fb46ef43..3c1e0f3d66 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBTDevice.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBTDevice.kt @@ -16,7 +16,7 @@ import info.nightscout.automation.elements.InputDropdownMenu import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel import info.nightscout.core.ui.toast.ToastUtils -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.rx.events.EventBTChange import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt index 82a80eca13..9076b3980e 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt @@ -9,9 +9,9 @@ import info.nightscout.automation.elements.InputBg import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt index f41adcbbac..d784811c5b 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt @@ -9,10 +9,10 @@ import info.nightscout.automation.elements.InputDuration import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper.safeGetString import info.nightscout.database.ValueWrapper import info.nightscout.database.entities.Bolus -import info.nightscout.interfaces.utils.JsonHelper -import info.nightscout.interfaces.utils.JsonHelper.safeGetString import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerCOB.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerCOB.kt index ed85079357..988bbbf5a7 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerCOB.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerCOB.kt @@ -9,8 +9,8 @@ import info.nightscout.automation.elements.InputDouble import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel -import info.nightscout.interfaces.utils.JsonHelper -import info.nightscout.interfaces.utils.JsonHelper.safeGetDouble +import info.nightscout.core.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper.safeGetDouble import info.nightscout.rx.logging.LTag import org.json.JSONObject import java.text.DecimalFormat diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerConnector.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerConnector.kt index b303d55f88..92c6100a1a 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerConnector.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerConnector.kt @@ -12,7 +12,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.automation.R import info.nightscout.automation.dialogs.ChooseOperationDialog import info.nightscout.core.ui.elements.VerticalTextView -import info.nightscout.interfaces.utils.JsonHelper.safeGetString +import info.nightscout.core.utils.JsonHelper.safeGetString import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper import org.json.JSONArray diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt index 6365af9304..6f0ed7966c 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt @@ -10,9 +10,9 @@ import info.nightscout.automation.elements.InputDelta.DeltaType import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject import java.text.DecimalFormat diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerHeartRate.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerHeartRate.kt index e1a6c4c919..df05a95613 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerHeartRate.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerHeartRate.kt @@ -10,7 +10,7 @@ import info.nightscout.automation.elements.InputDouble import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject import java.text.DecimalFormat @@ -61,7 +61,7 @@ class TriggerHeartRate(injector: HasAndroidInjector) : Trigger(injector) { rh.gs(R.string.triggerHeartRateDesc, rh.gs(comparator.value.stringRes), heartRate.value) override fun icon(): Optional = Optional.of(info.nightscout.core.main.R.drawable.ic_cp_heart_rate) - + override fun duplicate(): Trigger { return TriggerHeartRate(injector).also { o -> o.heartRate.setValue(heartRate.value) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerIob.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerIob.kt index 51d237edbf..077a5cf927 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerIob.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerIob.kt @@ -9,7 +9,7 @@ import info.nightscout.automation.elements.InputInsulin import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerLocation.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerLocation.kt index a199bf7d42..fadee002e0 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerLocation.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerLocation.kt @@ -12,7 +12,7 @@ import info.nightscout.automation.elements.InputString import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject import java.text.DecimalFormat diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt index 55b996f188..0421b47b43 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerProfilePercent.kt @@ -10,7 +10,7 @@ import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel import info.nightscout.core.profile.ProfileSealed -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerPumpLastConnection.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerPumpLastConnection.kt index 4312ed9cb2..5b640105a0 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerPumpLastConnection.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerPumpLastConnection.kt @@ -9,8 +9,8 @@ import info.nightscout.automation.elements.InputDuration import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel -import info.nightscout.interfaces.utils.JsonHelper.safeGetInt -import info.nightscout.interfaces.utils.JsonHelper.safeGetString +import info.nightscout.core.utils.JsonHelper.safeGetInt +import info.nightscout.core.utils.JsonHelper.safeGetString import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt index 805cf24fa4..45848ea9e7 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerRecurringTime.kt @@ -9,8 +9,8 @@ import info.nightscout.automation.elements.InputWeekDay import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel import info.nightscout.core.ui.elements.WeekDay +import info.nightscout.core.utils.JsonHelper import info.nightscout.core.utils.MidnightUtils -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.interfaces.utils.MidnightTime import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTarget.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTarget.kt index 140d1e5f35..50e605d5ac 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTarget.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTarget.kt @@ -7,8 +7,8 @@ import info.nightscout.automation.R import info.nightscout.automation.elements.ComparatorExists import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.ValueWrapper -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt index a03333ce87..763219fcb1 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt @@ -9,10 +9,10 @@ import info.nightscout.automation.elements.InputBg import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.ValueWrapper import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTime.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTime.kt index 7b2d507815..07c5f0cc08 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTime.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTime.kt @@ -7,7 +7,7 @@ import info.nightscout.automation.R import info.nightscout.automation.elements.InputDateTime import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.utils.T import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTimeRange.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTimeRange.kt index 2f94ba9887..f7b7910960 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTimeRange.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTimeRange.kt @@ -7,8 +7,8 @@ import info.nightscout.automation.R import info.nightscout.automation.elements.InputTimeRange import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.utils.JsonHelper.safeGetInt import info.nightscout.core.utils.MidnightUtils -import info.nightscout.interfaces.utils.JsonHelper.safeGetInt import info.nightscout.interfaces.utils.MidnightTime import info.nightscout.rx.logging.LTag import org.json.JSONObject diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerWifiSsid.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerWifiSsid.kt index 28f2addfb3..420b4a7e9c 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerWifiSsid.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerWifiSsid.kt @@ -9,8 +9,8 @@ import info.nightscout.automation.elements.InputString import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.receivers.ReceiverStatusStore -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.rx.logging.LTag import org.json.JSONObject import javax.inject.Inject diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt index 48e152d2b4..a00baaca9b 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt @@ -12,6 +12,7 @@ import info.nightscout.configuration.databinding.MaintenanceFragmentBinding import info.nightscout.configuration.maintenance.activities.LogSettingActivity import info.nightscout.core.graph.OverviewData import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Sources @@ -26,7 +27,6 @@ import info.nightscout.interfaces.protection.ProtectionCheck.Protection.PREFEREN import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.sync.DataSyncSelectorXdrip import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventPreferenceChange diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesFragment.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesFragment.kt index 1494a61328..6c299b94c1 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesFragment.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesFragment.kt @@ -18,13 +18,13 @@ import androidx.recyclerview.widget.LinearSmoothScroller import androidx.recyclerview.widget.RecyclerView import dagger.android.support.DaggerFragment import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.ValueWithUnit import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.receivers.ReceiverStatusStore -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.plugins.constraints.R import info.nightscout.plugins.constraints.databinding.ObjectivesFragmentBinding import info.nightscout.plugins.constraints.databinding.ObjectivesItemBinding @@ -100,8 +100,8 @@ class ObjectivesFragment : DaggerFragment() { .toObservable(EventObjectivesUpdateGui::class.java) .observeOn(aapsSchedulers.main) .subscribe({ - binding.recyclerview.adapter?.notifyDataSetChanged() - }, fabricPrivacy::logException) + binding.recyclerview.adapter?.notifyDataSetChanged() + }, fabricPrivacy::logException) } @Synchronized @@ -224,7 +224,12 @@ class ObjectivesFragment : DaggerFragment() { val state = TextView(holder.binding.progress.context) state.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.defaultTextColor)) val basicHTML = "%2\$s" - val formattedHTML = String.format(basicHTML, if (task.isCompleted()) rh.gac(context, info.nightscout.core.ui.R.attr.isCompletedColor) else rh.gac(context, info.nightscout.core.ui.R.attr.isNotCompletedColor), task.progress) + val formattedHTML = + String.format( + basicHTML, + if (task.isCompleted()) rh.gac(context, info.nightscout.core.ui.R.attr.isCompletedColor) else rh.gac(context, info.nightscout.core.ui.R.attr.isNotCompletedColor), + task.progress + ) state.text = HtmlHelper.fromHtml(formattedHTML) state.gravity = Gravity.END holder.binding.progress.addView(state, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) @@ -333,8 +338,10 @@ class ObjectivesFragment : DaggerFragment() { holder.binding.unstart.setOnClickListener { activity?.let { activity -> OKDialog.showConfirmation(activity, rh.gs(info.nightscout.core.ui.R.string.objectives), rh.gs(R.string.doyouwantresetstart), Runnable { - uel.log(Action.OBJECTIVE_UNSTARTED, Sources.Objectives, - ValueWithUnit.SimpleInt(position + 1)) + uel.log( + Action.OBJECTIVE_UNSTARTED, Sources.Objectives, + ValueWithUnit.SimpleInt(position + 1) + ) objective.startedOn = 0 scrollToCurrentObjective() rxBus.send(EventObjectivesUpdateGui()) diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt index 3b4ae53379..f06bb93822 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt @@ -35,6 +35,7 @@ import info.nightscout.core.ui.UIRunnable import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.elements.SingleClickButton import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.JsonHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.wizard.QuickWizard import info.nightscout.database.entities.UserEntry.Action @@ -66,7 +67,6 @@ import info.nightscout.interfaces.source.DexcomBoyda import info.nightscout.interfaces.source.XDripSource import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.interfaces.utils.TrendCalculator import info.nightscout.plugins.R import info.nightscout.plugins.databinding.OverviewFragmentBinding @@ -843,7 +843,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList if (it.value.originalPercentage != 100 || it.value.originalTimeshift != 0L || it.value.originalDuration != 0L) info.nightscout.core.ui.R.attr.ribbonWarningColor else info.nightscout.core.ui.R.attr.ribbonDefaultColor - } else info.nightscout.core.ui.R.attr.ribbonDefaultColor + } else info.nightscout.core.ui.R.attr.ribbonDefaultColor } ?: info.nightscout.core.ui.R.attr.ribbonCriticalColor val profileTextColor = profile?.let { @@ -1095,7 +1095,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } binding.infoLayout.sensitivity.text = - lastAutosensData?.let { + lastAutosensData?.let { String.format(Locale.ENGLISH, "%.0f%%", it.autosensResult.ratio * 100) } ?: "" // Show variable sensitivity diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt index 613790698f..04221f3cba 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorFragment.kt @@ -5,10 +5,10 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import dagger.android.support.DaggerFragment +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.smsCommunicator.Sms import info.nightscout.interfaces.smsCommunicator.SmsCommunicator -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.plugins.databinding.SmscommunicatorFragmentBinding import info.nightscout.plugins.general.smsCommunicator.events.EventSmsCommunicatorUpdateGui import info.nightscout.rx.AapsSchedulers diff --git a/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt b/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt index 1eece2e053..df21a75f78 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt @@ -8,6 +8,7 @@ import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.profile.ProfileSealed import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.Config import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit @@ -24,7 +25,6 @@ import info.nightscout.interfaces.profile.ProfileStore import info.nightscout.interfaces.profile.PureProfile import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.R import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventLocalProfileChanged diff --git a/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt b/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt index 28fb917fb8..ce62786154 100644 --- a/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt +++ b/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.work.WorkerParameters import androidx.work.workDataOf import dagger.android.HasAndroidInjector +import info.nightscout.core.utils.JsonHelper.safeGetString import info.nightscout.core.utils.worker.LoggingWorker import info.nightscout.database.entities.GlucoseValue import info.nightscout.database.impl.AppRepository @@ -14,7 +15,6 @@ import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.source.BgSource -import info.nightscout.interfaces.utils.JsonHelper.safeGetString import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSAlarm.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSAlarm.kt new file mode 100644 index 0000000000..f6ffa45c67 --- /dev/null +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSAlarm.kt @@ -0,0 +1,42 @@ +package info.nightscout.plugins.sync.nsShared + +import info.nightscout.core.utils.JsonHelper +import info.nightscout.interfaces.nsclient.NSAlarm +import org.json.JSONObject + +class NSAlarmObject(private var data: JSONObject) : NSAlarm { + /* + { + "level":2, + "title":"Urgent HIGH", + "message":"BG Now: 5.2 -0.1 → mmol\/L\nRaw BG: 5 mmol\/L Čistý\nBG 15m: 5 mmol\/L\nIOB: 0.00U\nCOB: 0g", + "eventName":"high", + "plugin":{"name":"simplealarms","label":"Simple Alarms","pluginType":"notification","enabled":true}, + "pushoverSound":"persistent", + "debug":{"lastSGV":5.2,"thresholds":{"bgHigh":80,"bgTargetTop":75,"bgTargetBottom":72,"bgLow":70}}, + "group":"default", + "key":"simplealarms_2" + } + */ + + override fun level(): Int = + JsonHelper.safeGetInt(data, "level", 0) + + override fun group(): String = + JsonHelper.safeGetString(data, "group", "N/A") + + override fun title(): String = + JsonHelper.safeGetString(data, "title", "N/A") + + override fun message(): String = + JsonHelper.safeGetString(data, "message", "N/A") + + override fun low(): Boolean = + JsonHelper.safeGetString(data, "eventName", "") == "low" + + override fun high(): Boolean = + JsonHelper.safeGetString(data, "eventName", "") == "high" + + override fun timeago(): Boolean = + JsonHelper.safeGetString(data, "eventName", "") == "timeago" +} \ No newline at end of file diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSClientFragment.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSClientFragment.kt index 98081b80a6..a522c6c990 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSClientFragment.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSClientFragment.kt @@ -18,6 +18,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import dagger.android.support.DaggerFragment import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.UserEntry import info.nightscout.interfaces.Config @@ -26,7 +27,6 @@ import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginFragment -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.databinding.NsClientFragmentBinding import info.nightscout.plugins.sync.databinding.NsClientLogItemBinding @@ -235,6 +235,7 @@ class NSClientFragment : DaggerFragment(), MenuProvider, PluginFragment { private fun updateLog() { _binding?.recyclerview?.swapAdapter(RecyclerViewAdapter(nsClientPlugin?.listLog ?: arrayListOf()), true) } + private inner class RecyclerViewAdapter(private var logList: List) : RecyclerView.Adapter() { override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): NsClientLogViewHolder = diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSSgv.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSSgv.kt new file mode 100644 index 0000000000..e0a4e713f4 --- /dev/null +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NSSgv.kt @@ -0,0 +1,33 @@ +package info.nightscout.plugins.sync.nsShared + +import info.nightscout.core.utils.JsonHelper +import info.nightscout.interfaces.nsclient.NSSgv +import org.json.JSONObject + +/** + * + * {"mgdl":105,"mills":1455136282375,"device":"xDrip-BluetoothWixel","direction":"Flat","filtered":98272,"unfiltered":98272,"noise":1,"rssi":100} + */ +@Suppress("SpellCheckingInspection") +class NSSgvObject(val data: JSONObject) : NSSgv { + + override val mgdl: Int? + get() = JsonHelper.safeGetIntAllowNull(data, "mgdl") + override val filtered: Int? + get() = JsonHelper.safeGetIntAllowNull(data, "filtered") + override val unfiltered: Int? + get() = JsonHelper.safeGetIntAllowNull(data, "unfiltered") + override val noise: Int? + get() = JsonHelper.safeGetIntAllowNull(data, "noise") + override val rssi: Int? + get() = JsonHelper.safeGetIntAllowNull(data, "rssi") + override val mills: Long? + get() = JsonHelper.safeGetLongAllowNull(data, "mills") + override val device: String? + get() = JsonHelper.safeGetStringAllowNull(data, "device", null) + override val direction: String? + get() = JsonHelper.safeGetStringAllowNull(data, "direction", null) + override val id: String? + get() = JsonHelper.safeGetStringAllowNull(data, "_id", null) + +} \ No newline at end of file diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NsIncomingDataProcessor.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NsIncomingDataProcessor.kt index 57c441316f..025c31660a 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NsIncomingDataProcessor.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/NsIncomingDataProcessor.kt @@ -1,19 +1,18 @@ package info.nightscout.plugins.sync.nsShared import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.Food import info.nightscout.database.entities.GlucoseValue import info.nightscout.database.transactions.TransactionGlucoseValue import info.nightscout.interfaces.Config import info.nightscout.interfaces.Constants import info.nightscout.interfaces.notifications.Notification -import info.nightscout.interfaces.nsclient.NSSgv import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.ProfileSource import info.nightscout.interfaces.source.NSClientSource -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.nsclient.extensions.fromJson import info.nightscout.plugins.sync.nsclientV3.extensions.toBolus @@ -70,7 +69,7 @@ class NsIncomingDataProcessor @Inject constructor( ) { private fun toGv(jsonObject: JSONObject): TransactionGlucoseValue? { - val sgv = NSSgv(jsonObject) + val sgv = NSSgvObject(jsonObject) return TransactionGlucoseValue( timestamp = sgv.mills ?: return null, value = sgv.mgdl?.toDouble() ?: return null, diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorV1.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorV1.kt index f4a52bbe9c..e663197bc5 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorV1.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorV1.kt @@ -1,12 +1,12 @@ package info.nightscout.plugins.sync.nsclient +import info.nightscout.core.utils.JsonHelper import info.nightscout.core.utils.waitMillis import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.source.NSClientSource import info.nightscout.interfaces.sync.DataSyncSelector -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.nsShared.events.EventNSClientUpdateGuiQueue import info.nightscout.plugins.sync.nsShared.events.EventNSClientUpdateGuiStatus diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt index b62eb70c96..c7f33f663c 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSDeviceStatusHandler.kt @@ -1,11 +1,11 @@ package info.nightscout.plugins.sync.nsclient.data import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.utils.HtmlHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.Config -import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData -import info.nightscout.interfaces.utils.HtmlHelper -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.sdk.localmodel.devicestatus.NSDeviceStatus import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSMbg.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSMbg.kt index 9ab9cecf28..908c92925b 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSMbg.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSMbg.kt @@ -1,6 +1,6 @@ package info.nightscout.plugins.sync.nsclient.data -import info.nightscout.interfaces.utils.JsonHelper +import info.nightscout.core.utils.JsonHelper import org.json.JSONObject class NSMbg(val json: JSONObject) { diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSSettingsStatusImpl.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSSettingsStatusImpl.kt index ffdf576816..200cd69154 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSSettingsStatusImpl.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/NSSettingsStatusImpl.kt @@ -5,6 +5,7 @@ package info.nightscout.plugins.sync.nsclient.data import android.content.Context import info.nightscout.annotations.OpenForTesting import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry.Action import info.nightscout.interfaces.Config @@ -13,7 +14,6 @@ import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.nsclient.NSSettingsStatus import info.nightscout.interfaces.profile.DefaultValueHelper import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.R import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventDismissNotification diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/ProcessedDeviceStatusDataImpl.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/ProcessedDeviceStatusDataImpl.kt index 3fb8b68c28..5786ff11b7 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/ProcessedDeviceStatusDataImpl.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/data/ProcessedDeviceStatusDataImpl.kt @@ -2,12 +2,12 @@ package info.nightscout.plugins.sync.nsclient.data import android.text.Spanned import dagger.android.HasAndroidInjector +import info.nightscout.core.utils.HtmlHelper +import info.nightscout.core.utils.JsonHelper import info.nightscout.interfaces.aps.APSResult import info.nightscout.interfaces.nsclient.NSSettingsStatus import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData import info.nightscout.interfaces.profile.Instantiator -import info.nightscout.interfaces.utils.HtmlHelper -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.interfaces.utils.Round import info.nightscout.plugins.sync.R import info.nightscout.shared.interfaces.ResourceHelper @@ -46,30 +46,30 @@ class ProcessedDeviceStatusDataImpl @Inject constructor( // test warning level val level = when { - pumpData.clock + nsSettingsStatus.extendedPumpSettings("urgentClock") * 60 * 1000L < dateUtil.now() -> ProcessedDeviceStatusData.Levels.URGENT - pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("urgentRes") -> ProcessedDeviceStatusData.Levels.URGENT - pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("urgentBattP") -> ProcessedDeviceStatusData.Levels.URGENT - !pumpData.isPercent && pumpData.voltage > 0 && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("urgentBattV") -> ProcessedDeviceStatusData.Levels.URGENT - pumpData.clock + nsSettingsStatus.extendedPumpSettings("warnClock") * 60 * 1000L < dateUtil.now() -> ProcessedDeviceStatusData.Levels.WARN - pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("warnRes") -> ProcessedDeviceStatusData.Levels.WARN - pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("warnBattP") -> ProcessedDeviceStatusData.Levels.WARN - !pumpData.isPercent && pumpData.voltage > 0 && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> ProcessedDeviceStatusData.Levels.WARN - else -> ProcessedDeviceStatusData.Levels.INFO - } - string.append("") - // val insulinUnit = rh.gs(info.nightscout.core.ui.R.string.insulin_unit_shortname) + pumpData.clock + nsSettingsStatus.extendedPumpSettings("urgentClock") * 60 * 1000L < dateUtil.now() -> ProcessedDeviceStatusData.Levels.URGENT + pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("urgentRes") -> ProcessedDeviceStatusData.Levels.URGENT + pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("urgentBattP") -> ProcessedDeviceStatusData.Levels.URGENT + !pumpData.isPercent && pumpData.voltage > 0 && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("urgentBattV") -> ProcessedDeviceStatusData.Levels.URGENT + pumpData.clock + nsSettingsStatus.extendedPumpSettings("warnClock") * 60 * 1000L < dateUtil.now() -> ProcessedDeviceStatusData.Levels.WARN + pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("warnRes") -> ProcessedDeviceStatusData.Levels.WARN + pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("warnBattP") -> ProcessedDeviceStatusData.Levels.WARN + !pumpData.isPercent && pumpData.voltage > 0 && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> ProcessedDeviceStatusData.Levels.WARN + else -> ProcessedDeviceStatusData.Levels.INFO + } + string.append("") + // val insulinUnit = rh.gs(info.nightscout.core.ui.R.string.insulin_unit_shortname) // val fields = nsSettingsStatus.pumpExtendedSettingsFields() // Removed here. Same value is in StatusLights - // if (pumpData.reservoirDisplayOverride != "") string.append(pumpData.reservoirDisplayOverride).append("$insulinUnit ") - // else if (fields.contains("reservoir")) string.append(pumpData.reservoir.toInt()).append("$insulinUnit ") - if (pumpData.isPercent) string.append(pumpData.percent).append("% ") - if (!pumpData.isPercent && pumpData.voltage > 0) string.append(Round.roundTo(pumpData.voltage, 0.001)).append(" ") - string.append(dateUtil.minAgo(rh, pumpData.clock)).append(" ") - string.append(pumpData.status).append(" ") - //string.append(device).append(" ") - string.append("") // color - return HtmlHelper.fromHtml(string.toString()) - } + // if (pumpData.reservoirDisplayOverride != "") string.append(pumpData.reservoirDisplayOverride).append("$insulinUnit ") + // else if (fields.contains("reservoir")) string.append(pumpData.reservoir.toInt()).append("$insulinUnit ") + if (pumpData.isPercent) string.append(pumpData.percent).append("% ") + if (!pumpData.isPercent && pumpData.voltage > 0) string.append(Round.roundTo(pumpData.voltage, 0.001)).append(" ") + string.append(dateUtil.minAgo(rh, pumpData.clock)).append(" ") + string.append(pumpData.status).append(" ") + //string.append(device).append(" ") + string.append("") // color + return HtmlHelper.fromHtml(string.toString()) + } override val extendedPumpStatus: Spanned get() = pumpData?.extended ?: HtmlHelper.fromHtml("") override val extendedOpenApsStatus: Spanned @@ -101,9 +101,11 @@ class ProcessedDeviceStatusDataImpl @Inject constructor( // test warning level val level = when { - openAPSData.clockSuggested + T.mins(sp.getLong(info.nightscout.core.utils.R.string.key_ns_alarm_urgent_stale_data_value, 31)).msecs() < dateUtil.now() -> ProcessedDeviceStatusData.Levels.URGENT - openAPSData.clockSuggested + T.mins(sp.getLong(info.nightscout.core.utils.R.string.key_ns_alarm_stale_data_value, 16)).msecs() < dateUtil.now() -> ProcessedDeviceStatusData.Levels.WARN - else -> ProcessedDeviceStatusData.Levels.INFO + openAPSData.clockSuggested + T.mins(sp.getLong(info.nightscout.core.utils.R.string.key_ns_alarm_urgent_stale_data_value, 31)) + .msecs() < dateUtil.now() -> ProcessedDeviceStatusData.Levels.URGENT + + openAPSData.clockSuggested + T.mins(sp.getLong(info.nightscout.core.utils.R.string.key_ns_alarm_stale_data_value, 16)).msecs() < dateUtil.now() -> ProcessedDeviceStatusData.Levels.WARN + else -> ProcessedDeviceStatusData.Levels.INFO } string.append("") if (openAPSData.clockSuggested != 0L) string.append(dateUtil.minAgo(rh, openAPSData.clockSuggested)).append(" ") @@ -116,9 +118,10 @@ class ProcessedDeviceStatusDataImpl @Inject constructor( override fun getAPSResult(injector: HasAndroidInjector): APSResult = instantiator.provideAPSResultObject().also { - it.json = openAPSData.suggested - it.date = openAPSData.clockSuggested - } + it.json = openAPSData.suggested + it.date = openAPSData.clockSuggested + } + override val uploaderStatus: String get() { val iterator: Iterator<*> = uploaderMap.entries.iterator() diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusCalculatorResultExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusCalculatorResultExtension.kt index 41666a0277..27a773f481 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusCalculatorResultExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusCalculatorResultExtension.kt @@ -2,8 +2,8 @@ package info.nightscout.plugins.sync.nsclient.extensions import com.google.gson.Gson import com.google.gson.JsonSyntaxException +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.BolusCalculatorResult -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.utils.DateUtil import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusExtension.kt index e539cbedbb..6031659b9e 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/BolusExtension.kt @@ -1,8 +1,8 @@ package info.nightscout.plugins.sync.nsclient.extensions +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.Bolus import info.nightscout.database.entities.embedments.InterfaceIDs -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/CarbsExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/CarbsExtension.kt index b716c96171..b03e4bf85f 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/CarbsExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/CarbsExtension.kt @@ -1,9 +1,9 @@ package info.nightscout.plugins.sync.nsclient.extensions +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.Carbs import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.embedments.InterfaceIDs -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/EffectiveProfileSwitchExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/EffectiveProfileSwitchExtension.kt index cbdf2818c8..11a8f2bc1a 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/EffectiveProfileSwitchExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/EffectiveProfileSwitchExtension.kt @@ -2,10 +2,10 @@ package info.nightscout.plugins.sync.nsclient.extensions import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.EffectiveProfileSwitch import info.nightscout.database.entities.embedments.InterfaceIDs import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt index fca2364cb8..073602a355 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt @@ -1,10 +1,10 @@ package info.nightscout.plugins.sync.nsclient.extensions import info.nightscout.core.extensions.toTemporaryBasal +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.ExtendedBolus import info.nightscout.database.entities.embedments.InterfaceIDs import info.nightscout.interfaces.profile.Profile -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/FoodExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/FoodExtension.kt index 9803d2dac6..d832b96c5a 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/FoodExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/FoodExtension.kt @@ -1,7 +1,7 @@ package info.nightscout.plugins.sync.nsclient.extensions +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.Food -import info.nightscout.interfaces.utils.JsonHelper import org.json.JSONObject fun Food.Companion.fromJson(jsonObject: JSONObject): Food? { diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/OfflineEventExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/OfflineEventExtension.kt index 6bd358e81d..9b30daa022 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/OfflineEventExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/OfflineEventExtension.kt @@ -1,8 +1,8 @@ package info.nightscout.plugins.sync.nsclient.extensions +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.OfflineEvent import info.nightscout.database.entities.embedments.InterfaceIDs -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt index e8b94af8ab..476ae32cdc 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt @@ -4,12 +4,12 @@ import info.nightscout.core.extensions.fromConstant import info.nightscout.core.extensions.getCustomizedName import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.ProfileSwitch import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.embedments.InterfaceIDs import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt index fa13c74c19..6f52a7a7ba 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt @@ -1,11 +1,11 @@ package info.nightscout.plugins.sync.nsclient.extensions import info.nightscout.core.extensions.convertedToAbsolute +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.TemporaryBasal import info.nightscout.database.entities.TemporaryBasal.Type.Companion.fromString import info.nightscout.database.entities.embedments.InterfaceIDs import info.nightscout.interfaces.profile.Profile -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import org.json.JSONObject diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt index e275c17366..1fd84ce0b2 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt @@ -1,9 +1,9 @@ package info.nightscout.plugins.sync.nsclient.extensions +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.TemporaryTarget import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt index 62a30dbb99..685b50b371 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt @@ -1,9 +1,9 @@ package info.nightscout.plugins.sync.nsclient.extensions +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.entities.TherapyEvent import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.nsclient.data.NSMbg import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt index 060df385bd..3b745d08a8 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt @@ -17,18 +17,18 @@ import com.google.gson.JsonDeserializer import dagger.android.DaggerService import dagger.android.HasAndroidInjector import info.nightscout.core.events.EventNewNotification +import info.nightscout.core.utils.JsonHelper.safeGetString +import info.nightscout.core.utils.JsonHelper.safeGetStringAllowNull import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.receivers.DataWorkerStorage import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config import info.nightscout.interfaces.notifications.Notification -import info.nightscout.interfaces.nsclient.NSAlarm import info.nightscout.interfaces.nsclient.NSSettingsStatus import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.JsonHelper.safeGetString -import info.nightscout.interfaces.utils.JsonHelper.safeGetStringAllowNull import info.nightscout.plugins.sync.R +import info.nightscout.plugins.sync.nsShared.NSAlarmObject import info.nightscout.plugins.sync.nsShared.NsIncomingDataProcessor import info.nightscout.plugins.sync.nsShared.events.EventConnectivityOptionChanged import info.nightscout.plugins.sync.nsShared.events.EventNSClientStatus @@ -638,7 +638,7 @@ import javax.inject.Inject private fun handleAnnouncement(announcement: JSONObject) { val defaultVal = config.NSCLIENT if (sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_announcements, defaultVal)) { - val nsAlarm = NSAlarm(announcement) + val nsAlarm = NSAlarmObject(announcement) uiInteraction.addNotificationWithAction(injector, nsAlarm) rxBus.send(EventNSClientNewLog("◄ ANNOUNCEMENT", safeGetString(announcement, "message", "received"))) aapsLogger.debug(LTag.NSCLIENT, announcement.toString()) @@ -650,7 +650,7 @@ import javax.inject.Inject if (sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_alarms, defaultVal)) { val snoozedTo = sp.getLong(rh.gs(info.nightscout.core.utils.R.string.key_snoozed_to) + alarm.optString("level"), 0L) if (snoozedTo == 0L || System.currentTimeMillis() > snoozedTo) { - val nsAlarm = NSAlarm(alarm) + val nsAlarm = NSAlarmObject(alarm) uiInteraction.addNotificationWithAction(injector, nsAlarm) } rxBus.send(EventNSClientNewLog("◄ ALARM", safeGetString(alarm, "message", "received"))) @@ -663,7 +663,7 @@ import javax.inject.Inject if (sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_alarms, defaultVal)) { val snoozedTo = sp.getLong(rh.gs(info.nightscout.core.utils.R.string.key_snoozed_to) + alarm.optString("level"), 0L) if (snoozedTo == 0L || System.currentTimeMillis() > snoozedTo) { - val nsAlarm = NSAlarm(alarm) + val nsAlarm = NSAlarmObject(alarm) uiInteraction.addNotificationWithAction(injector, nsAlarm) } rxBus.send(EventNSClientNewLog("◄ URGENTALARM", safeGetString(alarm, "message", "received"))) diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt index 062cbd0067..0f08a9256d 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt @@ -3,6 +3,7 @@ package info.nightscout.plugins.sync.nsclient.workers import android.content.Context import androidx.work.WorkerParameters import androidx.work.workDataOf +import info.nightscout.core.utils.JsonHelper import info.nightscout.core.utils.receivers.DataWorkerStorage import info.nightscout.core.utils.worker.LoggingWorker import info.nightscout.database.entities.Bolus @@ -20,7 +21,6 @@ import info.nightscout.interfaces.Config import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.pump.VirtualPump -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.nsclient.extensions.extendedBolusFromJson import info.nightscout.plugins.sync.nsclient.extensions.fromJson diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/DataSyncSelectorV3.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/DataSyncSelectorV3.kt index cfb9bc3e10..4e5ad23df1 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/DataSyncSelectorV3.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/DataSyncSelectorV3.kt @@ -1,6 +1,7 @@ package info.nightscout.plugins.sync.nsclientV3 import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config import info.nightscout.interfaces.nsclient.StoreDataForDb @@ -8,7 +9,6 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.source.NSClientSource import info.nightscout.interfaces.sync.DataSyncSelector -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.nsShared.events.EventNSClientUpdateGuiQueue import info.nightscout.plugins.sync.nsShared.events.EventNSClientUpdateGuiStatus diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt index ee34f38e64..83b32ad668 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt @@ -35,6 +35,7 @@ import info.nightscout.interfaces.sync.Sync import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.plugins.sync.R +import info.nightscout.plugins.sync.nsShared.NSAlarmObject import info.nightscout.plugins.sync.nsShared.NSClientFragment import info.nightscout.plugins.sync.nsShared.NsIncomingDataProcessor import info.nightscout.plugins.sync.nsShared.events.EventConnectivityOptionChanged @@ -525,7 +526,7 @@ class NSClientV3Plugin @Inject constructor( rxBus.send(EventNSClientNewLog("◄ ANNOUNCEMENT", data.optString("message"))) aapsLogger.debug(LTag.NSCLIENT, data.toString()) if (sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_announcements, config.NSCLIENT)) - uiInteraction.addNotificationWithAction(injector, NSAlarm(data)) + uiInteraction.addNotificationWithAction(injector, NSAlarmObject(data)) } private val onAlarm = Emitter.Listener { args -> @@ -548,7 +549,7 @@ class NSClientV3Plugin @Inject constructor( if (sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_alarms, config.NSCLIENT)) { val snoozedTo = sp.getLong(rh.gs(info.nightscout.core.utils.R.string.key_snoozed_to) + data.optString("level"), 0L) if (snoozedTo == 0L || System.currentTimeMillis() > snoozedTo) - uiInteraction.addNotificationWithAction(injector, NSAlarm(data)) + uiInteraction.addNotificationWithAction(injector, NSAlarmObject(data)) } } @@ -559,7 +560,7 @@ class NSClientV3Plugin @Inject constructor( if (sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_alarms, config.NSCLIENT)) { val snoozedTo = sp.getLong(rh.gs(info.nightscout.core.utils.R.string.key_snoozed_to) + data.optString("level"), 0L) if (snoozedTo == 0L || System.currentTimeMillis() > snoozedTo) - uiInteraction.addNotificationWithAction(injector, NSAlarm(data)) + uiInteraction.addNotificationWithAction(injector, NSAlarmObject(data)) } } diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadProfileStoreWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadProfileStoreWorker.kt index ce4a7d81ca..130930b083 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadProfileStoreWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadProfileStoreWorker.kt @@ -3,10 +3,10 @@ package info.nightscout.plugins.sync.nsclientV3.workers import android.content.Context import androidx.work.WorkerParameters import androidx.work.workDataOf +import info.nightscout.core.utils.JsonHelper import info.nightscout.core.utils.receivers.DataWorkerStorage import info.nightscout.core.utils.worker.LoggingWorker import info.nightscout.interfaces.sync.NsClient -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.nsShared.NsIncomingDataProcessor import info.nightscout.plugins.sync.nsclientV3.NSClientV3Plugin import info.nightscout.rx.bus.RxBus diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/tidepool/TidepoolPlugin.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/tidepool/TidepoolPlugin.kt index 0bcbf14233..3422c259dc 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/tidepool/TidepoolPlugin.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/tidepool/TidepoolPlugin.kt @@ -5,6 +5,7 @@ import android.text.Spanned import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import dagger.android.HasAndroidInjector +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Constants import info.nightscout.interfaces.plugin.PluginBase @@ -13,7 +14,6 @@ import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.sync.Sync import info.nightscout.interfaces.sync.Tidepool import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.nsShared.events.EventConnectivityOptionChanged import info.nightscout.plugins.sync.nsclient.ReceiverDelegate diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/DataSyncSelectorXdripImpl.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/DataSyncSelectorXdripImpl.kt index 6fd20db5be..57e13016a7 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/DataSyncSelectorXdripImpl.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/DataSyncSelectorXdripImpl.kt @@ -1,13 +1,13 @@ package info.nightscout.plugins.sync.xdrip import dagger.Lazy +import info.nightscout.core.utils.JsonHelper import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.XDripBroadcast import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.sync.DataSyncSelector import info.nightscout.interfaces.sync.DataSyncSelectorXdrip -import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.R import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/XdripPlugin.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/XdripPlugin.kt index 973abdcff7..ebbf7d1e2b 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/XdripPlugin.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/xdrip/XdripPlugin.kt @@ -15,6 +15,7 @@ import info.nightscout.core.extensions.toStringShort import info.nightscout.core.iob.generateCOBString import info.nightscout.core.iob.round import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit @@ -31,7 +32,6 @@ import info.nightscout.interfaces.sync.DataSyncSelector import info.nightscout.interfaces.sync.Sync import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.nsclient.extensions.toJson import info.nightscout.plugins.sync.xdrip.events.EventXdripUpdateGUI diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/CalibrationDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/CalibrationDialog.kt index 1b980a2c61..56ce69b92a 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/CalibrationDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/CalibrationDialog.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import com.google.common.base.Joiner import dagger.android.HasAndroidInjector import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.ValueWithUnit @@ -14,7 +15,6 @@ import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.XDripBroadcast import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.logging.UserEntryLogger -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.ui.databinding.DialogCalibrationBinding diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt index 6d250a5ab4..0cc7b4cb5d 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import com.google.common.base.Joiner import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.UserEntry.Action @@ -35,7 +36,6 @@ import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.interfaces.ResourceHelper @@ -278,7 +278,12 @@ class CarbsDialog : DialogFragmentWithDate() { if (duration > 0) actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + duration + rh.gs(info.nightscout.shared.R.string.shorthour)) if (carbsAfterConstraints > 0) { - actions.add(rh.gs(info.nightscout.core.ui.R.string.carbs) + ": " + "" + rh.gs(info.nightscout.core.main.R.string.format_carbs, carbsAfterConstraints) + "") + actions.add( + rh.gs(info.nightscout.core.ui.R.string.carbs) + ": " + "" + rh.gs(info.nightscout.core.main.R.string.format_carbs, carbsAfterConstraints) + "" + ) if (carbsAfterConstraints != carbs) actions.add("" + rh.gs(R.string.carbs_constraint_applied) + "") } diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/CareDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/CareDialog.kt index 51e43dc544..c6532abe62 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/CareDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/CareDialog.kt @@ -12,6 +12,7 @@ import com.google.common.base.Joiner import dagger.android.HasAndroidInjector import info.nightscout.core.extensions.fromConstant import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit @@ -24,7 +25,6 @@ import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.interfaces.ResourceHelper diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt index bc124586a0..10f02b2f0f 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import com.google.common.base.Joiner import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit @@ -19,7 +20,6 @@ import info.nightscout.interfaces.protection.ProtectionCheck import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt index 55a49ff99e..2b1084f47b 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import com.google.common.base.Joiner import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.UserEntry @@ -24,7 +25,6 @@ import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper @@ -125,7 +125,9 @@ class FillDialog : DialogFragmentWithDate() { .formatColor(context, rh, info.nightscout.core.ui.R.attr.insulinButtonColor) ) if (abs(insulinAfterConstraints - insulin) > 0.01) - actions.add(rh.gs(info.nightscout.core.ui.R.string.bolus_constraint_applied_warn, insulin, insulinAfterConstraints).formatColor(context, rh, info.nightscout.core.ui.R.attr.warningColor)) + actions.add( + rh.gs(info.nightscout.core.ui.R.string.bolus_constraint_applied_warn, insulin, insulinAfterConstraints).formatColor(context, rh, info.nightscout.core.ui.R.attr.warningColor) + ) } val siteChange = binding.fillCatheterChange.isChecked if (siteChange) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt index 59f0addbdf..1c8596bc04 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import com.google.common.base.Joiner import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.UserEntry @@ -35,7 +36,6 @@ import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.SafeParse import info.nightscout.shared.extensions.toVisibility @@ -204,7 +204,9 @@ class InsulinDialog : DialogFragmentWithDate() { if (recordOnlyChecked) actions.add(rh.gs(info.nightscout.core.ui.R.string.bolus_recorded_only).formatColor(context, rh, info.nightscout.core.ui.R.attr.warningColor)) if (abs(insulinAfterConstraints - insulin) > pumpDescription.pumpType.determineCorrectBolusStepSize(insulinAfterConstraints)) - actions.add(rh.gs(info.nightscout.core.ui.R.string.bolus_constraint_applied_warn, insulin, insulinAfterConstraints).formatColor(context, rh, info.nightscout.core.ui.R.attr.warningColor)) + actions.add( + rh.gs(info.nightscout.core.ui.R.string.bolus_constraint_applied_warn, insulin, insulinAfterConstraints).formatColor(context, rh, info.nightscout.core.ui.R.attr.warningColor) + ) } val eatingSoonTTDuration = defaultValueHelper.determineEatingSoonTTDuration() val eatingSoonTT = defaultValueHelper.determineEatingSoonTT() diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/ProfileSwitchDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/ProfileSwitchDialog.kt index 28ddf76c7d..197f0dda9d 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/ProfileSwitchDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/ProfileSwitchDialog.kt @@ -12,6 +12,7 @@ import com.google.common.base.Joiner import info.nightscout.core.profile.ProfileSealed import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit @@ -25,7 +26,6 @@ import info.nightscout.interfaces.profile.DefaultValueHelper import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.protection.ProtectionCheck import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.bus.RxBus import info.nightscout.rx.logging.LTag import info.nightscout.shared.extensions.toVisibility diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt index 0bd001a4d9..4e35a60cd9 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/ProfileViewerDialog.kt @@ -13,6 +13,7 @@ import info.nightscout.core.extensions.getCustomizedName import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.main.R import info.nightscout.core.profile.ProfileSealed +import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.ValueWrapper import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config @@ -22,7 +23,6 @@ import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.bus.RxBus import info.nightscout.shared.extensions.toVisibility import info.nightscout.shared.interfaces.ProfileUtil diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt index f5be09f454..730af01f57 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import com.google.common.base.Joiner import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit @@ -22,7 +23,6 @@ import info.nightscout.interfaces.pump.defs.PumpDescription import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt index 175c8f2d74..7e08d66765 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt @@ -10,6 +10,7 @@ import com.google.common.base.Joiner import com.google.common.collect.Lists import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.ValueWrapper import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.UserEntry @@ -24,7 +25,6 @@ import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.profile.DefaultValueHelper import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.protection.ProtectionCheck -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.interfaces.ResourceHelper @@ -186,31 +186,34 @@ class TempTargetDialog : DialogFragmentWithDate() { OKDialog.showConfirmation(activity, rh.gs(info.nightscout.core.ui.R.string.temporary_target), HtmlHelper.fromHtml(Joiner.on("
").join(actions)), { val units = profileFunction.getUnits() when (reason) { - rh.gs(info.nightscout.core.ui.R.string.eatingsoon) -> uel.log( + rh.gs(info.nightscout.core.ui.R.string.eatingsoon) -> uel.log( UserEntry.Action.TT, UserEntry.Sources.TTDialog, ValueWithUnit.Timestamp(eventTime).takeIf { eventTimeChanged }, ValueWithUnit.TherapyEventTTReason( TemporaryTarget.Reason.EATING_SOON ), ValueWithUnit.fromGlucoseUnit(target, units.asText), ValueWithUnit.Minute(duration) ) - rh.gs(info.nightscout.core.ui.R.string.activity) -> uel.log( + rh.gs(info.nightscout.core.ui.R.string.activity) -> uel.log( UserEntry.Action.TT, UserEntry.Sources.TTDialog, ValueWithUnit.Timestamp(eventTime).takeIf { eventTimeChanged }, ValueWithUnit.TherapyEventTTReason( TemporaryTarget.Reason.ACTIVITY ), ValueWithUnit.fromGlucoseUnit(target, units.asText), ValueWithUnit.Minute(duration) ) - rh.gs(info.nightscout.core.ui.R.string.hypo) -> uel.log( + rh.gs(info.nightscout.core.ui.R.string.hypo) -> uel.log( UserEntry.Action.TT, UserEntry.Sources.TTDialog, ValueWithUnit.Timestamp(eventTime).takeIf { eventTimeChanged }, ValueWithUnit.TherapyEventTTReason( TemporaryTarget.Reason.HYPOGLYCEMIA ), ValueWithUnit.fromGlucoseUnit(target, units.asText), ValueWithUnit.Minute(duration) ) - rh.gs(info.nightscout.core.ui.R.string.manual) -> uel.log( + rh.gs(info.nightscout.core.ui.R.string.manual) -> uel.log( UserEntry.Action.TT, UserEntry.Sources.TTDialog, ValueWithUnit.Timestamp(eventTime).takeIf { eventTimeChanged }, ValueWithUnit.TherapyEventTTReason( TemporaryTarget.Reason.CUSTOM ), ValueWithUnit.fromGlucoseUnit(target, units.asText), ValueWithUnit.Minute(duration) ) - rh.gs(info.nightscout.core.ui.R.string.stoptemptarget) -> uel.log(UserEntry.Action.CANCEL_TT, UserEntry.Sources.TTDialog, ValueWithUnit.Timestamp(eventTime).takeIf { eventTimeChanged }) + rh.gs(info.nightscout.core.ui.R.string.stoptemptarget) -> uel.log( + UserEntry.Action.CANCEL_TT, + UserEntry.Sources.TTDialog, + ValueWithUnit.Timestamp(eventTime).takeIf { eventTimeChanged }) } if (target == 0.0 || duration == 0) { disposable += repository.runTransactionForResult(CancelCurrentTemporaryTargetIfAnyTransaction(eventTime)) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt index c48c1fbe5d..25e2905bf4 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import com.google.common.base.Joiner import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit @@ -26,7 +27,6 @@ import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.rx.logging.LTag import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper @@ -157,8 +157,12 @@ class TreatmentDialog : DialogFragmentWithDate() { ) } if (carbsAfterConstraints > 0) { - actions.add(rh.gs(info.nightscout.core.ui.R.string.carbs) + ": " + rh.gs(info.nightscout.core.main.R.string.format_carbs, carbsAfterConstraints).formatColor(context, rh, info.nightscout - .core.ui.R.attr.carbsColor)) + actions.add( + rh.gs(info.nightscout.core.ui.R.string.carbs) + ": " + rh.gs(info.nightscout.core.main.R.string.format_carbs, carbsAfterConstraints).formatColor( + context, rh, info.nightscout + .core.ui.R.attr.carbsColor + ) + ) if (carbsAfterConstraints != carbs) actions.add(rh.gs(R.string.carbs_constraint_applied).formatColor(context, rh, info.nightscout.core.ui.R.attr.warningColor)) } diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt index 319db875e9..690e6080a1 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt @@ -22,6 +22,7 @@ import info.nightscout.core.extensions.valueToUnits import info.nightscout.core.iob.round import info.nightscout.core.profile.ProfileSealed import info.nightscout.core.ui.toast.ToastUtils +import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.wizard.BolusWizard @@ -37,7 +38,6 @@ import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.protection.ProtectionCheck import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.interfaces.utils.Round import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus @@ -515,9 +515,13 @@ class WizardDialog : DaggerDialogFragment() { } if (wizard.calculatedTotalInsulin > 0.0 || carbsAfterConstraint > 0.0) { - val insulinText = if (wizard.calculatedTotalInsulin > 0.0) rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.calculatedTotalInsulin).formatColor(context, rh, info.nightscout.core.ui.R.attr.bolusColor) else "" - val carbsText = if (carbsAfterConstraint > 0.0) rh.gs(info.nightscout.core.main.R.string.format_carbs, carbsAfterConstraint).formatColor(context, rh, info.nightscout.core.ui.R.attr - .carbsColor) else "" + val insulinText = + if (wizard.calculatedTotalInsulin > 0.0) rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, wizard.calculatedTotalInsulin) + .formatColor(context, rh, info.nightscout.core.ui.R.attr.bolusColor) else "" + val carbsText = if (carbsAfterConstraint > 0.0) rh.gs(info.nightscout.core.main.R.string.format_carbs, carbsAfterConstraint).formatColor( + context, rh, info.nightscout.core.ui.R.attr + .carbsColor + ) else "" binding.total.text = HtmlHelper.fromHtml(rh.gs(R.string.result_insulin_carbs, insulinText, carbsText)) binding.okcancel.ok.visibility = View.VISIBLE } else { From 8acb13ee37a413b087fb9a1e5f7bf3fa9c06f95b Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 16:13:34 +0200 Subject: [PATCH 25/65] fix tests --- .../automation/actions/ActionProfileSwitchPercentTest.kt | 2 +- .../nightscout/automation/actions/ActionProfileSwitchTest.kt | 2 +- .../nightscout/automation/triggers/TriggerProfilePercentTest.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchPercentTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchPercentTest.kt index 6f70788b12..1cef0169c2 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchPercentTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchPercentTest.kt @@ -34,7 +34,7 @@ class ActionProfileSwitchPercentTest : ActionsTestBase() { } @Test fun iconTest() { - Assertions.assertEquals(info.nightscout.interfaces.R.drawable.ic_actions_profileswitch, sut.icon()) + Assertions.assertEquals(info.nightscout.core.ui.R.drawable.ic_actions_profileswitch, sut.icon()) } @Test fun doActionTest() { diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchTest.kt index 0f6301d991..041638710d 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionProfileSwitchTest.kt @@ -106,6 +106,6 @@ class ActionProfileSwitchTest : ActionsTestBase() { } @Test fun iconTest() { - Assertions.assertEquals(info.nightscout.interfaces.R.drawable.ic_actions_profileswitch, sut.icon()) + Assertions.assertEquals(info.nightscout.core.ui.R.drawable.ic_actions_profileswitch, sut.icon()) } } \ No newline at end of file diff --git a/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerProfilePercentTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerProfilePercentTest.kt index af1a274e1c..9ce7d35a73 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerProfilePercentTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerProfilePercentTest.kt @@ -57,7 +57,7 @@ class TriggerProfilePercentTest : TriggerTestBase() { } @Test fun iconTest() { - Assertions.assertEquals(Optional.of(info.nightscout.interfaces.R.drawable.ic_actions_profileswitch), TriggerProfilePercent(injector).icon()) + Assertions.assertEquals(Optional.of(info.nightscout.core.ui.R.drawable.ic_actions_profileswitch), TriggerProfilePercent(injector).icon()) } @Test fun friendlyNameTest() { From 2cedf0fac1a9a5e130a8596a209822fa6de46c92 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 16:18:37 +0200 Subject: [PATCH 26/65] simplify :core:interfaces --- .../plugins}/constraints/versionChecker/AllowedVersions.kt | 2 +- .../constraints/versionChecker/VersionCheckerUtilsImpl.kt | 1 - .../plugins/constraints/versionChecker/AllowedVersionsTest.kt | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) rename {core/interfaces/src/main/java/info/nightscout/interfaces => plugins/constraints/src/main/java/info/nightscout/plugins}/constraints/versionChecker/AllowedVersions.kt (95%) diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/versionChecker/AllowedVersions.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/AllowedVersions.kt similarity index 95% rename from core/interfaces/src/main/java/info/nightscout/interfaces/constraints/versionChecker/AllowedVersions.kt rename to plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/AllowedVersions.kt index 9f4010f86c..1491168093 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/versionChecker/AllowedVersions.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/AllowedVersions.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.constraints.versionChecker +package info.nightscout.plugins.constraints.versionChecker import org.joda.time.LocalDate import org.json.JSONArray diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerUtilsImpl.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerUtilsImpl.kt index 7c9b507ea5..cdd2b8d0c5 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerUtilsImpl.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerUtilsImpl.kt @@ -3,7 +3,6 @@ package info.nightscout.plugins.constraints.versionChecker import android.os.Build import dagger.Lazy import info.nightscout.interfaces.Config -import info.nightscout.interfaces.constraints.versionChecker.AllowedVersions import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.receivers.ReceiverStatusStore import info.nightscout.interfaces.ui.UiInteraction diff --git a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/versionChecker/AllowedVersionsTest.kt b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/versionChecker/AllowedVersionsTest.kt index fb188c95d2..d7bbbf274c 100644 --- a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/versionChecker/AllowedVersionsTest.kt +++ b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/versionChecker/AllowedVersionsTest.kt @@ -1,6 +1,6 @@ package info.nightscout.plugins.constraints.versionChecker -import info.nightscout.interfaces.constraints.versionChecker.AllowedVersions +import info.nightscout.plugins.constraints.versionChecker.AllowedVersions import org.joda.time.LocalDate import org.json.JSONArray import org.json.JSONObject From 4af9012609639fbf41d2800b95880daa83cad673 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 16:25:01 +0200 Subject: [PATCH 27/65] simplify :core:interfaces --- .../info/nightscout/interfaces/constraints/Constraints.kt | 2 +- .../core/ui}/dragHelpers/ItemTouchHelperAdapter.kt | 2 +- .../nightscout/core/ui}/dragHelpers/OnStartDragListener.kt | 2 +- .../core/ui}/dragHelpers/SimpleItemTouchHelperCallback.kt | 2 +- .../java/info/nightscout/automation/AutomationFragment.kt | 6 +++--- .../plugins/constraints/di/PluginsConstraintsModule.kt | 3 ++- .../nightscout/ui/activities/QuickWizardListActivity.kt | 6 +++--- 7 files changed, 12 insertions(+), 11 deletions(-) rename core/{interfaces/src/main/java/info/nightscout/interfaces => ui/src/main/java/info/nightscout/core/ui}/dragHelpers/ItemTouchHelperAdapter.kt (94%) rename core/{interfaces/src/main/java/info/nightscout/interfaces => ui/src/main/java/info/nightscout/core/ui}/dragHelpers/OnStartDragListener.kt (85%) rename core/{interfaces/src/main/java/info/nightscout/interfaces => ui/src/main/java/info/nightscout/core/ui}/dragHelpers/SimpleItemTouchHelperCallback.kt (97%) diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt index 97bf1c4f35..c7ed46d688 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt @@ -9,7 +9,7 @@ import info.nightscout.interfaces.profile.Profile * Every function has a param from previous chained call * Function can limit the value even more and add another reason of restriction * - * see [info.nightscout.implementation.constraints.ConstraintsImpl] + * see [info.nightscout.plugins.constraints.ConstraintsImpl] * which iterates over all registered plugins with [Constraints] implemented * * @return updated parameter diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/ItemTouchHelperAdapter.kt b/core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/ItemTouchHelperAdapter.kt similarity index 94% rename from core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/ItemTouchHelperAdapter.kt rename to core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/ItemTouchHelperAdapter.kt index 30cc8ac887..458897a4a2 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/ItemTouchHelperAdapter.kt +++ b/core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/ItemTouchHelperAdapter.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.dragHelpers +package info.nightscout.core.ui.dragHelpers interface ItemTouchHelperAdapter { diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/OnStartDragListener.kt b/core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/OnStartDragListener.kt similarity index 85% rename from core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/OnStartDragListener.kt rename to core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/OnStartDragListener.kt index 0fef839133..aef86bc506 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/OnStartDragListener.kt +++ b/core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/OnStartDragListener.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.dragHelpers +package info.nightscout.core.ui.dragHelpers import androidx.recyclerview.widget.RecyclerView diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/SimpleItemTouchHelperCallback.kt b/core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/SimpleItemTouchHelperCallback.kt similarity index 97% rename from core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/SimpleItemTouchHelperCallback.kt rename to core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/SimpleItemTouchHelperCallback.kt index cad3cc83d5..cbfde8d04d 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/dragHelpers/SimpleItemTouchHelperCallback.kt +++ b/core/ui/src/main/java/info/nightscout/core/ui/dragHelpers/SimpleItemTouchHelperCallback.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.dragHelpers +package info.nightscout.core.ui.dragHelpers import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper.ACTION_STATE_DRAG diff --git a/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt b/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt index 0a4406b3b1..badbe6fe3d 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/AutomationFragment.kt @@ -36,9 +36,9 @@ import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Sources -import info.nightscout.interfaces.dragHelpers.ItemTouchHelperAdapter -import info.nightscout.interfaces.dragHelpers.OnStartDragListener -import info.nightscout.interfaces.dragHelpers.SimpleItemTouchHelperCallback +import info.nightscout.core.ui.dragHelpers.ItemTouchHelperAdapter +import info.nightscout.core.ui.dragHelpers.OnStartDragListener +import info.nightscout.core.ui.dragHelpers.SimpleItemTouchHelperCallback import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt index 92a17231c1..3fbc067aa2 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt @@ -5,6 +5,7 @@ import dagger.Module import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.versionChecker.VersionCheckerUtils +import info.nightscout.plugins.constraints.ConstraintsImpl import info.nightscout.plugins.constraints.bgQualityCheck.BgQualityCheckPlugin import info.nightscout.plugins.constraints.versionChecker.VersionCheckerUtilsImpl @@ -23,6 +24,6 @@ abstract class PluginsConstraintsModule { @Binds fun bindVersionCheckerUtils(versionCheckerUtils: VersionCheckerUtilsImpl): VersionCheckerUtils @Binds fun bindBgQualityCheck(bgQualityCheck: BgQualityCheckPlugin): BgQualityCheck - @Binds fun bindsConstraints(constraintsImpl: info.nightscout.plugins.constraints.ConstraintsImpl): Constraints + @Binds fun bindsConstraints(constraintsImpl: ConstraintsImpl): Constraints } } \ No newline at end of file diff --git a/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt b/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt index d89a38c967..2fe3bd3b0a 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt @@ -22,9 +22,9 @@ import info.nightscout.core.utils.ActionModeHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.wizard.QuickWizard import info.nightscout.core.wizard.QuickWizardEntry -import info.nightscout.interfaces.dragHelpers.ItemTouchHelperAdapter -import info.nightscout.interfaces.dragHelpers.OnStartDragListener -import info.nightscout.interfaces.dragHelpers.SimpleItemTouchHelperCallback +import info.nightscout.core.ui.dragHelpers.ItemTouchHelperAdapter +import info.nightscout.core.ui.dragHelpers.OnStartDragListener +import info.nightscout.core.ui.dragHelpers.SimpleItemTouchHelperCallback import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.shared.extensions.toVisibility From b7bc33c1d8098a586d06986db8a066211b8caede Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 18:50:00 +0200 Subject: [PATCH 28/65] simplify :android-wear-shared:shared --- app-wear-shared/shared/src/main/res/values-sw600dp/layout.xml | 3 --- app-wear-shared/shared/src/main/res/values/layout.xml | 3 --- .../info/nightscout/core/graph/data/TherapyEventDataPoint.kt | 2 +- .../nightscout/implementation/resources/ResourceHelperImpl.kt | 2 +- .../nightscout/plugins/general/overview/OverviewFragment.kt | 2 +- 5 files changed, 3 insertions(+), 9 deletions(-) delete mode 100644 app-wear-shared/shared/src/main/res/values-sw600dp/layout.xml delete mode 100644 app-wear-shared/shared/src/main/res/values/layout.xml diff --git a/app-wear-shared/shared/src/main/res/values-sw600dp/layout.xml b/app-wear-shared/shared/src/main/res/values-sw600dp/layout.xml deleted file mode 100644 index 7c98f55487..0000000000 --- a/app-wear-shared/shared/src/main/res/values-sw600dp/layout.xml +++ /dev/null @@ -1,3 +0,0 @@ - - true - \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/res/values/layout.xml b/app-wear-shared/shared/src/main/res/values/layout.xml deleted file mode 100644 index 57f058c48b..0000000000 --- a/app-wear-shared/shared/src/main/res/values/layout.xml +++ /dev/null @@ -1,3 +0,0 @@ - - false - \ No newline at end of file diff --git a/core/main/src/main/java/info/nightscout/core/graph/data/TherapyEventDataPoint.kt b/core/main/src/main/java/info/nightscout/core/graph/data/TherapyEventDataPoint.kt index 2d5e6bc024..2bbb05206b 100644 --- a/core/main/src/main/java/info/nightscout/core/graph/data/TherapyEventDataPoint.kt +++ b/core/main/src/main/java/info/nightscout/core/graph/data/TherapyEventDataPoint.kt @@ -50,7 +50,7 @@ class TherapyEventDataPoint( } override val paintStyle: Paint.Style = Paint.Style.FILL // not used - override val size get() = if (rh.gb(info.nightscout.shared.R.bool.isTablet)) 12.0f else 10.0f + override val size get() = if (rh.gb(info.nightscout.core.ui.R.bool.isTablet)) 12.0f else 10.0f override fun color(context: Context?): Int { return when (data.type) { TherapyEvent.Type.ANNOUNCEMENT -> rh.gac(context, info.nightscout.core.ui.R.attr.notificationAnnouncement) diff --git a/implementation/src/main/java/info/nightscout/implementation/resources/ResourceHelperImpl.kt b/implementation/src/main/java/info/nightscout/implementation/resources/ResourceHelperImpl.kt index 62d24e8825..145a9b240b 100644 --- a/implementation/src/main/java/info/nightscout/implementation/resources/ResourceHelperImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/resources/ResourceHelperImpl.kt @@ -93,7 +93,7 @@ class ResourceHelperImpl @Inject constructor(var context: Context, private val f return (dp * scale + 0.5f).toInt() } - override fun shortTextMode(): Boolean = !gb(info.nightscout.shared.R.bool.isTablet) + override fun shortTextMode(): Boolean = !gb(info.nightscout.core.ui.R.bool.isTablet) override fun gac(context: Context?, attributeId: Int): Int = (ContextThemeWrapper(context ?: this.context, info.nightscout.core.ui.R.style.AppTheme)).getThemeColor(attributeId) diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt index f06bb93822..0a19977f25 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt @@ -190,7 +190,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList smallHeight = screenHeight <= Constants.SMALL_HEIGHT val landscape = screenHeight < screenWidth - skinProvider.activeSkin().preProcessLandscapeOverviewLayout(binding, landscape, rh.gb(info.nightscout.shared.R.bool.isTablet), smallHeight) + skinProvider.activeSkin().preProcessLandscapeOverviewLayout(binding, landscape, rh.gb(info.nightscout.core.ui.R.bool.isTablet), smallHeight) binding.nsclientCard.visibility = config.NSCLIENT.toVisibility() binding.notifications.setHasFixedSize(false) From 81eb4f3a1cf30c7e4b445f20fa07c138d5faea61 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 21:00:54 +0200 Subject: [PATCH 29/65] simplify :app-wear-shared:shared --- .../extensions/PackageManagerExtension.kt | 0 .../shared/impl/di/SharedImplModule.kt | 24 + .../impl}/logging/AAPSLoggerProduction.kt | 4 +- .../shared/impl/rx/AapsSchedulersImpl.kt | 16 + .../shared/impl/rx/bus/RxBusImpl.kt | 34 ++ .../nightscout/shared/utils/DateUtilImpl.kt | 470 +++++++++++++++++ .../src/main/res/drawable/background.xml | 6 +- .../src/main/res/drawable/detailed_dial.xml | 306 +++++++++++ .../src/main/res/drawable/hour_hand.xml | 9 + .../src/main/res/drawable/minute_hand.xml | 9 + .../src/main/res/drawable/second_hand.xml | 9 + .../src/main/res/drawable/simplified_dial.xml | 66 +++ .../main/res/drawable/watchface_custom.png | Bin app-wear-shared/shared-tests/build.gradle | 4 +- .../nightscout/sharedtests}/AAPSLoggerTest.kt | 5 +- .../info/nightscout/sharedtests/TestBase.kt | 3 +- .../sharedtests/TestBaseWithProfile.kt | 10 +- .../sharedtests/rx/TestAapsSchedulers.kt | 17 + .../java/info/nightscout/rx/AapsSchedulers.kt | 17 +- .../main/java/info/nightscout/rx/bus/RxBus.kt | 26 +- .../java/info/nightscout/rx/di/RxModule.kt | 25 - .../info/nightscout/shared/di/SharedModule.kt | 9 - .../info/nightscout/shared/utils/DateUtil.kt | 494 ++---------------- .../src/main/res/drawable/detailed_dial.xml | 183 ------- .../src/main/res/drawable/hour_hand.xml | 4 - .../src/main/res/drawable/minute_hand.xml | 4 - .../src/main/res/drawable/second_hand.xml | 4 - .../src/main/res/drawable/simplified_dial.xml | 39 -- .../nightscout/androidaps/di/AppComponent.kt | 8 +- .../interfaces/utils/DecimalFormatter.kt | 0 .../ui/src/main/res/values-sw600dp/layout.xml | 3 + core/ui/src/main/res/values/layout.xml | 3 + core/validators/build.gradle | 1 + .../maintenance/MaintenanceFragment.kt | 3 +- plugins/main/build.gradle | 1 + .../general/overview/OverviewPlugin.kt | 3 +- plugins/source/build.gradle | 1 + plugins/sync/build.gradle | 1 + .../nightscout/pump/combo/ComboFragment.kt | 8 +- pump/diaconn/build.gradle | 1 + .../pump/eopatch/alarm/AlarmRegistry.kt | 49 +- .../omnipod/dash/history/DashHistoryTest.kt | 2 +- .../driver/comm/endecrypt/EnDecryptTest.kt | 2 +- .../dash/driver/comm/pair/KeyExchangeTest.kt | 2 +- .../driver/comm/session/EapMessageTest.kt | 2 +- .../dash/driver/comm/session/MilenageTest.kt | 2 +- pump/omnipod-eros/build.gradle | 2 + .../manager/AapsErosPodStateManagerTest.kt | 6 +- .../nightscout/androidaps/di/WearModule.kt | 4 - .../androidaps/watchfaces/CustomWatchface.kt | 49 +- .../watchfaces/DigitalStyleWatchface.kt | 3 - .../heartrate/HeartRateListenerTest.kt | 26 +- 52 files changed, 1145 insertions(+), 834 deletions(-) rename app-wear-shared/{shared => shared-impl}/src/main/java/info/nightscout/shared/extensions/PackageManagerExtension.kt (100%) rename app-wear-shared/{shared/src/main/java/info/nightscout/rx => shared-impl/src/main/java/info/nightscout/shared/impl}/logging/AAPSLoggerProduction.kt (96%) create mode 100644 app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/AapsSchedulersImpl.kt create mode 100644 app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/bus/RxBusImpl.kt create mode 100644 app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt rename app-wear-shared/{shared => shared-impl}/src/main/res/drawable/background.xml (66%) create mode 100644 app-wear-shared/shared-impl/src/main/res/drawable/detailed_dial.xml create mode 100644 app-wear-shared/shared-impl/src/main/res/drawable/hour_hand.xml create mode 100644 app-wear-shared/shared-impl/src/main/res/drawable/minute_hand.xml create mode 100644 app-wear-shared/shared-impl/src/main/res/drawable/second_hand.xml create mode 100644 app-wear-shared/shared-impl/src/main/res/drawable/simplified_dial.xml rename app-wear-shared/{shared => shared-impl}/src/main/res/drawable/watchface_custom.png (100%) rename app-wear-shared/{shared/src/main/java/info/nightscout/rx/logging => shared-tests/src/main/java/info/nightscout/sharedtests}/AAPSLoggerTest.kt (95%) create mode 100644 app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/rx/TestAapsSchedulers.kt delete mode 100644 app-wear-shared/shared/src/main/java/info/nightscout/rx/di/RxModule.kt delete mode 100644 app-wear-shared/shared/src/main/java/info/nightscout/shared/di/SharedModule.kt delete mode 100644 app-wear-shared/shared/src/main/res/drawable/detailed_dial.xml delete mode 100644 app-wear-shared/shared/src/main/res/drawable/hour_hand.xml delete mode 100644 app-wear-shared/shared/src/main/res/drawable/minute_hand.xml delete mode 100644 app-wear-shared/shared/src/main/res/drawable/second_hand.xml delete mode 100644 app-wear-shared/shared/src/main/res/drawable/simplified_dial.xml rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/interfaces/utils/DecimalFormatter.kt (100%) create mode 100644 core/ui/src/main/res/values-sw600dp/layout.xml create mode 100644 core/ui/src/main/res/values/layout.xml diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/extensions/PackageManagerExtension.kt b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/extensions/PackageManagerExtension.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/extensions/PackageManagerExtension.kt rename to app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/extensions/PackageManagerExtension.kt diff --git a/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/di/SharedImplModule.kt b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/di/SharedImplModule.kt index 3bf15a91d9..f823e124f4 100644 --- a/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/di/SharedImplModule.kt +++ b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/di/SharedImplModule.kt @@ -4,10 +4,18 @@ import android.content.Context import androidx.preference.PreferenceManager import dagger.Module import dagger.Provides +import info.nightscout.rx.AapsSchedulers +import info.nightscout.rx.bus.RxBus import info.nightscout.rx.interfaces.L +import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.shared.impl.logging.AAPSLoggerProduction import info.nightscout.shared.impl.logging.LImpl +import info.nightscout.shared.impl.rx.AapsSchedulersImpl +import info.nightscout.shared.impl.rx.bus.RxBusImpl import info.nightscout.shared.impl.sharedPreferences.SPImplementation import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import javax.inject.Singleton @Module( @@ -23,4 +31,20 @@ open class SharedImplModule { @Provides @Singleton fun provideL(sp: SP): L = LImpl(sp) + + @Provides + @Singleton + fun provideDateUtil(context: Context): DateUtil = DateUtilImpl(context) + + @Provides + @Singleton + fun provideAAPSLogger(l: L): AAPSLogger = AAPSLoggerProduction(l) + + @Provides + @Singleton + fun provideRxBus(aapsSchedulers: AapsSchedulers, aapsLogger: AAPSLogger): RxBus = RxBusImpl(aapsSchedulers, aapsLogger) + + @Provides + @Singleton + internal fun provideSchedulers(): AapsSchedulers = AapsSchedulersImpl() } \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLoggerProduction.kt b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/logging/AAPSLoggerProduction.kt similarity index 96% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLoggerProduction.kt rename to app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/logging/AAPSLoggerProduction.kt index 4a6bcd8900..7335f9c842 100644 --- a/app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLoggerProduction.kt +++ b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/logging/AAPSLoggerProduction.kt @@ -1,6 +1,8 @@ -package info.nightscout.rx.logging +package info.nightscout.shared.impl.logging import info.nightscout.rx.interfaces.L +import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.rx.logging.LTag import org.slf4j.LoggerFactory /** diff --git a/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/AapsSchedulersImpl.kt b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/AapsSchedulersImpl.kt new file mode 100644 index 0000000000..a4f5c62847 --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/AapsSchedulersImpl.kt @@ -0,0 +1,16 @@ +package info.nightscout.shared.impl.rx + +import info.nightscout.rx.AapsSchedulers +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Scheduler +import io.reactivex.rxjava3.schedulers.Schedulers +import javax.inject.Singleton + +@Singleton +class AapsSchedulersImpl : AapsSchedulers { + + override val main: Scheduler = AndroidSchedulers.mainThread() + override val io: Scheduler = Schedulers.io() + override val cpu: Scheduler = Schedulers.computation() + override val newThread: Scheduler = Schedulers.newThread() +} \ No newline at end of file diff --git a/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/bus/RxBusImpl.kt b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/bus/RxBusImpl.kt new file mode 100644 index 0000000000..6338303dd3 --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/impl/rx/bus/RxBusImpl.kt @@ -0,0 +1,34 @@ +package info.nightscout.shared.impl.rx.bus + +import info.nightscout.annotations.OpenForTesting +import info.nightscout.rx.AapsSchedulers +import info.nightscout.rx.bus.RxBus +import info.nightscout.rx.events.Event +import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.rx.logging.LTag +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.subjects.PublishSubject +import javax.inject.Inject +import javax.inject.Singleton + +@OpenForTesting +@Singleton +class RxBusImpl @Inject constructor( + val aapsSchedulers: AapsSchedulers, + val aapsLogger: AAPSLogger +) : RxBus { + + private val publisher = PublishSubject.create() + + override fun send(event: Event) { + aapsLogger.debug(LTag.EVENTS, "Sending $event") + publisher.onNext(event) + } + + // Listen should return an Observable and not the publisher + // Using ofType we filter only events that match that class type + override fun toObservable(eventType: Class): Observable = + publisher + .subscribeOn(aapsSchedulers.io) + .ofType(eventType) +} \ No newline at end of file diff --git a/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt new file mode 100644 index 0000000000..ee093019d6 --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt @@ -0,0 +1,470 @@ +package info.nightscout.shared.utils + +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.collection.LongSparseArray +import info.nightscout.annotations.OpenForTesting +import info.nightscout.shared.R +import info.nightscout.shared.SafeParse +import info.nightscout.shared.interfaces.ResourceHelper +import org.apache.commons.lang3.time.DateUtils.isSameDay +import org.joda.time.DateTime +import org.joda.time.format.DateTimeFormat +import org.joda.time.format.ISODateTimeFormat +import java.security.SecureRandom +import java.text.DateFormat +import java.text.DecimalFormat +import java.text.DecimalFormatSymbols +import java.text.SimpleDateFormat +import java.time.Instant +import java.time.ZoneId +import java.time.ZoneOffset +import java.util.Calendar +import java.util.Date +import java.util.EnumSet +import java.util.GregorianCalendar +import java.util.Locale +import java.util.TimeZone +import java.util.concurrent.TimeUnit +import java.util.regex.Pattern +import java.util.stream.Collectors +import javax.inject.Inject +import javax.inject.Singleton +import kotlin.math.ceil +import kotlin.math.floor + +/** + * The Class DateUtil. A simple wrapper around SimpleDateFormat to ease the handling of iso date string <-> date obj + * with TZ + */ +@OpenForTesting +@Singleton +class DateUtilImpl @Inject constructor(private val context: Context) : DateUtil { + + /** + * The date format in iso. + */ + @Suppress("PrivatePropertyName", "SpellCheckingInspection") + private val FORMAT_DATE_ISO_OUT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" + + /** + * Takes in an ISO date string of the following format: + * yyyy-mm-ddThh:mm:ss.ms+HoMo + * + * @param isoDateString the iso date string + * @return the date + */ + override fun fromISODateString(isoDateString: String): Long { + val parser = ISODateTimeFormat.dateTimeParser() + val dateTime = DateTime.parse(isoDateString, parser) + return dateTime.toDate().time + } + + /** + * Render date + * + * @param date the date obj + * @return the iso-formatted date string + */ + override fun toISOString(date: Long): String { + val f: DateFormat = SimpleDateFormat(FORMAT_DATE_ISO_OUT, Locale.getDefault()) + f.timeZone = TimeZone.getTimeZone("UTC") + return f.format(date) + } + + @Suppress("SpellCheckingInspection") + override fun toISOAsUTC(timestamp: Long): String { + val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'0000Z'", Locale.US) + format.timeZone = TimeZone.getTimeZone("UTC") + return format.format(timestamp) + } + + @Suppress("SpellCheckingInspection") + override fun toISONoZone(timestamp: Long): String { + val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US) + format.timeZone = TimeZone.getDefault() + return format.format(timestamp) + } + + override fun secondsOfTheDayToMilliseconds(seconds: Int): Long { + val calendar: Calendar = GregorianCalendar() + calendar[Calendar.MONTH] = 0 // Set january to be sure we miss DST changing + calendar[Calendar.HOUR_OF_DAY] = seconds / 60 / 60 + calendar[Calendar.MINUTE] = seconds / 60 % 60 + calendar[Calendar.SECOND] = 0 + return calendar.timeInMillis + } + + override fun toSeconds(hhColonMm: String): Int { + val p = Pattern.compile("(\\d+):(\\d+)( a.m.| p.m.| AM| PM|AM|PM|)") + val m = p.matcher(hhColonMm) + var retVal = 0 + if (m.find()) { + retVal = SafeParse.stringToInt(m.group(1)) * 60 * 60 + SafeParse.stringToInt(m.group(2)) * 60 + if ((m.group(3) == " a.m." || m.group(3) == " AM" || m.group(3) == "AM") && m.group(1) == "12") retVal -= 12 * 60 * 60 + if ((m.group(3) == " p.m." || m.group(3) == " PM" || m.group(3) == "PM") && m.group(1) != "12") retVal += 12 * 60 * 60 + } + return retVal + } + + override fun dateString(mills: Long): String { + val df = DateFormat.getDateInstance(DateFormat.SHORT) + return df.format(mills) + } + + override fun dateStringRelative(mills: Long, rh: ResourceHelper): String { + val df = DateFormat.getDateInstance(DateFormat.SHORT) + val day = df.format(mills) + val beginOfToday = beginOfDay(now()) + return if (mills < now()) // Past + when { + mills > beginOfToday -> rh.gs(R.string.today) + mills > beginOfToday - T.days(1).msecs() -> rh.gs(R.string.yesterday) + mills > beginOfToday - T.days(7).msecs() -> dayAgo(mills, rh, true) + else -> day + } + else // Future + when { + mills < beginOfToday + T.days(1).msecs() -> rh.gs(R.string.later_today) + mills < beginOfToday + T.days(2).msecs() -> rh.gs(R.string.tomorrow) + mills < beginOfToday + T.days(7).msecs() -> dayAgo(mills, rh, true) + else -> day + } + } + + override fun dateStringShort(mills: Long): String { + var format = "MM/dd" + if (android.text.format.DateFormat.is24HourFormat(context)) { + format = "dd/MM" + } + return DateTime(mills).toString(DateTimeFormat.forPattern(format)) + } + + override fun timeString(): String = timeString(now()) + override fun timeString(mills: Long): String { + var format = "hh:mma" + if (android.text.format.DateFormat.is24HourFormat(context)) { + format = "HH:mm" + } + return DateTime(mills).toString(DateTimeFormat.forPattern(format)) + } + + override fun secondString(): String = secondString(now()) + override fun secondString(mills: Long): String = + DateTime(mills).toString(DateTimeFormat.forPattern("ss")) + + override fun minuteString(): String = minuteString(now()) + override fun minuteString(mills: Long): String = + DateTime(mills).toString(DateTimeFormat.forPattern("mm")) + + override fun hourString(): String = hourString(now()) + override fun hourString(mills: Long): String { + var format = "hh" + if (android.text.format.DateFormat.is24HourFormat(context)) { + format = "HH" + } + return DateTime(mills).toString(DateTimeFormat.forPattern(format)) + } + + override fun amPm(): String = amPm(now()) + override fun amPm(mills: Long): String = + DateTime(mills).toString(DateTimeFormat.forPattern("a")) + + override fun dayNameString(format: String): String = dayNameString(now(), format) + override fun dayNameString(mills: Long, format: String): String = + DateTime(mills).toString(DateTimeFormat.forPattern(format)) + + override fun dayString(): String = dayString(now()) + override fun dayString(mills: Long): String = + DateTime(mills).toString(DateTimeFormat.forPattern("dd")) + + override fun monthString(format: String): String = monthString(now(), format) + override fun monthString(mills: Long, format: String): String = + DateTime(mills).toString(DateTimeFormat.forPattern(format)) + + override fun weekString(): String = weekString(now()) + override fun weekString(mills: Long): String = + DateTime(mills).toString(DateTimeFormat.forPattern("ww")) + + override fun timeStringWithSeconds(mills: Long): String { + var format = "hh:mm:ssa" + if (android.text.format.DateFormat.is24HourFormat(context)) { + format = "HH:mm:ss" + } + return DateTime(mills).toString(DateTimeFormat.forPattern(format)) + } + + override fun dateAndTimeRangeString(start: Long, end: Long): String { + return dateAndTimeString(start) + " - " + timeString(end) + } + + override fun timeRangeString(start: Long, end: Long): String { + return timeString(start) + " - " + timeString(end) + } + + override fun dateAndTimeString(mills: Long): String { + return if (mills == 0L) "" else dateString(mills) + " " + timeString(mills) + } + + override fun dateAndTimeAndSecondsString(mills: Long): String { + return if (mills == 0L) "" else dateString(mills) + " " + timeStringWithSeconds(mills) + } + + override fun minAgo(rh: ResourceHelper, time: Long?): String { + if (time == null) return "" + val minutes = ((now() - time) / 1000 / 60).toInt() + return rh.gs(R.string.minago, minutes) + } + + override fun minAgoShort(time: Long?): String { + if (time == null) return "" + val minutes = ((time - now()) / 1000 / 60).toInt() + return (if (minutes > 0) "+" else "") + minutes + } + + override fun minAgoLong(rh: ResourceHelper, time: Long?): String { + if (time == null) return "" + val minutes = ((now() - time) / 1000 / 60).toInt() + return rh.gs(R.string.minago_long, minutes) + } + + override fun hourAgo(time: Long, rh: ResourceHelper): String { + val hours = (now() - time) / 1000.0 / 60 / 60 + return rh.gs(R.string.hoursago, hours) + } + + override fun dayAgo(time: Long, rh: ResourceHelper, round: Boolean): String { + var days = (now() - time) / 1000.0 / 60 / 60 / 24 + if (round) { + return if (now() > time) { + days = ceil(days) + rh.gs(R.string.days_ago_round, days) + } else { + days = floor(days) + rh.gs(R.string.in_days_round, days) + } + } + return if (now() > time) + rh.gs(R.string.days_ago, days) + else + rh.gs(R.string.in_days, days) + } + + override fun beginOfDay(mills: Long): Long { + val givenDate = Calendar.getInstance() + givenDate.timeInMillis = mills + givenDate[Calendar.HOUR_OF_DAY] = 0 + givenDate[Calendar.MINUTE] = 0 + givenDate[Calendar.SECOND] = 0 + givenDate[Calendar.MILLISECOND] = 0 + return givenDate.timeInMillis + } + + override fun timeStringFromSeconds(seconds: Int): String { + val cached = timeStrings[seconds.toLong()] + if (cached != null) return cached + val t = timeString(secondsOfTheDayToMilliseconds(seconds)) + timeStrings.put(seconds.toLong(), t) + return t + } + + override fun timeFrameString(timeInMillis: Long, rh: ResourceHelper): String { + var remainingTimeMinutes = timeInMillis / (1000 * 60) + val remainingTimeHours = remainingTimeMinutes / 60 + remainingTimeMinutes %= 60 + return "(" + (if (remainingTimeHours > 0) remainingTimeHours.toString() + rh.gs(R.string.shorthour) + " " else "") + remainingTimeMinutes + "')" + } + + override fun sinceString(timestamp: Long, rh: ResourceHelper): String { + return timeFrameString(System.currentTimeMillis() - timestamp, rh) + } + + override fun untilString(timestamp: Long, rh: ResourceHelper): String { + return timeFrameString(timestamp - System.currentTimeMillis(), rh) + } + + override fun now(): Long { + return System.currentTimeMillis() + } + + override fun nowWithoutMilliseconds(): Long { + var n = System.currentTimeMillis() + n -= n % 1000 + return n + } + + override fun isOlderThan(date: Long, minutes: Long): Boolean { + val diff = now() - date + return diff > T.mins(minutes).msecs() + } + + override fun getTimeZoneOffsetMs(): Long { + return GregorianCalendar().timeZone.rawOffset.toLong() + } + + override fun getTimeZoneOffsetMinutes(timestamp: Long): Int { + return TimeZone.getDefault().getOffset(timestamp) / 60000 + } + + override fun isSameDay(timestamp1: Long, timestamp2: Long) = isSameDay(Date(timestamp1), Date(timestamp2)) + + override fun isSameDayGroup(timestamp1: Long, timestamp2: Long): Boolean { + val now = now() + if (now in (timestamp1 + 1) until timestamp2 || now in (timestamp2 + 1) until timestamp1) + return false + return isSameDay(Date(timestamp1), Date(timestamp2)) + } + + //Map:{DAYS=1, HOURS=3, MINUTES=46, SECONDS=40, MILLISECONDS=0, MICROSECONDS=0, NANOSECONDS=0} + override fun computeDiff(date1: Long, date2: Long): Map { + val units: MutableList = ArrayList(EnumSet.allOf(TimeUnit::class.java)) + units.reverse() + val result: MutableMap = LinkedHashMap() + var millisecondsRest = date2 - date1 + for (unit in units) { + val diff = unit.convert(millisecondsRest, TimeUnit.MILLISECONDS) + val diffInMillisecondsForUnit = unit.toMillis(diff) + millisecondsRest -= diffInMillisecondsForUnit + result[unit] = diff + } + return result + } + + override fun age(milliseconds: Long, useShortText: Boolean, rh: ResourceHelper): String { + val diff = computeDiff(0L, milliseconds) + var days = " " + rh.gs(R.string.days) + " " + var hours = " " + rh.gs(R.string.hours) + " " + var minutes = " " + rh.gs(R.string.unit_minutes) + " " + if (useShortText) { + days = rh.gs(R.string.shortday) + hours = rh.gs(R.string.shorthour) + minutes = rh.gs(R.string.shortminute) + } + var result = "" + if (diff.getOrDefault(TimeUnit.DAYS, -1) > 0) result += diff[TimeUnit.DAYS].toString() + days + if (diff.getOrDefault(TimeUnit.HOURS, -1) > 0) result += diff[TimeUnit.HOURS].toString() + hours + if (diff[TimeUnit.DAYS] == 0L) result += diff[TimeUnit.MINUTES].toString() + minutes + return result + } + + override fun niceTimeScalar(time: Long, rh: ResourceHelper): String { + var t = time + var unit = rh.gs(R.string.unit_second) + t /= 1000 + if (t != 1L) unit = rh.gs(R.string.unit_seconds) + if (t > 59) { + unit = rh.gs(R.string.unit_minute) + t /= 60 + if (t != 1L) unit = rh.gs(R.string.unit_minutes) + if (t > 59) { + unit = rh.gs(R.string.unit_hour) + t /= 60 + if (t != 1L) unit = rh.gs(R.string.unit_hours) + if (t > 24) { + unit = rh.gs(R.string.unit_day) + t /= 24 + if (t != 1L) unit = rh.gs(R.string.unit_days) + if (t > 28) { + unit = rh.gs(R.string.unit_week) + t /= 7 + @Suppress("KotlinConstantConditions") + if (t != 1L) unit = rh.gs(R.string.unit_weeks) + } + } + } + } + //if (t != 1) unit = unit + "s"; //implemented plurality in every step, because in other languages plurality of time is not every time adding the same character + return qs(t.toDouble(), 0) + " " + unit + } + + override fun qs(x: Double, numDigits: Int): String { + var digits = numDigits + if (digits == -1) { + digits = 0 + if ((x.toInt() % x == 0.0)) { + digits++ + if ((x.toInt() * 10 / 10).toDouble() != x) { + digits++ + if ((x.toInt() * 100 / 100).toDouble() != x) digits++ + } + } + } + if (dfs == null) { + val localDfs = DecimalFormatSymbols() + localDfs.decimalSeparator = '.' + dfs = localDfs // avoid race condition + } + val thisDf: DecimalFormat? + // use singleton if on ui thread otherwise allocate new as DecimalFormat is not thread safe + if (Thread.currentThread().id == 1L) { + if (df == null) { + val localDf = DecimalFormat("#", dfs) + localDf.minimumIntegerDigits = 1 + df = localDf // avoid race condition + } + thisDf = df + } else { + thisDf = DecimalFormat("#", dfs) + } + thisDf?.maximumFractionDigits = digits + return thisDf?.format(x) ?: "" + } + + override fun formatHHMM(timeAsSeconds: Int): String { + val hour = timeAsSeconds / 60 / 60 + val minutes = (timeAsSeconds - hour * 60 * 60) / 60 + val df = DecimalFormat("00") + return df.format(hour.toLong()) + ":" + df.format(minutes.toLong()) + } + + @RequiresApi(Build.VERSION_CODES.O) + override fun timeZoneByOffset(offsetInMilliseconds: Long): TimeZone = + TimeZone.getTimeZone( + if (offsetInMilliseconds == 0L) ZoneId.of("UTC") + else ZoneId.getAvailableZoneIds() + .stream() + .map(ZoneId::of) + .filter { z -> z.rules.getOffset(Instant.now()).totalSeconds == ZoneOffset.ofHours((offsetInMilliseconds / 1000 / 3600).toInt()).totalSeconds } + .collect(Collectors.toList()) + .firstOrNull() ?: ZoneId.of("UTC") + ) + + override fun timeStampToUtcDateMillis(timestamp: Long): Long { + val current = Calendar.getInstance().apply { timeInMillis = timestamp } + return Calendar.getInstance().apply { + set(Calendar.YEAR, current[Calendar.YEAR]) + set(Calendar.MONTH, current[Calendar.MONTH]) + set(Calendar.DAY_OF_MONTH, current[Calendar.DAY_OF_MONTH]) + }.timeInMillis + } + + override fun mergeUtcDateToTimestamp(timestamp: Long, dateUtcMillis: Long): Long { + val selected = Calendar.getInstance().apply { timeInMillis = dateUtcMillis } + return Calendar.getInstance().apply { + timeInMillis = timestamp + set(Calendar.YEAR, selected[Calendar.YEAR]) + set(Calendar.MONTH, selected[Calendar.MONTH]) + set(Calendar.DAY_OF_MONTH, selected[Calendar.DAY_OF_MONTH]) + }.timeInMillis + } + + override fun mergeHourMinuteToTimestamp(timestamp: Long, hour: Int, minute: Int, randomSecond: Boolean): Long { + return Calendar.getInstance().apply { + timeInMillis = timestamp + set(Calendar.HOUR_OF_DAY, hour) + set(Calendar.MINUTE, minute) + if (randomSecond) set(Calendar.SECOND, seconds++) + }.timeInMillis + } + + companion object { + + private val timeStrings = LongSparseArray() + private var seconds: Int = (SecureRandom().nextDouble() * 59.0).toInt() + + // singletons to avoid repeated allocation + private var dfs: DecimalFormatSymbols? = null + private var df: DecimalFormat? = null + } +} diff --git a/app-wear-shared/shared/src/main/res/drawable/background.xml b/app-wear-shared/shared-impl/src/main/res/drawable/background.xml similarity index 66% rename from app-wear-shared/shared/src/main/res/drawable/background.xml rename to app-wear-shared/shared-impl/src/main/res/drawable/background.xml index 76226923e6..e8f62fdfa3 100644 --- a/app-wear-shared/shared/src/main/res/drawable/background.xml +++ b/app-wear-shared/shared-impl/src/main/res/drawable/background.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - + diff --git a/app-wear-shared/shared-impl/src/main/res/drawable/detailed_dial.xml b/app-wear-shared/shared-impl/src/main/res/drawable/detailed_dial.xml new file mode 100644 index 0000000000..d3a62c944e --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/res/drawable/detailed_dial.xml @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app-wear-shared/shared-impl/src/main/res/drawable/hour_hand.xml b/app-wear-shared/shared-impl/src/main/res/drawable/hour_hand.xml new file mode 100644 index 0000000000..fc748e1b8f --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/res/drawable/hour_hand.xml @@ -0,0 +1,9 @@ + + + diff --git a/app-wear-shared/shared-impl/src/main/res/drawable/minute_hand.xml b/app-wear-shared/shared-impl/src/main/res/drawable/minute_hand.xml new file mode 100644 index 0000000000..8e11c2fa1d --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/res/drawable/minute_hand.xml @@ -0,0 +1,9 @@ + + + diff --git a/app-wear-shared/shared-impl/src/main/res/drawable/second_hand.xml b/app-wear-shared/shared-impl/src/main/res/drawable/second_hand.xml new file mode 100644 index 0000000000..e768022ba5 --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/res/drawable/second_hand.xml @@ -0,0 +1,9 @@ + + + diff --git a/app-wear-shared/shared-impl/src/main/res/drawable/simplified_dial.xml b/app-wear-shared/shared-impl/src/main/res/drawable/simplified_dial.xml new file mode 100644 index 0000000000..aa440fe5ab --- /dev/null +++ b/app-wear-shared/shared-impl/src/main/res/drawable/simplified_dial.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + diff --git a/app-wear-shared/shared/src/main/res/drawable/watchface_custom.png b/app-wear-shared/shared-impl/src/main/res/drawable/watchface_custom.png similarity index 100% rename from app-wear-shared/shared/src/main/res/drawable/watchface_custom.png rename to app-wear-shared/shared-impl/src/main/res/drawable/watchface_custom.png diff --git a/app-wear-shared/shared-tests/build.gradle b/app-wear-shared/shared-tests/build.gradle index da77123e24..9c4a8730fa 100644 --- a/app-wear-shared/shared-tests/build.gradle +++ b/app-wear-shared/shared-tests/build.gradle @@ -14,16 +14,18 @@ apply from: "${project.rootDir}/core/main/jacoco_global.gradle" android { namespace 'info.nightscout.sharedtests' - } +} dependencies { implementation project(':database:entities') implementation project(':app-wear-shared:shared') + implementation project(':app-wear-shared:shared-impl') implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:utils') implementation project(':implementation') + api "org.mockito:mockito-junit-jupiter:$mockito_version" api "org.mockito.kotlin:mockito-kotlin:5.1.0" api "org.junit.jupiter:junit-jupiter-api:$junit_jupiter_version" diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLoggerTest.kt b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/AAPSLoggerTest.kt similarity index 95% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLoggerTest.kt rename to app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/AAPSLoggerTest.kt index 88142c93a8..562aa66403 100644 --- a/app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLoggerTest.kt +++ b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/AAPSLoggerTest.kt @@ -1,4 +1,7 @@ -package info.nightscout.rx.logging +package info.nightscout.sharedtests + +import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.rx.logging.LTag /** * Created by adrian on 2019-12-27. diff --git a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt index 1e52c7fbea..35f4960822 100644 --- a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt +++ b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt @@ -2,8 +2,7 @@ package info.nightscout.sharedtests import android.annotation.SuppressLint import info.nightscout.rx.AapsSchedulers -import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.rx.logging.AAPSLoggerTest +import info.nightscout.sharedtests.rx.TestAapsSchedulers import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.extension.ExtendWith import org.mockito.ArgumentMatcher diff --git a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt index cb2ceb610f..8a03a6fbbb 100644 --- a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt +++ b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt @@ -19,11 +19,11 @@ import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.ProfileStore import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.rx.bus.RxBus +import info.nightscout.shared.impl.rx.bus.RxBusImpl import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP -import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import org.json.JSONObject import org.junit.jupiter.api.BeforeEach import org.mockito.ArgumentMatchers.anyDouble @@ -45,11 +45,11 @@ open class TestBaseWithProfile : TestBase() { @Mock lateinit var context: Context @Mock lateinit var sp: SP - lateinit var dateUtil: DateUtil + lateinit var dateUtil: DateUtilImpl lateinit var profileUtil: ProfileUtil lateinit var decimalFormatter: DecimalFormatter lateinit var hardLimits: HardLimits - val rxBus = RxBus(aapsSchedulers, aapsLogger) + val rxBus = RxBusImpl(aapsSchedulers, aapsLogger) val profileInjector = HasAndroidInjector { AndroidInjector { @@ -82,7 +82,7 @@ open class TestBaseWithProfile : TestBase() { invalidProfileJSON = "{\"dia\":\"1\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"3\"}," + "{\"time\":\"2:00\",\"value\":\"3.4\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4.5\"}]," + "\"target_high\":[{\"time\":\"00:00\",\"value\":\"7\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" - dateUtil = Mockito.spy(DateUtil(context)) + dateUtil = Mockito.spy(DateUtilImpl(context)) decimalFormatter = DecimalFormatterImpl(rh) profileUtil = ProfileUtilImpl(sp, decimalFormatter) testPumpPlugin = TestPumpPlugin(profileInjector) diff --git a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/rx/TestAapsSchedulers.kt b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/rx/TestAapsSchedulers.kt new file mode 100644 index 0000000000..e9b18431ce --- /dev/null +++ b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/rx/TestAapsSchedulers.kt @@ -0,0 +1,17 @@ +package info.nightscout.sharedtests.rx + +import info.nightscout.rx.AapsSchedulers +import io.reactivex.rxjava3.core.Scheduler +import io.reactivex.rxjava3.schedulers.Schedulers + +/** + * Created by adrian on 12.04.20. + */ + +class TestAapsSchedulers : AapsSchedulers { + + override val main: Scheduler = Schedulers.trampoline() + override val io: Scheduler = Schedulers.trampoline() + override val cpu: Scheduler = Schedulers.trampoline() + override val newThread: Scheduler = Schedulers.trampoline() +} \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/AapsSchedulers.kt b/app-wear-shared/shared/src/main/java/info/nightscout/rx/AapsSchedulers.kt index 4377909f3d..af6f4f1cda 100644 --- a/app-wear-shared/shared/src/main/java/info/nightscout/rx/AapsSchedulers.kt +++ b/app-wear-shared/shared/src/main/java/info/nightscout/rx/AapsSchedulers.kt @@ -1,30 +1,15 @@ package info.nightscout.rx -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Scheduler -import io.reactivex.rxjava3.schedulers.Schedulers /** * Created by adrian on 12.04.20. */ interface AapsSchedulers { + val main: Scheduler val io: Scheduler val cpu: Scheduler val newThread: Scheduler -} - -class DefaultAapsSchedulers : AapsSchedulers { - override val main: Scheduler = AndroidSchedulers.mainThread() - override val io: Scheduler = Schedulers.io() - override val cpu: Scheduler = Schedulers.computation() - override val newThread: Scheduler = Schedulers.newThread() -} - -class TestAapsSchedulers : AapsSchedulers { - override val main: Scheduler = Schedulers.trampoline() - override val io: Scheduler = Schedulers.trampoline() - override val cpu: Scheduler = Schedulers.trampoline() - override val newThread: Scheduler = Schedulers.trampoline() } \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/bus/RxBus.kt b/app-wear-shared/shared/src/main/java/info/nightscout/rx/bus/RxBus.kt index 438fad7ed9..e2649036c5 100644 --- a/app-wear-shared/shared/src/main/java/info/nightscout/rx/bus/RxBus.kt +++ b/app-wear-shared/shared/src/main/java/info/nightscout/rx/bus/RxBus.kt @@ -1,33 +1,13 @@ package info.nightscout.rx.bus -import info.nightscout.annotations.OpenForTesting -import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.events.Event -import info.nightscout.rx.logging.AAPSLogger -import info.nightscout.rx.logging.LTag import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.subjects.PublishSubject -import javax.inject.Inject -import javax.inject.Singleton -@OpenForTesting -@Singleton -class RxBus @Inject constructor( - val aapsSchedulers: AapsSchedulers, - val aapsLogger: AAPSLogger -) { +interface RxBus { - private val publisher = PublishSubject.create() - - fun send(event: Event) { - aapsLogger.debug(LTag.EVENTS, "Sending $event") - publisher.onNext(event) - } + fun send(event: Event) // Listen should return an Observable and not the publisher // Using ofType we filter only events that match that class type - fun toObservable(eventType: Class): Observable = - publisher - .subscribeOn(aapsSchedulers.io) - .ofType(eventType) + fun toObservable(eventType: Class): Observable } \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/di/RxModule.kt b/app-wear-shared/shared/src/main/java/info/nightscout/rx/di/RxModule.kt deleted file mode 100644 index 0e584cf5e7..0000000000 --- a/app-wear-shared/shared/src/main/java/info/nightscout/rx/di/RxModule.kt +++ /dev/null @@ -1,25 +0,0 @@ -package info.nightscout.rx.di - -import dagger.Module -import dagger.Provides -import info.nightscout.rx.AapsSchedulers -import info.nightscout.rx.DefaultAapsSchedulers -import info.nightscout.rx.interfaces.L -import info.nightscout.rx.logging.AAPSLogger -import info.nightscout.rx.logging.AAPSLoggerProduction -import javax.inject.Singleton - -@Module( - includes = [ - ] -) -open class RxModule { - - @Provides - @Singleton - internal fun provideSchedulers(): AapsSchedulers = DefaultAapsSchedulers() - - @Provides - @Singleton - fun provideAAPSLogger(l: L): AAPSLogger = AAPSLoggerProduction(l) -} \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/di/SharedModule.kt b/app-wear-shared/shared/src/main/java/info/nightscout/shared/di/SharedModule.kt deleted file mode 100644 index 735de9f807..0000000000 --- a/app-wear-shared/shared/src/main/java/info/nightscout/shared/di/SharedModule.kt +++ /dev/null @@ -1,9 +0,0 @@ -package info.nightscout.shared.di - -import dagger.Module - -@Module( - includes = [ - ] -) -open class SharedModule \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/DateUtil.kt b/app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/DateUtil.kt index 361a52b600..41afa1adb2 100644 --- a/app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/DateUtil.kt +++ b/app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/DateUtil.kt @@ -1,52 +1,16 @@ package info.nightscout.shared.utils -import android.content.Context import android.os.Build import androidx.annotation.RequiresApi -import androidx.collection.LongSparseArray -import info.nightscout.annotations.OpenForTesting -import info.nightscout.shared.R -import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper -import org.apache.commons.lang3.time.DateUtils.isSameDay -import org.joda.time.DateTime -import org.joda.time.format.DateTimeFormat -import org.joda.time.format.ISODateTimeFormat -import java.security.SecureRandom -import java.text.DateFormat -import java.text.DecimalFormat -import java.text.DecimalFormatSymbols -import java.text.SimpleDateFormat -import java.time.Instant -import java.time.ZoneId -import java.time.ZoneOffset -import java.util.Calendar -import java.util.Date -import java.util.EnumSet -import java.util.GregorianCalendar -import java.util.Locale import java.util.TimeZone import java.util.concurrent.TimeUnit -import java.util.regex.Pattern -import java.util.stream.Collectors -import javax.inject.Inject -import javax.inject.Singleton -import kotlin.math.ceil -import kotlin.math.floor /** * The Class DateUtil. A simple wrapper around SimpleDateFormat to ease the handling of iso date string <-> date obj * with TZ */ -@OpenForTesting -@Singleton -class DateUtil @Inject constructor(private val context: Context) { - - /** - * The date format in iso. - */ - @Suppress("PrivatePropertyName", "SpellCheckingInspection") - private val FORMAT_DATE_ISO_OUT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" +interface DateUtil { /** * Takes in an ISO date string of the following format: @@ -55,11 +19,7 @@ class DateUtil @Inject constructor(private val context: Context) { * @param isoDateString the iso date string * @return the date */ - fun fromISODateString(isoDateString: String): Long { - val parser = ISODateTimeFormat.dateTimeParser() - val dateTime = DateTime.parse(isoDateString, parser) - return dateTime.toDate().time - } + fun fromISODateString(isoDateString: String): Long /** * Render date @@ -67,404 +27,66 @@ class DateUtil @Inject constructor(private val context: Context) { * @param date the date obj * @return the iso-formatted date string */ - fun toISOString(date: Long): String { - val f: DateFormat = SimpleDateFormat(FORMAT_DATE_ISO_OUT, Locale.getDefault()) - f.timeZone = TimeZone.getTimeZone("UTC") - return f.format(date) - } - - @Suppress("SpellCheckingInspection") - fun toISOAsUTC(timestamp: Long): String { - val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'0000Z'", Locale.US) - format.timeZone = TimeZone.getTimeZone("UTC") - return format.format(timestamp) - } - - @Suppress("SpellCheckingInspection") - fun toISONoZone(timestamp: Long): String { - val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US) - format.timeZone = TimeZone.getDefault() - return format.format(timestamp) - } - - fun secondsOfTheDayToMilliseconds(seconds: Int): Long { - val calendar: Calendar = GregorianCalendar() - calendar[Calendar.MONTH] = 0 // Set january to be sure we miss DST changing - calendar[Calendar.HOUR_OF_DAY] = seconds / 60 / 60 - calendar[Calendar.MINUTE] = seconds / 60 % 60 - calendar[Calendar.SECOND] = 0 - return calendar.timeInMillis - } - - fun toSeconds(hhColonMm: String): Int { - val p = Pattern.compile("(\\d+):(\\d+)( a.m.| p.m.| AM| PM|AM|PM|)") - val m = p.matcher(hhColonMm) - var retVal = 0 - if (m.find()) { - retVal = SafeParse.stringToInt(m.group(1)) * 60 * 60 + SafeParse.stringToInt(m.group(2)) * 60 - if ((m.group(3) == " a.m." || m.group(3) == " AM" || m.group(3) == "AM") && m.group(1) == "12") retVal -= 12 * 60 * 60 - if ((m.group(3) == " p.m." || m.group(3) == " PM" || m.group(3) == "PM") && m.group(1) != "12") retVal += 12 * 60 * 60 - } - return retVal - } - - fun dateString(mills: Long): String { - val df = DateFormat.getDateInstance(DateFormat.SHORT) - return df.format(mills) - } - - fun dateStringRelative(mills: Long, rh: ResourceHelper): String { - val df = DateFormat.getDateInstance(DateFormat.SHORT) - val day = df.format(mills) - val beginOfToday = beginOfDay(now()) - return if (mills < now()) // Past - when { - mills > beginOfToday -> rh.gs(R.string.today) - mills > beginOfToday - T.days(1).msecs() -> rh.gs(R.string.yesterday) - mills > beginOfToday - T.days(7).msecs() -> dayAgo(mills, rh, true) - else -> day - } - else // Future - when { - mills < beginOfToday + T.days(1).msecs() -> rh.gs(R.string.later_today) - mills < beginOfToday + T.days(2).msecs() -> rh.gs(R.string.tomorrow) - mills < beginOfToday + T.days(7).msecs() -> dayAgo(mills, rh, true) - else -> day - } - } - - fun dateStringShort(mills: Long): String { - var format = "MM/dd" - if (android.text.format.DateFormat.is24HourFormat(context)) { - format = "dd/MM" - } - return DateTime(mills).toString(DateTimeFormat.forPattern(format)) - } - - fun timeString(): String = timeString(now()) - fun timeString(mills: Long): String { - var format = "hh:mma" - if (android.text.format.DateFormat.is24HourFormat(context)) { - format = "HH:mm" - } - return DateTime(mills).toString(DateTimeFormat.forPattern(format)) - } - - fun secondString(): String = secondString(now()) - fun secondString(mills: Long): String = - DateTime(mills).toString(DateTimeFormat.forPattern("ss")) - - fun minuteString(): String = minuteString(now()) - fun minuteString(mills: Long): String = - DateTime(mills).toString(DateTimeFormat.forPattern("mm")) - - fun hourString(): String = hourString(now()) - fun hourString(mills: Long): String { - var format = "hh" - if (android.text.format.DateFormat.is24HourFormat(context)) { - format = "HH" - } - return DateTime(mills).toString(DateTimeFormat.forPattern(format)) - } - - fun amPm(): String = amPm(now()) - fun amPm(mills: Long): String = - DateTime(mills).toString(DateTimeFormat.forPattern("a")) - - fun dayNameString(format: String = "E"): String = dayNameString(now(), format) - fun dayNameString(mills: Long, format: String = "E"): String = - DateTime(mills).toString(DateTimeFormat.forPattern(format)) - + fun toISOString(date: Long): String + fun toISOAsUTC(timestamp: Long): String + fun toISONoZone(timestamp: Long): String + fun secondsOfTheDayToMilliseconds(seconds: Int): Long + fun toSeconds(hhColonMm: String): Int + fun dateString(mills: Long): String + fun dateStringRelative(mills: Long, rh: ResourceHelper): String + fun dateStringShort(mills: Long): String + fun timeString(): String + fun timeString(mills: Long): String + fun secondString(): String + fun secondString(mills: Long): String + fun minuteString(): String + fun minuteString(mills: Long): String + fun hourString(): String + fun hourString(mills: Long): String + fun amPm(): String + fun amPm(mills: Long): String + fun dayNameString(format: String = "E"): String + fun dayNameString(mills: Long, format: String = "E"): String fun dayString(): String = dayString(now()) - fun dayString(mills: Long): String = - DateTime(mills).toString(DateTimeFormat.forPattern("dd")) + fun dayString(mills: Long): String + fun monthString(format: String = "MMM"): String + fun monthString(mills: Long, format: String = "MMM"): String + fun weekString(): String + fun weekString(mills: Long): String + fun timeStringWithSeconds(mills: Long): String + fun dateAndTimeRangeString(start: Long, end: Long): String + fun timeRangeString(start: Long, end: Long): String + fun dateAndTimeString(mills: Long): String + fun dateAndTimeAndSecondsString(mills: Long): String + fun minAgo(rh: ResourceHelper, time: Long?): String + fun minAgoShort(time: Long?): String + fun minAgoLong(rh: ResourceHelper, time: Long?): String + fun hourAgo(time: Long, rh: ResourceHelper): String + fun dayAgo(time: Long, rh: ResourceHelper, round: Boolean = false): String + fun beginOfDay(mills: Long): Long + fun timeStringFromSeconds(seconds: Int): String + fun timeFrameString(timeInMillis: Long, rh: ResourceHelper): String + fun sinceString(timestamp: Long, rh: ResourceHelper): String + fun untilString(timestamp: Long, rh: ResourceHelper): String + fun now(): Long + fun nowWithoutMilliseconds(): Long + fun isOlderThan(date: Long, minutes: Long): Boolean + fun getTimeZoneOffsetMs(): Long + fun getTimeZoneOffsetMinutes(timestamp: Long): Int + fun isSameDay(timestamp1: Long, timestamp2: Long): Boolean - fun monthString(format: String = "MMM"): String = monthString(now(), format) - fun monthString(mills: Long, format: String = "MMM"): String = - DateTime(mills).toString(DateTimeFormat.forPattern(format)) - - fun weekString(): String = weekString(now()) - fun weekString(mills: Long): String = - DateTime(mills).toString(DateTimeFormat.forPattern("ww")) - - fun timeStringWithSeconds(mills: Long): String { - var format = "hh:mm:ssa" - if (android.text.format.DateFormat.is24HourFormat(context)) { - format = "HH:mm:ss" - } - return DateTime(mills).toString(DateTimeFormat.forPattern(format)) - } - - fun dateAndTimeRangeString(start: Long, end: Long): String { - return dateAndTimeString(start) + " - " + timeString(end) - } - - fun timeRangeString(start: Long, end: Long): String { - return timeString(start) + " - " + timeString(end) - } - - fun dateAndTimeString(mills: Long): String { - return if (mills == 0L) "" else dateString(mills) + " " + timeString(mills) - } - - fun dateAndTimeAndSecondsString(mills: Long): String { - return if (mills == 0L) "" else dateString(mills) + " " + timeStringWithSeconds(mills) - } - - fun minAgo(rh: ResourceHelper, time: Long?): String { - if (time == null) return "" - val minutes = ((now() - time) / 1000 / 60).toInt() - return rh.gs(R.string.minago, minutes) - } - - fun minAgoShort(time: Long?): String { - if (time == null) return "" - val minutes = ((time - now()) / 1000 / 60).toInt() - return (if (minutes > 0) "+" else "") + minutes - } - - fun minAgoLong(rh: ResourceHelper, time: Long?): String { - if (time == null) return "" - val minutes = ((now() - time) / 1000 / 60).toInt() - return rh.gs(R.string.minago_long, minutes) - } - - fun hourAgo(time: Long, rh: ResourceHelper): String { - val hours = (now() - time) / 1000.0 / 60 / 60 - return rh.gs(R.string.hoursago, hours) - } - - fun dayAgo(time: Long, rh: ResourceHelper, round: Boolean = false): String { - var days = (now() - time) / 1000.0 / 60 / 60 / 24 - if (round) { - return if (now() > time) { - days = ceil(days) - rh.gs(R.string.days_ago_round, days) - } else { - days = floor(days) - rh.gs(R.string.in_days_round, days) - } - } - return if (now() > time) - rh.gs(R.string.days_ago, days) - else - rh.gs(R.string.in_days, days) - } - - fun beginOfDay(mills: Long): Long { - val givenDate = Calendar.getInstance() - givenDate.timeInMillis = mills - givenDate[Calendar.HOUR_OF_DAY] = 0 - givenDate[Calendar.MINUTE] = 0 - givenDate[Calendar.SECOND] = 0 - givenDate[Calendar.MILLISECOND] = 0 - return givenDate.timeInMillis - } - - fun timeStringFromSeconds(seconds: Int): String { - val cached = timeStrings[seconds.toLong()] - if (cached != null) return cached - val t = timeString(secondsOfTheDayToMilliseconds(seconds)) - timeStrings.put(seconds.toLong(), t) - return t - } - - fun timeFrameString(timeInMillis: Long, rh: ResourceHelper): String { - var remainingTimeMinutes = timeInMillis / (1000 * 60) - val remainingTimeHours = remainingTimeMinutes / 60 - remainingTimeMinutes %= 60 - return "(" + (if (remainingTimeHours > 0) remainingTimeHours.toString() + rh.gs(R.string.shorthour) + " " else "") + remainingTimeMinutes + "')" - } - - fun sinceString(timestamp: Long, rh: ResourceHelper): String { - return timeFrameString(System.currentTimeMillis() - timestamp, rh) - } - - fun untilString(timestamp: Long, rh: ResourceHelper): String { - return timeFrameString(timestamp - System.currentTimeMillis(), rh) - } - - fun now(): Long { - return System.currentTimeMillis() - } - - fun nowWithoutMilliseconds(): Long { - var n = System.currentTimeMillis() - n -= n % 1000 - return n - } - - fun isOlderThan(date: Long, minutes: Long): Boolean { - val diff = now() - date - return diff > T.mins(minutes).msecs() - } - - fun getTimeZoneOffsetMs(): Long { - return GregorianCalendar().timeZone.rawOffset.toLong() - } - - fun getTimeZoneOffsetMinutes(timestamp: Long): Int { - return TimeZone.getDefault().getOffset(timestamp) / 60000 - } - - fun isSameDay(timestamp1: Long, timestamp2: Long) = isSameDay(Date(timestamp1), Date(timestamp2)) - - fun isSameDayGroup(timestamp1: Long, timestamp2: Long): Boolean { - val now = now() - if (now in (timestamp1 + 1) until timestamp2 || now in (timestamp2 + 1) until timestamp1) - return false - return isSameDay(Date(timestamp1), Date(timestamp2)) - } + fun isSameDayGroup(timestamp1: Long, timestamp2: Long): Boolean //Map:{DAYS=1, HOURS=3, MINUTES=46, SECONDS=40, MILLISECONDS=0, MICROSECONDS=0, NANOSECONDS=0} - fun computeDiff(date1: Long, date2: Long): Map { - val units: MutableList = ArrayList(EnumSet.allOf(TimeUnit::class.java)) - units.reverse() - val result: MutableMap = LinkedHashMap() - var millisecondsRest = date2 - date1 - for (unit in units) { - val diff = unit.convert(millisecondsRest, TimeUnit.MILLISECONDS) - val diffInMillisecondsForUnit = unit.toMillis(diff) - millisecondsRest -= diffInMillisecondsForUnit - result[unit] = diff - } - return result - } - - fun age(milliseconds: Long, useShortText: Boolean, rh: ResourceHelper): String { - val diff = computeDiff(0L, milliseconds) - var days = " " + rh.gs(R.string.days) + " " - var hours = " " + rh.gs(R.string.hours) + " " - var minutes = " " + rh.gs(R.string.unit_minutes) + " " - if (useShortText) { - days = rh.gs(R.string.shortday) - hours = rh.gs(R.string.shorthour) - minutes = rh.gs(R.string.shortminute) - } - var result = "" - if (diff.getOrDefault(TimeUnit.DAYS, -1) > 0) result += diff[TimeUnit.DAYS].toString() + days - if (diff.getOrDefault(TimeUnit.HOURS, -1) > 0) result += diff[TimeUnit.HOURS].toString() + hours - if (diff[TimeUnit.DAYS] == 0L) result += diff[TimeUnit.MINUTES].toString() + minutes - return result - } - - fun niceTimeScalar(time: Long, rh: ResourceHelper): String { - var t = time - var unit = rh.gs(R.string.unit_second) - t /= 1000 - if (t != 1L) unit = rh.gs(R.string.unit_seconds) - if (t > 59) { - unit = rh.gs(R.string.unit_minute) - t /= 60 - if (t != 1L) unit = rh.gs(R.string.unit_minutes) - if (t > 59) { - unit = rh.gs(R.string.unit_hour) - t /= 60 - if (t != 1L) unit = rh.gs(R.string.unit_hours) - if (t > 24) { - unit = rh.gs(R.string.unit_day) - t /= 24 - if (t != 1L) unit = rh.gs(R.string.unit_days) - if (t > 28) { - unit = rh.gs(R.string.unit_week) - t /= 7 - @Suppress("KotlinConstantConditions") - if (t != 1L) unit = rh.gs(R.string.unit_weeks) - } - } - } - } - //if (t != 1) unit = unit + "s"; //implemented plurality in every step, because in other languages plurality of time is not every time adding the same character - return qs(t.toDouble(), 0) + " " + unit - } - - fun qs(x: Double, numDigits: Int): String { - var digits = numDigits - if (digits == -1) { - digits = 0 - if ((x.toInt() % x == 0.0)) { - digits++ - if ((x.toInt() * 10 / 10).toDouble() != x) { - digits++ - if ((x.toInt() * 100 / 100).toDouble() != x) digits++ - } - } - } - if (dfs == null) { - val localDfs = DecimalFormatSymbols() - localDfs.decimalSeparator = '.' - dfs = localDfs // avoid race condition - } - val thisDf: DecimalFormat? - // use singleton if on ui thread otherwise allocate new as DecimalFormat is not thread safe - if (Thread.currentThread().id == 1L) { - if (df == null) { - val localDf = DecimalFormat("#", dfs) - localDf.minimumIntegerDigits = 1 - df = localDf // avoid race condition - } - thisDf = df - } else { - thisDf = DecimalFormat("#", dfs) - } - thisDf?.maximumFractionDigits = digits - return thisDf?.format(x) ?: "" - } - - fun formatHHMM(timeAsSeconds: Int): String { - val hour = timeAsSeconds / 60 / 60 - val minutes = (timeAsSeconds - hour * 60 * 60) / 60 - val df = DecimalFormat("00") - return df.format(hour.toLong()) + ":" + df.format(minutes.toLong()) - } + fun computeDiff(date1: Long, date2: Long): Map + fun age(milliseconds: Long, useShortText: Boolean, rh: ResourceHelper): String + fun niceTimeScalar(time: Long, rh: ResourceHelper): String + fun qs(x: Double, numDigits: Int): String + fun formatHHMM(timeAsSeconds: Int): String @RequiresApi(Build.VERSION_CODES.O) - fun timeZoneByOffset(offsetInMilliseconds: Long): TimeZone = - TimeZone.getTimeZone( - if (offsetInMilliseconds == 0L) ZoneId.of("UTC") - else ZoneId.getAvailableZoneIds() - .stream() - .map(ZoneId::of) - .filter { z -> z.rules.getOffset(Instant.now()).totalSeconds == ZoneOffset.ofHours((offsetInMilliseconds / 1000 / 3600).toInt()).totalSeconds } - .collect(Collectors.toList()) - .firstOrNull() ?: ZoneId.of("UTC") - ) - - fun timeStampToUtcDateMillis(timestamp: Long): Long { - val current = Calendar.getInstance().apply { timeInMillis = timestamp } - return Calendar.getInstance().apply { - set(Calendar.YEAR, current[Calendar.YEAR]) - set(Calendar.MONTH, current[Calendar.MONTH]) - set(Calendar.DAY_OF_MONTH, current[Calendar.DAY_OF_MONTH]) - }.timeInMillis - } - - fun mergeUtcDateToTimestamp(timestamp: Long, dateUtcMillis: Long): Long { - val selected = Calendar.getInstance().apply { timeInMillis = dateUtcMillis } - return Calendar.getInstance().apply { - timeInMillis = timestamp - set(Calendar.YEAR, selected[Calendar.YEAR]) - set(Calendar.MONTH, selected[Calendar.MONTH]) - set(Calendar.DAY_OF_MONTH, selected[Calendar.DAY_OF_MONTH]) - }.timeInMillis - } - - fun mergeHourMinuteToTimestamp(timestamp: Long, hour: Int, minute: Int, randomSecond: Boolean = false): Long { - return Calendar.getInstance().apply { - timeInMillis = timestamp - set(Calendar.HOUR_OF_DAY, hour) - set(Calendar.MINUTE, minute) - if (randomSecond) set(Calendar.SECOND, seconds++) - }.timeInMillis - } - - companion object { - - private val timeStrings = LongSparseArray() - private var seconds: Int = (SecureRandom().nextDouble() * 59.0).toInt() - - // singletons to avoid repeated allocation - private var dfs: DecimalFormatSymbols? = null - private var df: DecimalFormat? = null - } + fun timeZoneByOffset(offsetInMilliseconds: Long): TimeZone + fun timeStampToUtcDateMillis(timestamp: Long): Long + fun mergeUtcDateToTimestamp(timestamp: Long, dateUtcMillis: Long): Long + fun mergeHourMinuteToTimestamp(timestamp: Long, hour: Int, minute: Int, randomSecond: Boolean = false): Long } diff --git a/app-wear-shared/shared/src/main/res/drawable/detailed_dial.xml b/app-wear-shared/shared/src/main/res/drawable/detailed_dial.xml deleted file mode 100644 index fa5c92bde2..0000000000 --- a/app-wear-shared/shared/src/main/res/drawable/detailed_dial.xml +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app-wear-shared/shared/src/main/res/drawable/hour_hand.xml b/app-wear-shared/shared/src/main/res/drawable/hour_hand.xml deleted file mode 100644 index c29364421b..0000000000 --- a/app-wear-shared/shared/src/main/res/drawable/hour_hand.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app-wear-shared/shared/src/main/res/drawable/minute_hand.xml b/app-wear-shared/shared/src/main/res/drawable/minute_hand.xml deleted file mode 100644 index ae37534d34..0000000000 --- a/app-wear-shared/shared/src/main/res/drawable/minute_hand.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app-wear-shared/shared/src/main/res/drawable/second_hand.xml b/app-wear-shared/shared/src/main/res/drawable/second_hand.xml deleted file mode 100644 index 96464ba7a8..0000000000 --- a/app-wear-shared/shared/src/main/res/drawable/second_hand.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app-wear-shared/shared/src/main/res/drawable/simplified_dial.xml b/app-wear-shared/shared/src/main/res/drawable/simplified_dial.xml deleted file mode 100644 index 63cca01bfb..0000000000 --- a/app-wear-shared/shared/src/main/res/drawable/simplified_dial.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - diff --git a/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt b/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt index f96fd72374..26e84713c1 100644 --- a/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt +++ b/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt @@ -8,7 +8,6 @@ import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.danar.di.DanaRModule import info.nightscout.androidaps.insight.di.InsightDatabaseModule import info.nightscout.androidaps.insight.di.InsightModule -import info.nightscout.plugins.sync.di.OpenHumansModule import info.nightscout.androidaps.plugins.pump.common.di.RileyLinkModule import info.nightscout.androidaps.plugins.pump.eopatch.dagger.EopatchModule import info.nightscout.androidaps.plugins.pump.medtronic.di.MedtronicModule @@ -24,6 +23,7 @@ import info.nightscout.insulin.di.InsulinModule import info.nightscout.plugins.aps.di.ApsModule import info.nightscout.plugins.constraints.di.PluginsConstraintsModule import info.nightscout.plugins.di.PluginsModule +import info.nightscout.plugins.sync.di.OpenHumansModule import info.nightscout.plugins.sync.di.SyncModule import info.nightscout.pump.combo.di.ComboModule import info.nightscout.pump.combov2.di.ComboV2Module @@ -31,11 +31,9 @@ import info.nightscout.pump.common.di.PumpCommonModule import info.nightscout.pump.dana.di.DanaHistoryModule import info.nightscout.pump.dana.di.DanaModule import info.nightscout.pump.danars.di.DanaRSModule -import info.nightscout.pump.medtrum.di.MedtrumModule import info.nightscout.pump.diaconn.di.DiaconnG8Module +import info.nightscout.pump.medtrum.di.MedtrumModule import info.nightscout.pump.virtual.di.VirtualPumpModule -import info.nightscout.rx.di.RxModule -import info.nightscout.shared.di.SharedModule import info.nightscout.shared.impl.di.SharedImplModule import info.nightscout.source.di.SourceModule import info.nightscout.ui.di.UiModule @@ -62,8 +60,6 @@ import javax.inject.Singleton InsulinModule::class, OpenHumansModule::class, PluginsModule::class, - RxModule::class, - SharedModule::class, SharedImplModule::class, UiModule::class, ValidatorsModule::class, diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/interfaces/utils/DecimalFormatter.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/utils/DecimalFormatter.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/interfaces/utils/DecimalFormatter.kt rename to core/interfaces/src/main/java/info/nightscout/interfaces/utils/DecimalFormatter.kt diff --git a/core/ui/src/main/res/values-sw600dp/layout.xml b/core/ui/src/main/res/values-sw600dp/layout.xml new file mode 100644 index 0000000000..7c98f55487 --- /dev/null +++ b/core/ui/src/main/res/values-sw600dp/layout.xml @@ -0,0 +1,3 @@ + + true + \ No newline at end of file diff --git a/core/ui/src/main/res/values/layout.xml b/core/ui/src/main/res/values/layout.xml new file mode 100644 index 0000000000..57f058c48b --- /dev/null +++ b/core/ui/src/main/res/values/layout.xml @@ -0,0 +1,3 @@ + + false + \ No newline at end of file diff --git a/core/validators/build.gradle b/core/validators/build.gradle index b864f8f969..c96c66abe0 100644 --- a/core/validators/build.gradle +++ b/core/validators/build.gradle @@ -17,5 +17,6 @@ android { dependencies { implementation project(':app-wear-shared:shared') + implementation project(':app-wear-shared:shared-impl') api "com.google.android.material:material:$material_version" } \ No newline at end of file diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt index a00baaca9b..544e8dd99a 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/MaintenanceFragment.kt @@ -32,7 +32,6 @@ import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventPreferenceChange import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag -import info.nightscout.shared.extensions.runOnUiThread import info.nightscout.shared.extensions.toVisibility import info.nightscout.shared.interfaces.ResourceHelper import io.reactivex.rxjava3.core.Completable @@ -106,7 +105,7 @@ class MaintenanceFragment : DaggerFragment() { onError = { aapsLogger.error("Error clearing databases", it) }, onComplete = { rxBus.send(EventPreferenceChange(rh.gs(info.nightscout.core.utils.R.string.key_units))) - runOnUiThread { activity.recreate() } + info.nightscout.shared.extensions.runOnUiThread { activity.recreate() } } ) uel.log(Action.RESET_DATABASES, Sources.Maintenance) diff --git a/plugins/main/build.gradle b/plugins/main/build.gradle index 07d9669272..dfd942ee1a 100644 --- a/plugins/main/build.gradle +++ b/plugins/main/build.gradle @@ -16,6 +16,7 @@ android { dependencies { implementation project(':app-wear-shared:shared') + implementation project(':app-wear-shared:shared-impl') implementation project(':database:entities') implementation project(':database:impl') implementation project(':core:graphview') diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt index 6b514eb010..8094509045 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt @@ -34,6 +34,7 @@ import info.nightscout.rx.events.EventNewHistoryData import info.nightscout.rx.events.EventPumpStatusChanged import info.nightscout.rx.events.EventUpdateOverviewCalcProgress import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.shared.impl.rx.bus.RxBusImpl import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import io.reactivex.rxjava3.disposables.CompositeDisposable @@ -72,7 +73,7 @@ class OverviewPlugin @Inject constructor( private var disposable: CompositeDisposable = CompositeDisposable() - override val overviewBus = RxBus(aapsSchedulers, aapsLogger) + override val overviewBus = RxBusImpl(aapsSchedulers, aapsLogger) override fun addNotificationWithDialogResponse(id: Int, text: String, level: Int, @StringRes actionButtonId: Int, title: String, message: String) { rxBus.send( diff --git a/plugins/source/build.gradle b/plugins/source/build.gradle index 9a3c60f00b..92d8f31d79 100644 --- a/plugins/source/build.gradle +++ b/plugins/source/build.gradle @@ -17,6 +17,7 @@ android { dependencies { implementation project(':app-wear-shared:shared') + implementation project(':app-wear-shared:shared-impl') implementation project(':database:entities') implementation project(':database:impl') implementation project(':core:interfaces') diff --git a/plugins/sync/build.gradle b/plugins/sync/build.gradle index 2551c23cb3..63f799cc9c 100644 --- a/plugins/sync/build.gradle +++ b/plugins/sync/build.gradle @@ -16,6 +16,7 @@ android { dependencies { implementation project(':app-wear-shared:shared') + implementation project(':app-wear-shared:shared-impl') implementation project(':database:entities') implementation project(':database:impl') implementation project(':core:main') diff --git a/pump/combo/src/main/java/info/nightscout/pump/combo/ComboFragment.kt b/pump/combo/src/main/java/info/nightscout/pump/combo/ComboFragment.kt index 5273087c94..012713ed01 100644 --- a/pump/combo/src/main/java/info/nightscout/pump/combo/ComboFragment.kt +++ b/pump/combo/src/main/java/info/nightscout/pump/combo/ComboFragment.kt @@ -19,7 +19,6 @@ import info.nightscout.pump.combo.ruffyscripter.PumpState import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventQueueChanged -import info.nightscout.shared.extensions.runOnUiThread import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.utils.DateUtil import io.reactivex.rxjava3.disposables.CompositeDisposable @@ -62,7 +61,7 @@ class ComboFragment : DaggerFragment() { binding.comboRefreshButton.isEnabled = false commandQueue.readStatus(rh.gs(info.nightscout.core.ui.R.string.user_request), object : Callback() { override fun run() { - runOnUiThread { binding.comboRefreshButton.isEnabled = true } + activity?.runOnUiThread { binding.comboRefreshButton.isEnabled = true } } }) } @@ -153,14 +152,17 @@ class ComboFragment : DaggerFragment() { binding.comboInsulinstate.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.defaultTextColor)) binding.comboInsulinstate.setTypeface(null, Typeface.NORMAL) } + PumpState.LOW -> { binding.comboInsulinstate.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.omniYellowColor)) binding.comboInsulinstate.setTypeface(null, Typeface.BOLD) } + PumpState.EMPTY -> { binding.comboInsulinstate.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.warningColor)) binding.comboInsulinstate.setTypeface(null, Typeface.BOLD) } + else -> { binding.comboInsulinstate.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.defaultTextColor)) binding.comboInsulinstate.setTypeface(null, Typeface.NORMAL) @@ -175,10 +177,12 @@ class ComboFragment : DaggerFragment() { binding.comboLastconnection.setText(R.string.combo_pump_connected_now) binding.comboLastconnection.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.defaultTextColor)) } + comboPlugin.pump.lastSuccessfulCmdTime + 30 * 60 * 1000 < System.currentTimeMillis() -> { binding.comboLastconnection.text = rh.gs(R.string.combo_no_pump_connection, min) binding.comboLastconnection.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.warningColor)) } + else -> { binding.comboLastconnection.text = minAgo binding.comboLastconnection.setTextColor(rh.gac(context, info.nightscout.core.ui.R.attr.defaultTextColor)) diff --git a/pump/diaconn/build.gradle b/pump/diaconn/build.gradle index 81af70ba94..f6e0c7934b 100644 --- a/pump/diaconn/build.gradle +++ b/pump/diaconn/build.gradle @@ -26,6 +26,7 @@ android { dependencies { implementation project(':app-wear-shared:shared') + implementation project(':app-wear-shared:shared-impl') implementation project(':core:libraries') implementation project(':core:interfaces') implementation project(':core:utils') diff --git a/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/alarm/AlarmRegistry.kt b/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/alarm/AlarmRegistry.kt index ae020d1ccf..9897559ff8 100644 --- a/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/alarm/AlarmRegistry.kt +++ b/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/alarm/AlarmRegistry.kt @@ -27,6 +27,7 @@ import javax.inject.Inject import javax.inject.Singleton interface IAlarmRegistry { + fun add(alarmCode: AlarmCode, triggerAfter: Long, isFirst: Boolean = false): Maybe fun add(patchAeCodes: Set) fun remove(alarmCode: AlarmCode): Maybe @@ -34,11 +35,13 @@ interface IAlarmRegistry { @Singleton class AlarmRegistry @Inject constructor() : IAlarmRegistry { + @Inject lateinit var mContext: Context @Inject lateinit var pm: IPreferenceManager @Inject lateinit var rxBus: RxBus @Inject lateinit var aapsLogger: AAPSLogger @Inject lateinit var aapsSchedulers: AapsSchedulers + @Inject lateinit var dateUtil: DateUtil private lateinit var mOsAlarmManager: AlarmManager private var mDisposable: Disposable? = null @@ -49,19 +52,21 @@ class AlarmRegistry @Inject constructor() : IAlarmRegistry { mDisposable = pm.observePatchLifeCycle() .observeOn(aapsSchedulers.main) .subscribe { - when(it){ + when (it) { PatchLifecycle.REMOVE_NEEDLE_CAP -> { val triggerAfter = pm.getPatchConfig().patchWakeupTimestamp + TimeUnit.HOURS.toMillis(1) - System.currentTimeMillis() compositeDisposable.add(add(AlarmCode.A020, triggerAfter).subscribe()) } - PatchLifecycle.ACTIVATED -> { + + PatchLifecycle.ACTIVATED -> { } - PatchLifecycle.SHUTDOWN -> { + + PatchLifecycle.SHUTDOWN -> { val sources = ArrayList>() sources.add(Maybe.just(true)) - pm.getAlarms().occurred.let{ occurredAlarms -> - if(occurredAlarms.isNotEmpty()){ + pm.getAlarms().occurred.let { occurredAlarms -> + if (occurredAlarms.isNotEmpty()) { occurredAlarms.keys.forEach { alarmCode -> sources.add( Maybe.just(alarmCode) @@ -71,30 +76,30 @@ class AlarmRegistry @Inject constructor() : IAlarmRegistry { } } } - pm.getAlarms().registered.let{ registeredAlarms -> - if(registeredAlarms.isNotEmpty()){ + pm.getAlarms().registered.let { registeredAlarms -> + if (registeredAlarms.isNotEmpty()) { registeredAlarms.keys.forEach { alarmCode -> sources.add(remove(alarmCode)) } } } compositeDisposable.add(Maybe.concat(sources) - .subscribe { - pm.getAlarms().clear() - pm.flushAlarms() - } + .subscribe { + pm.getAlarms().clear() + pm.flushAlarms() + } ) } - else -> Unit + else -> Unit } } } override fun add(alarmCode: AlarmCode, triggerAfter: Long, isFirst: Boolean): Maybe { - if(pm.getAlarms().occurred.containsKey(alarmCode)){ + if (pm.getAlarms().occurred.containsKey(alarmCode)) { return Maybe.just(alarmCode) - }else { + } else { val triggerTimeMilli = System.currentTimeMillis() + triggerAfter pm.getAlarms().register(alarmCode, triggerAfter) pm.flushAlarms() @@ -109,11 +114,11 @@ class AlarmRegistry @Inject constructor() : IAlarmRegistry { override fun add(patchAeCodes: Set) { compositeDisposable.add( Observable.fromIterable(patchAeCodes) - .filter{patchAeCodeItem -> AlarmCode.findByPatchAeCode(patchAeCodeItem.aeValue) != null} - .observeOn(aapsSchedulers.main) - .filter { aeCodes -> AlarmCode.findByPatchAeCode(aeCodes.aeValue) != null } - .flatMapMaybe{aeCodeResponse -> add(AlarmCode.findByPatchAeCode(aeCodeResponse.aeValue)!!, 0L, true)} - .subscribe() + .filter { patchAeCodeItem -> AlarmCode.findByPatchAeCode(patchAeCodeItem.aeValue) != null } + .observeOn(aapsSchedulers.main) + .filter { aeCodes -> AlarmCode.findByPatchAeCode(aeCodes.aeValue) != null } + .flatMapMaybe { aeCodeResponse -> add(AlarmCode.findByPatchAeCode(aeCodeResponse.aeValue)!!, 0L, true) } + .subscribe() ) } @@ -121,21 +126,21 @@ class AlarmRegistry @Inject constructor() : IAlarmRegistry { return Maybe.fromCallable { cancelOsAlarmInternal(alarmCode) val pendingIntent = createPendingIntent(alarmCode, 0) - aapsLogger.debug("[${alarmCode}] OS Alarm added. ${DateUtil(mContext).toISOString(triggerTime)}") + aapsLogger.debug("[${alarmCode}] OS Alarm added. ${dateUtil.toISOString(triggerTime)}") mOsAlarmManager.setAlarmClock(AlarmClockInfo(triggerTime, pendingIntent), pendingIntent) alarmCode } } override fun remove(alarmCode: AlarmCode): Maybe { - return if(pm.getAlarms().registered.containsKey(alarmCode)) { + return if (pm.getAlarms().registered.containsKey(alarmCode)) { cancelOsAlarms(alarmCode) .doOnSuccess { pm.getAlarms().unregister(alarmCode) pm.flushAlarms() } .map { alarmCode } - }else{ + } else { Maybe.just(alarmCode) } } 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 3ce25b2115..1dfda4ffc1 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 @@ -8,7 +8,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.rx.logging.AAPSLoggerTest +import info.nightscout.sharedtests.AAPSLoggerTest import org.junit.Before import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test 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 735938a9e8..d8ef9a4200 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.plugins.pump.omnipod.dash.driver.comm.message.MessagePacket import info.nightscout.core.utils.toHex -import info.nightscout.rx.logging.AAPSLoggerTest +import info.nightscout.sharedtests.AAPSLoggerTest import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.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/pair/KeyExchangeTest.kt b/pump/omnipod-dash/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/pair/KeyExchangeTest.kt index 43a71e621c..0b95e71c27 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 @@ -4,7 +4,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.util.Rand import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.util.X25519KeyGenerator import info.nightscout.core.utils.toHex import info.nightscout.interfaces.Config -import info.nightscout.rx.logging.AAPSLoggerTest +import info.nightscout.sharedtests.AAPSLoggerTest import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test 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 d8871467bf..c399939cd3 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.core.utils.toHex -import info.nightscout.rx.logging.AAPSLoggerTest +import info.nightscout.sharedtests.AAPSLoggerTest import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.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 ad82492289..2c7914eb24 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 @@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.session import info.nightscout.core.utils.toHex import info.nightscout.interfaces.Config -import info.nightscout.rx.logging.AAPSLoggerTest +import info.nightscout.sharedtests.AAPSLoggerTest import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test diff --git a/pump/omnipod-eros/build.gradle b/pump/omnipod-eros/build.gradle index c3ff28071f..7974db371f 100644 --- a/pump/omnipod-eros/build.gradle +++ b/pump/omnipod-eros/build.gradle @@ -37,6 +37,8 @@ dependencies { implementation project(':pump:rileylink') implementation project(':pump:omnipod-common') + testImplementation project(':app-wear-shared:shared-impl') + api "androidx.room:room-ktx:$room_version" api "androidx.room:room-runtime:$room_version" api "androidx.room:room-rxjava3:$room_version" 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 782ecc7604..9d63fafec5 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 @@ -2,10 +2,10 @@ package info.nightscout.androidaps.plugins.pump.omnipod.eros.manager 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.rx.TestAapsSchedulers -import info.nightscout.rx.bus.RxBus +import info.nightscout.shared.impl.rx.bus.RxBusImpl import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase +import info.nightscout.sharedtests.rx.TestAapsSchedulers import org.joda.time.DateTime import org.joda.time.DateTimeUtils import org.joda.time.DateTimeZone @@ -19,7 +19,7 @@ class AapsErosPodStateManagerTest : TestBase() { @Mock lateinit var sp: SP - private val rxBus = RxBus(TestAapsSchedulers(), aapsLogger) + private val rxBus = RxBusImpl(TestAapsSchedulers(), aapsLogger) @Test fun times() { val timeZone = DateTimeZone.UTC diff --git a/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt b/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt index 014b247cc8..a4b8295bbd 100644 --- a/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt +++ b/wear/src/main/java/info/nightscout/androidaps/di/WearModule.kt @@ -6,8 +6,6 @@ import dagger.Module import dagger.Provides import dagger.android.HasAndroidInjector import info.nightscout.androidaps.WearApp -import info.nightscout.rx.di.RxModule -import info.nightscout.shared.di.SharedModule import info.nightscout.shared.impl.di.SharedImplModule import kotlinx.datetime.Clock @@ -16,8 +14,6 @@ import kotlinx.datetime.Clock includes = [ WearModule.AppBindings::class, WearActivitiesModule::class, - RxModule::class, - SharedModule::class, SharedImplModule::class ] ) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/CustomWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/CustomWatchface.kt index cfb1765d17..f3f5d7ddba 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/CustomWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/CustomWatchface.kt @@ -35,15 +35,15 @@ import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace import info.nightscout.rx.logging.LTag import info.nightscout.rx.weardata.CUSTOM_VERSION import info.nightscout.rx.weardata.CwfData -import info.nightscout.rx.weardata.ResFileMap -import info.nightscout.rx.weardata.CwfResDataMap import info.nightscout.rx.weardata.CwfMetadataKey import info.nightscout.rx.weardata.CwfMetadataMap -import info.nightscout.rx.weardata.ResData -import info.nightscout.rx.weardata.ResFormat +import info.nightscout.rx.weardata.CwfResDataMap import info.nightscout.rx.weardata.EventData import info.nightscout.rx.weardata.JsonKeyValues import info.nightscout.rx.weardata.JsonKeys.* +import info.nightscout.rx.weardata.ResData +import info.nightscout.rx.weardata.ResFileMap +import info.nightscout.rx.weardata.ResFormat import info.nightscout.rx.weardata.ViewKeys import info.nightscout.rx.weardata.ZipWatchfaceFormat import info.nightscout.shared.extensions.toVisibility @@ -208,7 +208,7 @@ class CustomWatchface : BaseWatchFace() { it.clearColorFilter() view.setImageDrawable(it) } ?: apply { - view.setImageDrawable(id.defaultDrawable?.let {resources.getDrawable(it)}) + view.setImageDrawable(id.defaultDrawable?.let { resources.getDrawable(it) }) if (viewJson.has(COLOR.key)) view.setColorFilter(getColor(viewJson.optString(COLOR.key))) else @@ -217,7 +217,7 @@ class CustomWatchface : BaseWatchFace() { } } - } ?:apply { + } ?: apply { view.visibility = View.GONE if (view is TextView) { view.text = "" @@ -301,7 +301,7 @@ class CustomWatchface : BaseWatchFace() { } val metadataMap = ZipWatchfaceFormat.loadMetadata(json) val drawableDataMap: CwfResDataMap = mutableMapOf() - getResourceByteArray(info.nightscout.shared.R.drawable.watchface_custom)?.let { + getResourceByteArray(info.nightscout.shared.impl.R.drawable.watchface_custom)?.let { drawableDataMap[ResFileMap.CUSTOM_WATCHFACE.fileName] = ResData(it, ResFormat.PNG) } return EventData.ActionSetCustomWatchface(CwfData(json.toString(4), metadataMap, drawableDataMap)) @@ -394,7 +394,7 @@ class CustomWatchface : BaseWatchFace() { @StringRes val pref: Int?, @IdRes val defaultDrawable: Int?, val customDrawable: ResFileMap?, - val customHigh:ResFileMap?, + val customHigh: ResFileMap?, val customLow: ResFileMap? ) { @@ -402,7 +402,7 @@ class CustomWatchface : BaseWatchFace() { ViewKeys.BACKGROUND.key, R.id.background, null, - info.nightscout.shared.R.drawable.background, + info.nightscout.shared.impl.R.drawable.background, ResFileMap.BACKGROUND, ResFileMap.BACKGROUND_HIGH, ResFileMap.BACKGROUND_LOW @@ -448,7 +448,7 @@ class CustomWatchface : BaseWatchFace() { ViewKeys.COVER_PLATE.key, R.id.cover_plate, null, - info.nightscout.shared.R.drawable.simplified_dial, + info.nightscout.shared.impl.R.drawable.simplified_dial, ResFileMap.COVER_PLATE, ResFileMap.COVER_PLATE_HIGH, ResFileMap.COVER_PLATE_LOW @@ -457,7 +457,7 @@ class CustomWatchface : BaseWatchFace() { ViewKeys.HOUR_HAND.key, R.id.hour_hand, null, - info.nightscout.shared.R.drawable.hour_hand, + info.nightscout.shared.impl.R.drawable.hour_hand, ResFileMap.HOUR_HAND, ResFileMap.HOUR_HAND_HIGH, ResFileMap.HOUR_HAND_LOW @@ -466,7 +466,7 @@ class CustomWatchface : BaseWatchFace() { ViewKeys.MINUTE_HAND.key, R.id.minute_hand, null, - info.nightscout.shared.R.drawable.minute_hand, + info.nightscout.shared.impl.R.drawable.minute_hand, ResFileMap.MINUTE_HAND, ResFileMap.MINUTE_HAND_HIGH, ResFileMap.MINUTE_HAND_LOW @@ -475,7 +475,7 @@ class CustomWatchface : BaseWatchFace() { ViewKeys.SECOND_HAND.key, R.id.second_hand, R.string.key_show_seconds, - info.nightscout.shared.R.drawable.second_hand, + info.nightscout.shared.impl.R.drawable.second_hand, ResFileMap.SECOND_HAND, ResFileMap.SECOND_HAND_HIGH, ResFileMap.SECOND_HAND_LOW @@ -491,16 +491,25 @@ class CustomWatchface : BaseWatchFace() { fun drawable(resources: Resources, drawableDataMap: CwfResDataMap, sgvLevel: Long): Drawable? = customDrawable?.let { cd -> when (sgvLevel) { - 1L -> { customHigh?.let {drawableDataMap[customHigh.fileName]}?.toDrawable(resources) ?: drawableDataMap[cd.fileName]?.toDrawable(resources) } - 0L -> { drawableDataMap[cd.fileName]?.toDrawable(resources) } - -1L -> { customLow?.let {drawableDataMap[customLow.fileName]}?.toDrawable(resources) ?: drawableDataMap[cd.fileName]?.toDrawable(resources) } + 1L -> { + customHigh?.let { drawableDataMap[customHigh.fileName] }?.toDrawable(resources) ?: drawableDataMap[cd.fileName]?.toDrawable(resources) + } + + 0L -> { + drawableDataMap[cd.fileName]?.toDrawable(resources) + } + + -1L -> { + customLow?.let { drawableDataMap[customLow.fileName] }?.toDrawable(resources) ?: drawableDataMap[cd.fileName]?.toDrawable(resources) + } + else -> drawableDataMap[cd.fileName]?.toDrawable(resources) } } } } -private enum class TrendArrowMap(val symbol: String, @DrawableRes val icon: Int,val customDrawable: ResFileMap?) { +private enum class TrendArrowMap(val symbol: String, @DrawableRes val icon: Int, val customDrawable: ResFileMap?) { NONE("??", R.drawable.ic_invalid, ResFileMap.ARROW_NONE), TRIPLE_UP("X", R.drawable.ic_doubleup, ResFileMap.ARROW_DOUBLE_UP), DOUBLE_UP("\u21c8", R.drawable.ic_doubleup, ResFileMap.ARROW_DOUBLE_UP), @@ -515,8 +524,8 @@ private enum class TrendArrowMap(val symbol: String, @DrawableRes val icon: Int, companion object { fun drawable(direction: String?, resources: Resources, drawableDataMap: CwfResDataMap): Drawable { - val arrow = values().firstOrNull { it.symbol == direction } ?:NONE - return arrow.customDrawable?. let {drawableDataMap[arrow.customDrawable.fileName]}?.toDrawable(resources) ?:resources.getDrawable(arrow.icon) + val arrow = values().firstOrNull { it.symbol == direction } ?: NONE + return arrow.customDrawable?.let { drawableDataMap[arrow.customDrawable.fileName] }?.toDrawable(resources) ?: resources.getDrawable(arrow.icon) } } @@ -558,7 +567,7 @@ private enum class FontMap(val key: String, var font: Typeface, @FontRes val fon resDataMap.filter { (_, resData) -> resData.format == ResFormat.TTF || resData.format == ResFormat.OTF }.forEach { (key, resData) -> - customFonts[key.lowercase()] = resData.toTypeface() ?:Typeface.DEFAULT + customFonts[key.lowercase()] = resData.toTypeface() ?: Typeface.DEFAULT } } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt index b9db42cdd9..8cac6aecc7 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt @@ -7,16 +7,13 @@ import android.support.wearable.watchface.WatchFaceStyle import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout -import android.widget.TextView import androidx.core.content.ContextCompat import androidx.viewbinding.ViewBinding import info.nightscout.androidaps.R import info.nightscout.androidaps.databinding.ActivityDigitalstyleBinding -import info.nightscout.shared.extensions.toVisibility import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace import info.nightscout.rx.logging.LTag - class DigitalStyleWatchface : BaseWatchFace() { private lateinit var binding: ActivityDigitalstyleBinding diff --git a/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt b/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt index 7b542b1afc..10d734a525 100644 --- a/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt @@ -4,8 +4,8 @@ import android.content.Context import android.hardware.Sensor import android.hardware.SensorManager import info.nightscout.rx.AapsSchedulers -import info.nightscout.rx.logging.AAPSLoggerTest import info.nightscout.rx.weardata.EventData.ActionHeartRate +import info.nightscout.sharedtests.AAPSLoggerTest import io.reactivex.rxjava3.core.Scheduler import io.reactivex.rxjava3.disposables.Disposable import org.junit.jupiter.api.AfterEach @@ -22,8 +22,9 @@ import org.mockito.Mockito.`when` import java.util.concurrent.TimeUnit internal class HeartRateListenerTest { + private val aapsLogger = AAPSLoggerTest() - private val aapsSchedulers = object: AapsSchedulers { + private val aapsSchedulers = object : AapsSchedulers { override val main: Scheduler = mock(Scheduler::class.java) override val io: Scheduler = mock(Scheduler::class.java) override val cpu: Scheduler = mock(Scheduler::class.java) @@ -35,11 +36,15 @@ internal class HeartRateListenerTest { private fun create(timestampMillis: Long): HeartRateListener { val ctx = mock(Context::class.java) - `when`(aapsSchedulers.io.schedulePeriodicallyDirect( - any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS))).thenReturn(schedule) + `when`( + aapsSchedulers.io.schedulePeriodicallyDirect( + any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS) + ) + ).thenReturn(schedule) val listener = HeartRateListener(ctx, aapsLogger, aapsSchedulers, timestampMillis) verify(aapsSchedulers.io).schedulePeriodicallyDirect( - any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS)) + any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS) + ) listener.sendHeartRate = { hr -> heartRates.add(hr) } return listener } @@ -49,10 +54,11 @@ internal class HeartRateListenerTest { timestamp: Long, heartRate: Int, sensorType: Int? = Sensor.TYPE_HEART_RATE, - accuracy: Int = SensorManager.SENSOR_STATUS_ACCURACY_HIGH) { + accuracy: Int = SensorManager.SENSOR_STATUS_ACCURACY_HIGH + ) { listener.onSensorChanged(sensorType, accuracy, timestamp, floatArrayOf(heartRate.toFloat())) } - + @BeforeEach fun before() { heartRates.clear() @@ -66,7 +72,7 @@ internal class HeartRateListenerTest { Mockito.verifyNoInteractions(aapsSchedulers.newThread) verify(schedule).dispose() } - + @Test fun onSensorChanged() { val start = System.currentTimeMillis() @@ -95,7 +101,7 @@ internal class HeartRateListenerTest { sendSensorEvent(listener, start, 80) assertEquals(0, heartRates.size) assertEquals(80, listener.currentHeartRateBpm) - sendSensorEvent(listener, start + d1,100) + sendSensorEvent(listener, start + d1, 100) assertEquals(0, heartRates.size) assertEquals(100, listener.currentHeartRateBpm) @@ -117,7 +123,7 @@ internal class HeartRateListenerTest { listener.send(start + d1) assertEquals(1, heartRates.size) - sendSensorEvent(listener, start + d1,100) + sendSensorEvent(listener, start + d1, 100) assertEquals(1, heartRates.size) listener.send(start + d2) assertEquals(2, heartRates.size) From ebcea9eed85888af4e98de24fc5192345c6a0565 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 23:28:32 +0200 Subject: [PATCH 30/65] simplify :core:utils --- core/interfaces/build.gradle | 5 +++- .../nightscout/core/utils/ActionModeHelper.kt | 1 + .../info/nightscout/core/utils/CryptoUtil.kt | 1 + .../core/utils/extensions/HtmlString.kt | 0 .../core/utils/extensions/JSONObjectExt.kt | 0 .../core/utils/fabric/FabricPrivacy.kt | 0 .../core/utils/worker/LoggingWorker.kt | 0 .../src/main/res/drawable/ic_sort.xml | 0 .../src/main/res/drawable/ic_trash.xml | 0 .../src/main/res/menu/menu_actions.xml | 0 .../main/res/menu/menu_delete_selection.xml | 0 core/main/src/main/res/values/strings.xml | 5 ++++ core/utils/build.gradle | 5 +++- .../core/utils/receivers/DataWorkerStorage.kt | 2 +- .../src/main/res/values-af-rZA/strings.xml | 2 -- .../src/main/res/values-bg-rBG/strings.xml | 8 ------ .../src/main/res/values-ca-rES/strings.xml | 2 -- .../src/main/res/values-cs-rCZ/strings.xml | 8 ------ .../src/main/res/values-da-rDK/strings.xml | 8 ------ .../src/main/res/values-de-rDE/strings.xml | 8 ------ .../src/main/res/values-el-rGR/strings.xml | 8 ------ .../src/main/res/values-es-rES/strings.xml | 8 ------ .../src/main/res/values-fr-rFR/strings.xml | 8 ------ .../src/main/res/values-ga-rIE/strings.xml | 2 -- .../src/main/res/values-hr-rHR/strings.xml | 2 -- .../src/main/res/values-hu-rHU/strings.xml | 2 -- .../src/main/res/values-it-rIT/strings.xml | 8 ------ .../src/main/res/values-iw-rIL/strings.xml | 8 ------ .../src/main/res/values-ja-rJP/strings.xml | 2 -- .../src/main/res/values-ko-rKR/strings.xml | 8 ------ .../src/main/res/values-lt-rLT/strings.xml | 8 ------ .../src/main/res/values-nl-rNL/strings.xml | 8 ------ .../src/main/res/values-no-rNO/strings.xml | 8 ------ .../src/main/res/values-pl-rPL/strings.xml | 8 ------ .../src/main/res/values-pt-rBR/strings.xml | 8 ------ .../src/main/res/values-pt-rPT/strings.xml | 8 ------ .../src/main/res/values-ro-rRO/strings.xml | 4 --- .../src/main/res/values-ru-rRU/strings.xml | 8 ------ .../src/main/res/values-sk-rSK/strings.xml | 8 ------ .../src/main/res/values-sr-rCS/strings.xml | 2 -- .../src/main/res/values-sv-rSE/strings.xml | 8 ------ .../src/main/res/values-tr-rTR/strings.xml | 8 ------ .../src/main/res/values-uk-rUA/strings.xml | 2 -- .../src/main/res/values-zh-rCN/strings.xml | 8 ------ core/utils/src/main/res/values/strings.xml | 9 ------- crowdin.yml | 2 -- database/entities/build.gradle | 3 +++ plugins/constraints/build.gradle | 1 + pump/combo/build.gradle | 1 + pump/dana/build.gradle | 1 + pump/danar/build.gradle | 1 + pump/danars/build.gradle | 1 + pump/diaconn/build.gradle | 1 + pump/eopatch/build.gradle | 1 + pump/medtronic/build.gradle | 1 + .../pump/medtrum/services/MedtrumService.kt | 25 ++++++++++++++++--- pump/omnipod-dash/build.gradle | 1 + pump/omnipod-eros/build.gradle | 1 + pump/pump-common/build.gradle | 1 + .../ui/activities/QuickWizardListActivity.kt | 2 +- wear/build.gradle | 1 + 61 files changed, 54 insertions(+), 206 deletions(-) rename core/{utils => main}/src/main/java/info/nightscout/core/utils/ActionModeHelper.kt (99%) rename core/{utils => main}/src/main/java/info/nightscout/core/utils/CryptoUtil.kt (99%) rename core/{utils => main}/src/main/java/info/nightscout/core/utils/extensions/HtmlString.kt (100%) rename core/{utils => main}/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt (100%) rename core/{utils => main}/src/main/java/info/nightscout/core/utils/fabric/FabricPrivacy.kt (100%) rename core/{utils => main}/src/main/java/info/nightscout/core/utils/worker/LoggingWorker.kt (100%) rename core/{utils => main}/src/main/res/drawable/ic_sort.xml (100%) rename core/{utils => main}/src/main/res/drawable/ic_trash.xml (100%) rename core/{utils => main}/src/main/res/menu/menu_actions.xml (100%) rename core/{utils => main}/src/main/res/menu/menu_delete_selection.xml (100%) delete mode 100644 core/utils/src/main/res/values-af-rZA/strings.xml delete mode 100644 core/utils/src/main/res/values-bg-rBG/strings.xml delete mode 100644 core/utils/src/main/res/values-ca-rES/strings.xml delete mode 100644 core/utils/src/main/res/values-cs-rCZ/strings.xml delete mode 100644 core/utils/src/main/res/values-da-rDK/strings.xml delete mode 100644 core/utils/src/main/res/values-de-rDE/strings.xml delete mode 100644 core/utils/src/main/res/values-el-rGR/strings.xml delete mode 100644 core/utils/src/main/res/values-es-rES/strings.xml delete mode 100644 core/utils/src/main/res/values-fr-rFR/strings.xml delete mode 100644 core/utils/src/main/res/values-ga-rIE/strings.xml delete mode 100644 core/utils/src/main/res/values-hr-rHR/strings.xml delete mode 100644 core/utils/src/main/res/values-hu-rHU/strings.xml delete mode 100644 core/utils/src/main/res/values-it-rIT/strings.xml delete mode 100644 core/utils/src/main/res/values-iw-rIL/strings.xml delete mode 100644 core/utils/src/main/res/values-ja-rJP/strings.xml delete mode 100644 core/utils/src/main/res/values-ko-rKR/strings.xml delete mode 100644 core/utils/src/main/res/values-lt-rLT/strings.xml delete mode 100644 core/utils/src/main/res/values-nl-rNL/strings.xml delete mode 100644 core/utils/src/main/res/values-no-rNO/strings.xml delete mode 100644 core/utils/src/main/res/values-pl-rPL/strings.xml delete mode 100644 core/utils/src/main/res/values-pt-rBR/strings.xml delete mode 100644 core/utils/src/main/res/values-pt-rPT/strings.xml delete mode 100644 core/utils/src/main/res/values-ro-rRO/strings.xml delete mode 100644 core/utils/src/main/res/values-ru-rRU/strings.xml delete mode 100644 core/utils/src/main/res/values-sk-rSK/strings.xml delete mode 100644 core/utils/src/main/res/values-sr-rCS/strings.xml delete mode 100644 core/utils/src/main/res/values-sv-rSE/strings.xml delete mode 100644 core/utils/src/main/res/values-tr-rTR/strings.xml delete mode 100644 core/utils/src/main/res/values-uk-rUA/strings.xml delete mode 100644 core/utils/src/main/res/values-zh-rCN/strings.xml delete mode 100644 core/utils/src/main/res/values/strings.xml diff --git a/core/interfaces/build.gradle b/core/interfaces/build.gradle index 4cd1087543..5edc89c128 100644 --- a/core/interfaces/build.gradle +++ b/core/interfaces/build.gradle @@ -13,6 +13,9 @@ apply from: "${project.rootDir}/core/main/android_module_dependencies.gradle" android { namespace 'info.nightscout.interfaces' + defaultConfig { + minSdkVersion 25 // for wear + } } dependencies { @@ -22,7 +25,7 @@ dependencies { // (ResourceHelper, AAPSLogger interface) implementation project(':app-wear-shared:shared') implementation project(':database:entities') - // implementation project(':core:ns-sdk') + // implementation project(':core:ns-sdk') api "androidx.appcompat:appcompat:$appcompat_version" diff --git a/core/utils/src/main/java/info/nightscout/core/utils/ActionModeHelper.kt b/core/main/src/main/java/info/nightscout/core/utils/ActionModeHelper.kt similarity index 99% rename from core/utils/src/main/java/info/nightscout/core/utils/ActionModeHelper.kt rename to core/main/src/main/java/info/nightscout/core/utils/ActionModeHelper.kt index fc79710d7f..856d2309ee 100644 --- a/core/utils/src/main/java/info/nightscout/core/utils/ActionModeHelper.kt +++ b/core/main/src/main/java/info/nightscout/core/utils/ActionModeHelper.kt @@ -8,6 +8,7 @@ import android.view.MenuItem import androidx.core.view.MenuCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import info.nightscout.core.main.R import info.nightscout.shared.interfaces.ResourceHelper class ActionModeHelper(val rh: ResourceHelper, val activity: FragmentActivity?, val fragment: Fragment?) { diff --git a/core/utils/src/main/java/info/nightscout/core/utils/CryptoUtil.kt b/core/main/src/main/java/info/nightscout/core/utils/CryptoUtil.kt similarity index 99% rename from core/utils/src/main/java/info/nightscout/core/utils/CryptoUtil.kt rename to core/main/src/main/java/info/nightscout/core/utils/CryptoUtil.kt index d8a44d6c9f..c2dfaca653 100644 --- a/core/utils/src/main/java/info/nightscout/core/utils/CryptoUtil.kt +++ b/core/main/src/main/java/info/nightscout/core/utils/CryptoUtil.kt @@ -23,6 +23,7 @@ class CryptoUtil @Inject constructor( ) { companion object { + private const val IV_LENGTH_BYTE = 12 private const val TAG_LENGTH_BIT = 128 private const val AES_KEY_SIZE_BIT = 256 diff --git a/core/utils/src/main/java/info/nightscout/core/utils/extensions/HtmlString.kt b/core/main/src/main/java/info/nightscout/core/utils/extensions/HtmlString.kt similarity index 100% rename from core/utils/src/main/java/info/nightscout/core/utils/extensions/HtmlString.kt rename to core/main/src/main/java/info/nightscout/core/utils/extensions/HtmlString.kt diff --git a/core/utils/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt b/core/main/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt similarity index 100% rename from core/utils/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt rename to core/main/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt diff --git a/core/utils/src/main/java/info/nightscout/core/utils/fabric/FabricPrivacy.kt b/core/main/src/main/java/info/nightscout/core/utils/fabric/FabricPrivacy.kt similarity index 100% rename from core/utils/src/main/java/info/nightscout/core/utils/fabric/FabricPrivacy.kt rename to core/main/src/main/java/info/nightscout/core/utils/fabric/FabricPrivacy.kt diff --git a/core/utils/src/main/java/info/nightscout/core/utils/worker/LoggingWorker.kt b/core/main/src/main/java/info/nightscout/core/utils/worker/LoggingWorker.kt similarity index 100% rename from core/utils/src/main/java/info/nightscout/core/utils/worker/LoggingWorker.kt rename to core/main/src/main/java/info/nightscout/core/utils/worker/LoggingWorker.kt diff --git a/core/utils/src/main/res/drawable/ic_sort.xml b/core/main/src/main/res/drawable/ic_sort.xml similarity index 100% rename from core/utils/src/main/res/drawable/ic_sort.xml rename to core/main/src/main/res/drawable/ic_sort.xml diff --git a/core/utils/src/main/res/drawable/ic_trash.xml b/core/main/src/main/res/drawable/ic_trash.xml similarity index 100% rename from core/utils/src/main/res/drawable/ic_trash.xml rename to core/main/src/main/res/drawable/ic_trash.xml diff --git a/core/utils/src/main/res/menu/menu_actions.xml b/core/main/src/main/res/menu/menu_actions.xml similarity index 100% rename from core/utils/src/main/res/menu/menu_actions.xml rename to core/main/src/main/res/menu/menu_actions.xml diff --git a/core/utils/src/main/res/menu/menu_delete_selection.xml b/core/main/src/main/res/menu/menu_delete_selection.xml similarity index 100% rename from core/utils/src/main/res/menu/menu_delete_selection.xml rename to core/main/src/main/res/menu/menu_delete_selection.xml diff --git a/core/main/src/main/res/values/strings.xml b/core/main/src/main/res/values/strings.xml index cf363cea0c..f77b9c1073 100644 --- a/core/main/src/main/res/values/strings.xml +++ b/core/main/src/main/res/values/strings.xml @@ -2,4 +2,9 @@ %1$d g + %1$d selected + Remove Items + Sort Items + Remove Selected Items + Sort \ No newline at end of file diff --git a/core/utils/build.gradle b/core/utils/build.gradle index 510fda7ba3..6ef6d4a957 100644 --- a/core/utils/build.gradle +++ b/core/utils/build.gradle @@ -18,7 +18,10 @@ android { dependencies { - implementation project(':app-wear-shared:shared') + api "com.google.dagger:dagger-android:$dagger_version" + api "com.google.dagger:dagger-android-support:$dagger_version" + + api "net.danlew:android.joda:$joda_version" //Firebase api platform('com.google.firebase:firebase-bom:32.3.1') diff --git a/core/utils/src/main/java/info/nightscout/core/utils/receivers/DataWorkerStorage.kt b/core/utils/src/main/java/info/nightscout/core/utils/receivers/DataWorkerStorage.kt index 83649bb3fb..ada8a89f39 100644 --- a/core/utils/src/main/java/info/nightscout/core/utils/receivers/DataWorkerStorage.kt +++ b/core/utils/src/main/java/info/nightscout/core/utils/receivers/DataWorkerStorage.kt @@ -2,11 +2,11 @@ package info.nightscout.core.utils.receivers import android.content.Context import android.os.Bundle +import androidx.annotation.OpenForTesting import androidx.work.Data import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequest import androidx.work.WorkManager -import info.nightscout.annotations.OpenForTesting import org.json.JSONArray import org.json.JSONObject import javax.inject.Inject diff --git a/core/utils/src/main/res/values-af-rZA/strings.xml b/core/utils/src/main/res/values-af-rZA/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-af-rZA/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-bg-rBG/strings.xml b/core/utils/src/main/res/values-bg-rBG/strings.xml deleted file mode 100644 index 055832ff21..0000000000 --- a/core/utils/src/main/res/values-bg-rBG/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d избрано - Премахни артикули - Подреди артикули - Премахнете избраните елементи - Сортирай - diff --git a/core/utils/src/main/res/values-ca-rES/strings.xml b/core/utils/src/main/res/values-ca-rES/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-ca-rES/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-cs-rCZ/strings.xml b/core/utils/src/main/res/values-cs-rCZ/strings.xml deleted file mode 100644 index 32aff04aef..0000000000 --- a/core/utils/src/main/res/values-cs-rCZ/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Vybráno: %1$d - Odebrat položky - Seřadit položky - Odebrat vybrané položky - Seřadit - diff --git a/core/utils/src/main/res/values-da-rDK/strings.xml b/core/utils/src/main/res/values-da-rDK/strings.xml deleted file mode 100644 index e042c690b2..0000000000 --- a/core/utils/src/main/res/values-da-rDK/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d valgt - Fjern Emner - Sortér Emner - Fjern valgte emner - Sortér - diff --git a/core/utils/src/main/res/values-de-rDE/strings.xml b/core/utils/src/main/res/values-de-rDE/strings.xml deleted file mode 100644 index 9dee92e75d..0000000000 --- a/core/utils/src/main/res/values-de-rDE/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d ausgewählt - Entferne Elemente - Sortiere Elemente - lösche ausgewählte Elemente - Sortieren - diff --git a/core/utils/src/main/res/values-el-rGR/strings.xml b/core/utils/src/main/res/values-el-rGR/strings.xml deleted file mode 100644 index 763ea6bd89..0000000000 --- a/core/utils/src/main/res/values-el-rGR/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Επιλέχθηκε %1$d - Αφαίρεση Στοιχείων - Ταξινόμηση Στοιχείων - Αφαίρεση Επιλεγμένων Στοιχείων - Ταξινόμηση - diff --git a/core/utils/src/main/res/values-es-rES/strings.xml b/core/utils/src/main/res/values-es-rES/strings.xml deleted file mode 100644 index 51cc673ea7..0000000000 --- a/core/utils/src/main/res/values-es-rES/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d seleccionado - Eliminar elementos - Ordenar elementos - Eliminar elementos seleccionados - Ordenar - diff --git a/core/utils/src/main/res/values-fr-rFR/strings.xml b/core/utils/src/main/res/values-fr-rFR/strings.xml deleted file mode 100644 index 43e2479768..0000000000 --- a/core/utils/src/main/res/values-fr-rFR/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d séléctionné(s) - Supprimer les éléments - Trier les éléments - Supprimer les éléments sélectionnés - Trier - diff --git a/core/utils/src/main/res/values-ga-rIE/strings.xml b/core/utils/src/main/res/values-ga-rIE/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-ga-rIE/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-hr-rHR/strings.xml b/core/utils/src/main/res/values-hr-rHR/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-hr-rHR/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-hu-rHU/strings.xml b/core/utils/src/main/res/values-hu-rHU/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-hu-rHU/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-it-rIT/strings.xml b/core/utils/src/main/res/values-it-rIT/strings.xml deleted file mode 100644 index 7f0600516d..0000000000 --- a/core/utils/src/main/res/values-it-rIT/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d selezionati - Rimuovi elementi - Ordina elementi - Rimuovi elementi selezionati - Ordina - diff --git a/core/utils/src/main/res/values-iw-rIL/strings.xml b/core/utils/src/main/res/values-iw-rIL/strings.xml deleted file mode 100644 index c59cf26f89..0000000000 --- a/core/utils/src/main/res/values-iw-rIL/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d נבחרו - פריטים שהוסרו - מיין פריטים - הסר פריטים נבחרים - מיין - diff --git a/core/utils/src/main/res/values-ja-rJP/strings.xml b/core/utils/src/main/res/values-ja-rJP/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-ja-rJP/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-ko-rKR/strings.xml b/core/utils/src/main/res/values-ko-rKR/strings.xml deleted file mode 100644 index 3ec59ea4e0..0000000000 --- a/core/utils/src/main/res/values-ko-rKR/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d 선택됨 - 항목 제거하기 - 항목 분류하기 - 선택된 항목 제거하기 - 분류 - diff --git a/core/utils/src/main/res/values-lt-rLT/strings.xml b/core/utils/src/main/res/values-lt-rLT/strings.xml deleted file mode 100644 index 4bda3c08d1..0000000000 --- a/core/utils/src/main/res/values-lt-rLT/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d pasirinkta - Pašalinti elementus - Rūšiuoti elementus - Pašalinti pasirinktus elementus - Rūšiuoti - diff --git a/core/utils/src/main/res/values-nl-rNL/strings.xml b/core/utils/src/main/res/values-nl-rNL/strings.xml deleted file mode 100644 index 4132f90084..0000000000 --- a/core/utils/src/main/res/values-nl-rNL/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d geselecteerd - Items verwijderen - Sorteer items - Verwijder geselecteerde items - Sorteren - diff --git a/core/utils/src/main/res/values-no-rNO/strings.xml b/core/utils/src/main/res/values-no-rNO/strings.xml deleted file mode 100644 index 4ce3dd56a6..0000000000 --- a/core/utils/src/main/res/values-no-rNO/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d valgt - Slett elementer - Sorter elementer - Slett valgte elementer - Sorter - diff --git a/core/utils/src/main/res/values-pl-rPL/strings.xml b/core/utils/src/main/res/values-pl-rPL/strings.xml deleted file mode 100644 index fa05f69045..0000000000 --- a/core/utils/src/main/res/values-pl-rPL/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Wybrany %1$d - Usuń pozycje - Sortuj pozycje - Usuń zaznaczone pozycje - Sortuj - diff --git a/core/utils/src/main/res/values-pt-rBR/strings.xml b/core/utils/src/main/res/values-pt-rBR/strings.xml deleted file mode 100644 index 8759ee512a..0000000000 --- a/core/utils/src/main/res/values-pt-rBR/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Selecionado %1$d - Remover itens - Ordenar Itens - Remover itens selecionados - Ordenar - diff --git a/core/utils/src/main/res/values-pt-rPT/strings.xml b/core/utils/src/main/res/values-pt-rPT/strings.xml deleted file mode 100644 index 607a8d88f2..0000000000 --- a/core/utils/src/main/res/values-pt-rPT/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d selecionados - Remover itens - Ordenar itens - Remover itens selecionados - Ordenar - diff --git a/core/utils/src/main/res/values-ro-rRO/strings.xml b/core/utils/src/main/res/values-ro-rRO/strings.xml deleted file mode 100644 index 06b7aac6f5..0000000000 --- a/core/utils/src/main/res/values-ro-rRO/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Sortează - diff --git a/core/utils/src/main/res/values-ru-rRU/strings.xml b/core/utils/src/main/res/values-ru-rRU/strings.xml deleted file mode 100644 index bc6a581292..0000000000 --- a/core/utils/src/main/res/values-ru-rRU/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Выбрано: %1$d - Удалить элементы - Сортировать элементы - Удалить выбранные элементы - Сортировать - diff --git a/core/utils/src/main/res/values-sk-rSK/strings.xml b/core/utils/src/main/res/values-sk-rSK/strings.xml deleted file mode 100644 index 12d8e52129..0000000000 --- a/core/utils/src/main/res/values-sk-rSK/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d vybraných - Odstrániť položky - Zoradiť položky - Odstrániť vybrané položky - Zoradiť - diff --git a/core/utils/src/main/res/values-sr-rCS/strings.xml b/core/utils/src/main/res/values-sr-rCS/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-sr-rCS/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-sv-rSE/strings.xml b/core/utils/src/main/res/values-sv-rSE/strings.xml deleted file mode 100644 index b009e2f499..0000000000 --- a/core/utils/src/main/res/values-sv-rSE/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d valt - Ta bort objekt - Sortera objekt - Ta bort valda objekt - Sortera - diff --git a/core/utils/src/main/res/values-tr-rTR/strings.xml b/core/utils/src/main/res/values-tr-rTR/strings.xml deleted file mode 100644 index cd3a6d5e1d..0000000000 --- a/core/utils/src/main/res/values-tr-rTR/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - %1$d seçildi - Öğeleri kaldır - Öğeleri Sırala - Seçilen öğeleri kaldır - Sırala - diff --git a/core/utils/src/main/res/values-uk-rUA/strings.xml b/core/utils/src/main/res/values-uk-rUA/strings.xml deleted file mode 100644 index 3ea04e700d..0000000000 --- a/core/utils/src/main/res/values-uk-rUA/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/utils/src/main/res/values-zh-rCN/strings.xml b/core/utils/src/main/res/values-zh-rCN/strings.xml deleted file mode 100644 index b32b881107..0000000000 --- a/core/utils/src/main/res/values-zh-rCN/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - 已选中 %1$d 项 - 删除项目 - 项目排序 - 删除选中项 - 排序 - diff --git a/core/utils/src/main/res/values/strings.xml b/core/utils/src/main/res/values/strings.xml deleted file mode 100644 index 246de562c5..0000000000 --- a/core/utils/src/main/res/values/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - %1$d selected - Remove Items - Sort Items - Remove Selected Items - Sort - - \ No newline at end of file diff --git a/crowdin.yml b/crowdin.yml index 34356aa616..b5640c7a63 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -41,8 +41,6 @@ files: translation: /core/main/src/main/res/values-%android_code%/strings.xml - source: /core/interfaces/src/main/res/values/strings.xml translation: /core/interfaces/src/main/res/values-%android_code%/strings.xml - - source: /core/utils/src/main/res/values/strings.xml - translation: /core/utils/src/main/res/values-%android_code%/strings.xml - source: /core/ui/src/main/res/values/protection.xml translation: /core/ui/src/main/res/values-%android_code%/protection.xml - source: /core/validators/src/main/res/values/validator.xml diff --git a/database/entities/build.gradle b/database/entities/build.gradle index 918416feb0..e951e0cbdd 100644 --- a/database/entities/build.gradle +++ b/database/entities/build.gradle @@ -12,6 +12,9 @@ apply from: "${project.rootDir}/core/main/test_dependencies.gradle" android { namespace 'info.nightscout.database.entities' + defaultConfig { + minSdkVersion 25 // for wear + } buildFeatures { buildConfig = false diff --git a/plugins/constraints/build.gradle b/plugins/constraints/build.gradle index 6ae2a5865b..05ab1fb88a 100644 --- a/plugins/constraints/build.gradle +++ b/plugins/constraints/build.gradle @@ -18,6 +18,7 @@ android { dependencies { implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:ui') implementation project(':core:utils') implementation project(':core:validators') diff --git a/pump/combo/build.gradle b/pump/combo/build.gradle index ff6202ea71..d558afb179 100644 --- a/pump/combo/build.gradle +++ b/pump/combo/build.gradle @@ -21,6 +21,7 @@ android { dependencies { implementation project(':core:libraries') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:ui') implementation project(':core:utils') implementation project(':app-wear-shared:shared') diff --git a/pump/dana/build.gradle b/pump/dana/build.gradle index aedc35aff8..67222caccc 100644 --- a/pump/dana/build.gradle +++ b/pump/dana/build.gradle @@ -27,6 +27,7 @@ android { dependencies { implementation project(':core:libraries') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:ui') implementation project(':core:utils') implementation project(':app-wear-shared:shared') diff --git a/pump/danar/build.gradle b/pump/danar/build.gradle index 5a29590ff8..a3ad984f0c 100644 --- a/pump/danar/build.gradle +++ b/pump/danar/build.gradle @@ -18,6 +18,7 @@ dependencies { implementation 'androidx.media3:media3-common:1.1.1' implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') implementation project(':core:validators') diff --git a/pump/danars/build.gradle b/pump/danars/build.gradle index ceed13054c..dc6142ef05 100644 --- a/pump/danars/build.gradle +++ b/pump/danars/build.gradle @@ -31,6 +31,7 @@ android { dependencies { implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') implementation project(':core:validators') diff --git a/pump/diaconn/build.gradle b/pump/diaconn/build.gradle index f6e0c7934b..0d0b4f6d38 100644 --- a/pump/diaconn/build.gradle +++ b/pump/diaconn/build.gradle @@ -29,6 +29,7 @@ dependencies { implementation project(':app-wear-shared:shared-impl') implementation project(':core:libraries') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') diff --git a/pump/eopatch/build.gradle b/pump/eopatch/build.gradle index 224acbbcac..a2baa19b46 100644 --- a/pump/eopatch/build.gradle +++ b/pump/eopatch/build.gradle @@ -24,6 +24,7 @@ dependencies { implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') diff --git a/pump/medtronic/build.gradle b/pump/medtronic/build.gradle index b44c33cb15..c724e23a24 100644 --- a/pump/medtronic/build.gradle +++ b/pump/medtronic/build.gradle @@ -18,6 +18,7 @@ dependencies { implementation project(':core:libraries') implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:ui') implementation project(':core:utils') implementation project(':core:validators') diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt index 569ed1b587..a94d4dde69 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt @@ -14,11 +14,10 @@ import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction +import info.nightscout.interfaces.pump.BolusProgressData import info.nightscout.interfaces.pump.DetailedBolusInfo import info.nightscout.interfaces.pump.DetailedBolusInfoStorage -import info.nightscout.interfaces.pump.BolusProgressData import info.nightscout.interfaces.pump.PumpSync -import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction @@ -28,7 +27,27 @@ import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.code.ConnectionState import info.nightscout.pump.medtrum.comm.enums.AlarmState import info.nightscout.pump.medtrum.comm.enums.MedtrumPumpState -import info.nightscout.pump.medtrum.comm.packets.* +import info.nightscout.pump.medtrum.comm.packets.ActivatePacket +import info.nightscout.pump.medtrum.comm.packets.AuthorizePacket +import info.nightscout.pump.medtrum.comm.packets.CancelBolusPacket +import info.nightscout.pump.medtrum.comm.packets.CancelTempBasalPacket +import info.nightscout.pump.medtrum.comm.packets.ClearPumpAlarmPacket +import info.nightscout.pump.medtrum.comm.packets.GetDeviceTypePacket +import info.nightscout.pump.medtrum.comm.packets.GetRecordPacket +import info.nightscout.pump.medtrum.comm.packets.GetTimePacket +import info.nightscout.pump.medtrum.comm.packets.MedtrumPacket +import info.nightscout.pump.medtrum.comm.packets.NotificationPacket +import info.nightscout.pump.medtrum.comm.packets.PrimePacket +import info.nightscout.pump.medtrum.comm.packets.ResumePumpPacket +import info.nightscout.pump.medtrum.comm.packets.SetBasalProfilePacket +import info.nightscout.pump.medtrum.comm.packets.SetBolusPacket +import info.nightscout.pump.medtrum.comm.packets.SetPatchPacket +import info.nightscout.pump.medtrum.comm.packets.SetTempBasalPacket +import info.nightscout.pump.medtrum.comm.packets.SetTimePacket +import info.nightscout.pump.medtrum.comm.packets.SetTimeZonePacket +import info.nightscout.pump.medtrum.comm.packets.StopPatchPacket +import info.nightscout.pump.medtrum.comm.packets.SubscribePacket +import info.nightscout.pump.medtrum.comm.packets.SynchronizePacket import info.nightscout.pump.medtrum.util.MedtrumSnUtil import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus diff --git a/pump/omnipod-dash/build.gradle b/pump/omnipod-dash/build.gradle index 72c2bd4d84..f36ba39872 100644 --- a/pump/omnipod-dash/build.gradle +++ b/pump/omnipod-dash/build.gradle @@ -30,6 +30,7 @@ dependencies { implementation project(':app-wear-shared:shared') implementation project(':core:libraries') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') implementation project(':core:validators') diff --git a/pump/omnipod-eros/build.gradle b/pump/omnipod-eros/build.gradle index 7974db371f..6407f5b795 100644 --- a/pump/omnipod-eros/build.gradle +++ b/pump/omnipod-eros/build.gradle @@ -30,6 +30,7 @@ dependencies { implementation project(':app-wear-shared:shared') implementation project(':core:libraries') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') implementation project(':core:validators') diff --git a/pump/pump-common/build.gradle b/pump/pump-common/build.gradle index ba01b3436f..9112c217ad 100644 --- a/pump/pump-common/build.gradle +++ b/pump/pump-common/build.gradle @@ -16,6 +16,7 @@ android { dependencies { implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:utils') implementation project(':app-wear-shared:shared') diff --git a/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt b/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt index d89a38c967..dd80707759 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/QuickWizardListActivity.kt @@ -156,7 +156,7 @@ class QuickWizardListActivity : TranslatedDaggerAppCompatActivity(), OnStartDrag } addMenuProvider(object : MenuProvider { override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { - menuInflater.inflate(info.nightscout.core.utils.R.menu.menu_actions, menu) + menuInflater.inflate(info.nightscout.core.main.R.menu.menu_actions, menu) } override fun onMenuItemSelected(menuItem: MenuItem): Boolean = diff --git a/wear/build.gradle b/wear/build.gradle index a7638ba42d..d8d8690654 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -95,6 +95,7 @@ allprojects { dependencies { implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared-impl') + implementation project(':core:interfaces') implementation fileTree(include: ['*.jar'], dir: 'libs') From 8be62d4e3eb111df8d832185185e0791ddebb775 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 18 Sep 2023 23:58:37 +0200 Subject: [PATCH 31/65] eliminate :app-wear-shared:shared --- app-wear-shared/shared-impl/build.gradle | 2 +- .../nightscout/shared/utils/DateUtilImpl.kt | 2 +- app-wear-shared/shared-tests/build.gradle | 1 - app-wear-shared/shared/.gitignore | 1 - app-wear-shared/shared/build.gradle | 44 -------- app-wear-shared/shared/consumer-rules.pro | 0 app-wear-shared/shared/proguard-rules.pro | 21 ---- .../shared/src/main/AndroidManifest.xml | 4 - .../src/main/res/values-af-rZA/strings.xml | 25 ----- .../src/main/res/values-bg-rBG/strings.xml | 92 ---------------- .../src/main/res/values-ca-rES/strings.xml | 28 ----- .../src/main/res/values-cs-rCZ/strings.xml | 95 ---------------- .../src/main/res/values-da-rDK/strings.xml | 93 ---------------- .../src/main/res/values-de-rDE/strings.xml | 92 ---------------- .../src/main/res/values-el-rGR/strings.xml | 95 ---------------- .../src/main/res/values-es-rES/strings.xml | 95 ---------------- .../src/main/res/values-fr-rFR/strings.xml | 93 ---------------- .../src/main/res/values-ga-rIE/strings.xml | 26 ----- .../src/main/res/values-hr-rHR/strings.xml | 14 --- .../src/main/res/values-hu-rHU/strings.xml | 9 -- .../src/main/res/values-it-rIT/strings.xml | 93 ---------------- .../src/main/res/values-iw-rIL/strings.xml | 54 --------- .../src/main/res/values-ja-rJP/strings.xml | 37 ------- .../src/main/res/values-ko-rKR/strings.xml | 92 ---------------- .../src/main/res/values-lt-rLT/strings.xml | 93 ---------------- .../src/main/res/values-nl-rNL/strings.xml | 95 ---------------- .../src/main/res/values-no-rNO/strings.xml | 95 ---------------- .../src/main/res/values-pl-rPL/strings.xml | 93 ---------------- .../src/main/res/values-pt-rBR/strings.xml | 60 ---------- .../src/main/res/values-pt-rPT/strings.xml | 91 ---------------- .../src/main/res/values-ro-rRO/strings.xml | 28 ----- .../src/main/res/values-ru-rRU/strings.xml | 84 -------------- .../src/main/res/values-sk-rSK/strings.xml | 95 ---------------- .../src/main/res/values-sr-rCS/strings.xml | 6 - .../src/main/res/values-sv-rSE/strings.xml | 90 --------------- .../src/main/res/values-tr-rTR/strings.xml | 95 ---------------- .../src/main/res/values-uk-rUA/strings.xml | 6 - .../src/main/res/values-zh-rCN/strings.xml | 37 ------- .../shared/src/main/res/values/strings.xml | 103 ------------------ app/build.gradle | 1 - core/interfaces/build.gradle | 33 ++++-- .../nightscout/annotations/OpenForTesting.kt | 0 .../annotations/InterfacesOpenForTesting.kt | 15 --- .../info/nightscout/interfaces/GlucoseUnit.kt | 0 .../interfaces/plugin/PluginDescription.kt | 4 +- .../java/info/nightscout/rx/AapsSchedulers.kt | 0 .../main/java/info/nightscout/rx/bus/RxBus.kt | 0 .../java/info/nightscout/rx/events/Event.kt | 0 .../rx/events/EventAcceptOpenLoopChange.kt | 0 .../info/nightscout/rx/events/EventAppExit.kt | 0 .../rx/events/EventAppInitialized.kt | 0 .../EventAutosensCalculationFinished.kt | 0 .../nightscout/rx/events/EventBTChange.kt | 0 .../rx/events/EventBucketedDataCreated.kt | 0 .../rx/events/EventChargingState.kt | 0 .../rx/events/EventConfigBuilderChange.kt | 0 .../rx/events/EventCustomActionsChanged.kt | 0 .../events/EventCustomCalculationFinished.kt | 0 .../rx/events/EventDanaRSyncStatus.kt | 0 .../rx/events/EventDeviceStatusChange.kt | 0 .../rx/events/EventDiaconnG8PumpLogReset.kt | 0 .../EventDismissBolusProgressIfRunning.kt | 0 .../rx/events/EventDismissNotification.kt | 0 .../EventEffectiveProfileSwitchChanged.kt | 0 .../rx/events/EventExtendedBolusChange.kt | 0 .../rx/events/EventFoodDatabaseChanged.kt | 0 .../rx/events/EventInitializationChanged.kt | 0 .../rx/events/EventLocalProfileChanged.kt | 0 .../info/nightscout/rx/events/EventLoop.kt | 0 .../rx/events/EventLoopUpdateGui.kt | 0 .../rx/events/EventMobileDataToWear.kt | 0 .../nightscout/rx/events/EventMobileToWear.kt | 0 .../rx/events/EventNSClientNewLog.kt | 0 .../rx/events/EventNSClientRestart.kt | 0 .../rx/events/EventNetworkChange.kt | 0 .../info/nightscout/rx/events/EventNewBG.kt | 0 .../rx/events/EventNewHistoryData.kt | 0 .../rx/events/EventNewOpenLoopNotification.kt | 0 .../nightscout/rx/events/EventNtpStatus.kt | 0 .../rx/events/EventOfflineChange.kt | 0 .../rx/events/EventOverviewBolusProgress.kt | 0 .../rx/events/EventPreferenceChange.kt | 0 .../rx/events/EventProfileStoreChanged.kt | 0 .../rx/events/EventProfileSwitchChanged.kt | 0 .../rx/events/EventPumpStatusChanged.kt | 2 +- .../nightscout/rx/events/EventQueueChanged.kt | 0 .../nightscout/rx/events/EventRebuildTabs.kt | 0 .../rx/events/EventRefreshButtonState.kt | 0 .../rx/events/EventRefreshOverview.kt | 0 .../nightscout/rx/events/EventSWRLStatus.kt | 0 .../nightscout/rx/events/EventSWSyncStatus.kt | 0 .../nightscout/rx/events/EventSWUpdate.kt | 0 .../info/nightscout/rx/events/EventScale.kt | 0 .../info/nightscout/rx/events/EventStatus.kt | 0 .../rx/events/EventTempBasalChange.kt | 0 .../rx/events/EventTempTargetChange.kt | 0 .../nightscout/rx/events/EventThemeSwitch.kt | 0 .../rx/events/EventTherapyEventChange.kt | 0 .../rx/events/EventTreatmentChange.kt | 0 .../nightscout/rx/events/EventUpdateGui.kt | 0 .../events/EventUpdateOverviewCalcProgress.kt | 0 .../rx/events/EventUpdateOverviewGraph.kt | 0 .../rx/events/EventUpdateOverviewIobCob.kt | 0 .../events/EventUpdateOverviewSensitivity.kt | 0 .../rx/events/EventWearCwfExported.kt | 0 .../rx/events/EventWearDataToMobile.kt | 0 .../nightscout/rx/events/EventWearToMobile.kt | 0 .../rx/events/EventWearUpdateGui.kt | 0 .../nightscout/rx/events/EventXdripNewLog.kt | 0 .../java/info/nightscout/rx/interfaces/L.kt | 0 .../nightscout/rx/interfaces/LogElement.kt | 0 .../info/nightscout/rx/logging/AAPSLogger.kt | 0 .../nightscout/rx/logging/BundleLogger.kt | 0 .../java/info/nightscout/rx/logging/LTag.kt | 0 .../rx/weardata/CustomWatchfaceFormat.kt | 2 +- .../info/nightscout/rx/weardata/EventData.kt | 0 .../java/info/nightscout/shared/SafeParse.kt | 0 .../nightscout/shared/extensions/UIUtils.kt | 0 .../shared/interfaces/ProfileUtil.kt | 0 .../shared/interfaces/ResourceHelper.kt | 0 .../nightscout/shared/sharedPreferences/SP.kt | 0 .../info/nightscout/shared/utils/DateUtil.kt | 0 .../java/info/nightscout/shared/utils/T.kt | 0 .../src/main/res/values/strings.xml | 100 +++++++++++++++++ .../src/main/res/values/wear_paths.xml | 0 .../nightscout/annotations/OpenForTesting.kt | 0 .../annotations/InterfacesOpenForTesting.kt | 8 -- .../info/nightscout/rx/RxSchedulerRule.kt | 0 .../nightscout/rx/weardata/EventDataTest.kt | 0 .../info/nightscout/shared/SafeParseTest.kt | 0 core/main/build.gradle | 1 - .../data/EffectiveProfileSwitchDataPoint.kt | 2 +- .../nightscout/core/utils/DateUtilTest.kt | 2 +- core/validators/build.gradle | 2 +- implementation/build.gradle | 1 - .../implementation/TranslatorImpl.kt | 4 +- .../implementation/stats/TddCalculatorImpl.kt | 2 +- .../implementation/stats/TirImpl.kt | 2 +- .../stats/TotalDailyDoseExtension.kt | 2 +- .../UserEntryPresentationHelperImpl.kt | 4 +- insight/build.gradle | 1 - .../pump/insight/LocalInsightFragment.java | 2 +- plugins/aps/build.gradle | 1 - plugins/automation/build.gradle | 3 +- .../automation/triggers/TriggerBolusAgo.kt | 2 +- plugins/configuration/build.gradle | 1 - .../CustomWatchfaceImportListActivity.kt | 2 +- plugins/constraints/build.gradle | 1 - plugins/insulin/build.gradle | 1 - plugins/main/build.gradle | 1 - .../general/overview/ui/StatusLightHandler.kt | 8 +- .../wear/wearintegration/DataHandlerMobile.kt | 4 +- .../DataLayerListenerServiceMobile.kt | 4 +- plugins/sensitivity/build.gradle | 1 - plugins/smoothing/build.gradle | 1 - plugins/source/build.gradle | 1 - plugins/sync/build.gradle | 1 - .../sync/nsclientV3/NSClientV3Plugin.kt | 4 +- pump/combo/build.gradle | 1 - pump/combov2/build.gradle | 7 +- .../pump/combov2/ComboV2Fragment.kt | 4 +- pump/dana/build.gradle | 1 - .../info/nightscout/pump/dana/DanaFragment.kt | 2 +- pump/danar/build.gradle | 4 +- .../services/DanaRv2ExecutionService.java | 2 +- pump/danars/build.gradle | 1 - .../pump/danars/services/DanaRSService.kt | 2 +- pump/diaconn/build.gradle | 1 - .../pump/diaconn/DiaconnG8Fragment.kt | 2 +- .../pump/diaconn/service/DiaconnG8Service.kt | 2 +- pump/eopatch/build.gradle | 3 +- pump/medtronic/build.gradle | 1 - .../pump/medtronic/MedtronicFragment.kt | 2 +- pump/medtrum/build.gradle | 3 +- .../ui/viewmodel/MedtrumOverviewViewModel.kt | 2 +- pump/omnipod-common/build.gradle | 1 - pump/omnipod-dash/build.gradle | 1 - pump/omnipod-eros/build.gradle | 1 - pump/pump-common/build.gradle | 1 - .../pump/common/defs/PumpDriverState.kt | 4 +- pump/rileylink/build.gradle | 1 - pump/virtual/build.gradle | 1 - settings.gradle | 1 - ui/build.gradle | 1 - .../ui/activityMonitor/ActivityMonitor.kt | 2 +- .../info/nightscout/ui/dialogs/CarbsDialog.kt | 2 +- .../nightscout/ui/dialogs/InsulinDialog.kt | 12 +- .../ui/dialogs/ProfileViewerDialog.kt | 2 +- wear/build.gradle | 1 - .../androidaps/comm/DataHandlerWear.kt | 4 +- .../comm/DataLayerListenerServiceWear.kt | 4 +- .../interaction/actions/BolusActivity.kt | 4 +- .../interaction/actions/TreatmentActivity.kt | 4 +- .../androidaps/watchfaces/CustomWatchface.kt | 6 +- workflow/build.gradle | 5 +- 195 files changed, 192 insertions(+), 2311 deletions(-) delete mode 100644 app-wear-shared/shared/.gitignore delete mode 100644 app-wear-shared/shared/build.gradle delete mode 100644 app-wear-shared/shared/consumer-rules.pro delete mode 100644 app-wear-shared/shared/proguard-rules.pro delete mode 100644 app-wear-shared/shared/src/main/AndroidManifest.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-af-rZA/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-bg-rBG/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-ca-rES/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-de-rDE/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-es-rES/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-ga-rIE/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-hr-rHR/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-hu-rHU/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-it-rIT/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-iw-rIL/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-ja-rJP/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-ko-rKR/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-pt-rBR/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-pt-rPT/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-ro-rRO/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-sr-rCS/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-sv-rSE/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-uk-rUA/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values-zh-rCN/strings.xml delete mode 100644 app-wear-shared/shared/src/main/res/values/strings.xml rename {app-wear-shared/shared => core/interfaces}/src/debug/java/info/nightscout/annotations/OpenForTesting.kt (100%) delete mode 100644 core/interfaces/src/debug/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/interfaces/GlucoseUnit.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/AapsSchedulers.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/bus/RxBus.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/Event.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventAcceptOpenLoopChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventAppExit.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventAppInitialized.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventAutosensCalculationFinished.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventBTChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventBucketedDataCreated.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventChargingState.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventConfigBuilderChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventCustomActionsChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventCustomCalculationFinished.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventDanaRSyncStatus.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventDeviceStatusChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventDiaconnG8PumpLogReset.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventDismissBolusProgressIfRunning.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventDismissNotification.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventEffectiveProfileSwitchChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventExtendedBolusChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventFoodDatabaseChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventInitializationChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventLocalProfileChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventLoop.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventLoopUpdateGui.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventMobileDataToWear.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventMobileToWear.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventNSClientNewLog.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventNSClientRestart.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventNetworkChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventNewBG.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventNewHistoryData.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventNewOpenLoopNotification.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventNtpStatus.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventOfflineChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventOverviewBolusProgress.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventPreferenceChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventProfileStoreChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventProfileSwitchChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventPumpStatusChanged.kt (97%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventQueueChanged.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventRebuildTabs.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventRefreshButtonState.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventRefreshOverview.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventSWRLStatus.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventSWSyncStatus.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventSWUpdate.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventScale.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventStatus.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventTempBasalChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventTempTargetChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventThemeSwitch.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventTherapyEventChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventTreatmentChange.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventUpdateGui.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventUpdateOverviewCalcProgress.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventUpdateOverviewGraph.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventUpdateOverviewIobCob.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventUpdateOverviewSensitivity.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventWearCwfExported.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventWearDataToMobile.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventWearToMobile.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventWearUpdateGui.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/events/EventXdripNewLog.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/interfaces/L.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/interfaces/LogElement.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/logging/AAPSLogger.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/logging/BundleLogger.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/logging/LTag.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/weardata/CustomWatchfaceFormat.kt (99%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/rx/weardata/EventData.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/shared/SafeParse.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/shared/extensions/UIUtils.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/shared/interfaces/ProfileUtil.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/shared/interfaces/ResourceHelper.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/shared/sharedPreferences/SP.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/shared/utils/DateUtil.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/java/info/nightscout/shared/utils/T.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/main/res/values/wear_paths.xml (100%) rename {app-wear-shared/shared => core/interfaces}/src/release/java/info/nightscout/annotations/OpenForTesting.kt (100%) delete mode 100644 core/interfaces/src/release/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt rename {app-wear-shared/shared => core/interfaces}/src/test/java/info/nightscout/rx/RxSchedulerRule.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt (100%) rename {app-wear-shared/shared => core/interfaces}/src/test/java/info/nightscout/shared/SafeParseTest.kt (100%) diff --git a/app-wear-shared/shared-impl/build.gradle b/app-wear-shared/shared-impl/build.gradle index f2c115b890..da83429250 100644 --- a/app-wear-shared/shared-impl/build.gradle +++ b/app-wear-shared/shared-impl/build.gradle @@ -21,5 +21,5 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') + implementation project(':core:interfaces') } \ No newline at end of file diff --git a/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt index ee093019d6..579c21e60c 100644 --- a/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt +++ b/app-wear-shared/shared-impl/src/main/java/info/nightscout/shared/utils/DateUtilImpl.kt @@ -5,7 +5,7 @@ import android.os.Build import androidx.annotation.RequiresApi import androidx.collection.LongSparseArray import info.nightscout.annotations.OpenForTesting -import info.nightscout.shared.R +import info.nightscout.interfaces.R import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper import org.apache.commons.lang3.time.DateUtils.isSameDay diff --git a/app-wear-shared/shared-tests/build.gradle b/app-wear-shared/shared-tests/build.gradle index 9c4a8730fa..97a502c731 100644 --- a/app-wear-shared/shared-tests/build.gradle +++ b/app-wear-shared/shared-tests/build.gradle @@ -18,7 +18,6 @@ android { dependencies { implementation project(':database:entities') - implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared-impl') implementation project(':core:interfaces') implementation project(':core:main') diff --git a/app-wear-shared/shared/.gitignore b/app-wear-shared/shared/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/app-wear-shared/shared/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/app-wear-shared/shared/build.gradle b/app-wear-shared/shared/build.gradle deleted file mode 100644 index c97de505bb..0000000000 --- a/app-wear-shared/shared/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id 'com.android.library' - id 'kotlin-android' - id 'kotlin-kapt' - id 'kotlinx-serialization' - id 'kotlin-allopen' -} - -apply from: "${project.rootDir}/core/main/android_dependencies.gradle" -apply from: "${project.rootDir}/core/main/android_module_dependencies.gradle" -apply from: "${project.rootDir}/core/main/allopen_dependencies.gradle" -apply from: "${project.rootDir}/core/main/test_dependencies.gradle" -apply from: "${project.rootDir}/core/main/jacoco_global.gradle" - -android { - - namespace 'info.nightscout.shared' - defaultConfig { - minSdkVersion 25 // for wear - } -} - -dependencies { - api "androidx.preference:preference-ktx:$preferencektx_version" - api "net.danlew:android.joda:$joda_version" - - api "com.google.dagger:dagger:$dagger_version" - api "com.google.dagger:dagger-android:$dagger_version" - api "com.google.dagger:dagger-android-support:$dagger_version" - - //Logger - api 'org.slf4j:slf4j-api:1.7.36' // 2.0.x breaks logging. Code change needed - api 'com.github.tony19:logback-android:2.0.0' - - api "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinx_serialization_version" - api "org.jetbrains.kotlinx:kotlinx-serialization-protobuf:$kotlinx_serialization_version" - api "com.caverock:androidsvg:$caverock_androidsvg_version" - api "org.apache.commons:commons-lang3:$commonslang3_version" - - //RxBus - api "io.reactivex.rxjava3:rxjava:$rxjava_version" - api "io.reactivex.rxjava3:rxkotlin:$rxkotlin_version" - api "io.reactivex.rxjava3:rxandroid:$rxandroid_version" -} \ No newline at end of file diff --git a/app-wear-shared/shared/consumer-rules.pro b/app-wear-shared/shared/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/app-wear-shared/shared/proguard-rules.pro b/app-wear-shared/shared/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/app-wear-shared/shared/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/AndroidManifest.xml b/app-wear-shared/shared/src/main/AndroidManifest.xml deleted file mode 100644 index 44008a4332..0000000000 --- a/app-wear-shared/shared/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/res/values-af-rZA/strings.xml b/app-wear-shared/shared/src/main/res/values-af-rZA/strings.xml deleted file mode 100644 index 6f9ad74f9e..0000000000 --- a/app-wear-shared/shared/src/main/res/values-af-rZA/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - h - dae - ure - sekonde - minuut - uur - dag - week - sekondes - minute - ure - dae - weke - m - d - - Koppel vir %1$d s - Handskudding - Gekoppel - Ontkoppel - - diff --git a/app-wear-shared/shared/src/main/res/values-bg-rBG/strings.xml b/app-wear-shared/shared/src/main/res/values-bg-rBG/strings.xml deleted file mode 100644 index e23a023f6b..0000000000 --- a/app-wear-shared/shared/src/main/res/values-bg-rBG/strings.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - преди %1$d мин - Преди %1$d минути - преди %1$.1f ч - преди %1$.1f дни - преди %1$.0f дни - за %1$.0f дни - за %1$.0f дни - ч - дни - часа - секунда - минута - час - ден - седмица - секунди - минути - часове - дни - седмици - м - д - По-късно днес - Утре - Днес - Вчера - - Свързване %1$d сек - Сдвояване - Свързана - Разкачане - Изчакване за разкачане - - Създадено: %1$s - Автор: %1$s - Име: %1$s - Име на файла: %1$s - Plugin версия: %1$s - Име: %1$s (%2$s) - Покажи IOB - Покажи подробен IOB - Покажи COB - Покажи Делта - Показвай подробна делта - Покажи средна делта - Покажи батерия на телефон - Покажи батерия на устройство - Покажи базал - Покажи Loop Статус - Покажи КЗ - Покажи BGI - Покажи делта стрелка - Покажи \"преди\" - Watchface по подразбиране, можете да изберете бутон ЕКСПОРТИРАНЕ НА WATCHFACE за създаване на шаблон - Watchface по подразбиране - Фоново изображение - Графики (КЗ, базал, прогнозни криви...) - Изображение над графика и под текстови полета - Свободен текст 1 - Свободен текст 2 - Свободен текст 3 - Свободен текст 4 - IOB надпис или IOB Общо (при подробен IOB) - IOB Общо или (Bolus_IOB|Basal_IOB) при подробен IOB - COB надпис - COB стойност - Краткоср. Δ - Средна делта (15мин) - Батерия на телефона (%) - Global loop батерия (%) - Базал - BGI стойност - Време (ЧЧ:MM или ЧЧ:MM:СС) - Час (ЧЧ) - Минути (MM) - Секунди (СС) - AM или PM - Ден от седмицата - Ден (ДД) - Месец (кратко) - Loop статус и \"преди\" - Делта стрелка - Последно получена КЗ преди минути - КЗ стойност - Изображение над текст (циферблат...) - Изображение на стрелка за часове (Аналогов часовник) - Изображение на стрелка за минути (Аналогов часовник) - Изображение на стрелка за секунди (Аналогов часовник) - diff --git a/app-wear-shared/shared/src/main/res/values-ca-rES/strings.xml b/app-wear-shared/shared/src/main/res/values-ca-rES/strings.xml deleted file mode 100644 index e2a9ff86bd..0000000000 --- a/app-wear-shared/shared/src/main/res/values-ca-rES/strings.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - Fa %1$d m - Fa %1$.1f h - h - dies - hores - segon - minut - hora - dia - setmana - segons - minuts - hores - dies - setmanes - m - d - - Connectant %1$d s - Establint comunicació - Connectat - Desconnectant - S\'està esperant la desconnexió - - diff --git a/app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml b/app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml deleted file mode 100644 index 487005d290..0000000000 --- a/app-wear-shared/shared/src/main/res/values-cs-rCZ/strings.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - před %1$d min - před %1$d minutamí - před %1$.1f h - Před %1$.1f dny - Před %1$.0f dny - za %1$.0f dní - za %1$.0f dní - h - dnů - hodin - sekund - minut - hodina - den - týden - sekund - minut - hodin - dní - týdnů - m - d - Později během dneška - Zítra - Dnes - Včera - - Připojování %1$d sec - Navazování spojení - Připojeno - Odpojuji - Čekám na odpojení - - Vytvořeno: %1$s - Autor: %1$s - Jméno %1$s - Název souboru: %1$s - Verze pluginu: %1$s - Jméno: %1$s (%2$s) - Informace: %1$s - Zobrazit IOB - Zobrazit detailní IOB - Zobrazit COB - Zobrazit deltu - Zobrazit detailní deltu - Zobrazit průměrnou deltu - Zobrazit stav baterie telefonu - Zobrazit stav baterie dalších zařízení - Zobrazit bazál - Zobrazit stav smyčky - Zobrazit glykémii - Zobrazit BGI - Zobrazit trendovou šipku - Zobrazit aktualizováno před - Zobrazit číslo týdne - Výchozí ciferník. Můžete kliknout na tlačítko EXPORTOVAT CIFERNÍK pro vygenerování šablony - Výchozí ciferník - Tapeta - Grafy (glykémie, bazály, křivky předpovědí...) - Obrázek před grafem a za textovými poli - Volný text 1 - Volný text 2 - Volný text 3 - Volný text 4 - Štítek IOB nebo suma IOB při zapnutých detailech - Suma IOB nebo (Bolus_IOB|Basal_IOB) při zapnutých detailech - Štítek COB - Hodnota COB - Krátkodobý průměr - Průměrný rozdíl glykémií (15min) - Baterie telefonu (%) - Baterie smyčky (%) - Bazální dávka - Hodnota BGI - Čas (HH:MM nebo HH:MM:SS) - Hodiny (HH) - Minuty (MM) - Sekundy (SS) - AM nebo PM - Jméno dne v týdnu - Den (DD) - Číslo týdne (ww) - Název měsíce (krátký) - Stav smyčky a čas - Trendová šipka - Před minutami pro poslední přijaté glykémie - Hodnota glykémie - Úvodní obrázek před textem (vytáčení...) - Obrázek hodinové ručičky (Analogové hodinky) - Obrázek minutové ručičky (Analogové hodinky) - Obrázek druhé ručičky (Analogové hodinky) - diff --git a/app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml b/app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml deleted file mode 100644 index f35084621c..0000000000 --- a/app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - %1$d min. siden - %1$d minutter siden - %1$.1f t siden - %1$.1f dage siden - %1$.0f dage siden - om %1$.0f dage - om %1$.0f dage - t - dage - timer - sekund - minut - time - dag - uge - sekunder - minutter - timer - dage - uger - min - d - Senere i dag - I morgen - I dag - I går - - Opretter forbindelse i %1$d s - Forbindelse verificeres - Tilsuttet - Afbryder - Venter på afbrydelse - - Oprettet den: %1$s - Forfatter: %1$s - Navn: %1$s - Filnavn: %1$s - Plugin version: %1$s - Navn: %1$s (%2$s) - Oplysning: %1$s - Vis IOB - Vis detaljeret IOB - Vis COB - Vis Delta - Vis detaljeret Delta - Show GnsDelta - Vis Telefonbatteri - Vis Rig-batteri - Vis Basalrate - Vis Loop-status - Vis BS - Vis BSI - Vis Retningspil - Vis alder - Standard urskive, du kan klikke på EKSPORTÉR URSKIVE-knappen for at generere en skabelon - Standard Urskive - Baggrundsbillede - Grafer (BS, basal, prognoselinjer...) - Billede foran graf og bag tekstfelter - Fritekst 1 - Fri tekst 2 - Fri tekst 3 - Fri tekst 4 - IOB-etiket eller IOB-sum, hvis givet - IOB-sum eller (Bolus_IOB|Basal_IOB) hvis givet - COB-etiket - COB-værdi - Kort BG-delta - Gennemsnitlig BG-delta (15min) - Telefonbatteri (%) - Globalt loop batteri (%) - Basalrate - BGI-værdi - Tid (TT:MM eller TT:MM:SS) - Time (TT) - Minut (MM) - Sekund (SS) - AM eller PM - Navn på ugedag - Dag (DD) - Måned navn (kort) - Loop status og tid - Retningspil - Minutter siden sidst modtaget BS - BS-værdi - Dækbillede foran tekst (opkald...) - Billede af timeviser (Analogur) - Billede af minutviser (Analogur) - Billede af sekundviser (Analogur) - diff --git a/app-wear-shared/shared/src/main/res/values-de-rDE/strings.xml b/app-wear-shared/shared/src/main/res/values-de-rDE/strings.xml deleted file mode 100644 index 94321c069d..0000000000 --- a/app-wear-shared/shared/src/main/res/values-de-rDE/strings.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - vor %1$d Min. - vor %1$d Minuten - vor %1$.1f Stunde - vor %1$.1f Tagen - vor %1$.0f Tagen - in %1$.0f Tagen - in %1$.0f Tagen - h - Tage - Stunden - Sekunde - Minute - Stunde - Tag - Woche - Sekunden - Minuten - Stunden - Tage - Wochen - m - d - Später heute - Morgen - Heute - Gestern - - Verbindungsaufbau seit %1$d s - Handshaking - Verbunden - Verbindung wird getrennt - Warte auf Trennung der Verbindung - - Erstellt am: %1$s - Autor: %1$s - Name: %1$s - Dateiname: %1$s - Plugin-Version: %1$s - Name: %1$s (%2$s) - IOB anzeigen - Zeige detailliertes IOB - COB anzeigen - Abweichung anzeigen - Zeige detailliertes Delta - Durchschnittl. Abweichung anzeigen - Akkustand Smartphone - Akkustand Rig - Basalrate anzeigen - Loop Status anzeigen - BZ anzeigen - Zeige BGI - Trendpfeil anzeigen - Min. seit letztem Wert - Standard-Watchface, Du kannst auf den Knopf WATCHFACE exportieren drücken, um eine Vorlage zu generieren - Standard-Watchface - Hintergrundbild - Diagramme (BG, Basal, Vorhersage...) - Bild vor Graph und hinter Textfeldern - Freitextfeld 1 - Freitextfeld 2 - Freitextfeld 3 - Freitextfeld 4 - IOB Bezeichnung oder IOB Sum wenn detailliert - IOB-Summe oder (Bolus_IOB|Basal_IOB) wenn detailliert - COB-Bezeichnung - COB-Wert - Kurzes BG Delta - Durchschnittliches BG-Delta (15min) - Telefon-Akku (%) - Globale Loop Akku (%) - Basalrate - BGI-Wert - Uhrzeit (HH:MM oder HH:MM:SS) - Stunde (HH) - Minuten (MM) - Sekunde (SS) - AM oder PM - Wochentagname - Tag (DD) - Monatsname (kurz) - Loop-Status und Historie - Richtungspfeil - Minuten vor dem letzten erhaltenen BG - Blutzuckerwert - Titelbild vor dem Text (wählen...) - Bild des Stundenzeiger (Analog Uhr) - Bild des Minutenzeiger (Analog Uhr) - Bild des Sekundenzeigers (Analog Uhr) - diff --git a/app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml b/app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml deleted file mode 100644 index e8c20ac480..0000000000 --- a/app-wear-shared/shared/src/main/res/values-el-rGR/strings.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - %1$d λ πριν - %1$d λεπτά πριν - %1$.1f ω πριν - %1$.1f ημέρες πριν - %1$.0f ημέρες πριν - σε %1$.0f ημέρες - σε %1$.0f ημέρες - h - ημέρες - ώρες - δευτερόλεπτο - λεπτό - ώρα - ημέρα - εβδομάδα - δευτερόλεπτα - λεπτά - ώρες - ημέρες - εβδομάδες - m - ημ - Αργότερα σήμερα - Αύριο - Σήμερα - Χθες - - Σύνδεση για %1$d δευτερόλεπτα - Δημιουργία σύνδεσης - Συνδέθηκε - Αποσυνδέεται - Αναμονή για αποσύνδεση - - Δημιουργήθηκε: %1$s - Συντάκτης: %1$s - Όνομα: %1$s - Όνομα αρχείου: %1$s - Έκδοση πρόσθετου: %1$s - Όνομα: %1$s (%2$s) - Πληροφορίες: %1$s - Εμφάνιση IOB - Εμφάνιση λεπτομερούς IOB - Εμφάνιση COB - Εμφάνιση Διαφοράς - Εμφάνιση λεπτομερούς Διαφοράς - Εμφάνιση Μέσης Διαφοράς - Εμφάνιση Μπαταρίας Τηλεφώνου - Εμφάνιση Μπαταρίας Rig - Εμφάνιση Βασικού Ρυθμού - Εμφάνιση Κατάστασης Κυκλώματος - Εμφάνιση γλυκόζης αίματος - Εμφάνιση BGI - Εμφάνιση Βέλους Κατεύθυνσης - Εμφάνιση Πριν - Εμφάνιση αριθμού Εβδομάδας - Προεπιλεγμένη πρόσοψη ρολογιού, μπορείτε να κάνετε κλικ στο κουμπί ΕΞΑΓΩΓΗ ΠΡΟΣΟΨΗΣ για να δημιουργήσετε ένα πρότυπο - Προεπιλεγμένη πρόσοψη ρολογιού - Εικόνα φόντου - Γραφήματα (BG, βασικός, γραμμές πρόβλεψης...) - Εικόνα μπροστά από το γράφημα και πίσω από τα πεδία κειμένου - Ελεύθερο κείμενο 1 - Ελεύθερο κείμενο 2 - Ελεύθερο κείμενο 3 - Ελεύθερο κείμενο 4 - Ετικέτα IOB ή Άθροισμα IOB εάν είναι λεπτομερές - Άθροισμα IOB ή (Bolus_IOB|Basal_IOB) εάν είναι λεπτομερές - Ετικέτα COB - Τιμή COB - Βραχυπρόθεσμη διαφορά BG - Μέση διαφορά BG (15λεπτά) - Μπαταρία τηλεφώνου (%) - Μπαταρία συνολικού κυκλώματος (%) - Βασικός Ρυθμός - Τιμή BGI - Ώρα (ΩΩ:ΛΛ ή ΩΩ:ΜΜ:ΣΣ) - Ώρα (HH) - Λεπτό (MM) - Δευτερόλεπτο (SS) - ΠΜ ή ΜΜ - Όνομα της ημέρας της εβδομάδας - Ημέρα (DD) - Αριθμός Εβδομάδας (ww) - Όνομα μήνα (σύντομο) - Κατάσταση κυκλώματος και πριν - Βέλος κατεύθυνσης - Λεπτά πριν από την τελευταία λήψη BG - Τιμή γλυκόζης αίματος - Εικόνα εξωφύλλου μπροστά από το κείμενο (κλήσεις...) - Εικόνα ώρας χεριού (Αναλογικό ρολόι) - Εικόνα λεπτού χεριού (Αναλογικό ρολόι) - Εικόνα δευτερολέπτου χεριού (Αναλογικό ρολόι) - diff --git a/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml b/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml deleted file mode 100644 index 026bf80160..0000000000 --- a/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - hace %1$d m - Hace %1$d minutos - hace %1$.1f h - Hace %1$.1f día - Hace %1$.0f días - en %1$.0f días - en %1$.0f días - h - días - horas - segundo - minuto - hora - día - semana - segundos - minutos - horas - días - semanas - m - d - Más tarde hoy - Mañana - Hoy - Ayer - - Conectando durante %1$d s - Estableciendo comunicación - Conectado - Desconectando - Esperando la desconexión - - Creada: %1$s - Autor: %1$s - Nombre: %1$s - Nombre del archivo: %1$s - Versión del plugin: %1$s - Nombre: %1$s (%2$s) - Info: %1$s - Mostrar IOB - Mostrar IOB detallada - Mostrar COB - Mostrar delta - Mostrar delta detallado - Mostrar delta promedio - Mostrar batería del teléfono - Mostrar batería global del lazo - Mostrar la tasa basal - Mostrar estado del lazo - Mostrar glucosa - Mostrar BGI (Índice de glucosa en sangre) - Mostrar flecha de dirección - Mostrar \"hace\" - Mostrar número de semana - Esfera predeterminada, puedes hacer clic en el botón EXPORTAR ESFERA para generar una plantilla - Esfera por defecto - Imagen de fondo - Gráficos (glucosa, basal, líneas de predicción...) - Imagen frente al gráfico y detrás de campos de texto - Texto libre 1 - Texto libre 2 - Texto libre 3 - Texto libre 4 - Etiqueta IOB o Suma IOB si es detallada - Suma de IOB o (Bolos_IOB|Basal_IOB) si se detalla - Etiqueta COB - Valor COB - Delta corto de glucosa - Delta promedio de glucosa (15min) - Batería del teléfono (%) - Batería global de lazo (%) - Tasa Basal - Valor BGI - Tiempo (HH:MM o HH:MM:SS) - Hora (HH) - Minuto (MM) - Segundo (SS) - AM o PM - Nombre del día de la semana - Día (DD) - Número de semana (ww) - Nombre del mes (corto) - Estado del bucle y hace - Flecha de dirección - Minutos atrás del último valor de glucosa recibido - Valor de glucosa - Imagen de portada delante del texto (diales...) - Imagen de la aguja horaria (reloj analógico) - Imagen del minutero (reloj analógico) - Imagen del segundero (reloj analógico) - diff --git a/app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml b/app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml deleted file mode 100644 index d5b3b0ac07..0000000000 --- a/app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - il y a %1$d m - Il y a %1$d minutes - il y a %1$.1f h - Il y a %1$.1f jours - Il y a %1$.0f jours - en %1$.0f jours - en %1$.0f jours - h - jours - heures - seconde - minute - heure - jour - semaine - secondes - minutes - heures - jours - semaines - m - j - Plus tard aujourd\'hui - Demain - Aujourd’hui - Hier - - Connexion en cours %1$ds - Connexion - Connectée - Déconnexion en cours - Attente de déconnexion - - Créé le : %1$s - Auteur : %1$s - Nom : %1$s - Nom du fichier : %1$s - Version du plugin : %1$s - Nom : %1$s (%2$s) - Infos : %1$s - Afficher IA - Afficher IA détaillée - Afficher GA - Montrer le delta - Afficher Delta Détaillé - Afficher le delta moyen - Afficher la batterie du téléphone - Afficher la batterie de la plateforme - Afficher Basale - Afficher État Boucle - Afficher Glycémie - Afficher IGly - Afficher Flèche - Afficher Min Passées - Cadran par défaut, vous pouvez cliquer sur le bouton EXPORTER WATCHFACE pour générer un modèle - Cadran par défaut - Image d\'arrière-plan - Graphiques (Gly, basal, lignes de prédiction...) - Image devant le graphique et derrière les champs de texte - Texte libre 1 - Texte libre 2 - Texte libre 3 - Texte libre 4 - Libellé \"IA\" ou valeur IA globale si détaillé Ok - Valeur IA globale ou (IA_Bolus|IA_Basal) si détaillé Ok - Libellé \"GA\" - Valeur de GA - Delta Glycémie (5min) - Delta glycémie moyen (15min) - Batterie du téléphone (%) - Batterie de la boucle globale (%) - Débit Basal - Valeur de IGly - Heure (HH:MM ou HH:MM:SS) - Heure (HH) - Minute (MM) - Seconde (SS) - AM ou PM - Nom du jour de la semaine - Jour (JJ) - Nom du mois (court) - État de la boucle et délais - Flèche de direction - Minutes depuis la dernière Glycémie reçue - Valeur de Ia Gly - Image de couverture devant le texte (cadrans...) - Image de l\'aiģuille de l\'heure (Montre Analogique) - Image de l\'aiguille des minutes (Montre Analogique) - Image de l\'aiguille des secondes (Montre Analogique) - diff --git a/app-wear-shared/shared/src/main/res/values-ga-rIE/strings.xml b/app-wear-shared/shared/src/main/res/values-ga-rIE/strings.xml deleted file mode 100644 index 7f4c422d88..0000000000 --- a/app-wear-shared/shared/src/main/res/values-ga-rIE/strings.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - %1$d nóim ó shin - %1$.1f u ó shin - u - - uair - soicind - nóiméad - uair - - seachtain - soicind - nóiméad - uair - - seachtaine - n - - - Ag nascadh le %1$d s - Nasctha - Dícheangal - - diff --git a/app-wear-shared/shared/src/main/res/values-hr-rHR/strings.xml b/app-wear-shared/shared/src/main/res/values-hr-rHR/strings.xml deleted file mode 100644 index a098b3c42d..0000000000 --- a/app-wear-shared/shared/src/main/res/values-hr-rHR/strings.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - Prije %1$.1f dana - Prije %1$.0f dana - Danas - - Povezivanje %1$d s - Povezivanje - Povezano - Odspajanje - Čeka se prekid veze - - diff --git a/app-wear-shared/shared/src/main/res/values-hu-rHU/strings.xml b/app-wear-shared/shared/src/main/res/values-hu-rHU/strings.xml deleted file mode 100644 index a30f9e054a..0000000000 --- a/app-wear-shared/shared/src/main/res/values-hu-rHU/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - p - n - - Kapcsolódva - - diff --git a/app-wear-shared/shared/src/main/res/values-it-rIT/strings.xml b/app-wear-shared/shared/src/main/res/values-it-rIT/strings.xml deleted file mode 100644 index f6dc6021a6..0000000000 --- a/app-wear-shared/shared/src/main/res/values-it-rIT/strings.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - %1$d m fa - %1$d minuti fa - %1$.1f h fa - %1$.1f giorni fa - %1$.0f giorni fa - in %1$.0f giorni - in %1$.0f giorni - h - giorni - ore - secondi - minuti - ora - giorno - settimana - secondi - minuti - ore - giorni - settimane - m - d - Più tardì oggi - Domani - Oggi - Ieri - - In connessione per %1$d s - Connessione - Connesso - Disconnessione - In attesa della disconnessione - - Creato: %1$s - Autore: %1$s - Nome: %1$s - Nome file: %1$s - Versione plugin: %1$s - Nome: %1$s (%2$s) - Info: %1$s - Mostra IOB - Mostra IOB dettagliato - Mostra COB - Mostra delta - Mostra delta dettagliato - Mostra delta medio - Mostra batteria telefono - Mostra batteria rig - Mostra velocità basale - Mostra stato loop - Mostra BG - Mostra BGI - Mostra frecce direzionali - Mostra Indietro - Watchface predefinita, puoi fare click sul tasto ESPORTA WATCHFACE per generare un template - Watchface predefinita - Immagine sfondo - Grafici (BG, basale, linee di previsione...) - Immagine davanti al grafico e dietro i campi di testo - Testo libero 1 - Testo libero 2 - Testo libero 3 - Testo libero 4 - Etichetta IOB o somma IOB se in dettaglio - Somma IOB o (Bolo_IOB|Basale_IOB) se in dettaglio - Etichetta COB - Valore COB - Delta BG breve - Delta BG medio (15min) - Batteria telefono (%) - Batteria globale loop (%) - Velocità basale - Valore BGI - Tempo (HH:MM o HH:MM:SS) - Ora (HH) - Minuto (MM) - Secondo (SS) - AM o PM - Nome del giorno della settimana - Giorno (DD) - Nome del mese (breve) - Stato loop e indietro - Freccia direzionale - Minuti addietro per l\'ultimo valore BG ricevuto - Valore BG - Immagine di copertina davanti al testo (quadranti...) - Immagine lancetta ore (orologio analogico) - Immagine lancetta minuti (orologio analogico) - Immagine lancetta secondi (orologio analogico) - diff --git a/app-wear-shared/shared/src/main/res/values-iw-rIL/strings.xml b/app-wear-shared/shared/src/main/res/values-iw-rIL/strings.xml deleted file mode 100644 index c1642ab32d..0000000000 --- a/app-wear-shared/shared/src/main/res/values-iw-rIL/strings.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - לפני %1$d דקות - לפני %1$d דקות - לפני %1$.1f שעות - לפני %1$.1f ימים - לפני %1$.0f ימים - בעוד %1$.0f ימים - בעוד %1$.0f ימים - ש\' - ימים - שעות - שניה - דקה - שעה - יום - שבוע - שניות - דקות - שעות - ימים - שבועות - דק\' - י\' - מאוחר יותר היום - מחר - היום - אתמול - - חיבור אל %1$s - לוחץ יד - מחובר - מתנתק - ממתין לניתוק - - נוצר ב: %1$s - יוצר/ת: %1$s - שם: %1$s - שם קובץ: %1$s - גרסת פלאגין: %1$s - שם: %1$s (%2$s) - הצג אינסולין פעיל - הצגת אינס\' פעיל מפורט - הצג פח\' פעילות - הצג דלתא - הצג דלתא מפורטת - הצג דלתא ממוצעת - הצג את סוללת הטלפון - הצג סוללת ריג - הצג מינון בזאלי - ברירת המחדל של פני השעון, ניתן ללחוץ על כפתור ייצוא פני שעון כדי ליצור תבנית - ברירת מחדל פני שעון - diff --git a/app-wear-shared/shared/src/main/res/values-ja-rJP/strings.xml b/app-wear-shared/shared/src/main/res/values-ja-rJP/strings.xml deleted file mode 100644 index d78b6c6230..0000000000 --- a/app-wear-shared/shared/src/main/res/values-ja-rJP/strings.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - %1$d 分前 - %1$d 分前 - %1$.1f 時間前 - %1$.1f 日前 - %1$.0f 日前 - in %1$.0f 日 - in %1$.0f 日 - - 日間 - 時間 - - - - - - - - 時間 - - 週間 - - - 今日中 - 明日 - 今日 - 昨日 - - %1$d 秒間接続中 - ハンドシェイク中です - 接続されました - 切断中 - 切断待ち - - diff --git a/app-wear-shared/shared/src/main/res/values-ko-rKR/strings.xml b/app-wear-shared/shared/src/main/res/values-ko-rKR/strings.xml deleted file mode 100644 index 09e6124d50..0000000000 --- a/app-wear-shared/shared/src/main/res/values-ko-rKR/strings.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - %1$d 분 전 - %1$d분 전 - %1$.1f 시간 전 - %1$.1f일 전 - %1$.0f 일 전 - %1$.0f 일 이내에 - %1$.0f 일 이내에 - 시간 - - 시간 - - - - - - - - - - - - - 오늘 늦게 - 내일 - 오늘 - 어제 - - %1$d 초 동안 연결중 - 통신 확인 - 연결됨 - 연결끊기중 - 연결 해제 대기 중 - - 생성 시간: %1$s - 작성자: %1$s - 이름: %1$s - 파일 이름: %1$s - 플러그인 버전: %1$s - 이름: %1$s (%2$s) - IOB 표시 - IOB 자세한 표시 - COB 표시 - 델타 표시하기 - 자세한 델타 표시하기 - 평균 델타 표시하기 - 핸드폰 배터리 표시하기 - 리그 베터리 표시하기 - Basal 값 표시하기 - 루프 상태 표시하기 - BG 표시하기 - BGI 표시하기 - 화살표 표시하기 - 이전 표시하기 - 기본 시계, 워치페이스 내보내기 버튼을 클릭하여 템플릿을 생성할 수 있습니다. - 기본 워치페이스 - 배경화면 이미지 - 그래픽 (혈당, basal, 예측 선...) - 그래프 앞 그리고 문자 필드 뒤 이미지 - 무료 문자 1 - 무료 문자 2 - 무료 문자 3 - 무료 문자 4 - 자세한 경우 IOB 레이블 또는 IOB 합계 - 자세한 경우 IOB 합계 또는 (Bolus_IOB|Basal_IOB) - COB 레이블 - COB 값 - 단기 BG 델타 - 평균 BG 델타 (15분) - 핸드폰 베터리 (%) - 글로벌 루프 베터리 (%) - Basal양 - BGI 값 - 시간 (HH:MM 또는 HH:MM:SS) - 시간 (HH) - 분 (MM) - 초 (SS) - 오전 또는 오후 - 요일 - 일 (DD) - 월명 (짧게) - 루프 상태 및 이전 - 방향 화살표 - 몇 분 전에 마지막으로 받은 BG - BG 값 - 문자 앞의 표지 이미지 (다이얼...) - 시침 이미지 (아날로그 시계) - 분침 이미지 (아날로그 시계) - 초침 이미지 (아날로그 시계) - diff --git a/app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml b/app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml deleted file mode 100644 index 2c287ad28f..0000000000 --- a/app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - prieš %1$d min. - Prieš %1$d min. - Prieš %1$.1f val. - Prieš %1$s d. - Prieš %1$.0f d. - Po %1$.0f d. - Po %1$.0f d. - val. - d. - val. - sek. - min. - val. - d. - sav. - sekundės - min. - val. - d. - savaičių - m - d - Šiandien vėliau - Rytoj - Šiandien - Vakar - - Jungiamasi %1$d s - Ryšio užmezgimas - Prisijungta - Atsijungiama - Laukiama atsijungimo - - Sukurta: %1$s - Autorius: %1$s - Vardas: %1$s - Failo pavadinimas: %1$s - Įskiepio versija: %1$s - Pavadinimas: %1$s (%2$s) - Info: %1$s - Rodyti AIO - Rodyti detalų AIO - Rodyti AAO - Rodyti pokytį - Rodyti glikemijos pokyčius detaliai - Rodyti vidutinį pokytį - Rodyti telefono bateriją - Rodyti įrenginio bateriją - Rodyti valandinę bazę - Rodyti Ciklo statusą - Rodyti KG - Rodyti GĮ - Rodyti krypties rodyklę - Laikas nuo pask. vertės - Numatytasis ekranas. Paspaudus EKSPORTUOTI, bus sukurtas ruošinys - Numatytasis ekranas - Fono paveiksliukas - Grafikai (glikemija, bazė, prognozės...) - Paveiksliukas už teksto ir prieš grafiką - Laisvas tekstas 1 - Laisvas tekstas 2 - Laisvas tekstas 3 - Laisvas tekstas 4 - Sudėtinis arba detalus AIO - Sudėtinis arba detalus (Boluso_AIO|Bazės_AIO) AIO - AAO žyma - AAO vertė - Trumpo laikotarpio pokytis - Vidutinis pokytis (15 min) - Telefono baterija (%) - Baterija (%) - Bazė - KGI vertė - Laikas (val:min arba val:min:sek) - Val. - Min. - Sek. - AM ar PM - Savaitės diena - Diena (d.) - Mėnuo (sutrump.) - Ciklo būsena - Tendencijos rodyklė - Prieš kiek minučių nuskaityta glikemija - Glikemija - Paveiksliukas prieš tekstą (skambučius...) - Analoginio laikrodžio valandinė rodyklė - Analoginio laikrodžio minutinė rodyklė - Analoginio laikrodžio sekundinė rodyklė - diff --git a/app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml b/app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml deleted file mode 100644 index ecf4281832..0000000000 --- a/app-wear-shared/shared/src/main/res/values-nl-rNL/strings.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - %1$d m geleden - %1$d minuten geleden - %1$.1f uur geleden - %1$.1f dagen geleden - %1$.0f dagen geleden - over %1$.0f dagen - binnen %1$.0f dagen - u - dagen - uren - seconde - minuut - uur - dag - week - seconden - minuten - uren - dagen - weken - m - d - Later vandaag - Morgen - Vandaag - Gisteren - - Verbonden gedurende %1$d s - Handshaking - Verbonden - Verbinding aan het verbreken - Wachten op het loskoppelen - - Gemaakt op: %1$s - Auteur: %1$s - Naam: %1$s - Bestandsnaam: %1$s - Plugin versie: %1$s - Naam: %1$s (%2$s) - Info: %1$s - Toon IOB - Toon gedetailleerde IOB - Toon COB - Toon Delta - Toon gedetailleerde Delta - Toon gemiddelde delta - Toon Telefoon Batterij - Toon Rig batterij - Toon basaalstand - Toon Loop Status - Toon BG - Toon BGI - Toon richtingspijl - Toon tijd geleden - Weeknummer weergeven - Standaard watchface, u kunt op de EXPORT WATCHFACE knop klikken om een sjabloon te genereren - Standaard watchface - Achtergrondafbeelding - Grafieken (BG, basaal, voorspellingslijnen...) - Afbeelding voor de grafiek en achter tekstvelden - Vrije tekst 1 - Vrije tekst 2 - Vrije tekst 3 - Vrije tekst 4 - IOB label of IOB totaal indien gedetailleerd - IOB totaal of (Bolus_IOB|Basal_IOB) indien gedetailleerd - COB label - COB waarde - Korte BG delta - Gemiddelde BG delta (15min) - Batterij Telefoon (%) - Globale loop batterij (%) - Basaal stand - BGI waarde - Tijd (UU:MM of UU:MM:SS) - Uur (UU) - Minuut (MM) - Seconde (SS) - AM of PM - Naam van de dag van de week - Dag (DD) - Weeknummer (ww) - Maand (kort) - Loop status en tijd geleden - Richtingspijl - Minuten geleden voor laatst ontvangen BG - BG waarde - Masker afbeelding over tekst (bijv. uren indicators) - Afbeelding van uren wijzer (analoog horloge) - Afbeelding van minuut wijzer (analoog horloge) - Afbeelding van seconde wijzer (analoog horloge) - diff --git a/app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml b/app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml deleted file mode 100644 index a6024c111f..0000000000 --- a/app-wear-shared/shared/src/main/res/values-no-rNO/strings.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - %1$d min siden - %1$d minutter siden - %1$.1f timer siden - %1$.1f dager siden - %1$.0f dager siden - om %1$.0f dager - om %1$.0f dager - t - dager - timer - sekund - minutt - time - dag - uke - sekunder - minutter - timer - dager - uker - m - d - Senere i dag - I morgen - Idag - I går - - Tilkobler i %1$d sek - Tilkobling verifiseres - Tilkoblet - Frakobler - Venter på frakobling - - Opprettet: %1$s - Laget av: %1$s - Navn: %1$s - Filnavn: %1$s - Plugin-versjon: %1$s - Navn: %1$s (%2$s) - Info: %1$s - Vis IOB - Vis detaljert IOB - Vis COB - Vis Delta - Vis detaljert Delta - Vis Gj. snitt Delta - Vis telefonbatteri - Vis riggens batteri - Vis basalrate - Vis loop status - Vis BS - Vis BS - Vis retningspil - Vis tid siden - Vis ukenummer - Standard klokkebakgrunn, du kan klikke på EKSPORTER KLOKKEBAKGRUNN for å lage en mal - Standard klokkebakgrunn - Bakgrunnsbilde - Grafer (BS, basal, prediksjonslinjer...) - Bilde foran grafer og bak tekstfelter - Fritekst 1 - Fritekst 2 - Fritekst 3 - Fritekst 4 - IOB-merkelapp eller IOB-sum hvis angitt - IOB-sum eller (Bolus_IOB|Basal_IOB) hvis angitt - COB etikett - COB verdi - Kort BS-endring - Gj.snitt BS-endring (15min) - Telefonbatteri (%) - Rig-batteri (%) - Basalrate - BGI verdi - Tid (TT:MM eller TT:MM:SS) - Time (TT) - Minutt (MM) - Sekund (SS) - AM eller PM - Navn på ukedag - Dag (DD) - Ukenummer (ww) - Navn på måned (kort) - Loop-status og tid siden - Retningspil - Minutter siden BS sist ble mottatt - BS-verdi - Bilde foran tekst (urvisere...) - Bilde av timeviser (analog klokke) - Bilde av minuttviser (analog klokke) - Bilde av sekundviser (analog klokke) - diff --git a/app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml b/app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml deleted file mode 100644 index b3eedc562a..0000000000 --- a/app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - %1$d min temu - %1$d minut temu - %1$.1f godz. temu - %1$.1f dni temu - %1$.0f dni temu - za %1$.0f dni - za %1$.0f dni - h - dni - godzin - sekunda - minuta - godzina - dzień - tydzień - sekund - minut - godzin - dni - tygodni - m - d - Dzisiaj, później - Jutro - Dziś - Wczoraj - - Łączenie przez %1$d s - Nawiązywanie połączenia - Połączono - Rozłączanie - Oczekiwanie na rozłączenie - - Utworzono: %1$s - Autor: %1$s - Nazwa: %1$s - Nazwa pliku: %1$s - Wersja wtyczki: %1$s - Nazwa: %1$s (%2$s) - Info: %1$s - Pokaż IOB - Pokaż szczegółowe IOB - Pokaż COB - Pokaż Deltę - Pokaż szczegółowo Deltę - Pokaż Śr. Deltę - Pokaż Baterię Telefonu - Pokaż Baterię Zestawu - Pokaż Dawkę Bazową - Pokaż Status Pętli - Pokaż glikemię - Pokaż BGI - Pokaż Strzałkę Trendu - Pokaż Aktualność - Domyślna tarcza, możesz kliknąć na EXPORTUJ TARCZĘ aby wygenerować szablon - Domyślna Tarcza - Obraz w tle - Wykresy (glikemia, baza, prognozy...) - Obraz przed wykresem i za polami tekstowymi - Wolne pole tekstowe 1 - Wolne pole tekstowe 2 - Wolne pole tekstowe 3 - Wolne pole tekstowe 4 - Etykieta IOB lub suma IOB przy szczegółowym IOB - Suma IOB lub (Bolus_IOB|Basal_IOB) jeśli szczegółowo - Etykieta COB - Wartość COB - Krótka delta glikemii - Średnia delta glikemii (15min) - Bateria telefonu (%) - Globalna bateria pętli (%) - Wartości bazy - Wartość BGI - Czas (HH:MM or HH:MM:SS) - Godzina (HH) - Minuta (MM) - Sekunda (SS) - AM lub PM - Nazwa dnia tygodnia - Dzień (DD) - Nazwa miesiąca (krótka) - Status pętli i aktualność - Strzałka trendu - Minut od ostatniego otrzymania glikemii - Wartość glikemii - Obraz nakładki przed tekstem (tarcze...) - Obraz lub wskazówka godzinowa (Tarcza Analogowa) - Obraz lub wskazówka minutowa (Tarcza Analogowa) - Obraz lub wskazówka sekundowa (Tarcza Analogowa) - diff --git a/app-wear-shared/shared/src/main/res/values-pt-rBR/strings.xml b/app-wear-shared/shared/src/main/res/values-pt-rBR/strings.xml deleted file mode 100644 index 9f5d4585a4..0000000000 --- a/app-wear-shared/shared/src/main/res/values-pt-rBR/strings.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - %1$d min atrás - %1$d minutos atrás - %1$.1fh atrás - %1$d dias atrás - %1$.0f dias atrás - em %1$.0f dias - em %1$.0f dias - h - dias - horas - segundo - minuto - hora - dia - semana - segundos - minutos - horas - dias - semanas - m - d - Hoje, Mais tarde - Amanhã - Hoje - Ontem - - Conectando para %1$d - Cumprimento - Conectado - A desligar - Aguardando a desconexão - - Criado por %1$s - Autor: %1$s - Nome: %1$s - Nome do arquivo: %1$s - Versão do plugin: %1$s - Nome: %1$s (%2$s) - Informações: %1$s - Mostrar IA - Mostrar detalhes da IA - Mostrar CA - Mostrar Delta - Mostrar Delta detalho - Mostrar média de delta - Mostrar bateria do telefone - Mostrar bateria de rig - Mostrar Taxa Basal - Mostrar Status do Loop - Mostrar glicemia - Mostrar BGI - Mostrar seta de tendência - Exibir atrás - Watchface padrão, você pode clicar no botão EXPORTAR WATCHFACE para gerar um modelo - Watchface padrão - diff --git a/app-wear-shared/shared/src/main/res/values-pt-rPT/strings.xml b/app-wear-shared/shared/src/main/res/values-pt-rPT/strings.xml deleted file mode 100644 index 6d5a05175a..0000000000 --- a/app-wear-shared/shared/src/main/res/values-pt-rPT/strings.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - %1$d m atrás - %%1$d minutos atrás - %1$.1f h atrás - %1$.1f dias atrás - %1$.0f dias atrás - em %1$.0f dias - em %1$.0f dias - h - dias - horas - segundo - minuto - hora - dia - semana - segundos - minutos - horas - dias - semanas - m - d - Hoje mais tarde - Amanhã - Hoje - Ontem - - A ligar durante %1$d s - Cumprimento - Ligado - A desconectar - A aguardar a desconexão - - Criado em: %1$s - Autor: %1$s - Nome: %1$s - Nome do ficheiro: %1$s - Versão do plugin: %1$s - Nome: %1$s (%2$s) - Mostrar IA - Mostrar IA detalhada - Mostrar HCA - Mostrar Delta - Mostrar Delta detalhado - Mostrar Delta Médio - Mostrar Bateria Telefone - Mostrar Bateria Equipamento - Mostrar Taxa Basal - Mostrar Estado Loop - Mostrar glicemia - Mostrar IG - Mostrar Seta Direcção - Mostrar Atrás - Watchface padrão, pode clicar no botão EXPORTAR WATCHFACE para gerar um modelo - Watchface padrão - Imagem de fundo - Gráficos (GLIC, basal, linhas de previsão...) - Imagem na frente do gráfico e atrás dos campos de texto - Texto livre 1 - Texto livre 2 - Texto livre 3 - Texto livre 4 - Etiqueta de IA ou Soma IA se detalhada - Soma IA ou (Bolus_IA|Basal_IA) se detalhada - Etiqueta HCA - valor HCA - Delta curto da glicemia - Delta da glicemia média (15min) - Bateria do telefone (%) - Bateria do loop (%) - Taxa Basal - Valor de IG - Horário (HH:MM ou HH:MM:SS) - Hora (HH) - Minuto (MM) - Segundo (SS) - AM ou PM - Nome do Dia da Semana - Dia (DD) - Nome do Mês (curto) - Seta de direção - Minutos desde a recepção do último valor de GLIC - Valor de GLIC - Imagem da capa na frente do texto - Imagem do ponteiro das horas (Relógio Analógico) - Imagem do ponteiro dos minutos (Relógio Analógico) - Imagem do ponteiro dos segundos (Relógio Analógico) - diff --git a/app-wear-shared/shared/src/main/res/values-ro-rRO/strings.xml b/app-wear-shared/shared/src/main/res/values-ro-rRO/strings.xml deleted file mode 100644 index 10ce7af4ed..0000000000 --- a/app-wear-shared/shared/src/main/res/values-ro-rRO/strings.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - %1$d min în urmă - %1$.1f ore în urmă - h - zile - ore - secundă - minut - oră - zi - săptămână - secunde - minute - ore - zile - săptămâni - m - z - - Conectat de %1$d s - Împerechere - Conectat - Se deconectează - Se așteaptă deconectarea - - diff --git a/app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml b/app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml deleted file mode 100644 index c2a98e4c23..0000000000 --- a/app-wear-shared/shared/src/main/res/values-ru-rRU/strings.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - %1$d мин. назад - %1$d минут назад - %1$.1fч. назад - %1$s дн назад - %1$s дн назад - через %1$.0f дн - через %1$.0f дн - ч - дн - час - сек - мин - час - дн - нед - сек - мин - час - дн - нед - м - д - Позднее сегодня - Завтра - Cегодня - Вчера - - Связь установлена за %1$d сек - Подтверждение связи - соединение установлено - разъединение - Ожидание разъединения - - Создано: %1$s - Автор: %1$s - Название: %1$s - Имя файла: %1$s - Версия плагина: %1$s - Информация: %1$s - Отображать IOB - Отображать IOB подробно - Отображать COB - Отображать дельту - Отображать дельту подробно - Отображать усредненную дельту - Отображать заряд телефона - Отображать заряд батареи системы - Отображать базал - Отображать состояние цикла - Отображать ГК - Отображать BGI (ГКИ) - Отображать стрелку тренда - Циферблат по умолчанию, вы можете нажать на EXPORT WATCHFACE чтобы создать шаблон - Циферблат по умолчанию - Фоновое изображение - Графики (ГК, базал, линии прогнозов...) - Метка IOB, или общего IOB для подробного отображения - Общий IOB, или (IOB_болюса|IOB_базы) для подробного отображения - Метка COB - Значение COB - Краткая дельта ГК - Средняя дельта ГК (15 мин) - Заряд телефона (%) - Заряд системы ИПЖ (%) - Базальная скорость - Значение ГКИ - Время (ЧЧ:ММ или ЧЧ:ММ:СС) - Часы (ЧЧ) - Минуты (ММ) - Секунды (СС) - AM или PM - Название дня недели - Число (ДД) - Название месяца (краткое) - Стрелка тренда - Минут с последнего чтения ГК - Значение ГК - Изображение для часовой стрелки (Аналоговые часы) - Изображение для минутной стрелки (Аналоговые часы) - Изображение для секундной стрелки (Аналоговые часы) - diff --git a/app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml b/app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml deleted file mode 100644 index 150cfd10f9..0000000000 --- a/app-wear-shared/shared/src/main/res/values-sk-rSK/strings.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - pred %1$d min - pred %1$d minútami - pred %1$.1f h - Pred %1$.1f dňami - Pred %1$.0f dňami - za %1$.0f dní - za %1$.0f dní - h - dní - hodín - sekunda - minúta - hodina - deň - týždeň - sekúnd - minút - hodín - dní - týždňov - m - d - Neskôr počas dňa - Zajtra - Dnes - včera - - Pripájanie %1$d sek - Overovanie - Pripojené - Odpájanie - Čakám na odpojenie - - Vytvorené: %1$s - Autor: %1$s - Meno: %1$s - Názov súboru: %1$s - Verzia pluginu: %1$s - Meno: %1$s (%2$s) - Informácie: %1$s - Zobraziť IOB - Zobraziť detailný IOB - Zobraziť COB - Zobraziť odchýlku - Zobraziť detailnú odchylku - Zobraziť priemernú odchýlku - Zobraziť stav batérie telefónu - Zobrazovať stav batérie ďalších zariadení - Zobraziť bazál - Zobraziť stav uzavretého okruhu - Zobraziť glykémiu - Zobraziť BGI - Zobraziť trendovú šípku - Zobraziť aktualizované pred - Zobraziť číslo týždňa - Predvolený ciferník. Môžete kliknúť na tlačítko EXPORTOVAŤ CIFERNÍK pre vygenerovanie šablóny - Predvolený ciferník - Obrázok pozadia - Grafy (glykémie, bazály, krivky predpovedí...) - Obrázok pred grafom a za textovými poliami - Voľný text 1 - Voľný text 2 - Voľný text 3 - Voľný text 4 - Štítok IOB alebo suma IOB pri zapnutých detailoch - Suma IOB alebo (Bolus_IOB|Basal_IOB) pri zapnutých detailoch - Štítok COB - Hodnota COB - Krátkodobý priemer - Priemerný rozdiel glykémií (15min) - Batéria telefónu (%) - Batéria uzavretého okruhu (%) - Bazálna dávka - Hodnota BGI - Čas (HH:MM alebo HH:MM:SS) - Hodiny (HH) - Minúty (MM) - Sekundy (SS) - AM alebo PM - Meno dňa v týždni - Deň (DD) - Číslo týždňa (ww) - Názov mesiaca (krátky) - Stav uzavretého okruhu a čas - Trendová šípka - Pred minútami pre poslednú prijatú glykémiu - Hodnota glykémie - Úvodný obrázok pred textom (číselníky...) - Obrázok hodinovej ručičky (Analógové hodinky) - Obrázok minútovej ručičky (Analógové hodinky) - Obrázok sekundovej ručičky (Analógové hodinky) - diff --git a/app-wear-shared/shared/src/main/res/values-sr-rCS/strings.xml b/app-wear-shared/shared/src/main/res/values-sr-rCS/strings.xml deleted file mode 100644 index dc0f7891d7..0000000000 --- a/app-wear-shared/shared/src/main/res/values-sr-rCS/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app-wear-shared/shared/src/main/res/values-sv-rSE/strings.xml b/app-wear-shared/shared/src/main/res/values-sv-rSE/strings.xml deleted file mode 100644 index 5ad7b03058..0000000000 --- a/app-wear-shared/shared/src/main/res/values-sv-rSE/strings.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - %1$.1f tim sedan - %1$.1f dagar sedan - %1$.0f dagar sedan - om %1$.0f dagar - om %1$.0f dagar - h - dagar - timmar - sekund - minut - timme - dag - vecka - sekunder - minuter - timmar - dagar - veckor - m - d - Senare idag - Imorgon - Idag - Igår - - Ansluter (%1$d s) - Anslutningen verifieras - Ansluten - Kopplar från - Väntar på frånkoppling - - Skapad den: %1$s - Skapad av: %1$s - Namn: %1$s - Filnamn: %1$s - Plugin-version: %1$s - Namn: %1$s (%2$s) - Visa IOB - Visa detaljerad IOB - Visa COB - Visa delta - Visa detaljerad delta - Visa genomsnittlig delta - Visa telefonens batterinivå - Visa riggens batterinivå - Visa basaldos - Visa loop-status - Visa BG - Visa BGI - Visa riktningspil - Visa tid sedan - Standard-urtavla - du kan klicka på EXPORTERA URTAVLA för att generera en mall - Standard-urtavla - Bakgrundsbild - Grafer (BG, basal, prognoslinjer...) - Bild framför graf och bakom textfält - Fritext 1 - Fritext 2 - Fritext 3 - Fritext 4 - IOB-etikett. Total IOB om detaljerad - Total IOB. (Bolus_IOB|Basal_IOB) om detaljerad - COB-etikett - COB-värde - Kort BG-delta - Genomsnittligt BG-delta (15min) - Telefonens batterinivå (%) - Globalt loop-batteri (%) - Basaldos - BGI-värde - Tid (HH:MM eller HH:MM:SS) - Timme (HH) - Minut (MM) - Sekund (SS) - AM eller PM - Namn på veckodagen - Dag (DD) - Månadens namn (kort) - Loop status och tid - Visa riktningspil - Minuter sedan senast mottaget BG - BG-värde - Omslagsbild framför text (visare...) - Bild för timvisare (analog klocka) - Bild för minutvisare (analog klocka) - Bild för sekundvisare (analog klocka) - diff --git a/app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml b/app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml deleted file mode 100644 index 0b16af5b0d..0000000000 --- a/app-wear-shared/shared/src/main/res/values-tr-rTR/strings.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - %1$d dak önce - %1$d dakika önce - %1$.1f s önce - %1$.1f gün önce - %1$.0f gün önce - %1$.0f gün içinde - %1$.0f gün içinde - s - gün - saat - saniye - dakika - saat - gün - hafta - saniye - dakika - saat - gün - hafta - d - g - Bugünden sonra - Yarın - Bugün - Dün - - %1$d bağlanıyor - Bağlandı - Bağlandı - Bağlantı kesiliyor - Bağlantının kesilmesi bekleniyor - - Oluşturuldu: %1$s - Yetki: %1$s - İsim: %1$s - Dosya adı: %1$s - Eklenti sürümü: %1$s - İsim: %1$s (%2$s) - Bilgi: %1$s - AİNS Göster - Detalı AİNS göster - AKRB göster - Deltayı göster - Detaylı Delta göster - OrtDelta\'yı Göster - Telefon Pilini Göster - Teçhizat Pilini Göster - Bazal Oranı Göster - Döngü Durumunu Göster - KŞ\'ni göster - KŞ Etkisi Göster - Yön Oku Göster - Önce Göster - Hafta sayısını göster - Varsayılan saat arayüzü; bir şablon oluşturmak için SAAT ARAYÜZÜNÜ DIŞA AKTAR butonuna tıklayabilirsiniz - Varsayılan saat arayüzü - Arka plan görüntüsü - Grafik (KŞ, bazal, tahmin çizgileri...) - Grafiğin önündeki ve metin alanlarının arkasındaki resim - Serbest metin 1 - Serbest metin 2 - Serbest metin 3 - Serbest metin 4 - Ayrıntılıysa AİNS etiketi veya AİNS Toplamı - AİNS Toplamı veya ayrıntılıysa (Bolus_AİNS|Basal_AİNS) - AKRB etiketi - AKRB değeri - Kısa KŞ delta - Ortalama KŞ delta (15dk) - Telefon pili (%) - Global döngü pili (%) - Bazal Oranı - KŞ etkisi değeri - Saat (SS:DD veya SS:DD:SS) - Saat (SS) - Dakika (DD) - Saniye (SS) - AM veya PM - Haftanın gününün adı - Gün (GG) - Hafta sayısı - Ay adı (kısa) - Döngü durumu ve öncesi - Yön Okları - Birkaç dakika önce son alınan KŞ - KŞ değeri - Metnin önündeki kapak resmi (kadranlar...) - Akrep şekli (Analog Saat) - Yelkovan şekli (Analog Saat) - Saniye şekli (Analog Saat) - diff --git a/app-wear-shared/shared/src/main/res/values-uk-rUA/strings.xml b/app-wear-shared/shared/src/main/res/values-uk-rUA/strings.xml deleted file mode 100644 index dc0f7891d7..0000000000 --- a/app-wear-shared/shared/src/main/res/values-uk-rUA/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app-wear-shared/shared/src/main/res/values-zh-rCN/strings.xml b/app-wear-shared/shared/src/main/res/values-zh-rCN/strings.xml deleted file mode 100644 index 484f6371f1..0000000000 --- a/app-wear-shared/shared/src/main/res/values-zh-rCN/strings.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - %1$d 分钟前 - %1$d 分钟前 - %1$.1f 小时前 - %1$.1f 天前 - %1$.0f 天前 - 在 %1$.0f 天内 - 在 %1$.0f 天内 - h - - 小时 - - 分钟 - 小时 - - - - 分钟 - 小时 - - - m - d - 今天稍后 - 明天 - 今天 - 昨天 - - 正在连接 %1$d s - 握手 - 已连接 - 正在断开连接 - 正在等待连接 - - diff --git a/app-wear-shared/shared/src/main/res/values/strings.xml b/app-wear-shared/shared/src/main/res/values/strings.xml deleted file mode 100644 index 6198eb283a..0000000000 --- a/app-wear-shared/shared/src/main/res/values/strings.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - insulin_button_increment_1 - insulin_button_increment_2 - insulin_button_increment_3 - - - %1$d m ago - %1$d minutes ago - %1$.1f h ago - %1$.1f days ago - %1$.0f days ago - in %1$.0f days - in %1$.0f days - h - days - hours - second - minute - hour - day - week - seconds - minutes - hours - days - weeks - m - d - Later today - Tomorrow - Today - Yesterday - - - Connecting for %1$d s - Handshaking - Connected - Disconnecting - Waiting for disconnection - - - Created at: %1$s - Author: %1$s - Name: %1$s - File name: %1$s - Plugin version: %1$s - Name: %1$s (%2$s) - Info: %1$s - %1$s - Show IOB - Show detailed IOB - Show COB - Show Delta - Show detailed Delta - Show AvgDelta - Show Phone Battery - Show Rig Battery - Show Basal Rate - Show Loop Status - Show BG - Show BGI - Show Direction Arrow - Show Ago - Show Week number - Default watchface, you can click on EXPORT WATCHFACE button to generate a template - Default Watchface - Background image - Graphs (BG, basal, prediction lines...) - Image in front of graph and behind text fields - Free text 1 - Free text 2 - Free text 3 - Free text 4 - IOB label or IOB Sum if detailed - IOB Sum or (Bolus_IOB|Basal_IOB) if detailed - COB label - COB value - Short BG delta - Average BG delta (15min) - Phone battery (%) - Global loop battery (%) - Basal Rate - BGI value - Time (HH:MM or HH:MM:SS) - Hour (HH) - Minute (MM) - Second (SS) - AM or PM - Name of day of the week - Day (DD) - Week number (ww) - Month name (short) - Loop status and ago - Direction arrow - Mintutes ago for last received BG - BG value - Cover image in front of text (dials…) - Image of hour hand (Analog Watch) - Image of minute hand (Analog Watch) - Image of second hand (Analog Watch) - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 98fb131cb4..78739798b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -181,7 +181,6 @@ dependencies { // in order to use internet's versions you'd need to enable Jetifier again // https://github.com/nightscout/graphview.git // https://github.com/nightscout/iconify.git - implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared-impl') implementation project(':core:main') implementation project(':core:graphview') diff --git a/core/interfaces/build.gradle b/core/interfaces/build.gradle index 5edc89c128..3cc11c5d58 100644 --- a/core/interfaces/build.gradle +++ b/core/interfaces/build.gradle @@ -9,6 +9,9 @@ plugins { apply from: "${project.rootDir}/core/main/android_dependencies.gradle" apply from: "${project.rootDir}/core/main/android_module_dependencies.gradle" +apply from: "${project.rootDir}/core/main/allopen_dependencies.gradle" +apply from: "${project.rootDir}/core/main/test_dependencies.gradle" +apply from: "${project.rootDir}/core/main/jacoco_global.gradle" android { @@ -19,25 +22,31 @@ android { } dependencies { - // I don't like this low level dependency but it helps - // to move more code to interface module - // database module is compiled longer anyway - // (ResourceHelper, AAPSLogger interface) - implementation project(':app-wear-shared:shared') implementation project(':database:entities') - // implementation project(':core:ns-sdk') api "androidx.appcompat:appcompat:$appcompat_version" + api "androidx.preference:preference-ktx:$preferencektx_version" + api "net.danlew:android.joda:$joda_version" + - // Dagger api "com.google.dagger:dagger:$dagger_version" api "com.google.dagger:dagger-android:$dagger_version" + api "com.google.dagger:dagger-android-support:$dagger_version" + + //Logger + api 'org.slf4j:slf4j-api:1.7.36' // 2.0.x breaks logging. Code change needed + api 'com.github.tony19:logback-android:2.0.0' + + api "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinx_serialization_version" + api "org.jetbrains.kotlinx:kotlinx-serialization-protobuf:$kotlinx_serialization_version" + api "com.caverock:androidsvg:$caverock_androidsvg_version" + api "org.apache.commons:commons-lang3:$commonslang3_version" + + //RxBus + api "io.reactivex.rxjava3:rxjava:$rxjava_version" + api "io.reactivex.rxjava3:rxkotlin:$rxkotlin_version" + api "io.reactivex.rxjava3:rxandroid:$rxandroid_version" // WorkerClasses api "androidx.work:work-runtime-ktx:$work_version" -} - -allOpen { - // allows mocking for classes w/o directly opening them for release builds - annotation 'info.nightscout.interfaces.annotations.InterfacesOpenForTesting' } \ No newline at end of file diff --git a/app-wear-shared/shared/src/debug/java/info/nightscout/annotations/OpenForTesting.kt b/core/interfaces/src/debug/java/info/nightscout/annotations/OpenForTesting.kt similarity index 100% rename from app-wear-shared/shared/src/debug/java/info/nightscout/annotations/OpenForTesting.kt rename to core/interfaces/src/debug/java/info/nightscout/annotations/OpenForTesting.kt diff --git a/core/interfaces/src/debug/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt b/core/interfaces/src/debug/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt deleted file mode 100644 index e7e07b1a4b..0000000000 --- a/core/interfaces/src/debug/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt +++ /dev/null @@ -1,15 +0,0 @@ -package info.nightscout.interfaces.annotations - -/** - * This is the actual annotation that makes the class open. Don't use it directly, only through [InterfacesOpenForTesting] - * which has a NOOP replacement in production. - */ -@Target(AnnotationTarget.ANNOTATION_CLASS) -annotation class InterfacesOpenClass - -/** - * Annotate a class with [InterfacesOpenForTesting] if it should be extendable for testing. - */ -@InterfacesOpenClass -@Target(AnnotationTarget.CLASS) -annotation class InterfacesOpenForTesting \ No newline at end of file diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/interfaces/GlucoseUnit.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/GlucoseUnit.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/interfaces/GlucoseUnit.kt rename to core/interfaces/src/main/java/info/nightscout/interfaces/GlucoseUnit.kt diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/plugin/PluginDescription.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/plugin/PluginDescription.kt index af5418d15c..166f009c0d 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/plugin/PluginDescription.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/plugin/PluginDescription.kt @@ -1,8 +1,8 @@ package info.nightscout.interfaces.plugin -import info.nightscout.interfaces.annotations.InterfacesOpenForTesting +import info.nightscout.annotations.OpenForTesting -@InterfacesOpenForTesting +@OpenForTesting class PluginDescription { var mainType = PluginType.GENERAL diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/AapsSchedulers.kt b/core/interfaces/src/main/java/info/nightscout/rx/AapsSchedulers.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/AapsSchedulers.kt rename to core/interfaces/src/main/java/info/nightscout/rx/AapsSchedulers.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/bus/RxBus.kt b/core/interfaces/src/main/java/info/nightscout/rx/bus/RxBus.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/bus/RxBus.kt rename to core/interfaces/src/main/java/info/nightscout/rx/bus/RxBus.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/Event.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/Event.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/Event.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/Event.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAcceptOpenLoopChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventAcceptOpenLoopChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAcceptOpenLoopChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventAcceptOpenLoopChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAppExit.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventAppExit.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAppExit.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventAppExit.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAppInitialized.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventAppInitialized.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAppInitialized.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventAppInitialized.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAutosensCalculationFinished.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventAutosensCalculationFinished.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventAutosensCalculationFinished.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventAutosensCalculationFinished.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventBTChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventBTChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventBTChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventBTChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventBucketedDataCreated.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventBucketedDataCreated.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventBucketedDataCreated.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventBucketedDataCreated.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventChargingState.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventChargingState.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventChargingState.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventChargingState.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventConfigBuilderChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventConfigBuilderChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventConfigBuilderChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventConfigBuilderChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventCustomActionsChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventCustomActionsChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventCustomActionsChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventCustomActionsChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventCustomCalculationFinished.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventCustomCalculationFinished.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventCustomCalculationFinished.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventCustomCalculationFinished.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDanaRSyncStatus.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventDanaRSyncStatus.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDanaRSyncStatus.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventDanaRSyncStatus.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDeviceStatusChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventDeviceStatusChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDeviceStatusChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventDeviceStatusChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDiaconnG8PumpLogReset.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventDiaconnG8PumpLogReset.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDiaconnG8PumpLogReset.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventDiaconnG8PumpLogReset.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDismissBolusProgressIfRunning.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventDismissBolusProgressIfRunning.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDismissBolusProgressIfRunning.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventDismissBolusProgressIfRunning.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDismissNotification.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventDismissNotification.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventDismissNotification.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventDismissNotification.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventEffectiveProfileSwitchChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventEffectiveProfileSwitchChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventEffectiveProfileSwitchChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventEffectiveProfileSwitchChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventExtendedBolusChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventExtendedBolusChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventExtendedBolusChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventExtendedBolusChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventFoodDatabaseChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventFoodDatabaseChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventFoodDatabaseChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventFoodDatabaseChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventInitializationChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventInitializationChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventInitializationChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventInitializationChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventLocalProfileChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventLocalProfileChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventLocalProfileChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventLocalProfileChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventLoop.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventLoop.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventLoop.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventLoop.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventLoopUpdateGui.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventLoopUpdateGui.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventLoopUpdateGui.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventLoopUpdateGui.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventMobileDataToWear.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventMobileDataToWear.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventMobileDataToWear.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventMobileDataToWear.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventMobileToWear.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventMobileToWear.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventMobileToWear.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventMobileToWear.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNSClientNewLog.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventNSClientNewLog.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNSClientNewLog.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventNSClientNewLog.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNSClientRestart.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventNSClientRestart.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNSClientRestart.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventNSClientRestart.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNetworkChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventNetworkChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNetworkChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventNetworkChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNewBG.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventNewBG.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNewBG.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventNewBG.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNewHistoryData.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventNewHistoryData.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNewHistoryData.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventNewHistoryData.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNewOpenLoopNotification.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventNewOpenLoopNotification.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNewOpenLoopNotification.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventNewOpenLoopNotification.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNtpStatus.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventNtpStatus.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventNtpStatus.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventNtpStatus.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventOfflineChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventOfflineChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventOfflineChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventOfflineChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventOverviewBolusProgress.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventOverviewBolusProgress.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventOverviewBolusProgress.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventOverviewBolusProgress.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventPreferenceChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventPreferenceChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventPreferenceChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventPreferenceChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventProfileStoreChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventProfileStoreChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventProfileStoreChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventProfileStoreChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventProfileSwitchChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventProfileSwitchChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventProfileSwitchChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventProfileSwitchChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventPumpStatusChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventPumpStatusChanged.kt similarity index 97% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventPumpStatusChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventPumpStatusChanged.kt index 0cf7a63171..84160e7b5d 100644 --- a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventPumpStatusChanged.kt +++ b/core/interfaces/src/main/java/info/nightscout/rx/events/EventPumpStatusChanged.kt @@ -1,7 +1,7 @@ package info.nightscout.rx.events import android.content.Context -import info.nightscout.shared.R +import info.nightscout.interfaces.R class EventPumpStatusChanged : EventStatus { diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventQueueChanged.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventQueueChanged.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventQueueChanged.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventQueueChanged.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventRebuildTabs.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventRebuildTabs.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventRebuildTabs.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventRebuildTabs.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventRefreshButtonState.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventRefreshButtonState.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventRefreshButtonState.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventRefreshButtonState.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventRefreshOverview.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventRefreshOverview.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventRefreshOverview.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventRefreshOverview.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventSWRLStatus.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventSWRLStatus.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventSWRLStatus.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventSWRLStatus.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventSWSyncStatus.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventSWSyncStatus.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventSWSyncStatus.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventSWSyncStatus.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventSWUpdate.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventSWUpdate.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventSWUpdate.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventSWUpdate.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventScale.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventScale.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventScale.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventScale.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventStatus.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventStatus.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventStatus.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventStatus.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTempBasalChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventTempBasalChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTempBasalChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventTempBasalChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTempTargetChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventTempTargetChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTempTargetChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventTempTargetChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventThemeSwitch.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventThemeSwitch.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventThemeSwitch.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventThemeSwitch.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTherapyEventChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventTherapyEventChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTherapyEventChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventTherapyEventChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTreatmentChange.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventTreatmentChange.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventTreatmentChange.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventTreatmentChange.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateGui.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateGui.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateGui.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateGui.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewCalcProgress.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewCalcProgress.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewCalcProgress.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewCalcProgress.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewGraph.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewGraph.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewGraph.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewGraph.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewIobCob.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewIobCob.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewIobCob.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewIobCob.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewSensitivity.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewSensitivity.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventUpdateOverviewSensitivity.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventUpdateOverviewSensitivity.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearCwfExported.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventWearCwfExported.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearCwfExported.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventWearCwfExported.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearDataToMobile.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventWearDataToMobile.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearDataToMobile.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventWearDataToMobile.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearToMobile.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventWearToMobile.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearToMobile.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventWearToMobile.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearUpdateGui.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventWearUpdateGui.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventWearUpdateGui.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventWearUpdateGui.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventXdripNewLog.kt b/core/interfaces/src/main/java/info/nightscout/rx/events/EventXdripNewLog.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/events/EventXdripNewLog.kt rename to core/interfaces/src/main/java/info/nightscout/rx/events/EventXdripNewLog.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/interfaces/L.kt b/core/interfaces/src/main/java/info/nightscout/rx/interfaces/L.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/interfaces/L.kt rename to core/interfaces/src/main/java/info/nightscout/rx/interfaces/L.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/interfaces/LogElement.kt b/core/interfaces/src/main/java/info/nightscout/rx/interfaces/LogElement.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/interfaces/LogElement.kt rename to core/interfaces/src/main/java/info/nightscout/rx/interfaces/LogElement.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLogger.kt b/core/interfaces/src/main/java/info/nightscout/rx/logging/AAPSLogger.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/AAPSLogger.kt rename to core/interfaces/src/main/java/info/nightscout/rx/logging/AAPSLogger.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/BundleLogger.kt b/core/interfaces/src/main/java/info/nightscout/rx/logging/BundleLogger.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/BundleLogger.kt rename to core/interfaces/src/main/java/info/nightscout/rx/logging/BundleLogger.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/LTag.kt b/core/interfaces/src/main/java/info/nightscout/rx/logging/LTag.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/logging/LTag.kt rename to core/interfaces/src/main/java/info/nightscout/rx/logging/LTag.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/weardata/CustomWatchfaceFormat.kt b/core/interfaces/src/main/java/info/nightscout/rx/weardata/CustomWatchfaceFormat.kt similarity index 99% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/weardata/CustomWatchfaceFormat.kt rename to core/interfaces/src/main/java/info/nightscout/rx/weardata/CustomWatchfaceFormat.kt index dc659d29f5..a7f56a4e01 100644 --- a/app-wear-shared/shared/src/main/java/info/nightscout/rx/weardata/CustomWatchfaceFormat.kt +++ b/core/interfaces/src/main/java/info/nightscout/rx/weardata/CustomWatchfaceFormat.kt @@ -8,7 +8,7 @@ import android.graphics.drawable.Drawable import android.graphics.drawable.PictureDrawable import androidx.annotation.StringRes import com.caverock.androidsvg.SVG -import info.nightscout.shared.R +import info.nightscout.interfaces.R import kotlinx.serialization.Serializable import org.json.JSONObject import java.io.BufferedOutputStream diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/rx/weardata/EventData.kt b/core/interfaces/src/main/java/info/nightscout/rx/weardata/EventData.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/rx/weardata/EventData.kt rename to core/interfaces/src/main/java/info/nightscout/rx/weardata/EventData.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/SafeParse.kt b/core/interfaces/src/main/java/info/nightscout/shared/SafeParse.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/SafeParse.kt rename to core/interfaces/src/main/java/info/nightscout/shared/SafeParse.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/extensions/UIUtils.kt b/core/interfaces/src/main/java/info/nightscout/shared/extensions/UIUtils.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/extensions/UIUtils.kt rename to core/interfaces/src/main/java/info/nightscout/shared/extensions/UIUtils.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/interfaces/ProfileUtil.kt b/core/interfaces/src/main/java/info/nightscout/shared/interfaces/ProfileUtil.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/interfaces/ProfileUtil.kt rename to core/interfaces/src/main/java/info/nightscout/shared/interfaces/ProfileUtil.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/interfaces/ResourceHelper.kt b/core/interfaces/src/main/java/info/nightscout/shared/interfaces/ResourceHelper.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/interfaces/ResourceHelper.kt rename to core/interfaces/src/main/java/info/nightscout/shared/interfaces/ResourceHelper.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/sharedPreferences/SP.kt b/core/interfaces/src/main/java/info/nightscout/shared/sharedPreferences/SP.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/sharedPreferences/SP.kt rename to core/interfaces/src/main/java/info/nightscout/shared/sharedPreferences/SP.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/DateUtil.kt b/core/interfaces/src/main/java/info/nightscout/shared/utils/DateUtil.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/DateUtil.kt rename to core/interfaces/src/main/java/info/nightscout/shared/utils/DateUtil.kt diff --git a/app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/T.kt b/core/interfaces/src/main/java/info/nightscout/shared/utils/T.kt similarity index 100% rename from app-wear-shared/shared/src/main/java/info/nightscout/shared/utils/T.kt rename to core/interfaces/src/main/java/info/nightscout/shared/utils/T.kt diff --git a/core/interfaces/src/main/res/values/strings.xml b/core/interfaces/src/main/res/values/strings.xml index 983f5ad355..25af997279 100644 --- a/core/interfaces/src/main/res/values/strings.xml +++ b/core/interfaces/src/main/res/values/strings.xml @@ -3,4 +3,104 @@ Pump driver changed. + insulin_button_increment_1 + insulin_button_increment_2 + insulin_button_increment_3 + + + %1$d m ago + %1$d minutes ago + %1$.1f h ago + %1$.1f days ago + %1$.0f days ago + in %1$.0f days + in %1$.0f days + h + days + hours + second + minute + hour + day + week + seconds + minutes + hours + days + weeks + m + d + Later today + Tomorrow + Today + Yesterday + + + Connecting for %1$d s + Handshaking + Connected + Disconnecting + Waiting for disconnection + + + Created at: %1$s + Author: %1$s + Name: %1$s + File name: %1$s + Plugin version: %1$s + Name: %1$s (%2$s) + Info: %1$s + %1$s + Show IOB + Show detailed IOB + Show COB + Show Delta + Show detailed Delta + Show AvgDelta + Show Phone Battery + Show Rig Battery + Show Basal Rate + Show Loop Status + Show BG + Show BGI + Show Direction Arrow + Show Ago + Show Week number + Default watchface, you can click on EXPORT WATCHFACE button to generate a template + Default Watchface + Background image + Graphs (BG, basal, prediction lines...) + Image in front of graph and behind text fields + Free text 1 + Free text 2 + Free text 3 + Free text 4 + IOB label or IOB Sum if detailed + IOB Sum or (Bolus_IOB|Basal_IOB) if detailed + COB label + COB value + Short BG delta + Average BG delta (15min) + Phone battery (%) + Global loop battery (%) + Basal Rate + BGI value + Time (HH:MM or HH:MM:SS) + Hour (HH) + Minute (MM) + Second (SS) + AM or PM + Name of day of the week + Day (DD) + Week number (ww) + Month name (short) + Loop status and ago + Direction arrow + Mintutes ago for last received BG + BG value + Cover image in front of text (dials…) + Image of hour hand (Analog Watch) + Image of minute hand (Analog Watch) + Image of second hand (Analog Watch) + diff --git a/app-wear-shared/shared/src/main/res/values/wear_paths.xml b/core/interfaces/src/main/res/values/wear_paths.xml similarity index 100% rename from app-wear-shared/shared/src/main/res/values/wear_paths.xml rename to core/interfaces/src/main/res/values/wear_paths.xml diff --git a/app-wear-shared/shared/src/release/java/info/nightscout/annotations/OpenForTesting.kt b/core/interfaces/src/release/java/info/nightscout/annotations/OpenForTesting.kt similarity index 100% rename from app-wear-shared/shared/src/release/java/info/nightscout/annotations/OpenForTesting.kt rename to core/interfaces/src/release/java/info/nightscout/annotations/OpenForTesting.kt diff --git a/core/interfaces/src/release/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt b/core/interfaces/src/release/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt deleted file mode 100644 index 9f92faa1f7..0000000000 --- a/core/interfaces/src/release/java/info/nightscout/interfaces/annotations/InterfacesOpenForTesting.kt +++ /dev/null @@ -1,8 +0,0 @@ -package info.nightscout.interfaces.annotations - -/** - * Annotate a class with InterfacesOpenForTestingif it should be extendable for testing. - * In production the class remains final. - */ -@Target(AnnotationTarget.CLASS) -annotation class InterfacesOpenForTesting \ No newline at end of file diff --git a/app-wear-shared/shared/src/test/java/info/nightscout/rx/RxSchedulerRule.kt b/core/interfaces/src/test/java/info/nightscout/rx/RxSchedulerRule.kt similarity index 100% rename from app-wear-shared/shared/src/test/java/info/nightscout/rx/RxSchedulerRule.kt rename to core/interfaces/src/test/java/info/nightscout/rx/RxSchedulerRule.kt diff --git a/app-wear-shared/shared/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt b/core/interfaces/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt similarity index 100% rename from app-wear-shared/shared/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt rename to core/interfaces/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt diff --git a/app-wear-shared/shared/src/test/java/info/nightscout/shared/SafeParseTest.kt b/core/interfaces/src/test/java/info/nightscout/shared/SafeParseTest.kt similarity index 100% rename from app-wear-shared/shared/src/test/java/info/nightscout/shared/SafeParseTest.kt rename to core/interfaces/src/test/java/info/nightscout/shared/SafeParseTest.kt diff --git a/core/main/build.gradle b/core/main/build.gradle index cc5c7b7392..4f27351da0 100644 --- a/core/main/build.gradle +++ b/core/main/build.gradle @@ -13,7 +13,6 @@ apply from: "${project.rootDir}/core/main/test_dependencies.gradle" apply from: "${project.rootDir}/core/main/jacoco_global.gradle" dependencies { - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':core:graphview') implementation project(':core:interfaces') diff --git a/core/main/src/main/java/info/nightscout/core/graph/data/EffectiveProfileSwitchDataPoint.kt b/core/main/src/main/java/info/nightscout/core/graph/data/EffectiveProfileSwitchDataPoint.kt index 6588a0d24e..339ffa097e 100644 --- a/core/main/src/main/java/info/nightscout/core/graph/data/EffectiveProfileSwitchDataPoint.kt +++ b/core/main/src/main/java/info/nightscout/core/graph/data/EffectiveProfileSwitchDataPoint.kt @@ -19,7 +19,7 @@ class EffectiveProfileSwitchDataPoint( get() = "" + (if (data.originalPercentage != 100) "${data.originalPercentage}%" else "") + (if (data.originalPercentage != 100 && data.originalTimeshift != 0L) "," else "") + - (if (data.originalTimeshift != 0L) (T.msecs(data.originalTimeshift).hours().toString() + rh.gs(info.nightscout.shared.R.string.shorthour)) else "") + (if (data.originalTimeshift != 0L) (T.msecs(data.originalTimeshift).hours().toString() + rh.gs(info.nightscout.interfaces.R.string.shorthour)) else "") override val duration = 0L override val shape = PointsWithLabelGraphSeries.Shape.PROFILE override val size = 2f diff --git a/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt b/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt index e8707962c1..472a062f98 100644 --- a/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt +++ b/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt @@ -89,7 +89,7 @@ class DateUtilTest : TestBase() { } */ @Test fun timeFrameStringTest() { - `when`(rh.gs(info.nightscout.shared.R.string.shorthour)).thenReturn("h") + `when`(rh.gs(info.nightscout.interfaces.R.string.shorthour)).thenReturn("h") Assertions.assertEquals("(1h 1')", DateUtil(context).timeFrameString(T.hours(1).msecs() + T.mins(1).msecs(), rh)) } } diff --git a/core/validators/build.gradle b/core/validators/build.gradle index c96c66abe0..a0233c2a1c 100644 --- a/core/validators/build.gradle +++ b/core/validators/build.gradle @@ -16,7 +16,7 @@ android { dependencies { - implementation project(':app-wear-shared:shared') + implementation project(':core:interfaces') implementation project(':app-wear-shared:shared-impl') api "com.google.android.material:material:$material_version" } \ No newline at end of file diff --git a/implementation/build.gradle b/implementation/build.gradle index 177a3b439f..51b6af396d 100644 --- a/implementation/build.gradle +++ b/implementation/build.gradle @@ -15,7 +15,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':database:impl') implementation project(':core:main') diff --git a/implementation/src/main/java/info/nightscout/implementation/TranslatorImpl.kt b/implementation/src/main/java/info/nightscout/implementation/TranslatorImpl.kt index 6d6fa99f61..9188069b78 100644 --- a/implementation/src/main/java/info/nightscout/implementation/TranslatorImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/TranslatorImpl.kt @@ -107,10 +107,10 @@ class TranslatorImpl @Inject internal constructor( override fun translate(units: ValueWithUnit?): String = when (units) { is ValueWithUnit.Gram -> rh.gs(info.nightscout.core.ui.R.string.shortgram) - is ValueWithUnit.Hour -> rh.gs(info.nightscout.shared.R.string.shorthour) + is ValueWithUnit.Hour -> rh.gs(info.nightscout.interfaces.R.string.shorthour) is ValueWithUnit.Insulin -> rh.gs(info.nightscout.core.ui.R.string.insulin_unit_shortname) is ValueWithUnit.Mgdl -> rh.gs(info.nightscout.core.ui.R.string.mgdl) - is ValueWithUnit.Minute -> rh.gs(info.nightscout.shared.R.string.shortminute) + is ValueWithUnit.Minute -> rh.gs(info.nightscout.interfaces.R.string.shortminute) is ValueWithUnit.Mmoll -> rh.gs(info.nightscout.core.ui.R.string.mmol) is ValueWithUnit.Percent -> rh.gs(info.nightscout.core.ui.R.string.shortpercent) is ValueWithUnit.UnitPerHour -> rh.gs(info.nightscout.core.ui.R.string.profile_ins_units_per_hour) diff --git a/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt b/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt index bd68592865..8b6ca19cdf 100644 --- a/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/stats/TddCalculatorImpl.kt @@ -164,7 +164,7 @@ class TddCalculatorImpl @Inject constructor( } todayTdd?.let { layout.addView(TextView(context).apply { - text = rh.gs(info.nightscout.shared.R.string.today) + text = rh.gs(info.nightscout.interfaces.R.string.today) setTypeface(typeface, Typeface.BOLD) gravity = Gravity.CENTER_HORIZONTAL setTextAppearance(android.R.style.TextAppearance_Material_Medium) diff --git a/implementation/src/main/java/info/nightscout/implementation/stats/TirImpl.kt b/implementation/src/main/java/info/nightscout/implementation/stats/TirImpl.kt index b57ebe56ee..4eed035b41 100644 --- a/implementation/src/main/java/info/nightscout/implementation/stats/TirImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/stats/TirImpl.kt @@ -69,7 +69,7 @@ class TirImpl(override val date: Long, override val lowThreshold: Double, overri val lp = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f) row.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT) row.gravity = Gravity.CENTER_HORIZONTAL - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = "%02d".format(days) + " " + rh.gs(info.nightscout.shared.R.string.days) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = "%02d".format(days) + " " + rh.gs(info.nightscout.interfaces.R.string.days) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(info.nightscout.core.ui.R.string.formatPercent, belowPct()) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.core.ui.R.string.formatPercent, inRangePct()) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(info.nightscout.core.ui.R.string.formatPercent, abovePct()) }) diff --git a/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt b/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt index 85f711a224..ce57b0bdc2 100644 --- a/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt +++ b/implementation/src/main/java/info/nightscout/implementation/stats/TotalDailyDoseExtension.kt @@ -54,7 +54,7 @@ fun TotalDailyDose.toTableRow(context: Context, rh: ResourceHelper, days: Int, i if ((total.isNaN() || bolusAmount.isNaN() || basalAmount.isNaN() || carbs.isNaN()).not()) { row.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT) row.gravity = Gravity.CENTER_HORIZONTAL - row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = "%02d".format(days) + " " + rh.gs(info.nightscout.shared.R.string.days) }) + row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = "%02d".format(days) + " " + rh.gs(info.nightscout.interfaces.R.string.days) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, total) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, bolusAmount) }) row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(info.nightscout.core.ui.R.string.format_insulin_units1, basalAmount) }) diff --git a/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt b/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt index 6a2c4fe9d1..00ac6dd1c7 100644 --- a/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/userEntry/UserEntryPresentationHelperImpl.kt @@ -170,8 +170,8 @@ class UserEntryPresentationHelperImpl @Inject constructor( csvString(info.nightscout.core.ui.R.string.insulin_unit_shortname), csvString(info.nightscout.core.ui.R.string.profile_ins_units_per_hour), csvString(info.nightscout.core.ui.R.string.shortpercent), - csvString(info.nightscout.shared.R.string.shorthour), - csvString(info.nightscout.shared.R.string.shortminute), + csvString(info.nightscout.interfaces.R.string.shorthour), + csvString(info.nightscout.interfaces.R.string.shortminute), csvString(info.nightscout.core.ui.R.string.ue_none) ) + "\n" diff --git a/insight/build.gradle b/insight/build.gradle index 10c064743f..78ebd94579 100644 --- a/insight/build.gradle +++ b/insight/build.gradle @@ -30,7 +30,6 @@ dependencies { implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') - implementation project(':app-wear-shared:shared') implementation project(':pump:pump-common') api "androidx.room:room-ktx:$room_version" diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightFragment.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightFragment.java index 07064764eb..cf0392107d 100644 --- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightFragment.java +++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightFragment.java @@ -221,7 +221,7 @@ public class LocalInsightFragment extends DaggerFragment implements View.OnClick string = info.nightscout.core.ui.R.string.connecting; break; case CONNECTED: - string = info.nightscout.shared.R.string.connected; + string = info.nightscout.interfaces.R.string.connected; break; case RECOVERING: string = R.string.recovering; diff --git a/plugins/aps/build.gradle b/plugins/aps/build.gradle index 633891e71c..e24cfbe42a 100644 --- a/plugins/aps/build.gradle +++ b/plugins/aps/build.gradle @@ -15,7 +15,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':database:impl') implementation project(':core:main') diff --git a/plugins/automation/build.gradle b/plugins/automation/build.gradle index c41a3d430d..2fecd1f02e 100644 --- a/plugins/automation/build.gradle +++ b/plugins/automation/build.gradle @@ -17,14 +17,13 @@ android { dependencies { implementation project(':core:graphview') + implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') implementation project(':core:validators') implementation project(':database:entities') implementation project(':database:impl') - implementation project(':app-wear-shared:shared') - implementation project(':core:interfaces') testImplementation project(':app-wear-shared:shared-tests') testImplementation project(':implementation') diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt index d784811c5b..2b0c75b3b2 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBolusAgo.kt @@ -83,7 +83,7 @@ class TriggerBolusAgo(injector: HasAndroidInjector) : Trigger(injector) { LayoutBuilder() .add(StaticLabel(rh, R.string.lastboluslabel, this)) .add(comparator) - .add(LabelWithElement(rh, rh.gs(R.string.lastboluslabel) + ": ", rh.gs(info.nightscout.shared.R.string.unit_minutes), minutesAgo)) + .add(LabelWithElement(rh, rh.gs(R.string.lastboluslabel) + ": ", rh.gs(info.nightscout.interfaces.R.string.unit_minutes), minutesAgo)) .build(root) } } \ No newline at end of file diff --git a/plugins/configuration/build.gradle b/plugins/configuration/build.gradle index e407d97d9e..f052fe6843 100644 --- a/plugins/configuration/build.gradle +++ b/plugins/configuration/build.gradle @@ -17,7 +17,6 @@ android { dependencies { - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':core:interfaces') implementation project(':core:main') diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/CustomWatchfaceImportListActivity.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/CustomWatchfaceImportListActivity.kt index 6a4bbc8b2a..f1f5727a53 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/CustomWatchfaceImportListActivity.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/maintenance/activities/CustomWatchfaceImportListActivity.kt @@ -93,7 +93,7 @@ class CustomWatchfaceImportListActivity: TranslatedDaggerAppCompatActivity() { val drawable = customWatchfaceFile.resDatas[ResFileMap.CUSTOM_WATCHFACE.fileName]?.toDrawable(resources) with(holder.customWatchfaceImportListItemBinding) { val fileName = metadata[CWF_FILENAME]?.let { "$it${ZipWatchfaceFormat.CWF_EXTENTION}"} ?:"" - filelistName.text = rh.gs(info.nightscout.shared.R.string.metadata_wear_import_filename, fileName) + filelistName.text = rh.gs(info.nightscout.interfaces.R.string.metadata_wear_import_filename, fileName) filelistName.tag = customWatchfaceFile customWatchface.setImageDrawable(drawable) customName.text = rh.gs(CWF_NAME.label, metadata[CWF_NAME]) diff --git a/plugins/constraints/build.gradle b/plugins/constraints/build.gradle index 05ab1fb88a..119eb33d88 100644 --- a/plugins/constraints/build.gradle +++ b/plugins/constraints/build.gradle @@ -16,7 +16,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:ui') diff --git a/plugins/insulin/build.gradle b/plugins/insulin/build.gradle index 74d0c33bc4..31c8144ae0 100644 --- a/plugins/insulin/build.gradle +++ b/plugins/insulin/build.gradle @@ -16,7 +16,6 @@ android { dependencies { - implementation project(':app-wear-shared:shared') implementation project(':core:graphview') implementation project(':core:interfaces') implementation project(':core:main') diff --git a/plugins/main/build.gradle b/plugins/main/build.gradle index dfd942ee1a..3f14652c4c 100644 --- a/plugins/main/build.gradle +++ b/plugins/main/build.gradle @@ -15,7 +15,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared-impl') implementation project(':database:entities') implementation project(':database:impl') diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/ui/StatusLightHandler.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/ui/StatusLightHandler.kt index b55d8710aa..b499553e72 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/ui/StatusLightHandler.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/ui/StatusLightHandler.kt @@ -146,11 +146,11 @@ class StatusLightHandler @Inject constructor( } private fun TherapyEvent.age(useShortText: Boolean, rh: ResourceHelper, dateUtil: DateUtil): String { val diff = dateUtil.computeDiff(timestamp, System.currentTimeMillis()) - var days = " " + rh.gs(info.nightscout.shared.R.string.days) + " " - var hours = " " + rh.gs(info.nightscout.shared.R.string.hours) + " " + var days = " " + rh.gs(info.nightscout.interfaces.R.string.days) + " " + var hours = " " + rh.gs(info.nightscout.interfaces.R.string.hours) + " " if (useShortText) { - days = rh.gs(info.nightscout.shared.R.string.shortday) - hours = rh.gs(info.nightscout.shared.R.string.shorthour) + days = rh.gs(info.nightscout.interfaces.R.string.shortday) + hours = rh.gs(info.nightscout.interfaces.R.string.shorthour) } return diff[TimeUnit.DAYS].toString() + days + diff[TimeUnit.HOURS] + hours } diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt index 2f9e46f04b..fbb7e0701a 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt @@ -750,8 +750,8 @@ class DataHandlerMobile @Inject constructor( bolusPercentage = sp.getInt(info.nightscout.core.utils.R.string.key_boluswizard_percentage, 100), maxCarbs = sp.getInt(info.nightscout.core.utils.R.string.key_treatmentssafety_maxcarbs, 48), maxBolus = sp.getDouble(info.nightscout.core.utils.R.string.key_treatmentssafety_maxbolus, 3.0), - insulinButtonIncrement1 = sp.getDouble(info.nightscout.shared.R.string.key_insulin_button_increment_1, Constants.INSULIN_PLUS1_DEFAULT), - insulinButtonIncrement2 = sp.getDouble(info.nightscout.shared.R.string.key_insulin_button_increment_2, Constants.INSULIN_PLUS2_DEFAULT), + insulinButtonIncrement1 = sp.getDouble(info.nightscout.interfaces.R.string.key_insulin_button_increment_1, Constants.INSULIN_PLUS1_DEFAULT), + insulinButtonIncrement2 = sp.getDouble(info.nightscout.interfaces.R.string.key_insulin_button_increment_2, Constants.INSULIN_PLUS2_DEFAULT), carbsButtonIncrement1 = sp.getInt(info.nightscout.core.utils.R.string.key_carbs_button_increment_1, Constants.CARBS_FAV1_DEFAULT), carbsButtonIncrement2 = sp.getInt(info.nightscout.core.utils.R.string.key_carbs_button_increment_2, Constants.CARBS_FAV2_DEFAULT) ) diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt index 5ac3495db4..b868b87f72 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt @@ -77,8 +77,8 @@ class DataLayerListenerServiceMobile : WearableListenerService() { private val disposable = CompositeDisposable() - private val rxPath get() = getString(info.nightscout.shared.R.string.path_rx_bridge) - private val rxDataPath get() = getString(info.nightscout.shared.R.string.path_rx_data_bridge) + private val rxPath get() = getString(info.nightscout.interfaces.R.string.path_rx_bridge) + private val rxDataPath get() = getString(info.nightscout.interfaces.R.string.path_rx_data_bridge) @ExperimentalSerializationApi override fun onCreate() { AndroidInjection.inject(this) diff --git a/plugins/sensitivity/build.gradle b/plugins/sensitivity/build.gradle index 48544e8cd5..451ec3783e 100644 --- a/plugins/sensitivity/build.gradle +++ b/plugins/sensitivity/build.gradle @@ -16,7 +16,6 @@ android { dependencies { - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':database:impl') implementation project(':core:interfaces') diff --git a/plugins/smoothing/build.gradle b/plugins/smoothing/build.gradle index 8a10643212..aab84d1216 100644 --- a/plugins/smoothing/build.gradle +++ b/plugins/smoothing/build.gradle @@ -17,7 +17,6 @@ android { dependencies { implementation project(':database:entities') - implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') implementation project(':core:ui') } \ No newline at end of file diff --git a/plugins/source/build.gradle b/plugins/source/build.gradle index 92d8f31d79..962f225c5d 100644 --- a/plugins/source/build.gradle +++ b/plugins/source/build.gradle @@ -16,7 +16,6 @@ android { dependencies { - implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared-impl') implementation project(':database:entities') implementation project(':database:impl') diff --git a/plugins/sync/build.gradle b/plugins/sync/build.gradle index 63f799cc9c..e097e626a7 100644 --- a/plugins/sync/build.gradle +++ b/plugins/sync/build.gradle @@ -15,7 +15,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared-impl') implementation project(':database:entities') implementation project(':database:impl') diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt index 83b32ad668..bf0b62f41c 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt @@ -158,12 +158,12 @@ class NSClientV3Plugin @Inject constructor( when { sp.getBoolean(R.string.key_ns_paused, false) -> rh.gs(info.nightscout.core.ui.R.string.paused) isAllowed.not() -> blockingReason - sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_use_ws, true) && wsConnected -> "WS: " + rh.gs(info.nightscout.shared.R.string.connected) + sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_use_ws, true) && wsConnected -> "WS: " + rh.gs(info.nightscout.interfaces.R.string.connected) sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_use_ws, true) && !wsConnected -> "WS: " + rh.gs(R.string.not_connected) lastOperationError != null -> rh.gs(info.nightscout.core.ui.R.string.error) nsAndroidClient?.lastStatus == null -> rh.gs(R.string.not_connected) workIsRunning() -> rh.gs(R.string.working) - nsAndroidClient?.lastStatus?.apiPermissions?.isFull() == true -> rh.gs(info.nightscout.shared.R.string.connected) + nsAndroidClient?.lastStatus?.apiPermissions?.isFull() == true -> rh.gs(info.nightscout.interfaces.R.string.connected) nsAndroidClient?.lastStatus?.apiPermissions?.isRead() == true -> rh.gs(R.string.read_only) else -> rh.gs(info.nightscout.core.ui.R.string.unknown) } diff --git a/pump/combo/build.gradle b/pump/combo/build.gradle index d558afb179..ea42b5a33f 100644 --- a/pump/combo/build.gradle +++ b/pump/combo/build.gradle @@ -24,7 +24,6 @@ dependencies { implementation project(':core:main') implementation project(':core:ui') implementation project(':core:utils') - implementation project(':app-wear-shared:shared') testImplementation project(':app-wear-shared:shared-tests') diff --git a/pump/combov2/build.gradle b/pump/combov2/build.gradle index 852ed510ac..fd35c11a7e 100644 --- a/pump/combov2/build.gradle +++ b/pump/combov2/build.gradle @@ -15,10 +15,11 @@ dependencies { implementation project(':core:interfaces') implementation project(':core:ui') implementation project(':core:utils') - implementation project(':app-wear-shared:shared') implementation(project(":pump:combov2:comboctl")) - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") - implementation("org.jetbrains.kotlinx:kotlinx-datetime:$kotlinx_datetime_version") + + api "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" + api "org.jetbrains.kotlinx:kotlinx-datetime:$kotlinx_datetime_version" + // This is necessary to avoid errors like these which otherwise come up often at runtime: // "WARNING: Failed to transform class kotlinx/datetime/TimeZone$Companion // java.lang.NoClassDefFoundError: kotlinx/serialization/KSerializer" diff --git a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Fragment.kt b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Fragment.kt index 8439dd4295..4ae87a043c 100644 --- a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Fragment.kt +++ b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Fragment.kt @@ -240,7 +240,7 @@ class ComboV2Fragment : DaggerFragment() { } in 60..(30 * 60) -> { - binding.combov2LastConnection.text = rh.gs(info.nightscout.shared.R.string.minago, secondsPassed / 60) + binding.combov2LastConnection.text = rh.gs(info.nightscout.interfaces.R.string.minago, secondsPassed / 60) binding.combov2LastConnection.setTextColor(Color.WHITE) } @@ -267,7 +267,7 @@ class ComboV2Fragment : DaggerFragment() { rh.gs(R.string.combov2_less_than_one_minute_ago) else -> - rh.gs(info.nightscout.shared.R.string.minago, secondsPassed / 60) + rh.gs(info.nightscout.interfaces.R.string.minago, secondsPassed / 60) } binding.combov2LastBolus.text = diff --git a/pump/dana/build.gradle b/pump/dana/build.gradle index 67222caccc..e15b20fb70 100644 --- a/pump/dana/build.gradle +++ b/pump/dana/build.gradle @@ -30,7 +30,6 @@ dependencies { implementation project(':core:main') implementation project(':core:ui') implementation project(':core:utils') - implementation project(':app-wear-shared:shared') api "androidx.room:room-ktx:$room_version" api "androidx.room:room-runtime:$room_version" diff --git a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt index acd4e7b830..87e5817b37 100644 --- a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt +++ b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaFragment.kt @@ -207,7 +207,7 @@ class DanaFragment : DaggerFragment() { if (pump.lastConnection != 0L) { val agoMilliseconds = System.currentTimeMillis() - pump.lastConnection val agoMin = (agoMilliseconds.toDouble() / 60.0 / 1000.0).toInt() - binding.lastConnection.text = dateUtil.timeString(pump.lastConnection) + " (" + rh.gs(info.nightscout.shared.R.string.minago, agoMin) + ")" + binding.lastConnection.text = dateUtil.timeString(pump.lastConnection) + " (" + rh.gs(info.nightscout.interfaces.R.string.minago, agoMin) + ")" warnColors.setColor(binding.lastConnection, agoMin.toDouble(), 16.0, 31.0) } if (pump.lastBolusTime != 0L) { diff --git a/pump/danar/build.gradle b/pump/danar/build.gradle index a3ad984f0c..79b21390b3 100644 --- a/pump/danar/build.gradle +++ b/pump/danar/build.gradle @@ -15,8 +15,6 @@ android { } dependencies { - implementation 'androidx.media3:media3-common:1.1.1' - implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:utils') @@ -24,6 +22,8 @@ dependencies { implementation project(':core:validators') implementation project(':pump:dana') + api 'androidx.media3:media3-common:1.1.1' + testImplementation project(':app-wear-shared:shared-tests') testImplementation project(':core:main') } \ No newline at end of file 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 f723ac765d..9c30704f35 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 @@ -405,7 +405,7 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { rxBus.send(new EventPumpStatusChanged(rh.gs(info.nightscout.pump.dana.R.string.gettingbolusstatus))); mSerialIOThread.sendMessage(new MsgStatus(injector)); bolusingEvent.setPercent(100); - rxBus.send(new EventPumpStatusChanged(rh.gs(info.nightscout.shared.R.string.disconnecting))); + rxBus.send(new EventPumpStatusChanged(rh.gs(info.nightscout.interfaces.R.string.disconnecting))); } }); return !start.getFailed(); diff --git a/pump/danars/build.gradle b/pump/danars/build.gradle index dc6142ef05..f8fe783a48 100644 --- a/pump/danars/build.gradle +++ b/pump/danars/build.gradle @@ -36,7 +36,6 @@ dependencies { implementation project(':core:ui') implementation project(':core:validators') implementation project(':pump:dana') - implementation project(':app-wear-shared:shared') testImplementation project(':app-wear-shared:shared-tests') testImplementation project(':core:main') diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt index 1a63f6433c..a230a49c53 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt @@ -346,7 +346,7 @@ class DanaRSService : DaggerService() { rxBus.send(EventPumpStatusChanged(rh.gs(info.nightscout.pump.dana.R.string.gettingbolusstatus))) sendMessage(DanaRSPacketBolusGetStepBolusInformation(injector)) // last bolus bolusingEvent.percent = 100 - rxBus.send(EventPumpStatusChanged(rh.gs(info.nightscout.shared.R.string.disconnecting))) + rxBus.send(EventPumpStatusChanged(rh.gs(info.nightscout.interfaces.R.string.disconnecting))) } }) return !start.failed diff --git a/pump/diaconn/build.gradle b/pump/diaconn/build.gradle index 0d0b4f6d38..95c51bd3af 100644 --- a/pump/diaconn/build.gradle +++ b/pump/diaconn/build.gradle @@ -25,7 +25,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared-impl') implementation project(':core:libraries') implementation project(':core:interfaces') diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt index eab7ce0a82..196134e88b 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Fragment.kt @@ -160,7 +160,7 @@ class DiaconnG8Fragment : DaggerFragment() { if (pump.lastConnection != 0L) { val agoMsec = System.currentTimeMillis() - pump.lastConnection val agoMin = (agoMsec.toDouble() / 60.0 / 1000.0).toInt() - binding.lastconnection.text = dateUtil.timeString(pump.lastConnection) + " (" + rh.gs(info.nightscout.shared.R.string.minago, agoMin) + ")" + binding.lastconnection.text = dateUtil.timeString(pump.lastConnection) + " (" + rh.gs(info.nightscout.interfaces.R.string.minago, agoMin) + ")" warnColors.setColor(binding.lastconnection, agoMin.toDouble(), 16.0, 31.0) } if (pump.lastBolusTime != 0L) { diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt index 3c766a5058..24c0a03ffc 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt @@ -538,7 +538,7 @@ class DiaconnG8Service : DaggerService() { if(!diaconnG8Pump.isPumpVersionGe3_53) { bolusingEvent.percent = 100 } - rxBus.send(EventPumpStatusChanged(rh.gs(info.nightscout.shared.R.string.disconnecting))) + rxBus.send(EventPumpStatusChanged(rh.gs(info.nightscout.interfaces.R.string.disconnecting))) } }) return !start.failed diff --git a/pump/eopatch/build.gradle b/pump/eopatch/build.gradle index a2baa19b46..281a2187b4 100644 --- a/pump/eopatch/build.gradle +++ b/pump/eopatch/build.gradle @@ -21,12 +21,11 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation project(':pump:eopatch-core') implementation project(':core:libraries') - implementation project(':app-wear-shared:shared') - implementation project(':database:entities') implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:utils') implementation project(':core:ui') + implementation project(':database:entities') api "com.google.guava:guava:$guava_version" diff --git a/pump/medtronic/build.gradle b/pump/medtronic/build.gradle index c724e23a24..f842108c8d 100644 --- a/pump/medtronic/build.gradle +++ b/pump/medtronic/build.gradle @@ -16,7 +16,6 @@ android { dependencies { implementation project(':core:libraries') - implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:ui') diff --git a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt index f449b22fb0..bec36b69a6 100644 --- a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt +++ b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt @@ -275,7 +275,7 @@ class MedtronicFragment : DaggerFragment() { } else if (medtronicPumpStatus.lastConnection + 30 * 60 * 1000 < System.currentTimeMillis()) { if (min < 60) { - binding.lastConnection.text = rh.gs(info.nightscout.shared.R.string.minago, min) + binding.lastConnection.text = rh.gs(info.nightscout.interfaces.R.string.minago, min) } else if (min < 1440) { val h = (min / 60).toInt() binding.lastConnection.text = (rh.gq(info.nightscout.androidaps.plugins.pump.common.hw.rileylink.R.plurals.duration_hours, h, h) + " " diff --git a/pump/medtrum/build.gradle b/pump/medtrum/build.gradle index f1f2e6a263..9107869f50 100644 --- a/pump/medtrum/build.gradle +++ b/pump/medtrum/build.gradle @@ -19,15 +19,14 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':core:libraries') implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:ui') + implementation project(':core:utils') implementation project(':core:validators') implementation project(':pump:pump-common') - implementation project(':core:utils') testImplementation project(':app-wear-shared:shared-tests') testImplementation project(':core:main') diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt index 8291983817..dcc15dc074 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt @@ -177,7 +177,7 @@ class MedtrumOverviewViewModel @Inject constructor( if (medtrumPump.lastConnection != 0L) { val agoMilliseconds = System.currentTimeMillis() - medtrumPump.lastConnection val agoMinutes = agoMilliseconds / 1000 / 60 - _lastConnectionMinAgo.postValue(rh.gs(info.nightscout.shared.R.string.minago, agoMinutes)) + _lastConnectionMinAgo.postValue(rh.gs(info.nightscout.interfaces.R.string.minago, agoMinutes)) } if (medtrumPump.lastBolusTime != 0L) { val agoMilliseconds = System.currentTimeMillis() - medtrumPump.lastBolusTime diff --git a/pump/omnipod-common/build.gradle b/pump/omnipod-common/build.gradle index 51397ea938..2258b47333 100644 --- a/pump/omnipod-common/build.gradle +++ b/pump/omnipod-common/build.gradle @@ -20,7 +20,6 @@ dependencies { implementation project(':core:interfaces') implementation project(':core:ui') implementation project(':core:utils') - implementation project(':app-wear-shared:shared') api "androidx.constraintlayout:constraintlayout:$constraintlayout_version" api "androidx.fragment:fragment-ktx:$fragmentktx_version" diff --git a/pump/omnipod-dash/build.gradle b/pump/omnipod-dash/build.gradle index f36ba39872..2021a42fa5 100644 --- a/pump/omnipod-dash/build.gradle +++ b/pump/omnipod-dash/build.gradle @@ -27,7 +27,6 @@ android { dependencies { implementation project(':database:entities') implementation project(':database:impl') - implementation project(':app-wear-shared:shared') implementation project(':core:libraries') implementation project(':core:interfaces') implementation project(':core:main') diff --git a/pump/omnipod-eros/build.gradle b/pump/omnipod-eros/build.gradle index 6407f5b795..92da56024e 100644 --- a/pump/omnipod-eros/build.gradle +++ b/pump/omnipod-eros/build.gradle @@ -27,7 +27,6 @@ android { dependencies { implementation project(':database:entities') implementation project(':database:impl') - implementation project(':app-wear-shared:shared') implementation project(':core:libraries') implementation project(':core:interfaces') implementation project(':core:main') diff --git a/pump/pump-common/build.gradle b/pump/pump-common/build.gradle index 9112c217ad..1f69307954 100644 --- a/pump/pump-common/build.gradle +++ b/pump/pump-common/build.gradle @@ -18,7 +18,6 @@ dependencies { implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:utils') - implementation project(':app-wear-shared:shared') implementation('com.thoughtworks.xstream:xstream:1.4.20') { exclude group: 'xmlpull', module: 'xmlpull' diff --git a/pump/pump-common/src/main/java/info/nightscout/pump/common/defs/PumpDriverState.kt b/pump/pump-common/src/main/java/info/nightscout/pump/common/defs/PumpDriverState.kt index 432cb2d074..601a0db542 100644 --- a/pump/pump-common/src/main/java/info/nightscout/pump/common/defs/PumpDriverState.kt +++ b/pump/pump-common/src/main/java/info/nightscout/pump/common/defs/PumpDriverState.kt @@ -9,14 +9,14 @@ enum class PumpDriverState(var resourceId: Int) { NotInitialized(R.string.pump_status_not_initialized), // this state should be set only when driver is created Connecting(info.nightscout.core.ui.R.string.connecting), // - Connected(info.nightscout.shared.R.string.connected), // + Connected(info.nightscout.interfaces.R.string.connected), // Initialized(R.string.pump_status_initialized), // this is weird state that probably won't be used, since its more driver centric that communication centric EncryptCommunication(R.string.pump_status_encrypt), // Ready(R.string.pump_status_ready), Busy(R.string.pump_status_busy), // Suspended(R.string.pump_status_suspended), // ExecutingCommand(R.string.pump_status_executing_command), - Disconnecting(info.nightscout.shared.R.string.disconnecting), + Disconnecting(info.nightscout.interfaces.R.string.disconnecting), Disconnected(info.nightscout.core.ui.R.string.disconnected); fun isConnected(): Boolean = this == Connected || this == Initialized || this == Busy || this == Suspended diff --git a/pump/rileylink/build.gradle b/pump/rileylink/build.gradle index 03620015ee..439dfa0917 100644 --- a/pump/rileylink/build.gradle +++ b/pump/rileylink/build.gradle @@ -15,7 +15,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':core:interfaces') implementation project(':core:ui') implementation project(':pump:pump-common') diff --git a/pump/virtual/build.gradle b/pump/virtual/build.gradle index ecdf3d7798..f22de01853 100644 --- a/pump/virtual/build.gradle +++ b/pump/virtual/build.gradle @@ -17,7 +17,6 @@ android { } dependencies { - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':core:interfaces') implementation project(':core:main') diff --git a/settings.gradle b/settings.gradle index 816e1ae58d..02f044b440 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,5 @@ include ':app' include ':wear' -include ':app-wear-shared:shared' include ':app-wear-shared:shared-impl' include ':app-wear-shared:shared-tests' include ':core:main' diff --git a/ui/build.gradle b/ui/build.gradle index 65f2b951c7..43d3d72941 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -17,7 +17,6 @@ android { dependencies { implementation project(':core:libraries') implementation project(':core:graphview') - implementation project(':app-wear-shared:shared') implementation project(':database:entities') implementation project(':database:impl') implementation project(':core:interfaces') diff --git a/ui/src/main/java/info/nightscout/ui/activityMonitor/ActivityMonitor.kt b/ui/src/main/java/info/nightscout/ui/activityMonitor/ActivityMonitor.kt index 07bfea0f9e..410806021b 100644 --- a/ui/src/main/java/info/nightscout/ui/activityMonitor/ActivityMonitor.kt +++ b/ui/src/main/java/info/nightscout/ui/activityMonitor/ActivityMonitor.kt @@ -102,7 +102,7 @@ class ActivityMonitor @Inject constructor( row.gravity = Gravity.CENTER_HORIZONTAL row.addView(TextView(context).apply { layoutParams = lp.apply { column = 0 }; text = activity }) row.addView(TextView(context).apply { layoutParams = lp.apply { column = 1 }; text = duration }) - row.addView(TextView(context).apply { layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.shared.R.string.in_days, days.toDouble()) }) + row.addView(TextView(context).apply { layoutParams = lp.apply { column = 2 }; text = rh.gs(info.nightscout.interfaces.R.string.in_days, days.toDouble()) }) } ) } diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt index 0cc7b4cb5d..927733e1e7 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt @@ -276,7 +276,7 @@ class CarbsDialog : DialogFragmentWithDate() { actions.add(rh.gs(info.nightscout.core.ui.R.string.alarminxmin, timeOffset).formatColor(context, rh, info.nightscout.core.ui.R.attr.infoColor)) val duration = binding.duration.value.toInt() if (duration > 0) - actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + duration + rh.gs(info.nightscout.shared.R.string.shorthour)) + actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + duration + rh.gs(info.nightscout.interfaces.R.string.shorthour)) if (carbsAfterConstraints > 0) { actions.add( rh.gs(info.nightscout.core.ui.R.string.carbs) + ": " + " Date: Mon, 18 Sep 2023 19:59:05 -0700 Subject: [PATCH 32/65] Rewrites HeartRateListenerTest with matchers Issue #2745 --- .../heartrate/HeartRateListenerTest.kt | 67 ++++++++++--------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt b/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt index 7b542b1afc..7daf20917e 100644 --- a/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/heartrate/HeartRateListenerTest.kt @@ -3,14 +3,13 @@ package info.nightscout.androidaps.heartrate import android.content.Context import android.hardware.Sensor import android.hardware.SensorManager +import com.google.common.truth.Truth.assertThat import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.logging.AAPSLoggerTest import info.nightscout.rx.weardata.EventData.ActionHeartRate import io.reactivex.rxjava3.core.Scheduler import io.reactivex.rxjava3.disposables.Disposable import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.ArgumentMatchers.any @@ -22,8 +21,9 @@ import org.mockito.Mockito.`when` import java.util.concurrent.TimeUnit internal class HeartRateListenerTest { + private val aapsLogger = AAPSLoggerTest() - private val aapsSchedulers = object: AapsSchedulers { + private val aapsSchedulers = object : AapsSchedulers { override val main: Scheduler = mock(Scheduler::class.java) override val io: Scheduler = mock(Scheduler::class.java) override val cpu: Scheduler = mock(Scheduler::class.java) @@ -35,11 +35,15 @@ internal class HeartRateListenerTest { private fun create(timestampMillis: Long): HeartRateListener { val ctx = mock(Context::class.java) - `when`(aapsSchedulers.io.schedulePeriodicallyDirect( - any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS))).thenReturn(schedule) + `when`( + aapsSchedulers.io.schedulePeriodicallyDirect( + any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS) + ) + ).thenReturn(schedule) val listener = HeartRateListener(ctx, aapsLogger, aapsSchedulers, timestampMillis) verify(aapsSchedulers.io).schedulePeriodicallyDirect( - any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS)) + any(), eq(60_000L), eq(60_000L), eq(TimeUnit.MILLISECONDS) + ) listener.sendHeartRate = { hr -> heartRates.add(hr) } return listener } @@ -49,10 +53,11 @@ internal class HeartRateListenerTest { timestamp: Long, heartRate: Int, sensorType: Int? = Sensor.TYPE_HEART_RATE, - accuracy: Int = SensorManager.SENSOR_STATUS_ACCURACY_HIGH) { + accuracy: Int = SensorManager.SENSOR_STATUS_ACCURACY_HIGH + ) { listener.onSensorChanged(sensorType, accuracy, timestamp, floatArrayOf(heartRate.toFloat())) } - + @BeforeEach fun before() { heartRates.clear() @@ -66,7 +71,7 @@ internal class HeartRateListenerTest { Mockito.verifyNoInteractions(aapsSchedulers.newThread) verify(schedule).dispose() } - + @Test fun onSensorChanged() { val start = System.currentTimeMillis() @@ -74,14 +79,13 @@ internal class HeartRateListenerTest { val d2 = 20_000L val listener = create(start) - assertNull(listener.currentHeartRateBpm) + assertThat(listener.currentHeartRateBpm).isNull() sendSensorEvent(listener, start + d1, 80) - assertEquals(0, heartRates.size) - assertEquals(80, listener.currentHeartRateBpm) + assertThat(heartRates).isEmpty() + assertThat(listener.currentHeartRateBpm).isEqualTo(80) listener.send(start + d2) - assertEquals(1, heartRates.size) - assertEquals(ActionHeartRate(d2, start + d2, 80.0, device), heartRates.first()) + assertThat(heartRates).containsExactly(ActionHeartRate(d2, start + d2, 80.0, device)) listener.dispose() } @@ -93,16 +97,15 @@ internal class HeartRateListenerTest { val listener = create(start) sendSensorEvent(listener, start, 80) - assertEquals(0, heartRates.size) - assertEquals(80, listener.currentHeartRateBpm) - sendSensorEvent(listener, start + d1,100) - assertEquals(0, heartRates.size) - assertEquals(100, listener.currentHeartRateBpm) + assertThat(heartRates).isEmpty() + assertThat(listener.currentHeartRateBpm).isEqualTo(80) + sendSensorEvent(listener, start + d1, 100) + assertThat(heartRates).isEmpty() + assertThat(listener.currentHeartRateBpm).isEqualTo(100) listener.send(start + d2) - assertEquals(1, heartRates.size) - assertEquals(ActionHeartRate(d2, start + d2, 95.0, device), heartRates.first()) + assertThat(heartRates).containsExactly(ActionHeartRate(d2, start + d2, 95.0, device)) listener.dispose() } @@ -115,15 +118,15 @@ internal class HeartRateListenerTest { sendSensorEvent(listener, start, 80) listener.send(start + d1) - assertEquals(1, heartRates.size) + assertThat(heartRates).hasSize(1) - sendSensorEvent(listener, start + d1,100) - assertEquals(1, heartRates.size) + sendSensorEvent(listener, start + d1, 100) + assertThat(heartRates).hasSize(1) listener.send(start + d2) - assertEquals(2, heartRates.size) - - assertEquals(ActionHeartRate(d1, start + d1, 80.0, device), heartRates[0]) - assertEquals(ActionHeartRate(d2 - d1, start + d2, 100.0, device), heartRates[1]) + assertThat(heartRates).containsExactly( + ActionHeartRate(d1, start + d1, 80.0, device), + ActionHeartRate(d2 - d1, start + d2, 100.0, device), + ).inOrder() listener.dispose() } @@ -136,11 +139,10 @@ internal class HeartRateListenerTest { sendSensorEvent(listener, start, 80) sendSensorEvent(listener, start + d1, 100, accuracy = SensorManager.SENSOR_STATUS_NO_CONTACT) - assertNull(listener.currentHeartRateBpm) + assertThat(listener.currentHeartRateBpm).isNull() listener.send(start + d2) - assertEquals(1, heartRates.size) - assertEquals(ActionHeartRate(d2, start + d2, 80.0, device), heartRates.first()) + assertThat(heartRates).containsExactly(ActionHeartRate(d2, start + d2, 80.0, device)) listener.dispose() } @@ -157,8 +159,7 @@ internal class HeartRateListenerTest { sendSensorEvent(listener, start + d2, 100) listener.send(start + d3) - assertEquals(1, heartRates.size) - assertEquals(ActionHeartRate(d3, start + d3, 95.0, device), heartRates.first()) + assertThat(heartRates).containsExactly(ActionHeartRate(d3, start + d3, 95.0, device)) listener.dispose() } } From a42ef55cb037b113bc5a5480e752765442c415d7 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 20:16:58 -0700 Subject: [PATCH 33/65] Rewrites DisplayFormatTest with matchers Issue #2745 --- .../interaction/utils/DisplayFormatTest.kt | 222 +++++++++--------- 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt index e2a0934f21..e6dbf02680 100644 --- a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt @@ -1,10 +1,10 @@ package info.nightscout.androidaps.interaction.utils +import com.google.common.truth.Truth.assertThat import info.nightscout.androidaps.R import info.nightscout.androidaps.WearTestBase import info.nightscout.androidaps.data.RawDisplayData import info.nightscout.androidaps.testing.mockers.RawDataMocker -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mockito @@ -32,142 +32,142 @@ class DisplayFormatTest : WearTestBase() { } @Test fun shortTimeSinceTest() { - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 0, 0)), "0'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 0, 5)), "0'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 0, 55)), "0'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 1, 0)), "1'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 1, 59)), "1'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 2, 0)), "2'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 3, 0)), "3'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 4, 0)), "4'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 10, 0)), "10'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 30, 0)), "30'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 59, 0)), "59'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 59, 59)), "59'") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 1, 0, 0)), "1h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 1, 30, 0)), "1h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 1, 59, 59)), "1h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 2, 0, 0)), "2h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 3, 0, 0)), "3h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 4, 0, 0)), "4h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 5, 0, 0)), "5h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 12, 0, 0)), "12h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 18, 0, 0)), "18h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 23, 59, 59)), "23h") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(1, 0, 0, 0)), "1d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(1, 12, 0, 0)), "1d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(1, 23, 59, 59)), "1d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(2, 0, 0, 0)), "2d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(3, 0, 0, 0)), "3d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(4, 0, 0, 0)), "4d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(5, 0, 0, 0)), "5d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(6, 0, 0, 0)), "6d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(6, 23, 59, 59)), "6d") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(7, 0, 0, 0)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(8, 0, 0, 0)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(9, 0, 0, 0)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(13, 23, 59, 59)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(14, 0, 0, 0)), "2w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(21, 0, 0, 0)), "3w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(28, 0, 0, 0)), "4w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(31, 0, 0, 0)), "4w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(32, 0, 0, 0)), "4w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(35, 0, 0, 0)), "5w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(100, 0, 0, 0)), "14w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(200, 0, 0, 0)), "28w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(365, 0, 0, 0)), "52w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(366, 0, 0, 0)), "52w") - Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(367, 0, 0, 0)), "52w") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 0, 0))).isEqualTo("0'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 0, 5))).isEqualTo("0'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 0, 55))).isEqualTo("0'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 1, 0))).isEqualTo("1'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 1, 59))).isEqualTo("1'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 2, 0))).isEqualTo("2'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 3, 0))).isEqualTo("3'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 4, 0))).isEqualTo("4'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 10, 0))).isEqualTo("10'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 30, 0))).isEqualTo("30'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 59, 0))).isEqualTo("59'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 0, 59, 59))).isEqualTo("59'") + assertThat(displayFormat.shortTimeSince(backInTime(0, 1, 0, 0))).isEqualTo("1h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 1, 30, 0))).isEqualTo("1h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 1, 59, 59))).isEqualTo("1h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 2, 0, 0))).isEqualTo("2h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 3, 0, 0))).isEqualTo("3h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 4, 0, 0))).isEqualTo("4h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 5, 0, 0))).isEqualTo("5h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 12, 0, 0))).isEqualTo("12h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 18, 0, 0))).isEqualTo("18h") + assertThat(displayFormat.shortTimeSince(backInTime(0, 23, 59, 59))).isEqualTo("23h") + assertThat(displayFormat.shortTimeSince(backInTime(1, 0, 0, 0))).isEqualTo("1d") + assertThat(displayFormat.shortTimeSince(backInTime(1, 12, 0, 0))).isEqualTo("1d") + assertThat(displayFormat.shortTimeSince(backInTime(1, 23, 59, 59))).isEqualTo("1d") + assertThat(displayFormat.shortTimeSince(backInTime(2, 0, 0, 0))).isEqualTo("2d") + assertThat(displayFormat.shortTimeSince(backInTime(3, 0, 0, 0))).isEqualTo("3d") + assertThat(displayFormat.shortTimeSince(backInTime(4, 0, 0, 0))).isEqualTo("4d") + assertThat(displayFormat.shortTimeSince(backInTime(5, 0, 0, 0))).isEqualTo("5d") + assertThat(displayFormat.shortTimeSince(backInTime(6, 0, 0, 0))).isEqualTo("6d") + assertThat(displayFormat.shortTimeSince(backInTime(6, 23, 59, 59))).isEqualTo("6d") + assertThat(displayFormat.shortTimeSince(backInTime(7, 0, 0, 0))).isEqualTo("1w") + assertThat(displayFormat.shortTimeSince(backInTime(8, 0, 0, 0))).isEqualTo("1w") + assertThat(displayFormat.shortTimeSince(backInTime(9, 0, 0, 0))).isEqualTo("1w") + assertThat(displayFormat.shortTimeSince(backInTime(13, 23, 59, 59))).isEqualTo("1w") + assertThat(displayFormat.shortTimeSince(backInTime(14, 0, 0, 0))).isEqualTo("2w") + assertThat(displayFormat.shortTimeSince(backInTime(21, 0, 0, 0))).isEqualTo("3w") + assertThat(displayFormat.shortTimeSince(backInTime(28, 0, 0, 0))).isEqualTo("4w") + assertThat(displayFormat.shortTimeSince(backInTime(31, 0, 0, 0))).isEqualTo("4w") + assertThat(displayFormat.shortTimeSince(backInTime(32, 0, 0, 0))).isEqualTo("4w") + assertThat(displayFormat.shortTimeSince(backInTime(35, 0, 0, 0))).isEqualTo("5w") + assertThat(displayFormat.shortTimeSince(backInTime(100, 0, 0, 0))).isEqualTo("14w") + assertThat(displayFormat.shortTimeSince(backInTime(200, 0, 0, 0))).isEqualTo("28w") + assertThat(displayFormat.shortTimeSince(backInTime(365, 0, 0, 0))).isEqualTo("52w") + assertThat(displayFormat.shortTimeSince(backInTime(366, 0, 0, 0))).isEqualTo("52w") + assertThat(displayFormat.shortTimeSince(backInTime(367, 0, 0, 0))).isEqualTo("52w") } @Test fun shortTrendTest() { val raw = RawDisplayData() - Assertions.assertEquals(displayFormat.shortTrend(raw), "-- Δ--") + assertThat(displayFormat.shortTrend(raw)).isEqualTo("-- Δ--") raw.singleBg.timeStamp = backInTime(0, 0, 2, 0) - Assertions.assertEquals(displayFormat.shortTrend(raw), "2' Δ--") + assertThat(displayFormat.shortTrend(raw)).isEqualTo("2' Δ--") Mockito.`when`(sp.getBoolean("complication_unicode", true)).thenReturn(true) // shortening - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(2, "1.2")), "2' Δ1.2") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(11, "1.2")), "11' 1.2") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(12, "0.7")), "12' Δ.7") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(10, "1.0")), "10' Δ1") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(14, "-5.0")), "14' Δ-5") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(13, "-5.1")), "13' -5") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(15, "0.87")), "15' .87") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(10, "-1.78")), "10' -2") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(3, "2.549")), "3' 2.55") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(1, "-1.563")), "1' -1.6") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(2, "1.2"))).isEqualTo("2' Δ1.2") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(11, "1.2"))).isEqualTo("11' 1.2") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(12, "0.7"))).isEqualTo("12' Δ.7") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(10, "1.0"))).isEqualTo("10' Δ1") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(14, "-5.0"))).isEqualTo("14' Δ-5") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(13, "-5.1"))).isEqualTo("13' -5") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(15, "0.87"))).isEqualTo("15' .87") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(10, "-1.78"))).isEqualTo("10' -2") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(3, "2.549"))).isEqualTo("3' 2.55") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(1, "-1.563"))).isEqualTo("1' -1.6") // preserving separator - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(2, "1,2")), "2' Δ1,2") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(15, "0,87")), "15' ,87") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(3, "+2,549")), "3' 2,55") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(1, "-1,563")), "1' -1,6") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(2, "1,2"))).isEqualTo("2' Δ1,2") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(15, "0,87"))).isEqualTo("15' ,87") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(3, "+2,549"))).isEqualTo("3' 2,55") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(1, "-1,563"))).isEqualTo("1' -1,6") // UTF-off mode - without delta symbol Mockito.`when`(sp.getBoolean("complication_unicode", true)).thenReturn(false) - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(2, "1.2")), "2' 1.2") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(12, "0.7")), "12' 0.7") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(10, "1.0")), "10' 1.0") - Assertions.assertEquals(displayFormat.shortTrend(rawDataMocker.rawDelta(14, "-5.0")), "14' -5") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(2, "1.2"))).isEqualTo("2' 1.2") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(12, "0.7"))).isEqualTo("12' 0.7") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(10, "1.0"))).isEqualTo("10' 1.0") + assertThat(displayFormat.shortTrend(rawDataMocker.rawDelta(14, "-5.0"))).isEqualTo("14' -5") } @Test fun longGlucoseLine() { - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("125", 2, "1.2")), "125→ Δ1.2 (2')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("97", 11, "5.2")), "97↗ Δ5.2 (11')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("110", 12, "0.7")), "110→ Δ.7 (12')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("65", 10, "7.0")), "65↗ Δ7 (10')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("215", 14, "-5.0")), "215↘ Δ-5 (14')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("8.3", 13, "-5.1")), "8.3↘ Δ-5.1 (13')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("6.8", 15, "10.83")), "6.8↑ Δ10.83 (15')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("13.2", 10, "-11.78")), "13.2↓ Δ-11.78 (10')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("3.9", 3, "2.549")), "3.9→ Δ2.549 (3')") - Assertions.assertEquals(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("11.1", 1, "-15.563")), "11.1↓ Δ-15.563 (1')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("125", 2, "1.2"))).isEqualTo("125→ Δ1.2 (2')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("97", 11, "5.2"))).isEqualTo("97↗ Δ5.2 (11')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("110", 12, "0.7"))).isEqualTo("110→ Δ.7 (12')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("65", 10, "7.0"))).isEqualTo("65↗ Δ7 (10')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("215", 14, "-5.0"))).isEqualTo("215↘ Δ-5 (14')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("8.3", 13, "-5.1"))).isEqualTo("8.3↘ Δ-5.1 (13')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("6.8", 15, "10.83"))).isEqualTo("6.8↑ Δ10.83 (15')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("13.2", 10, "-11.78"))).isEqualTo("13.2↓ Δ-11.78 (10')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("3.9", 3, "2.549"))).isEqualTo("3.9→ Δ2.549 (3')") + assertThat(displayFormat.longGlucoseLine(rawDataMocker.rawSgv("11.1", 1, "-15.563"))).isEqualTo("11.1↓ Δ-15.563 (1')") } @Test fun longDetailsLineTest() { Mockito.`when`(sp.getBoolean("complication_unicode", true)).thenReturn(true) - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("0g", "0U", "3.5U/h")), "0g ⁞ 0U ⁞ ⎍ 3.5U/h") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("50g", "7.56U", "0%")), "50g ⁞ 7.56U ⁞ ⎍ 0%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("12g", "3.23U", "120%")), "12g ⁞ 3.23U ⁞ 120%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("2(40)g", "-1.5U", "0.55U/h")), "2(40)g ⁞ -2U ⁞ 0.55U/h") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("0(24)g", "0.05U", "160%")), "0(24)g ⁞ 0.05U ⁞ 160%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("47g", "13.87U", "220%")), "47g ⁞ 13.87U ⁞ 220%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("13(5)g", "5.90U", "300%")), "13(5)g ⁞ 5.90U ⁞ 300%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("11(50)g", "0U", "70%")), "11(50)g ⁞ 0U ⁞ 70%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("7g", "0.54U", "30%")), "7g ⁞ 0.54U ⁞ ⎍ 30%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("19(38)g", "35.545U", "12.9U/h")), "19g ⁞ 36U ⁞ 12.9U/h") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("100(1)g", "12.345U", "6.98647U/h")), "100g 12U 6.98647U/h") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("0g", "0U", "3.5U/h"))).isEqualTo("0g ⁞ 0U ⁞ ⎍ 3.5U/h") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("50g", "7.56U", "0%"))).isEqualTo("50g ⁞ 7.56U ⁞ ⎍ 0%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("12g", "3.23U", "120%"))).isEqualTo("12g ⁞ 3.23U ⁞ 120%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("2(40)g", "-1.5U", "0.55U/h"))).isEqualTo("2(40)g ⁞ -2U ⁞ 0.55U/h") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("0(24)g", "0.05U", "160%"))).isEqualTo("0(24)g ⁞ 0.05U ⁞ 160%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("47g", "13.87U", "220%"))).isEqualTo("47g ⁞ 13.87U ⁞ 220%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("13(5)g", "5.90U", "300%"))).isEqualTo("13(5)g ⁞ 5.90U ⁞ 300%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("11(50)g", "0U", "70%"))).isEqualTo("11(50)g ⁞ 0U ⁞ 70%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("7g", "0.54U", "30%"))).isEqualTo("7g ⁞ 0.54U ⁞ ⎍ 30%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("19(38)g", "35.545U", "12.9U/h"))).isEqualTo("19g ⁞ 36U ⁞ 12.9U/h") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("100(1)g", "12.345U", "6.98647U/h"))).isEqualTo("100g 12U 6.98647U/h") Mockito.`when`(sp.getBoolean("complication_unicode", true)).thenReturn(false) - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("0g", "0U", "3.5U/h")), "0g | 0U | 3.5U/h") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("50g", "7.56U", "0%")), "50g | 7.56U | 0%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("12g", "3.23U", "120%")), "12g | 3.23U | 120%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("7g", "0.54U", "30%")), "7g | 0.54U | 30%") - Assertions.assertEquals(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("19(38)g", "35.545U", "12.9U/h")), "19g | 36U | 12.9U/h") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("0g", "0U", "3.5U/h"))).isEqualTo("0g | 0U | 3.5U/h") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("50g", "7.56U", "0%"))).isEqualTo("50g | 7.56U | 0%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("12g", "3.23U", "120%"))).isEqualTo("12g | 3.23U | 120%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("7g", "0.54U", "30%"))).isEqualTo("7g | 0.54U | 30%") + assertThat(displayFormat.longDetailsLine(rawDataMocker.rawCobIobBr("19(38)g", "35.545U", "12.9U/h"))).isEqualTo("19g | 36U | 12.9U/h") } @Test fun detailedIobTest() { - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("-1.29U", "(0,910|-2,20)")), Pair.create("-1.29U", ",91 -2")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("3.50U", "")), Pair.create("3.50U", "")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("12.5U", "(+1,4|-4.78)")), Pair.create("12.5U", "1,4 -5")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("0.67U", "some junks")), Pair.create(".67U", "")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("-11.0U", "(broken|data)")), Pair.create("-11U", "-- --")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("5.52U", "(0,5439|wrong)")), Pair.create("5.52U", ",54 --")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("-8.1U", "(|-8,1)")), Pair.create("-8.1U", "-- -8")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("-8.1U", "(|-8,1)")), Pair.create("-8.1U", "-- -8")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("7.6U", "(malformed)")), Pair.create("7.6U", "")) - Assertions.assertEquals(displayFormat.detailedIob(rawDataMocker.rawIob("-4.26U", "(6,97|1,3422|too much)")), Pair.create("-4.26U", "7 1,3")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("-1.29U", "(0,910|-2,20)"))).isEqualTo(Pair.create("-1.29U", ",91 -2")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("3.50U", ""))).isEqualTo(Pair.create("3.50U", "")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("12.5U", "(+1,4|-4.78)"))).isEqualTo(Pair.create("12.5U", "1,4 -5")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("0.67U", "some junks"))).isEqualTo(Pair.create(".67U", "")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("-11.0U", "(broken|data)"))).isEqualTo(Pair.create("-11U", "-- --")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("5.52U", "(0,5439|wrong)"))).isEqualTo(Pair.create("5.52U", ",54 --")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("-8.1U", "(|-8,1)"))).isEqualTo(Pair.create("-8.1U", "-- -8")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("-8.1U", "(|-8,1)"))).isEqualTo(Pair.create("-8.1U", "-- -8")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("7.6U", "(malformed)"))).isEqualTo(Pair.create("7.6U", "")) + assertThat(displayFormat.detailedIob(rawDataMocker.rawIob("-4.26U", "(6,97|1,3422|too much)"))).isEqualTo(Pair.create("-4.26U", "7 1,3")) } @Test fun detailedCobTest() { - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("0g")), Pair.create("0g", "")) - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("50g")), Pair.create("50g", "")) - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("2(40)g")), Pair.create("2g", "40g")) - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("0(24)g")), Pair.create("0g", "24g")) - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("13(5)g")), Pair.create("13g", "5g")) - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("11(50)g")), Pair.create("11g", "50g")) - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("19(38)g")), Pair.create("19g", "38g")) - Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("100(1)g")), Pair.create("100g", "1g")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("0g"))).isEqualTo(Pair.create("0g", "")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("50g"))).isEqualTo(Pair.create("50g", "")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("2(40)g"))).isEqualTo(Pair.create("2g", "40g")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("0(24)g"))).isEqualTo(Pair.create("0g", "24g")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("13(5)g"))).isEqualTo(Pair.create("13g", "5g")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("11(50)g"))).isEqualTo(Pair.create("11g", "50g")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("19(38)g"))).isEqualTo(Pair.create("19g", "38g")) + assertThat(displayFormat.detailedCob(rawDataMocker.rawCob("100(1)g"))).isEqualTo(Pair.create("100g", "1g")) } } From fa49e3e152e9d73d1f00b7a213d392cf8c7ce7f3 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 20:23:29 -0700 Subject: [PATCH 34/65] Rewrites PairTest with matchers Issue #2745 --- .../androidaps/interaction/utils/PairTest.kt | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/PairTest.kt b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/PairTest.kt index 4f4d782bc6..f678e9f871 100644 --- a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/PairTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/PairTest.kt @@ -1,7 +1,6 @@ package info.nightscout.androidaps.interaction.utils import com.google.common.truth.Truth.assertThat -import org.junit.Assert import org.junit.jupiter.api.Test class PairTest { @@ -19,14 +18,14 @@ class PairTest { val no4: Pair<*, *> = Pair.create(12, 345L) // THEN - Assert.assertNotEquals(left, right) - Assert.assertEquals(left, another) - Assert.assertNotEquals(left, samePos1) - Assert.assertNotEquals(left, samePos2) - Assert.assertNotEquals(no1, no2) - Assert.assertNotEquals(no1, no3) - Assert.assertEquals(no1, no4) - Assert.assertNotEquals("aa bbb", left.toString()) + assertThat(right).isNotEqualTo(left) + assertThat(another).isEqualTo(left) + assertThat(samePos1).isNotEqualTo(left) + assertThat(samePos2).isNotEqualTo(left) + assertThat(no2).isNotEqualTo(no1) + assertThat(no3).isNotEqualTo(no1) + assertThat(no4).isEqualTo(no1) + assertThat(left.toString()).isNotEqualTo("aa bbb") } @Test fun pairHashTest() { @@ -46,4 +45,4 @@ class PairTest { assertThat(pair.toString()).contains("the-first") assertThat(pair.toString()).contains("2nd") } -} \ No newline at end of file +} From b75b22e1877356272272ed93fc8687993cb479b8 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 23:15:29 -0700 Subject: [PATCH 35/65] Rewrites LImplTest with matchers Issue #2745 --- .../info/nightscout/shared/impl/logging/LImplTest.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/logging/LImplTest.kt b/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/logging/LImplTest.kt index 162ae01d14..b78601dc64 100644 --- a/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/logging/LImplTest.kt +++ b/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/logging/LImplTest.kt @@ -1,8 +1,8 @@ package info.nightscout.shared.impl.logging +import com.google.common.truth.Truth.assertThat import info.nightscout.rx.logging.LTag import info.nightscout.shared.sharedPreferences.SP -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -26,13 +26,13 @@ class LImplTest { @Test fun findByName() { - Assertions.assertEquals(LTag.APS.name, sut.findByName("APS").name) - Assertions.assertEquals("NONEXISTENT", sut.findByName("APS2").name) + assertThat(sut.findByName("APS").name).isEqualTo(LTag.APS.name) + assertThat(sut.findByName("APS2").name).isEqualTo("NONEXISTENT") } @Test fun getLogElements() { - Assertions.assertTrue(sut.getLogElements().isNotEmpty()) + assertThat(sut.getLogElements()).isNotEmpty() } @Test @@ -40,6 +40,6 @@ class LImplTest { val element = sut.findByName("APS") element.enabled = false sut.resetToDefaults() - Assertions.assertTrue(element.enabled) + assertThat(element.enabled).isTrue() } -} \ No newline at end of file +} From c5c9aea6d3f48bcfc0a2d5597b6487f4b84b5d68 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 23:30:17 -0700 Subject: [PATCH 36/65] Rewrites SPImplementationTest with matchers Issue #2745 --- .../sharedPreferences/SPImplementationTest.kt | 110 +++++++++--------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/sharedPreferences/SPImplementationTest.kt b/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/sharedPreferences/SPImplementationTest.kt index 4c9af02385..1f588916f5 100644 --- a/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/sharedPreferences/SPImplementationTest.kt +++ b/app-wear-shared/shared-impl/src/test/kotlin/info/nightscout/shared/impl/sharedPreferences/SPImplementationTest.kt @@ -1,8 +1,8 @@ package info.nightscout.shared.impl.sharedPreferences +import com.google.common.truth.Truth.assertThat import android.content.Context import info.nightscout.shared.impl.SharedPreferencesMock -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -34,153 +34,153 @@ class SPImplementationTest { @Test fun edit() { sut.edit { putBoolean("test", true) } - Assertions.assertTrue(sut.getBoolean("test", false)) + assertThat(sut.getBoolean("test", false)).isTrue() sut.edit { remove("test") } - Assertions.assertFalse(sut.contains("test")) + assertThat(sut.contains("test")).isFalse() sut.edit { putBoolean(someResource, true) } - Assertions.assertTrue(sut.getBoolean(someResource, false)) + assertThat(sut.getBoolean(someResource, false)).isTrue() sut.edit { remove(someResource) } - Assertions.assertFalse(sut.contains(someResource)) + assertThat(sut.contains(someResource)).isFalse() sut.edit(commit = true) { putDouble("test", 1.0) } - Assertions.assertEquals(1.0, sut.getDouble("test", 2.0)) + assertThat(sut.getDouble("test", 2.0)).isEqualTo(1.0) sut.edit { putDouble(someResource, 1.0) } - Assertions.assertEquals(1.0, sut.getDouble(someResource, 2.0)) + assertThat(sut.getDouble(someResource, 2.0)).isEqualTo(1.0) sut.edit { clear() } - Assertions.assertFalse(sut.contains(someResource2)) + assertThat(sut.contains(someResource2)).isFalse() sut.edit { putInt("test", 1) } - Assertions.assertEquals(1, sut.getInt("test", 2)) + assertThat(sut.getInt("test", 2)).isEqualTo(1) sut.edit { putInt(someResource, 1) } - Assertions.assertEquals(1, sut.getInt(someResource, 2)) + assertThat(sut.getInt(someResource, 2)).isEqualTo(1) sut.edit { clear() } sut.edit { putLong("test", 1L) } - Assertions.assertEquals(1L, sut.getLong("test", 2L)) + assertThat(sut.getLong("test", 2L)).isEqualTo(1L) sut.edit { putLong(someResource, 1) } - Assertions.assertEquals(1L, sut.getLong(someResource, 2L)) + assertThat(sut.getLong(someResource, 2L)).isEqualTo(1L) sut.edit { clear() } sut.edit { putString("test", "string") } - Assertions.assertEquals("string", sut.getString("test", "a")) + assertThat(sut.getString("test", "a")).isEqualTo("string") sut.edit { putString(someResource, "string") } - Assertions.assertEquals("string", sut.getString(someResource, "a")) + assertThat(sut.getString(someResource, "a")).isEqualTo("string") sut.edit { clear() } } @Test fun clear() { sut.putBoolean("test", true) - Assertions.assertTrue(sut.getAll().containsKey("test")) + assertThat(sut.getAll()).containsKey("test") sut.clear() - Assertions.assertFalse(sut.getAll().containsKey("test")) + assertThat(sut.getAll()).doesNotContainKey("test") } @Test fun contains() { sut.putBoolean("test", true) - Assertions.assertTrue(sut.contains("test")) + assertThat(sut.contains("test")).isTrue() sut.putBoolean(someResource, true) - Assertions.assertTrue(sut.contains(someResource)) + assertThat(sut.contains(someResource)).isTrue() } @Test fun remove() { sut.putBoolean("test", true) sut.remove("test") - Assertions.assertFalse(sut.contains("test")) + assertThat(sut.contains("test")).isFalse() sut.putBoolean(someResource, true) sut.remove(someResource) - Assertions.assertFalse(sut.contains(someResource)) + assertThat(sut.contains(someResource)).isFalse() } @Test fun getString() { sut.putString("test", "string") - Assertions.assertTrue(sut.getString("test", "") == "string") - Assertions.assertTrue(sut.getString("test1", "") == "") + assertThat(sut.getString("test", "")).isEqualTo("string") + assertThat(sut.getString("test1", "")).isEmpty() sut.putString(someResource, "string") - Assertions.assertTrue(sut.getString(someResource, "") == "string") - Assertions.assertTrue(sut.getString(someResource2, "") == "") + assertThat(sut.getString(someResource, "")).isEqualTo("string") + assertThat(sut.getString(someResource2, "")).isEmpty() } @Test fun getStringOrNull() { sut.putString("test", "string") - Assertions.assertTrue(sut.getStringOrNull("test", "") == "string") - Assertions.assertNull(sut.getStringOrNull("test1", null)) + assertThat(sut.getStringOrNull("test", "")).isEqualTo("string") + assertThat(sut.getStringOrNull("test1", null)).isNull() sut.putString(someResource, "string") - Assertions.assertTrue(sut.getStringOrNull(someResource, null) == "string") - Assertions.assertNull(sut.getStringOrNull(someResource2, null)) + assertThat(sut.getStringOrNull(someResource, null)).isEqualTo("string") + assertThat(sut.getStringOrNull(someResource2, null)).isNull() } @Test fun getBoolean() { sut.putBoolean("test", true) - Assertions.assertTrue(sut.getBoolean("test", false)) + assertThat(sut.getBoolean("test", false)).isTrue() sut.putBoolean(someResource, true) - Assertions.assertTrue(sut.getBoolean(someResource, false)) + assertThat(sut.getBoolean(someResource, false)).isTrue() sut.putString("string_key", "a") - Assertions.assertTrue(sut.getBoolean("string_key", true)) + assertThat(sut.getBoolean("string_key", true)).isTrue() sut.putString(someResource, "a") - Assertions.assertTrue(sut.getBoolean(someResource, true)) + assertThat(sut.getBoolean(someResource, true)).isTrue() } @Test fun getDouble() { sut.putDouble("test", 1.0) - Assertions.assertEquals(1.0, sut.getDouble("test", 2.0)) - Assertions.assertEquals(2.0, sut.getDouble("test1", 2.0)) + assertThat(sut.getDouble("test", 2.0)).isEqualTo(1.0) + assertThat(sut.getDouble("test1", 2.0)).isEqualTo(2.0) sut.putDouble(someResource, 1.0) - Assertions.assertEquals(1.0, sut.getDouble(someResource, 2.0)) - Assertions.assertEquals(2.0, sut.getDouble(someResource2, 2.0)) + assertThat(sut.getDouble(someResource, 2.0)).isEqualTo(1.0) + assertThat(sut.getDouble(someResource2, 2.0)).isEqualTo(2.0) sut.putString("string_key", "a") - Assertions.assertEquals(1.0, sut.getDouble("string_key", 1.0)) + assertThat(sut.getDouble("string_key", 1.0)).isEqualTo(1.0) sut.putString(someResource, "a") - Assertions.assertEquals(1.0, sut.getDouble(someResource, 1.0)) + assertThat(sut.getDouble(someResource, 1.0)).isEqualTo(1.0) } @Test fun getInt() { sut.putInt("test", 1) - Assertions.assertEquals(1, sut.getInt("test", 2)) - Assertions.assertEquals(2, sut.getInt("test1", 2)) + assertThat(sut.getInt("test", 2)).isEqualTo(1) + assertThat(sut.getInt("test1", 2)).isEqualTo(2) sut.putInt(someResource, 1) - Assertions.assertEquals(1, sut.getInt(someResource, 2)) - Assertions.assertEquals(2, sut.getInt(someResource2, 2)) + assertThat(sut.getInt(someResource, 2)).isEqualTo(1) + assertThat(sut.getInt(someResource2, 2)).isEqualTo(2) sut.putString("string_key", "a") - Assertions.assertEquals(1, sut.getInt("string_key", 1)) + assertThat(sut.getInt("string_key", 1)).isEqualTo(1) sut.putString(someResource, "a") - Assertions.assertEquals(1, sut.getInt(someResource, 1)) + assertThat(sut.getInt(someResource, 1)).isEqualTo(1) } @Test fun getLong() { sut.putLong("test", 1L) - Assertions.assertEquals(1L, sut.getLong("test", 2L)) - Assertions.assertEquals(2L, sut.getLong("test1", 2L)) + assertThat(sut.getLong("test", 2L)).isEqualTo(1L) + assertThat(sut.getLong("test1", 2L)).isEqualTo(2L) sut.putLong(someResource, 1L) - Assertions.assertEquals(1L, sut.getLong(someResource, 2L)) - Assertions.assertEquals(2L, sut.getLong(someResource2, 2L)) + assertThat(sut.getLong(someResource, 2L)).isEqualTo(1L) + assertThat(sut.getLong(someResource2, 2L)).isEqualTo(2L) sut.putString("string_key", "a") - Assertions.assertEquals(1L, sut.getLong("string_key", 1L)) + assertThat(sut.getLong("string_key", 1L)).isEqualTo(1L) sut.putString(someResource, "a") - Assertions.assertEquals(1L, sut.getLong(someResource, 1L)) + assertThat(sut.getLong(someResource, 1L)).isEqualTo(1L) } @Test fun incLong() { sut.incLong(someResource) - Assertions.assertEquals(1L, sut.getLong(someResource, 3L)) + assertThat(sut.getLong(someResource, 3L)).isEqualTo(1L) sut.incLong(someResource) - Assertions.assertEquals(2L, sut.getLong(someResource, 3L)) + assertThat(sut.getLong(someResource, 3L)).isEqualTo(2L) } @Test fun incInt() { sut.incInt(someResource) - Assertions.assertEquals(1, sut.getInt(someResource, 3)) + assertThat(sut.getInt(someResource, 3)).isEqualTo(1) sut.incInt(someResource) - Assertions.assertEquals(2, sut.getInt(someResource, 3)) + assertThat(sut.getInt(someResource, 3)).isEqualTo(2) } -} \ No newline at end of file +} From 8664bc71706da592827dd2f70f9b0d1ca992be3c Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 23:50:16 -0700 Subject: [PATCH 37/65] Rewrites EventDataTest with matchers Issue #2745 --- .../nightscout/rx/weardata/EventDataTest.kt | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/app-wear-shared/shared/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt b/app-wear-shared/shared/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt index 0ff0c07f33..25198a8e2c 100644 --- a/app-wear-shared/shared/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt +++ b/app-wear-shared/shared/src/test/java/info/nightscout/rx/weardata/EventDataTest.kt @@ -1,7 +1,7 @@ package info.nightscout.rx.weardata +import com.google.common.truth.Truth.assertThat import kotlinx.serialization.ExperimentalSerializationApi -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -21,132 +21,132 @@ class EventDataTest { @Test fun serializationTest() { EventData.ActionPong(1, 2).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.WearException(1, byteArrayOf(0xAA.toByte()), "board", "fingerprint", "sdk", "model", "manufacturer", "product").let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.Error(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.CancelBolus(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionResendData("data").let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionPumpStatus(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionLoopStatus(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionTddStatus(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionECarbsPreCheck(1, 2, 3).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionBolusPreCheck(1.0, 2).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionFillPreCheck(1.0).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionFillPresetPreCheck(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionProfileSwitchSendInitialData(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionProfileSwitchPreCheck(1, 2).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionWizardPreCheck(1, 2).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionQuickWizardPreCheck("guid").let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionHeartRate(1, 2, 3.0, "device").let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionTempTargetPreCheck(EventData.ActionTempTargetPreCheck.TempTargetCommand.CANCEL).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionWizardConfirmed(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionTempTargetConfirmed(false).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionBolusConfirmed(1.0, 2).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionECarbsConfirmed(1, 2, 3).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionFillConfirmed(1.0).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionProfileSwitchConfirmed(1, 2).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.OpenLoopRequestConfirmed(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.CancelNotification(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } // EventData.ActionGetCustomWatchface(EventData.ActionSetCustomWatchface(CwfData())).let { - // Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - // Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + // assertThat( EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + // assertThat( EventData.deserialize(it.serialize())).isEqualTo(it) // } EventData.ActionPing(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.OpenSettings(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.BolusProgress(1, "status").let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.SingleBg(1, sgv = 2.0, high = 3.0, low = 4.0).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.GraphData(arrayListOf(EventData.SingleBg(1, sgv = 2.0, high = 3.0, low = 4.0))).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.TreatmentData( arrayListOf(EventData.TreatmentData.TempBasal(1, 2.0, 3, 4.0, 5.0)), @@ -154,44 +154,44 @@ class EventDataTest { arrayListOf(EventData.TreatmentData.Treatment(1, 2.0, 3.0, true, isValid = true)), arrayListOf(EventData.SingleBg(1, sgv = 2.0, high = 3.0, low = 4.0)) ).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.Preferences(1, wearControl = true, true, 2, 3, 4.0, 5.0, 6.0, 7, 8).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.QuickWizard(arrayListOf(EventData.QuickWizard.QuickWizardEntry("1", "2", 3, 4, 5))).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } // EventData.ActionSetCustomWatchface().let { - // Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - // Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + // assertThat( EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + // assertThat( EventData.deserialize(it.serialize())).isEqualTo(it) // } EventData.ActionrequestCustomWatchface(true).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionrequestSetDefaultWatchface(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ActionProfileSwitchOpenActivity(1, 2).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.OpenLoopRequest("1", "2", null).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.ConfirmAction("1", "2", null).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } EventData.SnoozeAlert(1).let { - Assertions.assertEquals(it, EventData.deserializeByte(it.serializeByte())) - Assertions.assertEquals(it, EventData.deserialize(it.serialize())) + assertThat(EventData.deserializeByte(it.serializeByte())).isEqualTo(it) + assertThat(EventData.deserialize(it.serialize())).isEqualTo(it) } } -} \ No newline at end of file +} From 3774ba38b4c293cbc5669ad4138ce6a0dafb3cda Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 00:06:53 -0700 Subject: [PATCH 38/65] Rewrites SafeParseTest with matchers Issue #2745 --- .../info/nightscout/shared/SafeParseTest.kt | 116 +++++++++--------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/app-wear-shared/shared/src/test/java/info/nightscout/shared/SafeParseTest.kt b/app-wear-shared/shared/src/test/java/info/nightscout/shared/SafeParseTest.kt index 791347e426..495ea437d4 100644 --- a/app-wear-shared/shared/src/test/java/info/nightscout/shared/SafeParseTest.kt +++ b/app-wear-shared/shared/src/test/java/info/nightscout/shared/SafeParseTest.kt @@ -1,6 +1,6 @@ package info.nightscout.shared -import org.junit.jupiter.api.Assertions +import com.google.common.truth.Truth.assertThat import org.junit.jupiter.api.Test @Suppress("SpellCheckingInspection") @@ -8,105 +8,105 @@ class SafeParseTest { @Test fun stringToDoubleTest() { // correct values - Assertions.assertEquals(0.1234, SafeParse.stringToDouble("0.1234"), 0.001) - Assertions.assertEquals(0.1234, SafeParse.stringToDouble("0,1234"), 0.001) - Assertions.assertEquals(0.5436564812, SafeParse.stringToDouble(".5436564812"), 0.001) - Assertions.assertEquals(0.5436564812, SafeParse.stringToDouble(",5436564812"), 0.001) - Assertions.assertEquals(1000500100900.0, SafeParse.stringToDouble("1000500100900"), 0.001) - Assertions.assertEquals(42.0, SafeParse.stringToDouble("42"), 0.001) + assertThat(SafeParse.stringToDouble("0.1234")).isWithin(0.001).of(0.1234) + assertThat(SafeParse.stringToDouble("0,1234")).isWithin(0.001).of(0.1234) + assertThat(SafeParse.stringToDouble(".5436564812")).isWithin(0.001).of(0.5436564812) + assertThat(SafeParse.stringToDouble(",5436564812")).isWithin(0.001).of(0.5436564812) + assertThat(SafeParse.stringToDouble("1000500100900")).isWithin(0.001).of(1000500100900.0) + assertThat(SafeParse.stringToDouble("42")).isWithin(0.001).of(42.0) // units or other extra values are not permitted - Assertions.assertEquals(0.0, SafeParse.stringToDouble("12 U/h"), 0.001) + assertThat(SafeParse.stringToDouble("12 U/h")).isWithin(0.001).of(0.0) // strings are not parsable - Assertions.assertEquals(0.0, SafeParse.stringToDouble("ala ma kota"), 0.001) + assertThat(SafeParse.stringToDouble("ala ma kota")).isWithin(0.001).of(0.0) // separator errors - Assertions.assertEquals(0.0, SafeParse.stringToDouble("0.1234.5678"), 0.001) - Assertions.assertEquals(0.0, SafeParse.stringToDouble("0,1234,5678"), 0.001) + assertThat(SafeParse.stringToDouble("0.1234.5678")).isWithin(0.001).of(0.0) + assertThat(SafeParse.stringToDouble("0,1234,5678")).isWithin(0.001).of(0.0) // various emptiness - Assertions.assertEquals(0.0, SafeParse.stringToDouble(""), 0.001) - Assertions.assertEquals(0.0, SafeParse.stringToDouble(" "), 0.001) - Assertions.assertEquals(0.0, SafeParse.stringToDouble("\n\r"), 0.001) + assertThat(SafeParse.stringToDouble("")).isWithin(0.001).of(0.0) + assertThat(SafeParse.stringToDouble(" ")).isWithin(0.001).of(0.0) + assertThat(SafeParse.stringToDouble("\n\r")).isWithin(0.001).of(0.0) } @Test fun stringToIntTest() { // correct values - Assertions.assertEquals(1052934, SafeParse.stringToInt("1052934")) - Assertions.assertEquals(-42, SafeParse.stringToInt("-42")) - Assertions.assertEquals(2147483647, SafeParse.stringToInt("2147483647")) - Assertions.assertEquals(-2147483648, SafeParse.stringToInt("-2147483648")) + assertThat(SafeParse.stringToInt("1052934")).isEqualTo(1052934) + assertThat(SafeParse.stringToInt("-42")).isEqualTo(-42) + assertThat(SafeParse.stringToInt("2147483647")).isEqualTo(2147483647) + assertThat(SafeParse.stringToInt("-2147483648")).isEqualTo(-2147483648) // outside Integer range - Assertions.assertEquals(0, SafeParse.stringToInt("2147483648")) - Assertions.assertEquals(0, SafeParse.stringToInt("-2147483649")) + assertThat(SafeParse.stringToInt("2147483648")).isEqualTo(0) + assertThat(SafeParse.stringToInt("-2147483649")).isEqualTo(0) // units or other extra values are not permitted - Assertions.assertEquals(0, SafeParse.stringToInt("12 U/h")) - Assertions.assertEquals(0, SafeParse.stringToInt("0.1234")) - Assertions.assertEquals(0, SafeParse.stringToInt("0,1234")) - Assertions.assertEquals(0, SafeParse.stringToInt(".5436564812")) - Assertions.assertEquals(0, SafeParse.stringToInt(",5436564812")) - Assertions.assertEquals(0, SafeParse.stringToInt("42.1234")) - Assertions.assertEquals(0, SafeParse.stringToInt("42,1234")) - Assertions.assertEquals(0, SafeParse.stringToInt("3212.5436564812")) - Assertions.assertEquals(0, SafeParse.stringToInt("3212,5436564812")) - Assertions.assertEquals(0, SafeParse.stringToInt("1000500100900")) + assertThat(SafeParse.stringToInt("12 U/h")).isEqualTo(0) + assertThat(SafeParse.stringToInt("0.1234")).isEqualTo(0) + assertThat(SafeParse.stringToInt("0,1234")).isEqualTo(0) + assertThat(SafeParse.stringToInt(".5436564812")).isEqualTo(0) + assertThat(SafeParse.stringToInt(",5436564812")).isEqualTo(0) + assertThat(SafeParse.stringToInt("42.1234")).isEqualTo(0) + assertThat(SafeParse.stringToInt("42,1234")).isEqualTo(0) + assertThat(SafeParse.stringToInt("3212.5436564812")).isEqualTo(0) + assertThat(SafeParse.stringToInt("3212,5436564812")).isEqualTo(0) + assertThat(SafeParse.stringToInt("1000500100900")).isEqualTo(0) // strings are not parsable - Assertions.assertEquals(0, SafeParse.stringToInt("ala ma kota")) + assertThat(SafeParse.stringToInt("ala ma kota")).isEqualTo(0) // various emptiness - Assertions.assertEquals(0, SafeParse.stringToInt("")) - Assertions.assertEquals(0, SafeParse.stringToInt(" ")) - Assertions.assertEquals(0, SafeParse.stringToInt("\n\r")) + assertThat(SafeParse.stringToInt("")).isEqualTo(0) + assertThat(SafeParse.stringToInt(" ")).isEqualTo(0) + assertThat(SafeParse.stringToInt("\n\r")).isEqualTo(0) } @Test fun stringToLongTest() { // correct values - Assertions.assertEquals(1052934L, SafeParse.stringToLong("1052934")) - Assertions.assertEquals(-42L, SafeParse.stringToLong("-42")) - Assertions.assertEquals(2147483647L, SafeParse.stringToLong("2147483647")) - Assertions.assertEquals(-2147483648L, SafeParse.stringToLong("-2147483648")) - Assertions.assertEquals(1000500100900L, SafeParse.stringToLong("1000500100900")) + assertThat(SafeParse.stringToLong("1052934")).isEqualTo(1052934L) + assertThat(SafeParse.stringToLong("-42")).isEqualTo(-42L) + assertThat(SafeParse.stringToLong("2147483647")).isEqualTo(2147483647L) + assertThat(SafeParse.stringToLong("-2147483648")).isEqualTo(-2147483648L) + assertThat(SafeParse.stringToLong("1000500100900")).isEqualTo(1000500100900L) // outside Integer range - Assertions.assertEquals(2147483648L, SafeParse.stringToLong("2147483648")) - Assertions.assertEquals(-2147483649L, SafeParse.stringToLong("-2147483649")) + assertThat(SafeParse.stringToLong("2147483648")).isEqualTo(2147483648L) + assertThat(SafeParse.stringToLong("-2147483649")).isEqualTo(-2147483649L) // units or other extra values are not permitted - Assertions.assertEquals(0L, SafeParse.stringToLong("12 U/h")) - Assertions.assertEquals(0L, SafeParse.stringToLong("0.1234")) - Assertions.assertEquals(0L, SafeParse.stringToLong("0,1234")) - Assertions.assertEquals(0L, SafeParse.stringToLong(".5436564812")) - Assertions.assertEquals(0L, SafeParse.stringToLong(",5436564812")) - Assertions.assertEquals(0L, SafeParse.stringToLong("42.1234")) - Assertions.assertEquals(0L, SafeParse.stringToLong("42,1234")) - Assertions.assertEquals(0L, SafeParse.stringToLong("3212.5436564812")) - Assertions.assertEquals(0L, SafeParse.stringToLong("3212,5436564812")) + assertThat(SafeParse.stringToLong("12 U/h")).isEqualTo(0L) + assertThat(SafeParse.stringToLong("0.1234")).isEqualTo(0L) + assertThat(SafeParse.stringToLong("0,1234")).isEqualTo(0L) + assertThat(SafeParse.stringToLong(".5436564812")).isEqualTo(0L) + assertThat(SafeParse.stringToLong(",5436564812")).isEqualTo(0L) + assertThat(SafeParse.stringToLong("42.1234")).isEqualTo(0L) + assertThat(SafeParse.stringToLong("42,1234")).isEqualTo(0L) + assertThat(SafeParse.stringToLong("3212.5436564812")).isEqualTo(0L) + assertThat(SafeParse.stringToLong("3212,5436564812")).isEqualTo(0L) // strings are not parsable - Assertions.assertEquals(0L, SafeParse.stringToLong("ala ma kota")) + assertThat(SafeParse.stringToLong("ala ma kota")).isEqualTo(0L) // various emptiness - Assertions.assertEquals(0L, SafeParse.stringToLong("")) - Assertions.assertEquals(0L, SafeParse.stringToLong(" ")) - Assertions.assertEquals(0L, SafeParse.stringToLong("\n\r")) + assertThat(SafeParse.stringToLong("")).isEqualTo(0L) + assertThat(SafeParse.stringToLong(" ")).isEqualTo(0L) + assertThat(SafeParse.stringToLong("\n\r")).isEqualTo(0L) } @Test fun stringToDoubleNullTest() { - Assertions.assertEquals(0.0, SafeParse.stringToDouble(null), 0.001) + assertThat(SafeParse.stringToDouble(null)).isWithin(0.001).of(0.0) } @Test fun stringToIntNullTest() { - Assertions.assertEquals(0, SafeParse.stringToInt(null)) + assertThat(SafeParse.stringToInt(null)).isEqualTo(0) } @Test fun stringToLongNullTest() { - Assertions.assertEquals(0L, SafeParse.stringToLong(null)) + assertThat(SafeParse.stringToLong(null)).isEqualTo(0L) } -} \ No newline at end of file +} From 1e3a4eaf2404f1ff269a42853b391b6129ef651a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 08:28:19 +0000 Subject: [PATCH 39/65] chore(deps): bump org.jlleitschuh.gradle.ktlint from 11.5.1 to 11.6.0 Bumps org.jlleitschuh.gradle.ktlint from 11.5.1 to 11.6.0. --- updated-dependencies: - dependency-name: org.jlleitschuh.gradle.ktlint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ec7fcd3ac4..9a88953867 100644 --- a/build.gradle +++ b/build.gradle @@ -79,7 +79,7 @@ buildscript { plugins { // Test Gradle build, keep disabled under normal circumstances // id "com.osacky.doctor" version "0.8.1" - id "org.jlleitschuh.gradle.ktlint" version "11.5.1" + id "org.jlleitschuh.gradle.ktlint" version "11.6.0" // Aggregates and/or logs Jacoco test coverage to the Gradle build log //id 'org.barfuin.gradle.jacocolog' version '3.1.0' id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false From d939f7ba99c9fcee08e7fb58540919b5e6b7c5de Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 19 Sep 2023 13:50:25 +0200 Subject: [PATCH 40/65] refactor ConstraintObject --- .../info/nightscout/sharedtests/TestBase.kt | 4 + .../sharedtests/TestBaseWithProfile.kt | 5 +- .../nightscout/androidaps/RealPumpTest.kt | 186 +++++---- .../androidaps/SetupWizardActivityTest.kt | 354 ++++++++-------- .../nightscout/androidaps/MainActivity.kt | 4 +- .../info/nightscout/androidaps/MainApp.kt | 3 +- .../androidaps/di/ServicesModule.kt | 2 - .../plugins/aps/loop/LoopPluginTest.kt | 8 +- .../configBuilder/ConfigBuilderPluginTest.kt | 3 +- .../constraints/ConstraintsCheckerTest.kt | 42 +- .../plugins/safety/SafetyPluginTest.kt | 136 ++++--- .../info/nightscout/interfaces/Constants.kt | 5 - .../interfaces/constraints/Constraint.kt | 121 +----- .../interfaces/constraints/Constraints.kt | 58 --- .../constraints/ConstraintsChecker.kt | 36 ++ .../constraints/PluginConstraints.kt | 28 ++ core/main/build.gradle | 1 + .../core/constraints/ConstraintObject.kt | 121 ++++++ .../nightscout/core/wizard/BolusWizard.kt | 8 +- .../nightscout/core/data/ConstraintTest.kt | 62 +-- .../info/nightscout/core/data/IobTotalTest.kt | 3 +- .../info/nightscout/core/data/ProfileTest.kt | 7 +- .../nightscout/core/utils/DateUtilTest.kt | 44 +- core/main/test_dependencies.gradle | 1 + .../queue/CommandQueueImplementation.kt | 16 +- .../queue/CommandQueueImplementationTest.kt | 19 +- .../implementation/queue/QueueThreadTest.kt | 17 +- .../implementation/wizard/BolusWizardTest.kt | 9 +- .../pump/insight/LocalInsightPlugin.java | 25 +- .../nightscout/plugins/aps/APSResultObject.kt | 26 +- .../nightscout/plugins/aps/OpenAPSFragment.kt | 2 +- .../plugins/aps/loop/LoopFragment.kt | 10 +- .../nightscout/plugins/aps/loop/LoopPlugin.kt | 13 +- .../openAPSAMA/DetermineBasalAdapterAMAJS.kt | 7 +- .../aps/openAPSAMA/OpenAPSAMAPlugin.kt | 21 +- .../openAPSSMB/DetermineBasalAdapterSMBJS.kt | 4 +- .../aps/openAPSSMB/OpenAPSSMBPlugin.kt | 43 +- .../OpenAPSSMBDynamicISFPlugin.kt | 4 +- .../plugins/aps/loop/APSResultTest.kt | 24 +- plugins/automation/build.gradle | 1 + .../nightscout/automation/AutomationPlugin.kt | 8 +- .../automation/AutomationEventTest.kt | 3 +- .../automation/BolusTimerImplTest.kt | 16 +- .../automation/CarbTimerImplTest.kt | 9 +- .../automation/actions/ActionAlarmTest.kt | 2 - .../actions/ActionNotificationTest.kt | 6 +- .../automation/actions/ActionsTestBase.kt | 12 +- .../automation/triggers/TriggerTestBase.kt | 3 +- ...aintsImpl.kt => ConstraintsCheckerImpl.kt} | 116 ++++-- .../bgQualityCheck/BgQualityCheckPlugin.kt | 6 +- .../di/PluginsConstraintsModule.kt | 6 +- .../constraints/dstHelper/DstHelperPlugin.kt | 6 +- .../objectives/ObjectivesPlugin.kt | 20 +- .../objectives/objectives/Objective4.kt | 8 +- .../objectives/objectives/Objective5.kt | 4 +- .../objectives/objectives/Objective6.kt | 4 +- .../phoneChecker/PhoneCheckerPlugin.kt | 20 +- .../constraints/safety/SafetyPlugin.kt | 64 +-- .../SignatureVerifierPlugin.kt | 6 +- .../storage/StorageConstraintPlugin.kt | 6 +- .../versionChecker/VersionCheckerPlugin.kt | 10 +- .../BgQualityCheckPluginTest.kt | 384 ++++++++++++++++-- .../objectives/ObjectivesPluginTest.kt | 25 +- .../storage/StorageConstraintPluginTest.kt | 13 +- .../insulin/InsulinOrefFreePeakPluginTest.kt | 2 - .../general/overview/OverviewFragment.kt | 8 +- .../smsCommunicator/SmsCommunicatorPlugin.kt | 16 +- .../wear/wearintegration/DataHandlerMobile.kt | 22 +- .../SmsCommunicatorPluginTest.kt | 29 +- .../plugins/iob/AutosensDataStoreTest.kt | 3 +- .../sensitivity/SensitivityOref1Plugin.kt | 6 +- .../sync/nsclient/ReceiverDelegateTest.kt | 2 - .../nsclientV3/workers/DataSyncWorkerTest.kt | 2 - .../nsclientV3/workers/LoadBgWorkerTest.kt | 2 - .../nightscout/pump/combo/ComboPlugin.java | 86 ++-- .../nightscout/pump/combo/ComboPluginTest.kt | 13 +- pump/combov2/build.gradle | 1 + .../nightscout/pump/combov2/ComboV2Plugin.kt | 211 ++++++---- .../danaRKorean/DanaRKoreanPlugin.kt | 12 +- .../services/DanaRKoreanExecutionService.java | 16 +- .../androidaps/danaRv2/DanaRv2Plugin.java | 41 +- .../androidaps/danar/AbstractDanaRPlugin.java | 23 +- .../androidaps/danar/DanaRPlugin.java | 43 +- .../androidaps/danar/comm/MessageBase.kt | 4 +- .../androidaps/danar/comm/MsgBolusStart.kt | 5 +- .../danar/comm/MsgBolusStartWithSpeed.kt | 9 +- .../danar/comm/MsgSetExtendedBolusStart.kt | 15 +- .../nightscout/pump/danaR/DanaRPluginTest.kt | 25 +- .../pump/danaR/comm/DanaRTestBase.kt | 11 +- .../pump/danaR/comm/MessageHashTableRTest.kt | 4 +- .../pump/danaR/comm/MsgBolusStartTest.kt | 4 +- .../danaR/comm/MsgBolusStartWithSpeedTest.kt | 4 +- .../comm/MsgSetExtendedBolusStartTest.kt | 4 +- .../pump/danaRKorean/DanaRKoreanPluginTest.kt | 25 +- .../comm/MessageHashTableRKoreanTest.kt | 4 +- .../pump/danaRv2/DanaRv2PluginTest.kt | 25 +- .../danaRv2/comm/MessageHashTableRv2Test.kt | 4 +- .../nightscout/pump/danars/DanaRSPlugin.kt | 28 +- .../DanaRSPacketBolusSetStepBolusStart.kt | 8 +- .../pump/danars/services/DanaRSService.kt | 4 +- .../pump/danars/DanaRSPluginTest.kt | 19 +- .../nightscout/pump/danars/DanaRSTestBase.kt | 11 + .../danars/comm/DanaRsMessageHashTableTest.kt | 8 +- .../DanaRsPacketBolusSetStepBolusStartTest.kt | 8 +- ...naRsPacketNotifyDeliveryRateDisplayTest.kt | 4 +- .../pump/diaconn/DiaconnG8Plugin.kt | 26 +- .../pump/medtronic/MedtronicTestBase.kt | 3 - .../comm/MedtronicHistoryDataUTest.kt | 4 - .../nightscout/pump/medtrum/MedtrumPlugin.kt | 10 +- .../pump/medtrum/services/MedtrumService.kt | 6 +- pump/omnipod-dash/build.gradle | 1 + .../omnipod/dash/history/DashHistoryTest.kt | 1 - .../omnipod/eros/history/ErosHistoryTest.kt | 1 + .../omnipod/eros/OmnipodErosPumpPluginTest.kt | 6 +- .../manager/AapsErosPodStateManagerTest.kt | 4 - .../pump/common/PumpPluginAbstract.kt | 4 +- .../pump/virtual/VirtualPumpPluginUTest.kt | 2 - .../info/nightscout/ui/dialogs/CarbsDialog.kt | 10 +- .../ui/dialogs/ExtendedBolusDialog.kt | 10 +- .../info/nightscout/ui/dialogs/FillDialog.kt | 10 +- .../nightscout/ui/dialogs/InsulinDialog.kt | 10 +- .../info/nightscout/ui/dialogs/LoopDialog.kt | 18 +- .../nightscout/ui/dialogs/TempBasalDialog.kt | 12 +- .../nightscout/ui/dialogs/TempTargetDialog.kt | 4 +- .../nightscout/ui/dialogs/TreatmentDialog.kt | 14 +- .../nightscout/ui/dialogs/WizardDialog.kt | 8 +- .../java/info/nightscout/ui/widget/Widget.kt | 10 +- 127 files changed, 1818 insertions(+), 1367 deletions(-) delete mode 100644 app/src/main/java/info/nightscout/androidaps/di/ServicesModule.kt delete mode 100644 core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt create mode 100644 core/interfaces/src/main/java/info/nightscout/interfaces/constraints/ConstraintsChecker.kt create mode 100644 core/interfaces/src/main/java/info/nightscout/interfaces/constraints/PluginConstraints.kt create mode 100644 core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt rename plugins/constraints/src/main/java/info/nightscout/plugins/constraints/{ConstraintsImpl.kt => ConstraintsCheckerImpl.kt} (57%) diff --git a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt index 35f4960822..dabbc8c6fa 100644 --- a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt +++ b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBase.kt @@ -2,6 +2,8 @@ package info.nightscout.sharedtests import android.annotation.SuppressLint import info.nightscout.rx.AapsSchedulers +import info.nightscout.rx.bus.RxBus +import info.nightscout.shared.impl.rx.bus.RxBusImpl import info.nightscout.sharedtests.rx.TestAapsSchedulers import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.extension.ExtendWith @@ -19,11 +21,13 @@ open class TestBase { val aapsLogger = AAPSLoggerTest() val aapsSchedulers: AapsSchedulers = TestAapsSchedulers() + lateinit var rxBus: RxBus @BeforeEach fun setupLocale() { Locale.setDefault(Locale.ENGLISH) System.setProperty("disableFirebase", "true") + rxBus = RxBusImpl(aapsSchedulers, aapsLogger) } @SuppressLint("CheckResult") diff --git a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt index 8a03a6fbbb..67bb7a48e0 100644 --- a/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt +++ b/app-wear-shared/shared-tests/src/main/java/info/nightscout/sharedtests/TestBaseWithProfile.kt @@ -19,10 +19,10 @@ import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.ProfileStore import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.shared.impl.rx.bus.RxBusImpl import info.nightscout.shared.interfaces.ProfileUtil import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.DateUtilImpl import org.json.JSONObject import org.junit.jupiter.api.BeforeEach @@ -45,11 +45,10 @@ open class TestBaseWithProfile : TestBase() { @Mock lateinit var context: Context @Mock lateinit var sp: SP - lateinit var dateUtil: DateUtilImpl + lateinit var dateUtil: DateUtil lateinit var profileUtil: ProfileUtil lateinit var decimalFormatter: DecimalFormatter lateinit var hardLimits: HardLimits - val rxBus = RxBusImpl(aapsSchedulers, aapsLogger) val profileInjector = HasAndroidInjector { AndroidInjector { diff --git a/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt b/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt index 43ff3c41e7..c248fcbfb3 100644 --- a/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt +++ b/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt @@ -1,102 +1,98 @@ package info.nightscout.androidaps -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.LargeTest -import org.junit.runner.RunWith - -@LargeTest -@RunWith(AndroidJUnit4::class) +//@LargeTest +//@RunWith(AndroidJUnit4::class) class RealPumpTest { -/* - companion object { - const val R_PASSWORD = 1234 - const val R_SERIAL = "PBB00013LR_P" - } - - private val validProfile = "{\"dia\":\"6\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"10\"},{\"time\":\"2:00\",\"value\":\"11\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" - - @Inject lateinit var pump : info.nightscout.androidaps.danaRv2.DanaRv2Plugin - @Inject lateinit var randomBgPlugin :RandomBgPlugin - @Inject lateinit var localProfilePlugin: LocalProfilePlugin - @Inject lateinit var profileFunction: ProfileFunction - @Inject lateinit var insulinOrefUltraRapidActingPlugin: InsulinOrefUltraRapidActingPlugin - @Inject lateinit var sensitivityOref1Plugin: SensitivityOref1Plugin - @Inject lateinit var openAPSSMBPlugin: OpenAPSSMBPlugin - @Inject lateinit var loopPlugin: LoopPlugin - @Inject lateinit var actionsPlugin: ActionsPlugin - @Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin - @Inject lateinit var objectivesPlugin: ObjectivesPlugin - @Inject lateinit var treatmentsPlugin: TreatmentsPlugin - @Inject lateinit var sp: SP - - @Rule - @JvmField - var mActivityTestRule = ActivityTestRule(MainActivity::class.java) - - @Rule - @JvmField - var mGrantPermissionRule: GrantPermissionRule = - GrantPermissionRule.grant( - android.Manifest.permission.ACCESS_FINE_LOCATION, - android.Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, - android.Manifest.permission.WRITE_EXTERNAL_STORAGE - ) - - @Before - fun clear() { - sp.clear() - sp.putBoolean(R.string.key_setupwizard_processed, true) - sp.putString(R.string.key_aps_mode, "closed") - MainApp.getDbHelper().resetDatabases() - MainApp.devBranch = false - } - - private fun preparePlugins() { - // Source - configBuilderPlugin.performPluginSwitch(randomBgPlugin,true, PluginType.BGSOURCE) - // Profile - configBuilderPlugin.performPluginSwitch(localProfilePlugin, true, PluginType.PROFILE) - val profile = Profile(JSONObject(validProfile), Constants.MGDL) - Assert.assertTrue(profile.isValid("Test")) - localProfilePlugin.profiles.clear() - localProfilePlugin.numOfProfiles = 0 - val singleProfile = LocalProfilePlugin.SingleProfile().copyFrom(localProfilePlugin.rawProfile, profile, "TestProfile") - localProfilePlugin.addProfile(singleProfile) - val profileSwitch = profileFunction.prepareProfileSwitch(localProfilePlugin.createProfileStore(), "TestProfile", 0, 100, 0, dateUtil._now()) - treatmentsPlugin.addToHistoryProfileSwitch(profileSwitch) - // Insulin - configBuilderPlugin.performPluginSwitch(insulinOrefUltraRapidActingPlugin, true, PluginType.INSULIN) - // Pump - sp.putInt(R.string.key_danar_password, R_PASSWORD) - sp.putString(R.string.key_danar_bt_name, R_SERIAL) - configBuilderPlugin.performPluginSwitch((pump as PluginBase), true, PluginType.PUMP) - // Sensitivity - configBuilderPlugin.performPluginSwitch(sensitivityOref1Plugin, true, PluginType.SENSITIVITY) - // APS - configBuilderPlugin.performPluginSwitch(openAPSSMBPlugin, true, PluginType.APS) - configBuilderPlugin.performPluginSwitch(loopPlugin, true, PluginType.LOOP) - - // Enable common - configBuilderPlugin.performPluginSwitch(actionsPlugin, true, ) - - // Disable unneeded - MainApp.getPluginsList().remove(objectivesPlugin) - } - - @Test - fun doTest() { - Assert.assertTrue(isRunningTest()) - preparePlugins() - - while (!pump.isInitialized) { - //log.debug("Waiting for initialization") - SystemClock.sleep(1000) + /* + companion object { + const val R_PASSWORD = 1234 + const val R_SERIAL = "PBB00013LR_P" } - while (true) { - //log.debug("Tick") - SystemClock.sleep(1000) + private val validProfile = "{\"dia\":\"6\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"10\"},{\"time\":\"2:00\",\"value\":\"11\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" + + @Inject lateinit var pump : info.nightscout.androidaps.danaRv2.DanaRv2Plugin + @Inject lateinit var randomBgPlugin :RandomBgPlugin + @Inject lateinit var localProfilePlugin: LocalProfilePlugin + @Inject lateinit var profileFunction: ProfileFunction + @Inject lateinit var insulinOrefUltraRapidActingPlugin: InsulinOrefUltraRapidActingPlugin + @Inject lateinit var sensitivityOref1Plugin: SensitivityOref1Plugin + @Inject lateinit var openAPSSMBPlugin: OpenAPSSMBPlugin + @Inject lateinit var loopPlugin: LoopPlugin + @Inject lateinit var actionsPlugin: ActionsPlugin + @Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin + @Inject lateinit var objectivesPlugin: ObjectivesPlugin + @Inject lateinit var treatmentsPlugin: TreatmentsPlugin + @Inject lateinit var sp: SP + + @Rule + @JvmField + var mActivityTestRule = ActivityTestRule(MainActivity::class.java) + + @Rule + @JvmField + var mGrantPermissionRule: GrantPermissionRule = + GrantPermissionRule.grant( + android.Manifest.permission.ACCESS_FINE_LOCATION, + android.Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, + android.Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + + @Before + fun clear() { + sp.clear() + sp.putBoolean(R.string.key_setupwizard_processed, true) + sp.putString(R.string.key_aps_mode, "closed") + MainApp.getDbHelper().resetDatabases() + MainApp.devBranch = false } - } - */ + + private fun preparePlugins() { + // Source + configBuilderPlugin.performPluginSwitch(randomBgPlugin,true, PluginType.BGSOURCE) + // Profile + configBuilderPlugin.performPluginSwitch(localProfilePlugin, true, PluginType.PROFILE) + val profile = Profile(JSONObject(validProfile), Constants.MGDL) + Assert.assertTrue(profile.isValid("Test")) + localProfilePlugin.profiles.clear() + localProfilePlugin.numOfProfiles = 0 + val singleProfile = LocalProfilePlugin.SingleProfile().copyFrom(localProfilePlugin.rawProfile, profile, "TestProfile") + localProfilePlugin.addProfile(singleProfile) + val profileSwitch = profileFunction.prepareProfileSwitch(localProfilePlugin.createProfileStore(), "TestProfile", 0, 100, 0, dateUtil._now()) + treatmentsPlugin.addToHistoryProfileSwitch(profileSwitch) + // Insulin + configBuilderPlugin.performPluginSwitch(insulinOrefUltraRapidActingPlugin, true, PluginType.INSULIN) + // Pump + sp.putInt(R.string.key_danar_password, R_PASSWORD) + sp.putString(R.string.key_danar_bt_name, R_SERIAL) + configBuilderPlugin.performPluginSwitch((pump as PluginBase), true, PluginType.PUMP) + // Sensitivity + configBuilderPlugin.performPluginSwitch(sensitivityOref1Plugin, true, PluginType.SENSITIVITY) + // APS + configBuilderPlugin.performPluginSwitch(openAPSSMBPlugin, true, PluginType.APS) + configBuilderPlugin.performPluginSwitch(loopPlugin, true, PluginType.LOOP) + + // Enable common + configBuilderPlugin.performPluginSwitch(actionsPlugin, true, ) + + // Disable unneeded + MainApp.getPluginsList().remove(objectivesPlugin) + } + + @Test + fun doTest() { + Assert.assertTrue(isRunningTest()) + preparePlugins() + + while (!pump.isInitialized) { + //log.debug("Waiting for initialization") + SystemClock.sleep(1000) + } + + while (true) { + //log.debug("Tick") + SystemClock.sleep(1000) + } + } + */ } \ No newline at end of file diff --git a/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt b/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt index ba6a794cab..d5efa1841c 100644 --- a/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt +++ b/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt @@ -1,195 +1,191 @@ package info.nightscout.androidaps -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.LargeTest -import org.junit.runner.RunWith - -@LargeTest -@RunWith(AndroidJUnit4::class) +//@LargeTest +//@RunWith(AndroidJUnit4::class) class SetupWizardActivityTest { -/* - @Rule - @JvmField - var mActivityTestRule = ActivityTestRule(SetupWizardActivity::class.java) + /* + @Rule + @JvmField + var mActivityTestRule = ActivityTestRule(SetupWizardActivity::class.java) - @Rule - @JvmField - var mGrantPermissionRule: GrantPermissionRule = - GrantPermissionRule.grant( - android.Manifest.permission.ACCESS_FINE_LOCATION, - android.Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, - android.Manifest.permission.WRITE_EXTERNAL_STORAGE - ) + @Rule + @JvmField + var mGrantPermissionRule: GrantPermissionRule = + GrantPermissionRule.grant( + android.Manifest.permission.ACCESS_FINE_LOCATION, + android.Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, + android.Manifest.permission.WRITE_EXTERNAL_STORAGE + ) - @Before - fun clear() { - sp.clear() - } -/* - -To run from command line -gradlew connectedFullDebugAndroidTest - -do not run when your production phone is connected !!! - -do this before for running in emulator -adb shell settings put global window_animation_scale 0 & -adb shell settings put global transition_animation_scale 0 & -adb shell settings put global animator_duration_scale 0 & - */ - - @Test - fun setupWizardActivityTest() { - sp.clear() - Assert.assertTrue(isRunningTest()) - // Welcome page - onView(withId(R.id.next_button)).perform(click()) - // Language selection - onView(withText("English")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Agreement page - onView(withText("I UNDERSTAND AND AGREE")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Location permission - var askButton = onView(withText("Ask for permission")) - if (askButton.isDisplayed()) { - askButton.perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) + @Before + fun clear() { + sp.clear() } - // Store permission - askButton = onView(withText("Ask for permission")) - if (askButton.isDisplayed()) { - askButton.perform(scrollTo(), click()) - onView(withText("OK")).perform(click()) + /* + + To run from command line + gradlew connectedFullDebugAndroidTest + + do not run when your production phone is connected !!! + + do this before for running in emulator + adb shell settings put global window_animation_scale 0 & + adb shell settings put global transition_animation_scale 0 & + adb shell settings put global animator_duration_scale 0 & + */ + + @Test + fun setupWizardActivityTest() { + sp.clear() + Assert.assertTrue(isRunningTest()) + // Welcome page + onView(withId(R.id.next_button)).perform(click()) + // Language selection + onView(withText("English")).perform(scrollTo(), click()) onView(withId(R.id.next_button)).waitAndPerform(click()) - } - // Import settings : skip of found - askButton = onView(withText("IMPORT SETTINGS")) - if (askButton.isDisplayed()) { + // Agreement page + onView(withText("I UNDERSTAND AND AGREE")).perform(scrollTo(), click()) onView(withId(R.id.next_button)).waitAndPerform(click()) - } - // Units selection - onView(withText("mmol/L")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).perform(click()) - // Display target selection - onView(withText("4.2")).perform(scrollTo(), ViewActions.replaceText("5")) - onView(withText("10.0")).perform(scrollTo(), ViewActions.replaceText("11")) - onView(withId(R.id.next_button)).perform(click()) - // NSClient - onView(withId(R.id.next_button)).perform(click()) - // Age selection - onView(withText("Adult")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Insulin selection - onView(withText("Ultra-Rapid Oref")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // BG source selection - onView(withText("Random BG")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Profile selection - onView(withText("Local Profile")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Local profile - DIA - onView(withTagValue(Matchers.`is`("LP_DIA"))).perform(scrollTo(), ViewActions.replaceText("6.0")) - // Local profile - IC - onView(withId(R.id.ic_tab)).perform(scrollTo(), click()) - onView(Matchers.allOf(withTagValue(Matchers.`is`("IC-1-0")), isDisplayed())) - .perform(ViewActions.replaceText("2"), ViewActions.closeSoftKeyboard()) - // Local profile - ISF - onView(withId(R.id.isf_tab)).perform(scrollTo(), click()) - onView(Matchers.allOf(withTagValue(Matchers.`is`("ISF-1-0")), isDisplayed())) - .perform(ViewActions.replaceText("3"), ViewActions.closeSoftKeyboard()) - // Local profile - BAS - onView(withId(R.id.basal_tab)).perform(scrollTo(), click()) - onView(childAtPosition(Matchers.allOf(withId(R.id.localprofile_basal), childAtPosition(withClassName(Matchers.`is`("android.widget.LinearLayout")), 6)), 2)) - .perform(scrollTo(), click()) - onView(Matchers.allOf(withTagValue(Matchers.`is`("BASAL-1-0")), isDisplayed())) - .perform(ViewActions.replaceText("1.1"), ViewActions.closeSoftKeyboard()) - onView(Matchers.allOf(withTagValue(Matchers.`is`("BASAL-1-1")), isDisplayed())) - .perform(ViewActions.replaceText("1.2"), ViewActions.closeSoftKeyboard()) - onView(Matchers.allOf(withId(R.id.timelistedit_time), childAtPosition(childAtPosition(withId(R.id.localprofile_basal), 2), 0))) - .perform(scrollTo(), click()) - onData(Matchers.anything()).inAdapterView(childAtPosition(withClassName(Matchers.`is`("android.widget.PopupWindow\$PopupBackgroundView")), 0)).atPosition(13) - .perform(click()) - // Local profile - TARGET - onView(withId(R.id.target_tab)).perform(scrollTo(), click()) - onView(Matchers.allOf(withTagValue(Matchers.`is`("TARGET-1-0")), isDisplayed())) - .perform(ViewActions.replaceText("6"), ViewActions.closeSoftKeyboard()) - onView(Matchers.allOf(withTagValue(Matchers.`is`("TARGET-2-0")), isDisplayed())) - .perform(ViewActions.replaceText("6.5"), ViewActions.closeSoftKeyboard()) - onView(withText("Save")).perform(scrollTo(), click()) - onView(Matchers.allOf(withId(R.id.localprofile_profileswitch), isDisplayed())) - .perform(scrollTo(), click()) - onView(allOf(withId(R.id.ok), isDisplayed())).perform(click()) - // confirm dialog - //onView(Matchers.allOf(withText("OK"), isDisplayed())).perform(click()) not working on real phone - clickOkInDialog() - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Profile switch - askButton = onView(withText("Do Profile Switch")) - if (askButton.isDisplayed()) { - askButton.perform(scrollTo(), click()) + // Location permission + var askButton = onView(withText("Ask for permission")) + if (askButton.isDisplayed()) { + askButton.perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + } + // Store permission + askButton = onView(withText("Ask for permission")) + if (askButton.isDisplayed()) { + askButton.perform(scrollTo(), click()) + onView(withText("OK")).perform(click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + } + // Import settings : skip of found + askButton = onView(withText("IMPORT SETTINGS")) + if (askButton.isDisplayed()) { + onView(withId(R.id.next_button)).waitAndPerform(click()) + } + // Units selection + onView(withText("mmol/L")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).perform(click()) + // Display target selection + onView(withText("4.2")).perform(scrollTo(), ViewActions.replaceText("5")) + onView(withText("10.0")).perform(scrollTo(), ViewActions.replaceText("11")) + onView(withId(R.id.next_button)).perform(click()) + // NSClient + onView(withId(R.id.next_button)).perform(click()) + // Age selection + onView(withText("Adult")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // Insulin selection + onView(withText("Ultra-Rapid Oref")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // BG source selection + onView(withText("Random BG")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // Profile selection + onView(withText("Local Profile")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // Local profile - DIA + onView(withTagValue(Matchers.`is`("LP_DIA"))).perform(scrollTo(), ViewActions.replaceText("6.0")) + // Local profile - IC + onView(withId(R.id.ic_tab)).perform(scrollTo(), click()) + onView(Matchers.allOf(withTagValue(Matchers.`is`("IC-1-0")), isDisplayed())) + .perform(ViewActions.replaceText("2"), ViewActions.closeSoftKeyboard()) + // Local profile - ISF + onView(withId(R.id.isf_tab)).perform(scrollTo(), click()) + onView(Matchers.allOf(withTagValue(Matchers.`is`("ISF-1-0")), isDisplayed())) + .perform(ViewActions.replaceText("3"), ViewActions.closeSoftKeyboard()) + // Local profile - BAS + onView(withId(R.id.basal_tab)).perform(scrollTo(), click()) + onView(childAtPosition(Matchers.allOf(withId(R.id.localprofile_basal), childAtPosition(withClassName(Matchers.`is`("android.widget.LinearLayout")), 6)), 2)) + .perform(scrollTo(), click()) + onView(Matchers.allOf(withTagValue(Matchers.`is`("BASAL-1-0")), isDisplayed())) + .perform(ViewActions.replaceText("1.1"), ViewActions.closeSoftKeyboard()) + onView(Matchers.allOf(withTagValue(Matchers.`is`("BASAL-1-1")), isDisplayed())) + .perform(ViewActions.replaceText("1.2"), ViewActions.closeSoftKeyboard()) + onView(Matchers.allOf(withId(R.id.timelistedit_time), childAtPosition(childAtPosition(withId(R.id.localprofile_basal), 2), 0))) + .perform(scrollTo(), click()) + onData(Matchers.anything()).inAdapterView(childAtPosition(withClassName(Matchers.`is`("android.widget.PopupWindow\$PopupBackgroundView")), 0)).atPosition(13) + .perform(click()) + // Local profile - TARGET + onView(withId(R.id.target_tab)).perform(scrollTo(), click()) + onView(Matchers.allOf(withTagValue(Matchers.`is`("TARGET-1-0")), isDisplayed())) + .perform(ViewActions.replaceText("6"), ViewActions.closeSoftKeyboard()) + onView(Matchers.allOf(withTagValue(Matchers.`is`("TARGET-2-0")), isDisplayed())) + .perform(ViewActions.replaceText("6.5"), ViewActions.closeSoftKeyboard()) + onView(withText("Save")).perform(scrollTo(), click()) + onView(Matchers.allOf(withId(R.id.localprofile_profileswitch), isDisplayed())) + .perform(scrollTo(), click()) onView(allOf(withId(R.id.ok), isDisplayed())).perform(click()) - // onView(Matchers.allOf(withText("OK"), isDisplayed())).perform(click()) not working on real phone + // confirm dialog + //onView(Matchers.allOf(withText("OK"), isDisplayed())).perform(click()) not working on real phone clickOkInDialog() - while (ProfileFunctions.getInstance().profile == null) SystemClock.sleep(100) onView(withId(R.id.next_button)).waitAndPerform(click()) - } - // Pump - onView(withText("Virtual Pump")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // APS - onView(withText("OpenAPS SMB")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Open Closed Loop - onView(withText("Closed Loop")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Loop - askButton = onView(withText("Enable loop")) - if (askButton.isDisplayed()) { - askButton.perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - } - // Sensitivity - onView(withText("Sensitivity Oref1")).perform(scrollTo(), click()) - onView(withId(R.id.next_button)).waitAndPerform(click()) - // Objectives - onView(allOf(withText("Start"), isDisplayed())).perform(scrollTo(), click()) - onView(withId(R.id.finish_button)).waitAndPerform(click()) - - // Verify settings - Assert.assertEquals(Constants.MMOL, ProfileFunctions.getSystemUnits()) - Assert.assertEquals(17.0, HardLimits.maxBolus(), 0.0001) // Adult - Assert.assertTrue(RandomBgPlugin.isEnabled(PluginType.BGSOURCE)) - Assert.assertTrue(LocalProfilePlugin.isEnabled(PluginType.PROFILE)) - val p = ProfileFunctions.getInstance().profile - Assert.assertNotNull(p) - Assert.assertEquals(2.0, p!!.ic, 0.0001) - Assert.assertEquals(3.0 * Constants.MMOLL_TO_MGDL, p.isfMgdl, 0.0001) - Assert.assertEquals(1.1, p.getBasalTimeFromMidnight(0), 0.0001) - Assert.assertEquals(6.0 * Constants.MMOLL_TO_MGDL, p.targetLowMgdl, 0.0001) - Assert.assertTrue(VirtualPumpPlugin.getPlugin().isEnabled(PluginType.PUMP)) - Assert.assertTrue(OpenAPSSMBPlugin.getPlugin().isEnabled()) - Assert.assertTrue(LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)) - Assert.assertTrue(SensitivityOref1Plugin.getPlugin().isEnabled(PluginType.SENSITIVITY)) - Assert.assertTrue(ObjectivesPlugin.objectives[0].isStarted) - } - - private fun childAtPosition( - parentMatcher: Matcher, position: Int): Matcher { - - return object : TypeSafeMatcher() { - override fun describeTo(description: Description) { - description.appendText("Child at position $position in parent ") - parentMatcher.describeTo(description) + // Profile switch + askButton = onView(withText("Do Profile Switch")) + if (askButton.isDisplayed()) { + askButton.perform(scrollTo(), click()) + onView(allOf(withId(R.id.ok), isDisplayed())).perform(click()) + // onView(Matchers.allOf(withText("OK"), isDisplayed())).perform(click()) not working on real phone + clickOkInDialog() + while (ProfileFunctions.getInstance().profile == null) SystemClock.sleep(100) + onView(withId(R.id.next_button)).waitAndPerform(click()) } + // Pump + onView(withText("Virtual Pump")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // APS + onView(withText("OpenAPS SMB")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // Open Closed Loop + onView(withText("Closed Loop")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // Loop + askButton = onView(withText("Enable loop")) + if (askButton.isDisplayed()) { + askButton.perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + } + // Sensitivity + onView(withText("Sensitivity Oref1")).perform(scrollTo(), click()) + onView(withId(R.id.next_button)).waitAndPerform(click()) + // Objectives + onView(allOf(withText("Start"), isDisplayed())).perform(scrollTo(), click()) + onView(withId(R.id.finish_button)).waitAndPerform(click()) - public override fun matchesSafely(view: View): Boolean { - val parent = view.parent - return parent is ViewGroup && parentMatcher.matches(parent) - && view == parent.getChildAt(position) + // Verify settings + Assert.assertEquals(Constants.MMOL, ProfileFunctions.getSystemUnits()) + Assert.assertEquals(17.0, HardLimits.maxBolus(), 0.0001) // Adult + Assert.assertTrue(RandomBgPlugin.isEnabled(PluginType.BGSOURCE)) + Assert.assertTrue(LocalProfilePlugin.isEnabled(PluginType.PROFILE)) + val p = ProfileFunctions.getInstance().profile + Assert.assertNotNull(p) + Assert.assertEquals(2.0, p!!.ic, 0.0001) + Assert.assertEquals(3.0 * Constants.MMOLL_TO_MGDL, p.isfMgdl, 0.0001) + Assert.assertEquals(1.1, p.getBasalTimeFromMidnight(0), 0.0001) + Assert.assertEquals(6.0 * Constants.MMOLL_TO_MGDL, p.targetLowMgdl, 0.0001) + Assert.assertTrue(VirtualPumpPlugin.getPlugin().isEnabled(PluginType.PUMP)) + Assert.assertTrue(OpenAPSSMBPlugin.getPlugin().isEnabled()) + Assert.assertTrue(LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)) + Assert.assertTrue(SensitivityOref1Plugin.getPlugin().isEnabled(PluginType.SENSITIVITY)) + Assert.assertTrue(ObjectivesPlugin.objectives[0].isStarted) + } + + private fun childAtPosition( + parentMatcher: Matcher, position: Int): Matcher { + + return object : TypeSafeMatcher() { + override fun describeTo(description: Description) { + description.appendText("Child at position $position in parent ") + parentMatcher.describeTo(description) + } + + public override fun matchesSafely(view: View): Boolean { + val parent = view.parent + return parent is ViewGroup && parentMatcher.matches(parent) + && view == parent.getChildAt(position) + } } } - } - */ + */ } diff --git a/app/src/main/java/info/nightscout/androidaps/MainActivity.kt b/app/src/main/java/info/nightscout/androidaps/MainActivity.kt index 9adbcafd07..ffc876d687 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/MainActivity.kt @@ -52,7 +52,7 @@ import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.Config import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.plugin.ActivePlugin @@ -96,7 +96,7 @@ class MainActivity : DaggerAppCompatActivityWithResult() { @Inject lateinit var fabricPrivacy: FabricPrivacy @Inject lateinit var protectionCheck: ProtectionCheck @Inject lateinit var iconsProvider: IconsProvider - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var signatureVerifierPlugin: SignatureVerifierPlugin @Inject lateinit var uel: UserEntryLogger @Inject lateinit var profileFunction: ProfileFunction diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.kt b/app/src/main/java/info/nightscout/androidaps/MainApp.kt index 67b544ed75..3c3e6b1a9a 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.kt +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.kt @@ -38,6 +38,7 @@ import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.versionChecker.VersionCheckerUtils +import info.nightscout.plugins.aps.utils.StaticInjector import info.nightscout.plugins.general.overview.notifications.NotificationStore import info.nightscout.plugins.general.themes.ThemeSwitcherPlugin import info.nightscout.rx.logging.AAPSLogger @@ -77,7 +78,7 @@ class MainApp : DaggerApplication() { @Inject lateinit var compatDBHelper: CompatDBHelper @Inject lateinit var repository: AppRepository @Inject lateinit var dateUtil: DateUtil - @Suppress("unused") @Inject lateinit var staticInjector: info.nightscout.plugins.aps.utils.StaticInjector// TODO avoid , here fake only to initialize + @Suppress("unused") @Inject lateinit var staticInjector: StaticInjector// TODO avoid , here fake only to initialize @Inject lateinit var uel: UserEntryLogger @Inject lateinit var uiInteraction: UiInteraction @Inject lateinit var notificationStore: NotificationStore diff --git a/app/src/main/java/info/nightscout/androidaps/di/ServicesModule.kt b/app/src/main/java/info/nightscout/androidaps/di/ServicesModule.kt deleted file mode 100644 index 200b83579f..0000000000 --- a/app/src/main/java/info/nightscout/androidaps/di/ServicesModule.kt +++ /dev/null @@ -1,2 +0,0 @@ -package info.nightscout.androidaps.di - diff --git a/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt index 7f74063515..69c9d56b79 100644 --- a/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt @@ -8,8 +8,7 @@ import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ApsMode import info.nightscout.interfaces.Config -import info.nightscout.sdk.interfaces.RunningConfiguration -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin @@ -20,7 +19,7 @@ import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.receivers.ReceiverStatusStore import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.pump.virtual.VirtualPumpPlugin -import info.nightscout.rx.bus.RxBus +import info.nightscout.sdk.interfaces.RunningConfiguration import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil @@ -34,8 +33,7 @@ import org.mockito.Mockito.`when` class LoopPluginTest : TestBase() { @Mock lateinit var sp: SP - private val rxBus: RxBus = RxBus(aapsSchedulers, aapsLogger) - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var rh: ResourceHelper @Mock lateinit var profileFunction: ProfileFunction @Mock lateinit var context: Context diff --git a/app/src/test/java/info/nightscout/plugins/configBuilder/ConfigBuilderPluginTest.kt b/app/src/test/java/info/nightscout/plugins/configBuilder/ConfigBuilderPluginTest.kt index 3013ce8090..3061e18835 100644 --- a/app/src/test/java/info/nightscout/plugins/configBuilder/ConfigBuilderPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/configBuilder/ConfigBuilderPluginTest.kt @@ -8,7 +8,6 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.protection.ProtectionCheck import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase @@ -37,6 +36,6 @@ class ConfigBuilderPluginTest : TestBase() { @BeforeEach fun prepareMock() { - configBuilderPlugin = ConfigBuilderPlugin(injector, aapsLogger, rh, sp, RxBus(aapsSchedulers, aapsLogger), activePlugin, uel, pumpSync, protectionCheck, uiInteraction) + configBuilderPlugin = ConfigBuilderPlugin(injector, aapsLogger, rh, sp, rxBus, activePlugin, uel, pumpSync, protectionCheck, uiInteraction) } } \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt b/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt index ad5bac6590..627ff00b5e 100644 --- a/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt +++ b/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt @@ -9,13 +9,14 @@ import info.nightscout.androidaps.insight.database.InsightDatabase import info.nightscout.androidaps.insight.database.InsightDatabaseDao import info.nightscout.androidaps.insight.database.InsightDbHelper import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.database.impl.AppRepository import info.nightscout.implementation.iob.GlucoseStatusProviderImpl import info.nightscout.interfaces.ApsMode import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.constraints.Objectives +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginType @@ -74,7 +75,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { private lateinit var danaPump: DanaPump private lateinit var insightDbHelper: InsightDbHelper - private lateinit var constraintChecker: ConstraintsImpl + private lateinit var constraintChecker: ConstraintsCheckerImpl private lateinit var safetyPlugin: SafetyPlugin private lateinit var objectivesPlugin: ObjectivesPlugin private lateinit var comboPlugin: ComboPlugin @@ -94,6 +95,9 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { if (it is PumpEnactResult) { it.context = context } + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } } } @@ -134,7 +138,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { `when`(sp.getString(R.string.key_danar_bt_name, "")).thenReturn("") //SafetyPlugin - constraintChecker = ConstraintsImpl(activePlugin) + constraintChecker = ConstraintsCheckerImpl(activePlugin, injector) val glucoseStatusProvider = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculator, dateUtil, decimalFormatter) @@ -226,7 +230,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { constraintsPluginsList.add(insightPlugin) constraintsPluginsList.add(openAPSAMAPlugin) constraintsPluginsList.add(openAPSSMBPlugin) - `when`(activePlugin.getSpecificPluginsListByInterface(Constraints::class.java)).thenReturn(constraintsPluginsList) + `when`(activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java)).thenReturn(constraintsPluginsList) objectivesPlugin.onStart() } @@ -268,7 +272,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { val c = constraintChecker.isAutosensModeEnabled() assertThat(c.reasonList).hasSize(2) // Safety & Objectives assertThat(c.mostLimitedReasonList).hasSize(2) // Safety & Objectives - assertThat( c.value()).isFalse() + assertThat(c.value()).isFalse() } // Safety @@ -278,7 +282,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { val c = constraintChecker.isAdvancedFilteringEnabled() assertThat(c.reasonList).hasSize(1) // Safety assertThat(c.mostLimitedReasonList).hasSize(1) // Safety - assertThat( c.value()).isFalse() + assertThat(c.value()).isFalse() } // SMB should limit @@ -286,7 +290,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { fun isSuperBolusEnabledTest() { openAPSSMBPlugin.setPluginEnabled(PluginType.APS, true) val c = constraintChecker.isSuperBolusEnabled() - assertThat( c.value()).isFalse() // SMB should limit + assertThat(c.value()).isFalse() // SMB should limit } // Safety & Objectives @@ -296,11 +300,11 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { objectivesPlugin.objectives[Objectives.SMB_OBJECTIVE].startedOn = 0 `when`(sp.getBoolean(info.nightscout.plugins.aps.R.string.key_use_smb, false)).thenReturn(false) `when`(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)).thenReturn(ApsMode.OPEN.name) -// `when`(constraintChecker.isClosedLoopAllowed()).thenReturn(Constraint(true)) +// `when`(constraintChecker.isClosedLoopAllowed()).thenReturn(ConstraintObject(true)) val c = constraintChecker.isSMBModeEnabled() assertThat(c.reasonList).hasSize(3) // 2x Safety & Objectives assertThat(c.mostLimitedReasonList).hasSize(3) // 2x Safety & Objectives - assertThat( c.value()).isFalse() + assertThat(c.value()).isFalse() } // applyBasalConstraints tests @@ -326,9 +330,9 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { // Apply all limits val d = constraintChecker.getMaxBasalAllowed(validProfile) - assertThat( d.value()).isWithin( 0.01).of(0.8) + assertThat(d.value()).isWithin(0.01).of(0.8) assertThat(d.reasonList).hasSize(3) - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit") + assertThat(d.getMostLimitedReasons()).isEqualTo("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit") } @Test @@ -355,7 +359,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { val i = constraintChecker.getMaxBasalPercentAllowed(validProfile) assertThat(i.value()).isEqualTo(200) assertThat(i.reasonList).hasSize(6) - assertThat(i.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting max percent rate to 200% because of pump limit") + assertThat(i.getMostLimitedReasons()).isEqualTo("Safety: Limiting max percent rate to 200% because of pump limit") } // applyBolusConstraints tests @@ -380,9 +384,9 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { // Apply all limits val d = constraintChecker.getMaxBolusAllowed() - assertThat( d.value()).isWithin( 0.01).of(3.0) + assertThat(d.value()).isWithin(0.01).of(3.0) assertThat(d.reasonList).hasSize(4) // 2x Safety & RS & R - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting bolus to 3.0 U because of max value in preferences") + assertThat(d.getMostLimitedReasons()).isEqualTo("Safety: Limiting bolus to 3.0 U because of max value in preferences") } // applyCarbsConstraints tests @@ -395,7 +399,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { val i = constraintChecker.getMaxCarbsAllowed() assertThat(i.value()).isEqualTo(48) assertThat(i.reasonList).hasSize(1) - assertThat(i.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting carbs to 48 g because of max value in preferences") + assertThat(i.getMostLimitedReasons()).isEqualTo("Safety: Limiting carbs to 48 g because of max value in preferences") } // applyMaxIOBConstraints tests @@ -410,9 +414,9 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { // Apply all limits val d = constraintChecker.getMaxIOBAllowed() - assertThat( d.value()).isWithin( 0.01).of(1.5) + assertThat(d.value()).isWithin(0.01).of(1.5) assertThat(d.reasonList).hasSize(2) - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences") + assertThat(d.getMostLimitedReasons()).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences") } @Test @@ -426,8 +430,8 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { // Apply all limits val d = constraintChecker.getMaxIOBAllowed() - assertThat( d.value()).isWithin( 0.01).of(3.0) + assertThat(d.value()).isWithin(0.01).of(3.0) assertThat(d.reasonList).hasSize(2) - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("OpenAPSSMB: Limiting IOB to 3.0 U because of max value in preferences") + assertThat(d.getMostLimitedReasons()).isEqualTo("OpenAPSSMB: Limiting IOB to 3.0 U because of max value in preferences") } } diff --git a/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt b/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt index 56e88846d8..d473e1c789 100644 --- a/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt @@ -3,12 +3,12 @@ package info.nightscout.plugins.safety import com.google.common.truth.Truth.assertThat import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ApsMode -import info.nightscout.interfaces.Constants import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profiling.Profiler @@ -29,7 +29,7 @@ import org.mockito.Mockito.`when` class SafetyPluginTest : TestBaseWithProfile() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin @Mock lateinit var glimpPlugin: GlimpPlugin @Mock lateinit var profiler: Profiler @@ -43,7 +43,13 @@ class SafetyPluginTest : TestBaseWithProfile() { private lateinit var openAPSAMAPlugin: OpenAPSAMAPlugin private lateinit var openAPSSMBPlugin: OpenAPSSMBPlugin - private val injector = HasAndroidInjector { AndroidInjector { } } + private val injector = HasAndroidInjector { + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } + } private val pumpDescription = PumpDescription() @BeforeEach @@ -86,9 +92,8 @@ class SafetyPluginTest : TestBaseWithProfile() { @Test fun pumpDescriptionShouldLimitLoopInvocation() { pumpDescription.isTempBasalCapable = false - var c = Constraint(true) - c = safetyPlugin.isLoopInvocationAllowed(c) - assertThat(c.getReasons(aapsLogger)).isEqualTo("Safety: Pump is not temp basal capable") + val c = safetyPlugin.isLoopInvocationAllowed(ConstraintObject(true, injector)) + assertThat(c.getReasons()).isEqualTo("Safety: Pump is not temp basal capable") assertThat(c.value()).isFalse() } @@ -96,47 +101,42 @@ class SafetyPluginTest : TestBaseWithProfile() { fun disabledEngineeringModeShouldLimitClosedLoop() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)).thenReturn(ApsMode.CLOSED.name) `when`(config.isEngineeringModeOrRelease()).thenReturn(false) - var c = Constraint(true) - c = safetyPlugin.isClosedLoopAllowed(c) - assertThat(c.getReasons(aapsLogger)).contains("Running dev version. Closed loop is disabled.") + val c = safetyPlugin.isClosedLoopAllowed(ConstraintObject(true, injector)) + assertThat(c.getReasons()).contains("Running dev version. Closed loop is disabled.") assertThat(c.value()).isFalse() } @Test fun setOpenLoopInPreferencesShouldLimitClosedLoop() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)).thenReturn(ApsMode.OPEN.name) - var c = Constraint(true) - c = safetyPlugin.isClosedLoopAllowed(c) - assertThat(c.getReasons(aapsLogger)).contains("Closed loop mode disabled in preferences") + val c = safetyPlugin.isClosedLoopAllowed(ConstraintObject(true, injector)) + assertThat(c.getReasons()).contains("Closed loop mode disabled in preferences") assertThat(c.value()).isFalse() } @Test fun notEnabledSMBInPreferencesDisablesSMB() { `when`(sp.getBoolean(info.nightscout.plugins.aps.R.string.key_use_smb, false)).thenReturn(false) - `when`(constraintChecker.isClosedLoopAllowed(anyObject())).thenReturn(Constraint(true)) - var c = Constraint(true) - c = openAPSSMBPlugin.isSMBModeEnabled(c) - assertThat(c.getReasons(aapsLogger)).contains("SMB disabled in preferences") + `when`(constraintChecker.isClosedLoopAllowed(anyObject())).thenReturn(ConstraintObject(true, injector)) + val c = openAPSSMBPlugin.isSMBModeEnabled(ConstraintObject(true, injector)) + assertThat(c.getReasons()).contains("SMB disabled in preferences") assertThat(c.value()).isFalse() } @Test fun openLoopPreventsSMB() { `when`(sp.getBoolean(info.nightscout.plugins.aps.R.string.key_use_smb, false)).thenReturn(true) - `when`(constraintChecker.isClosedLoopAllowed(anyObject())).thenReturn(Constraint(false)) - var c = Constraint(true) - c = safetyPlugin.isSMBModeEnabled(c) - assertThat(c.getReasons(aapsLogger)).contains("SMB not allowed in open loop mode") + `when`(constraintChecker.isClosedLoopAllowed()).thenReturn(ConstraintObject(false, injector)) + val c = safetyPlugin.isSMBModeEnabled(ConstraintObject(true, injector)) + assertThat(c.getReasons()).contains("SMB not allowed in open loop mode") assertThat(c.value()).isFalse() } @Test fun bgSourceShouldPreventSMBAlways() { `when`(activePlugin.activeBgSource).thenReturn(glimpPlugin) - var c = Constraint(true) - c = safetyPlugin.isAdvancedFilteringEnabled(c) - assertThat(c.getReasons(aapsLogger)).isEqualTo("Safety: SMB always and after carbs disabled because active BG source doesn\\'t support advanced filtering") + val c = safetyPlugin.isAdvancedFilteringEnabled(ConstraintObject(true, injector)) + assertThat(c.getReasons()).isEqualTo("Safety: SMB always and after carbs disabled because active BG source doesn\\'t support advanced filtering") assertThat(c.value()).isFalse() } @@ -146,24 +146,26 @@ class SafetyPluginTest : TestBaseWithProfile() { `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_current_basal_safety_multiplier, 4.0)).thenReturn(4.0) `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_max_daily_safety_multiplier, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val c = Constraint(Constants.REALLYHIGHBASALRATE) + val c = ConstraintObject(Double.MAX_VALUE, injector) safetyPlugin.applyBasalConstraints(c, validProfile) assertThat(c.value()).isWithin(0.01).of(2.0) - assertThat(c.getReasons(aapsLogger)).isEqualTo( + assertThat(c.getReasons()).isEqualTo( """ Safety: Limiting max basal rate to 2.00 U/h because of hard limit - """.trimIndent()) - assertThat(c.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting max basal rate to 2.00 U/h because of hard limit") + """.trimIndent() + ) + assertThat(c.getMostLimitedReasons()).isEqualTo("Safety: Limiting max basal rate to 2.00 U/h because of hard limit") } @Test fun doNotAllowNegativeBasalRate() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val d = Constraint(-0.5) + val d = ConstraintObject(-0.5, injector) safetyPlugin.applyBasalConstraints(d, validProfile) assertThat(d.value()).isWithin(0.01).of(0.0) - assertThat(d.getReasons(aapsLogger)).isEqualTo( - "Safety: Limiting max basal rate to 0.00 U/h because of it must be positive value") + assertThat(d.getReasons()).isEqualTo( + "Safety: Limiting max basal rate to 0.00 U/h because of it must be positive value" + ) } @Test @@ -173,19 +175,20 @@ class SafetyPluginTest : TestBaseWithProfile() { `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_current_basal_safety_multiplier, 4.0)).thenReturn(4.0) `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_max_daily_safety_multiplier, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val i = Constraint(Constants.REALLYHIGHPERCENTBASALRATE) + val i = ConstraintObject(Int.MAX_VALUE, injector) safetyPlugin.applyBasalPercentConstraints(i, validProfile) assertThat(i.value()).isEqualTo(200) - assertThat(i.getReasons(aapsLogger)).isEqualTo( + assertThat(i.getReasons()).isEqualTo( """ -Safety: Percent rate 1111111% recalculated to 11111.11 U/h with current basal 1.00 U/h +Safety: Percent rate 2147483647% recalculated to 21474836.47 U/h with current basal 1.00 U/h Safety: Limiting max basal rate to 2.00 U/h because of hard limit Safety: Limiting max percent rate to 200% because of pump limit Safety: Limiting max basal rate to 500.00 U/h because of pump limit """.trimIndent() ) - assertThat(i.getMostLimitedReasons(aapsLogger)).isEqualTo( - "Safety: Limiting max percent rate to 200% because of pump limit") + assertThat(i.getMostLimitedReasons()).isEqualTo( + "Safety: Limiting max percent rate to 200% because of pump limit" + ) } @Test @@ -196,57 +199,58 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_max_daily_safety_multiplier, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") openAPSSMBPlugin.setPluginEnabled(PluginType.APS, true) - val i = Constraint(Constants.REALLYHIGHBASALRATE) + val i = ConstraintObject(Double.MAX_VALUE, injector) openAPSSMBPlugin.applyBasalConstraints(i, validProfile) assertThat(i.value()).isWithin(0.01).of(1.0) - assertThat(i.getReasons(aapsLogger)).isEqualTo( + assertThat(i.getReasons()).isEqualTo( """ OpenAPSSMB: Limiting max basal rate to 1.00 U/h because of max value in preferences OpenAPSSMB: Limiting max basal rate to 4.00 U/h because of max basal multiplier OpenAPSSMB: Limiting max basal rate to 3.00 U/h because of max daily basal multiplier - """.trimIndent()) - assertThat(i.getMostLimitedReasons(aapsLogger)).isEqualTo("OpenAPSSMB: Limiting max basal rate to 1.00 U/h because of max value in preferences") + """.trimIndent() + ) + assertThat(i.getMostLimitedReasons()).isEqualTo("OpenAPSSMB: Limiting max basal rate to 1.00 U/h because of max value in preferences") } @Test fun doNotAllowNegativePercentBasalRate() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val i = Constraint(-22) + val i = ConstraintObject(-22, injector) safetyPlugin.applyBasalPercentConstraints(i, validProfile) assertThat(i.value()).isEqualTo(0) - assertThat(i.getReasons(aapsLogger)).isEqualTo( + assertThat(i.getReasons()).isEqualTo( """ Safety: Percent rate -22% recalculated to -0.22 U/h with current basal 1.00 U/h Safety: Limiting max basal rate to 0.00 U/h because of it must be positive value Safety: Limiting max percent rate to 0% because of pump limit - """.trimIndent()) - assertThat(i.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting max percent rate to 0% because of pump limit") + """.trimIndent() + ) + assertThat(i.getMostLimitedReasons()).isEqualTo("Safety: Limiting max percent rate to 0% because of pump limit") } @Test fun bolusAmountShouldBeLimited() { `when`(sp.getDouble(info.nightscout.core.utils.R.string.key_treatmentssafety_maxbolus, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - var d = Constraint(Constants.REALLYHIGHBOLUS) - d = safetyPlugin.applyBolusConstraints(d) + val d = safetyPlugin.applyBolusConstraints(ConstraintObject(Double.MAX_VALUE, injector)) assertThat(d.value()).isWithin(0.01).of(3.0) - assertThat(d.getReasons(aapsLogger)).isEqualTo( + assertThat(d.getReasons()).isEqualTo( """ Safety: Limiting bolus to 3.0 U because of max value in preferences Safety: Limiting bolus to 5.0 U because of hard limit - """.trimIndent()) - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting bolus to 3.0 U because of max value in preferences") + """.trimIndent() + ) + assertThat(d.getMostLimitedReasons()).isEqualTo("Safety: Limiting bolus to 3.0 U because of max value in preferences") } @Test fun doNotAllowNegativeBolusAmount() { `when`(sp.getDouble(info.nightscout.core.utils.R.string.key_treatmentssafety_maxbolus, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - var d = Constraint(-22.0) - d = safetyPlugin.applyBolusConstraints(d) + val d = safetyPlugin.applyBolusConstraints(ConstraintObject(-22.0, injector)) assertThat(d.value()).isWithin(0.01).of(0.0) - assertThat(d.getReasons(aapsLogger)).isEqualTo("Safety: Limiting bolus to 0.0 U because of it must be positive value") - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting bolus to 0.0 U because of it must be positive value") + assertThat(d.getReasons()).isEqualTo("Safety: Limiting bolus to 0.0 U because of it must be positive value") + assertThat(d.getMostLimitedReasons()).isEqualTo("Safety: Limiting bolus to 0.0 U because of it must be positive value") } @Test @@ -255,15 +259,15 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit `when`(sp.getInt(info.nightscout.core.utils.R.string.key_treatmentssafety_maxcarbs, 48)).thenReturn(48) // Negative carbs not allowed - var i = Constraint(-22) + var i: Constraint = ConstraintObject(-22, injector) safetyPlugin.applyCarbsConstraints(i) assertThat(i.value()).isEqualTo(0) - assertThat(i.getReasons(aapsLogger)).isEqualTo("Safety: Limiting carbs to 0 g because of it must be positive value") + assertThat(i.getReasons()).isEqualTo("Safety: Limiting carbs to 0 g because of it must be positive value") // Apply all limits - i = safetyPlugin.applyCarbsConstraints(Constraint(Constants.REALLYHIGHCARBS)) + i = safetyPlugin.applyCarbsConstraints(ConstraintObject(Int.MAX_VALUE, injector)) assertThat(i.value()).isEqualTo(48) - assertThat(i.getReasons(aapsLogger)).isEqualTo("Safety: Limiting carbs to 48 g because of max value in preferences") + assertThat(i.getReasons()).isEqualTo("Safety: Limiting carbs to 48 g because of max value in preferences") } @Test @@ -278,24 +282,24 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("teenage") // Apply all limits - var d = Constraint(Constants.REALLYHIGHIOB) + var d: Constraint = ConstraintObject(Double.MAX_VALUE, injector) d = safetyPlugin.applyMaxIOBConstraints(d) assertThat(d.value()).isWithin(0.01).of(HardLimits.MAX_IOB_LGS) - assertThat(d.getReasons(aapsLogger)).isEqualTo("Safety: Limiting IOB to 0.0 U because of Low Glucose Suspend") - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("Safety: Limiting IOB to 0.0 U because of Low Glucose Suspend") + assertThat(d.getReasons()).isEqualTo("Safety: Limiting IOB to 0.0 U because of Low Glucose Suspend") + assertThat(d.getMostLimitedReasons()).isEqualTo("Safety: Limiting IOB to 0.0 U because of Low Glucose Suspend") // Apply all limits - d = Constraint(Constants.REALLYHIGHIOB) + d = ConstraintObject(Double.MAX_VALUE, injector) val a = openAPSAMAPlugin.applyMaxIOBConstraints(d) assertThat(a.value()).isWithin(0.01).of(1.5) - assertThat(d.getReasons(aapsLogger)).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences\nOpenAPSAMA: Limiting IOB to 7.0 U because of hard limit") - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences") + assertThat(d.getReasons()).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences\nOpenAPSAMA: Limiting IOB to 7.0 U because of hard limit") + assertThat(d.getMostLimitedReasons()).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences") // Apply all limits - d = Constraint(Constants.REALLYHIGHIOB) + d = ConstraintObject(Double.MAX_VALUE, injector) val s = openAPSSMBPlugin.applyMaxIOBConstraints(d) assertThat(s.value()).isWithin(0.01).of(3.0) - assertThat(d.getReasons(aapsLogger)).isEqualTo("OpenAPSSMB: Limiting IOB to 3.0 U because of max value in preferences\nOpenAPSSMB: Limiting IOB to 22.0 U because of hard limit") - assertThat(d.getMostLimitedReasons(aapsLogger)).isEqualTo("OpenAPSSMB: Limiting IOB to 3.0 U because of max value in preferences") + assertThat(d.getReasons()).isEqualTo("OpenAPSSMB: Limiting IOB to 3.0 U because of max value in preferences\nOpenAPSSMB: Limiting IOB to 22.0 U because of hard limit") + assertThat(d.getMostLimitedReasons()).isEqualTo("OpenAPSSMB: Limiting IOB to 3.0 U because of max value in preferences") } } diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt index fccdfcbc8f..e0c3bacd59 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt @@ -10,11 +10,6 @@ object Constants { const val MMOLL_TO_MGDL = 18.0 // 18.0182; const val MGDL_TO_MMOLL = 1 / MMOLL_TO_MGDL const val defaultDIA = 5.0 - const val REALLYHIGHBASALRATE = 1111111.0 - const val REALLYHIGHPERCENTBASALRATE = 1111111 - const val REALLYHIGHBOLUS = 1111111.0 - const val REALLYHIGHCARBS = 1111111 - const val REALLYHIGHIOB = 1111111.0 const val notificationID = 556677 // SMS COMMUNICATOR diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraint.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraint.kt index a332b9328d..e508da3fef 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraint.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraint.kt @@ -1,115 +1,18 @@ package info.nightscout.interfaces.constraints -import info.nightscout.rx.logging.AAPSLogger -import info.nightscout.rx.logging.LTag - -class Constraint>(private var value: T) { - - private var originalValue: T - private val reasons: MutableList = ArrayList() - private val mostLimiting: MutableList = ArrayList() - fun value(): T { - return value - } - - fun originalValue(): T { - return originalValue - } - - fun set(aapsLogger: AAPSLogger, value: T): Constraint { - this.value = value - originalValue = value - aapsLogger.debug(LTag.CONSTRAINTS, "Setting value $value") - return this - } - - fun set(aapsLogger: AAPSLogger, value: T, reason: String, from: Any): Constraint { - aapsLogger.debug(LTag.CONSTRAINTS, "Setting value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") - this.value = value - addReason(reason, from) - addMostLimingReason(reason, from) - return this - } - - fun setIfDifferent(aapsLogger: AAPSLogger, value: T, reason: String, from: Any): Constraint { - if (this.value != value) { - aapsLogger.debug(LTag.CONSTRAINTS, "Setting because of different value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") - this.value = value - addReason(reason, from) - addMostLimingReason(reason, from) - } - return this - } - - fun setIfSmaller(aapsLogger: AAPSLogger, value: T, reason: String, from: Any): Constraint { - if (value < this.value) { - aapsLogger.debug(LTag.CONSTRAINTS, "Setting because of smaller value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") - this.value = value - mostLimiting.clear() - addMostLimingReason(reason, from) - } - if (value < originalValue) { - addReason(reason, from) - } - return this - } - - fun setIfGreater(aapsLogger: AAPSLogger, value: T, reason: String, from: Any): Constraint { - if (value > this.value) { - aapsLogger.debug(LTag.CONSTRAINTS, "Setting because of greater value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") - this.value = value - mostLimiting.clear() - addMostLimingReason(reason, from) - } - if (value > originalValue) { - addReason(reason, from) - } - return this - } - - private fun translateFrom(from: Any): String { - return from.javaClass.simpleName.replace("Plugin", "") - } - - fun addReason(reason: String, from: Any) { - reasons.add(translateFrom(from) + ": " + reason) - } - - private fun addMostLimingReason(reason: String, from: Any) { - mostLimiting.add(translateFrom(from) + ": " + reason) - } - - fun getReasons(aapsLogger: AAPSLogger): String { - val sb = StringBuilder() - for ((count, r) in reasons.withIndex()) { - if (count != 0) sb.append("\n") - sb.append(r) - } - aapsLogger.debug(LTag.CONSTRAINTS, "Limiting original value: $originalValue to $value. Reason: $sb") - return sb.toString() - } +interface Constraint> { + fun value(): T + fun originalValue(): T + fun set(value: T): Constraint + fun set(value: T, reason: String, from: Any): Constraint + fun setIfDifferent(value: T, reason: String, from: Any): Constraint + fun setIfSmaller(value: T, reason: String, from: Any): Constraint + fun setIfGreater(value: T, reason: String, from: Any): Constraint + fun addReason(reason: String, from: Any) + fun getReasons(): String val reasonList: List - get() = reasons - - fun getMostLimitedReasons(aapsLogger: AAPSLogger): String { - val sb = StringBuilder() - for ((count, r) in mostLimiting.withIndex()) { - if (count != 0) sb.append("\n") - sb.append(r) - } - aapsLogger.debug(LTag.CONSTRAINTS, "Limiting original value: $originalValue to $value. Reason: $sb") - return sb.toString() - } - + fun getMostLimitedReasons(): String val mostLimitedReasonList: List - get() = mostLimiting - - fun copyReasons(another: Constraint<*>) { - reasons.addAll(another.reasonList) - } - - init { - originalValue = value - } + fun copyReasons(another: Constraint<*>) } \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt deleted file mode 100644 index c7ed46d688..0000000000 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/Constraints.kt +++ /dev/null @@ -1,58 +0,0 @@ -package info.nightscout.interfaces.constraints - -import info.nightscout.interfaces.Constants -import info.nightscout.interfaces.profile.Profile - -/** - * Constraints interface - * - * Every function has a param from previous chained call - * Function can limit the value even more and add another reason of restriction - * - * see [info.nightscout.plugins.constraints.ConstraintsImpl] - * which iterates over all registered plugins with [Constraints] implemented - * - * @return updated parameter - */ -interface Constraints { - - fun isLoopInvocationAllowed(value: Constraint = Constraint(true)): Constraint = value - fun isClosedLoopAllowed(value: Constraint = Constraint(true)): Constraint = value - fun isLgsAllowed(value: Constraint = Constraint(true)): Constraint = value - fun isAutosensModeEnabled(value: Constraint = Constraint(true)): Constraint = value - fun isSMBModeEnabled(value: Constraint = Constraint(true)): Constraint = value - fun isDynIsfModeEnabled(value: Constraint = Constraint(true)): Constraint = value - fun isUAMEnabled(value: Constraint = Constraint(true)): Constraint = value - fun isAdvancedFilteringEnabled(value: Constraint = Constraint(true)): Constraint = value - fun isSuperBolusEnabled(value: Constraint = Constraint(true)): Constraint = value - fun isAutomationEnabled(value: Constraint = Constraint(true)): Constraint = value - fun applyBasalConstraints(absoluteRate: Constraint, profile: Profile): Constraint = absoluteRate - fun applyBasalPercentConstraints(percentRate: Constraint, profile: Profile): Constraint = percentRate - fun applyBolusConstraints(insulin: Constraint): Constraint = insulin - fun applyExtendedBolusConstraints(insulin: Constraint): Constraint = insulin - fun applyCarbsConstraints(carbs: Constraint): Constraint = carbs - fun applyMaxIOBConstraints(maxIob: Constraint): Constraint = maxIob - - /* - * Determine max values by walking through all constraints - */ - fun getMaxBasalAllowed(profile: Profile): Constraint = - applyBasalConstraints(Constraint(Constants.REALLYHIGHBASALRATE), profile) - - fun getMaxBasalPercentAllowed(profile: Profile): Constraint = - applyBasalPercentConstraints(Constraint(Constants.REALLYHIGHPERCENTBASALRATE), profile) - - fun getMaxBolusAllowed(): Constraint = - applyBolusConstraints(Constraint(Constants.REALLYHIGHBOLUS)) - - fun getMaxExtendedBolusAllowed(): Constraint = - applyExtendedBolusConstraints(Constraint(Constants.REALLYHIGHBOLUS)) - - fun getMaxCarbsAllowed(): Constraint = - applyCarbsConstraints(Constraint(Constants.REALLYHIGHCARBS)) - - fun getMaxIOBAllowed(): Constraint = - applyMaxIOBConstraints(Constraint(Constants.REALLYHIGHIOB)) - - -} \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/ConstraintsChecker.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/ConstraintsChecker.kt new file mode 100644 index 0000000000..c1f3dde85d --- /dev/null +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/ConstraintsChecker.kt @@ -0,0 +1,36 @@ +package info.nightscout.interfaces.constraints + +import info.nightscout.interfaces.profile.Profile + +/** + * Constraints interface + * + * Every function has a param from previous chained call + * Function can limit the value even more and add another reason of restriction + * + * see [info.nightscout.plugins.constraints.ConstraintsCheckerImpl] + * which iterates over all registered plugins with [ConstraintsChecker] implemented + */ +interface ConstraintsChecker : PluginConstraints { + + fun isLoopInvocationAllowed(): Constraint + fun isClosedLoopAllowed(): Constraint + fun isLgsAllowed(): Constraint + fun isAutosensModeEnabled(): Constraint + fun isSMBModeEnabled(): Constraint + fun isDynIsfModeEnabled(): Constraint + fun isUAMEnabled(): Constraint + fun isAdvancedFilteringEnabled(): Constraint + fun isSuperBolusEnabled(): Constraint + fun isAutomationEnabled(): Constraint + + /* + * Determine max values by walking through all constraints + */ + fun getMaxBasalAllowed(profile: Profile): Constraint + fun getMaxBasalPercentAllowed(profile: Profile): Constraint + fun getMaxBolusAllowed(): Constraint + fun getMaxExtendedBolusAllowed(): Constraint + fun getMaxCarbsAllowed(): Constraint + fun getMaxIOBAllowed(): Constraint +} \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/PluginConstraints.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/PluginConstraints.kt new file mode 100644 index 0000000000..abc4cb45e3 --- /dev/null +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/constraints/PluginConstraints.kt @@ -0,0 +1,28 @@ +package info.nightscout.interfaces.constraints + +import info.nightscout.interfaces.profile.Profile + +/** + * PluginConstraints interface + * + * Allows to every plugin implement own constraints + */ +interface PluginConstraints { + + fun isLoopInvocationAllowed(value: Constraint): Constraint = value + fun isClosedLoopAllowed(value: Constraint): Constraint = value + fun isLgsAllowed(value: Constraint): Constraint = value + fun isAutosensModeEnabled(value: Constraint): Constraint = value + fun isSMBModeEnabled(value: Constraint): Constraint = value + fun isDynIsfModeEnabled(value: Constraint): Constraint = value + fun isUAMEnabled(value: Constraint): Constraint = value + fun isAdvancedFilteringEnabled(value: Constraint): Constraint = value + fun isSuperBolusEnabled(value: Constraint): Constraint = value + fun isAutomationEnabled(value: Constraint): Constraint = value + fun applyBasalConstraints(absoluteRate: Constraint, profile: Profile): Constraint = absoluteRate + fun applyBasalPercentConstraints(percentRate: Constraint, profile: Profile): Constraint = percentRate + fun applyBolusConstraints(insulin: Constraint): Constraint = insulin + fun applyExtendedBolusConstraints(insulin: Constraint): Constraint = insulin + fun applyCarbsConstraints(carbs: Constraint): Constraint = carbs + fun applyMaxIOBConstraints(maxIob: Constraint): Constraint = maxIob +} \ No newline at end of file diff --git a/core/main/build.gradle b/core/main/build.gradle index 4f27351da0..95c63acdde 100644 --- a/core/main/build.gradle +++ b/core/main/build.gradle @@ -20,6 +20,7 @@ dependencies { implementation project(':core:utils') testImplementation project(':app-wear-shared:shared-tests') + testImplementation project(':app-wear-shared:shared-impl') api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" diff --git a/core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt b/core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt new file mode 100644 index 0000000000..afda3ffa62 --- /dev/null +++ b/core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt @@ -0,0 +1,121 @@ +package info.nightscout.core.constraints + +import dagger.android.HasAndroidInjector +import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.rx.logging.LTag +import javax.inject.Inject + +class ConstraintObject>(private var value: T, injector: HasAndroidInjector) : Constraint { + + @Inject lateinit var aapsLogger: AAPSLogger + + private var originalValue: T + private val reasons: MutableList = ArrayList() + private val mostLimiting: MutableList = ArrayList() + override fun value(): T { + return value + } + + override fun originalValue(): T { + return originalValue + } + + override fun set(value: T): Constraint { + this.value = value + originalValue = value + aapsLogger.debug(LTag.CONSTRAINTS, "Setting value $value") + return this + } + + override fun set(value: T, reason: String, from: Any): Constraint { + aapsLogger.debug(LTag.CONSTRAINTS, "Setting value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") + this.value = value + addReason(reason, from) + addMostLimingReason(reason, from) + return this + } + + override fun setIfDifferent(value: T, reason: String, from: Any): Constraint { + if (this.value != value) { + aapsLogger.debug(LTag.CONSTRAINTS, "Setting because of different value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") + this.value = value + addReason(reason, from) + addMostLimingReason(reason, from) + } + return this + } + + override fun setIfSmaller(value: T, reason: String, from: Any): Constraint { + if (value < this.value) { + aapsLogger.debug(LTag.CONSTRAINTS, "Setting because of smaller value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") + this.value = value + mostLimiting.clear() + addMostLimingReason(reason, from) + } + if (value < originalValue) { + addReason(reason, from) + } + return this + } + + override fun setIfGreater(value: T, reason: String, from: Any): Constraint { + if (value > this.value) { + aapsLogger.debug(LTag.CONSTRAINTS, "Setting because of greater value " + this.value + " -> " + value + " (" + reason + ")[" + translateFrom(from) + "]") + this.value = value + mostLimiting.clear() + addMostLimingReason(reason, from) + } + if (value > originalValue) { + addReason(reason, from) + } + return this + } + + private fun translateFrom(from: Any): String { + return from.javaClass.simpleName.replace("Plugin", "") + } + + override fun addReason(reason: String, from: Any) { + reasons.add(translateFrom(from) + ": " + reason) + } + + private fun addMostLimingReason(reason: String, from: Any) { + mostLimiting.add(translateFrom(from) + ": " + reason) + } + + override fun getReasons(): String { + val sb = StringBuilder() + for ((count, r) in reasons.withIndex()) { + if (count != 0) sb.append("\n") + sb.append(r) + } + aapsLogger.debug(LTag.CONSTRAINTS, "Limiting original value: $originalValue to $value. Reason: $sb") + return sb.toString() + } + + override val reasonList: List + get() = reasons + + override fun getMostLimitedReasons(): String { + val sb = StringBuilder() + for ((count, r) in mostLimiting.withIndex()) { + if (count != 0) sb.append("\n") + sb.append(r) + } + aapsLogger.debug(LTag.CONSTRAINTS, "Limiting original value: $originalValue to $value. Reason: $sb") + return sb.toString() + } + + override val mostLimitedReasonList: List + get() = mostLimiting + + override fun copyReasons(another: Constraint<*>) { + reasons.addAll(another.reasonList) + } + + init { + injector.androidInjector().inject(this) + originalValue = value + } +} \ No newline at end of file diff --git a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt index 3c925fe15b..f623f9681e 100644 --- a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt +++ b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt @@ -4,6 +4,7 @@ import android.content.Context import android.text.Spanned import com.google.common.base.Joiner import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.extensions.highValueToUnitsToString import info.nightscout.core.extensions.lowValueToUnitsToString import info.nightscout.core.iob.round @@ -19,8 +20,7 @@ import info.nightscout.database.entities.ValueWithUnit import info.nightscout.interfaces.Config import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.automation.Automation -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.iob.GlucoseStatus import info.nightscout.interfaces.iob.GlucoseStatusProvider @@ -63,7 +63,7 @@ class BolusWizard @Inject constructor( @Inject lateinit var sp: SP @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var profileUtil: ProfileUtil - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var commandQueue: CommandQueue @Inject lateinit var loop: Loop @@ -273,7 +273,7 @@ class BolusWizard @Inject constructor( val bolusStep = activePlugin.activePump.pumpDescription.bolusStep calculatedTotalInsulin = Round.roundTo(calculatedTotalInsulin, bolusStep) - insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(calculatedTotalInsulin)).value() + insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(calculatedTotalInsulin, injector)).value() aapsLogger.debug(this.toString()) return this diff --git a/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt b/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt index 77589bd104..e961021203 100644 --- a/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt +++ b/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt @@ -1,6 +1,8 @@ package info.nightscout.core.data -import info.nightscout.interfaces.constraints.Constraint +import dagger.android.AndroidInjector +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -11,41 +13,49 @@ import org.junit.jupiter.api.Test */ class ConstraintTest : TestBase() { + private val injector = HasAndroidInjector { + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } + } + @Test fun doTests() { - val b = Constraint(true) + val b = ConstraintObject(true, injector) Assertions.assertEquals(true, b.value()) - Assertions.assertEquals("", b.getReasons(aapsLogger)) - Assertions.assertEquals("", b.getMostLimitedReasons(aapsLogger)) - b.set(aapsLogger, false) + Assertions.assertEquals("", b.getReasons()) + Assertions.assertEquals("", b.getMostLimitedReasons()) + b.set(false) Assertions.assertEquals(false, b.value()) - Assertions.assertEquals("", b.getReasons(aapsLogger)) - Assertions.assertEquals("", b.getMostLimitedReasons(aapsLogger)) - b.set(aapsLogger, true, "Set true", this) + Assertions.assertEquals("", b.getReasons()) + Assertions.assertEquals("", b.getMostLimitedReasons()) + b.set(true, "Set true", this) Assertions.assertEquals(true, b.value()) - Assertions.assertEquals("ConstraintTest: Set true", b.getReasons(aapsLogger)) - Assertions.assertEquals("ConstraintTest: Set true", b.getMostLimitedReasons(aapsLogger)) - b.set(aapsLogger, false, "Set false", this) + Assertions.assertEquals("ConstraintTest: Set true", b.getReasons()) + Assertions.assertEquals("ConstraintTest: Set true", b.getMostLimitedReasons()) + b.set(false, "Set false", this) Assertions.assertEquals(false, b.value()) - Assertions.assertEquals("ConstraintTest: Set true\nConstraintTest: Set false", b.getReasons(aapsLogger)) - Assertions.assertEquals("ConstraintTest: Set true\nConstraintTest: Set false", b.getMostLimitedReasons(aapsLogger)) - val d = Constraint(10.0) - d.set(aapsLogger, 5.0, "Set 5d", this) + Assertions.assertEquals("ConstraintTest: Set true\nConstraintTest: Set false", b.getReasons()) + Assertions.assertEquals("ConstraintTest: Set true\nConstraintTest: Set false", b.getMostLimitedReasons()) + val d = ConstraintObject(10.0, injector) + d.set(5.0, "Set 5d", this) Assertions.assertEquals(5.0, d.value(), 0.01) - Assertions.assertEquals("ConstraintTest: Set 5d", d.getReasons(aapsLogger)) - Assertions.assertEquals("ConstraintTest: Set 5d", d.getMostLimitedReasons(aapsLogger)) - d.setIfSmaller(aapsLogger, 6.0, "Set 6d", this) + Assertions.assertEquals("ConstraintTest: Set 5d", d.getReasons()) + Assertions.assertEquals("ConstraintTest: Set 5d", d.getMostLimitedReasons()) + d.setIfSmaller(6.0, "Set 6d", this) Assertions.assertEquals(5.0, d.value(), 0.01) - Assertions.assertEquals("ConstraintTest: Set 5d\nConstraintTest: Set 6d", d.getReasons(aapsLogger)) - Assertions.assertEquals("ConstraintTest: Set 5d", d.getMostLimitedReasons(aapsLogger)) - d.setIfSmaller(aapsLogger, 4.0, "Set 4d", this) + Assertions.assertEquals("ConstraintTest: Set 5d\nConstraintTest: Set 6d", d.getReasons()) + Assertions.assertEquals("ConstraintTest: Set 5d", d.getMostLimitedReasons()) + d.setIfSmaller(4.0, "Set 4d", this) Assertions.assertEquals(4.0, d.value(), 0.01) - Assertions.assertEquals("ConstraintTest: Set 5d\nConstraintTest: Set 6d\nConstraintTest: Set 4d", d.getReasons(aapsLogger)) - Assertions.assertEquals("ConstraintTest: Set 4d", d.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("ConstraintTest: Set 5d\nConstraintTest: Set 6d\nConstraintTest: Set 4d", d.getReasons()) + Assertions.assertEquals("ConstraintTest: Set 4d", d.getMostLimitedReasons()) Assertions.assertEquals(10.0, d.originalValue(), 0.01) - d.setIfDifferent(aapsLogger, 7.0, "Set 7d", this) + d.setIfDifferent(7.0, "Set 7d", this) Assertions.assertEquals(7.0, d.value(), 0.01) - Assertions.assertEquals("ConstraintTest: Set 5d\nConstraintTest: Set 6d\nConstraintTest: Set 4d\nConstraintTest: Set 7d", d.getReasons(aapsLogger)) - Assertions.assertEquals("ConstraintTest: Set 4d\nConstraintTest: Set 7d", d.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("ConstraintTest: Set 5d\nConstraintTest: Set 6d\nConstraintTest: Set 4d\nConstraintTest: Set 7d", d.getReasons()) + Assertions.assertEquals("ConstraintTest: Set 4d\nConstraintTest: Set 7d", d.getMostLimitedReasons()) Assertions.assertEquals(10.0, d.originalValue(), 0.01) } diff --git a/core/main/src/test/java/info/nightscout/core/data/IobTotalTest.kt b/core/main/src/test/java/info/nightscout/core/data/IobTotalTest.kt index dd32259395..8067daef2a 100644 --- a/core/main/src/test/java/info/nightscout/core/data/IobTotalTest.kt +++ b/core/main/src/test/java/info/nightscout/core/data/IobTotalTest.kt @@ -9,6 +9,7 @@ import info.nightscout.core.iob.plus import info.nightscout.core.iob.round import info.nightscout.interfaces.iob.IobTotal import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -25,7 +26,7 @@ class IobTotalTest : TestBase() { @BeforeEach fun prepare() { - dateUtil = DateUtil(context) + dateUtil = DateUtilImpl(context) now = dateUtil.now() } diff --git a/core/main/src/test/java/info/nightscout/core/data/ProfileTest.kt b/core/main/src/test/java/info/nightscout/core/data/ProfileTest.kt index c26357af2e..100f5fac12 100644 --- a/core/main/src/test/java/info/nightscout/core/data/ProfileTest.kt +++ b/core/main/src/test/java/info/nightscout/core/data/ProfileTest.kt @@ -7,11 +7,10 @@ import info.nightscout.core.profile.ProfileSealed import info.nightscout.interfaces.Config import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import info.nightscout.sharedtests.HardLimitsMock import info.nightscout.sharedtests.TestBase import info.nightscout.sharedtests.TestPumpPlugin @@ -37,7 +36,6 @@ class ProfileTest : TestBase() { @Mock lateinit var sp: SP private lateinit var hardLimits: HardLimits - private lateinit var rxBus: RxBus private lateinit var dateUtil: DateUtil private lateinit var testPumpPlugin: TestPumpPlugin @@ -59,8 +57,7 @@ class ProfileTest : TestBase() { @BeforeEach fun prepare() { testPumpPlugin = TestPumpPlugin { AndroidInjector { } } - dateUtil = DateUtil(context) - rxBus = RxBus(TestAapsSchedulers(), aapsLogger) + dateUtil = DateUtilImpl(context) hardLimits = HardLimitsMock(sp, rh) `when`(activePluginProvider.activePump).thenReturn(testPumpPlugin) `when`(rh.gs(info.nightscout.core.ui.R.string.profile_per_unit)).thenReturn("/U") diff --git a/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt b/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt index 472a062f98..fb3258894e 100644 --- a/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt +++ b/core/main/src/test/java/info/nightscout/core/utils/DateUtilTest.kt @@ -3,13 +3,13 @@ package info.nightscout.core.utils import android.content.Context import com.google.common.truth.Truth.assertThat import info.nightscout.shared.interfaces.ResourceHelper -import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import info.nightscout.shared.utils.T import info.nightscout.sharedtests.TestBase -import org.junit.jupiter.api.Assertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test import org.mockito.Mock import org.mockito.Mockito.`when` import java.util.Date @@ -41,45 +41,45 @@ class DateUtilTest : TestBase() { @Test fun fromISODateStringTest() { - Assertions.assertEquals(1511124634417L, DateUtil(context).fromISODateString("2017-11-19T22:50:34.417+0200")) - Assertions.assertEquals(1511124634000L, DateUtil(context).fromISODateString("2017-11-19T22:50:34+0200")) - Assertions.assertEquals(1512317365000L, DateUtil(context).fromISODateString("2017-12-03T16:09:25.000Z")) - Assertions.assertEquals(1513902750000L, DateUtil(context).fromISODateString("2017-12-22T00:32:30Z")) + Assertions.assertEquals(1511124634417L, DateUtilImpl(context).fromISODateString("2017-11-19T22:50:34.417+0200")) + Assertions.assertEquals(1511124634000L, DateUtilImpl(context).fromISODateString("2017-11-19T22:50:34+0200")) + Assertions.assertEquals(1512317365000L, DateUtilImpl(context).fromISODateString("2017-12-03T16:09:25.000Z")) + Assertions.assertEquals(1513902750000L, DateUtilImpl(context).fromISODateString("2017-12-22T00:32:30Z")) } @Test fun toISOStringTest() { - Assertions.assertEquals("2017-12-22T00:32:30.000Z", DateUtil(context).toISOString(1513902750000L)) + Assertions.assertEquals("2017-12-22T00:32:30.000Z", DateUtilImpl(context).toISOString(1513902750000L)) } @Test fun secondsOfTheDayToMillisecondsTest() { - Assertions.assertTrue(Date(DateUtil(context).secondsOfTheDayToMilliseconds((T.hours(1).secs() + T.mins(1).secs() + 1).toInt())).toString().contains("01:01:00")) + Assertions.assertTrue(Date(DateUtilImpl(context).secondsOfTheDayToMilliseconds((T.hours(1).secs() + T.mins(1).secs() + 1).toInt())).toString().contains("01:01:00")) } @Test fun toSecondsTest() { - Assertions.assertEquals(3600, DateUtil(context).toSeconds("01:00").toLong()) - Assertions.assertEquals(3600, DateUtil(context).toSeconds("01:00 a.m.").toLong()) - Assertions.assertEquals(3600, DateUtil(context).toSeconds("01:00 AM").toLong()) + Assertions.assertEquals(3600, DateUtilImpl(context).toSeconds("01:00").toLong()) + Assertions.assertEquals(3600, DateUtilImpl(context).toSeconds("01:00 a.m.").toLong()) + Assertions.assertEquals(3600, DateUtilImpl(context).toSeconds("01:00 AM").toLong()) } @Test fun dateStringTest() { - assertThat(DateUtil(context).dateString(1513902750000L)).contains("22") + assertThat(DateUtilImpl(context).dateString(1513902750000L)).contains("22") } @Test fun timeStringTest() { - Assertions.assertTrue(DateUtil(context).timeString(1513902750000L).contains("32")) + Assertions.assertTrue(DateUtilImpl(context).timeString(1513902750000L).contains("32")) } @Test fun dateAndTimeStringTest() { - assertThat(DateUtil(context).dateAndTimeString(1513902750000L)).contains("22") - assertThat(DateUtil(context).dateAndTimeString(1513902750000L)).contains("32") + assertThat(DateUtilImpl(context).dateAndTimeString(1513902750000L)).contains("22") + assertThat(DateUtilImpl(context).dateAndTimeString(1513902750000L)).contains("32") } @Test fun dateAndTimeRangeStringTest() { - assertThat(DateUtil(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("22") - assertThat(DateUtil(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("32") - assertThat(DateUtil(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("22") - assertThat(DateUtil(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("32") + assertThat(DateUtilImpl(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("22") + assertThat(DateUtilImpl(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("32") + assertThat(DateUtilImpl(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("22") + assertThat(DateUtilImpl(context).dateAndTimeRangeString(1513902750000L, 1513902750000L)).contains("32") } /* @@ -90,6 +90,6 @@ class DateUtilTest : TestBase() { */ @Test fun timeFrameStringTest() { `when`(rh.gs(info.nightscout.interfaces.R.string.shorthour)).thenReturn("h") - Assertions.assertEquals("(1h 1')", DateUtil(context).timeFrameString(T.hours(1).msecs() + T.mins(1).msecs(), rh)) + Assertions.assertEquals("(1h 1')", DateUtilImpl(context).timeFrameString(T.hours(1).msecs() + T.mins(1).msecs(), rh)) } } diff --git a/core/main/test_dependencies.gradle b/core/main/test_dependencies.gradle index b4f8cf5370..04c57f1f70 100644 --- a/core/main/test_dependencies.gradle +++ b/core/main/test_dependencies.gradle @@ -12,6 +12,7 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation "androidx.test.ext:junit-ktx:$androidx_junit_version" androidTestImplementation "androidx.test:rules:$androidx_rules_version" + androidTestImplementation "org.junit.jupiter:junit-jupiter-api:$junit_jupiter_version" androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' } 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 e66580353d..0a5fedafdd 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt @@ -9,6 +9,7 @@ import android.text.Spanned import androidx.appcompat.app.AppCompatActivity import dagger.android.HasAndroidInjector import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.events.EventNewNotification import info.nightscout.core.extensions.getCustomizedName import info.nightscout.core.profile.ProfileSealed @@ -42,8 +43,7 @@ import info.nightscout.implementation.queue.commands.CommandTempBasalPercent import info.nightscout.implementation.queue.commands.CommandUpdateTime import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.Config -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.ActivePlugin @@ -85,7 +85,7 @@ class CommandQueueImplementation @Inject constructor( private val rxBus: RxBus, private val aapsSchedulers: AapsSchedulers, private val rh: ResourceHelper, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val profileFunction: ProfileFunction, private val activePlugin: ActivePlugin, private val context: Context, @@ -310,8 +310,8 @@ class CommandQueueImplementation @Inject constructor( removeAll(type) } // apply constraints - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(Constraint(detailedBolusInfo.insulin)).value() - detailedBolusInfo.carbs = constraintChecker.applyCarbsConstraints(Constraint(detailedBolusInfo.carbs.toInt())).value().toDouble() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() + detailedBolusInfo.carbs = constraintChecker.applyCarbsConstraints(ConstraintObject(detailedBolusInfo.carbs.toInt(), injector)).value().toDouble() // add new command to queue if (detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) { add(CommandSMBBolus(injector, detailedBolusInfo, callback)) @@ -368,7 +368,7 @@ class CommandQueueImplementation @Inject constructor( } // remove all unfinished removeAll(CommandType.TEMPBASAL) - val rateAfterConstraints = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() + val rateAfterConstraints = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() // add new command to queue add(CommandTempBasalAbsolute(injector, rateAfterConstraints, durationInMinutes, enforceNew, profile, tbrType, callback)) notifyAboutNewCommand() @@ -383,7 +383,7 @@ class CommandQueueImplementation @Inject constructor( } // remove all unfinished removeAll(CommandType.TEMPBASAL) - val percentAfterConstraints = constraintChecker.applyBasalPercentConstraints(Constraint(percent), profile).value() + val percentAfterConstraints = constraintChecker.applyBasalPercentConstraints(ConstraintObject(percent, injector), profile).value() // add new command to queue add(CommandTempBasalPercent(injector, percentAfterConstraints, durationInMinutes, enforceNew, profile, tbrType, callback)) notifyAboutNewCommand() @@ -396,7 +396,7 @@ class CommandQueueImplementation @Inject constructor( callback?.result(executingNowError())?.run() return false } - val rateAfterConstraints = constraintChecker.applyExtendedBolusConstraints(Constraint(insulin)).value() + val rateAfterConstraints = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() // remove all unfinished removeAll(CommandType.EXTENDEDBOLUS) // add new command to queue 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 f77ea1b704..d331d044ce 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt @@ -5,6 +5,7 @@ import android.os.Handler import android.os.PowerManager import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.ValueWrapper import info.nightscout.database.entities.Bolus @@ -16,8 +17,7 @@ import info.nightscout.implementation.queue.commands.CommandLoadHistory import info.nightscout.implementation.queue.commands.CommandTempBasalPercent import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.Config -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction @@ -50,7 +50,7 @@ import java.util.Calendar class CommandQueueImplementationTest : TestBaseWithProfile() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var powerManager: PowerManager @Mock lateinit var repository: AppRepository @Mock lateinit var uiInteraction: UiInteraction @@ -63,7 +63,7 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { rxBus: RxBus, aapsSchedulers: AapsSchedulers, rh: ResourceHelper, - constraintChecker: Constraints, + constraintChecker: ConstraintsChecker, profileFunction: ProfileFunction, activePlugin: ActivePlugin, context: Context, @@ -88,6 +88,9 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { private val injector = HasAndroidInjector { AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } if (it is Command) { it.aapsLogger = aapsLogger it.rh = rh @@ -140,14 +143,14 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { ) `when`(profileFunction.getProfile()).thenReturn(validProfile) - val bolusConstraint = Constraint(0.0) + val bolusConstraint = ConstraintObject(0.0, injector) `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(bolusConstraint) `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(bolusConstraint) - val carbsConstraint = Constraint(0) + val carbsConstraint = ConstraintObject(0, injector) `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(carbsConstraint) - val rateConstraint = Constraint(0.0) + val rateConstraint = ConstraintObject(0.0, injector) `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(rateConstraint) - val percentageConstraint = Constraint(0) + val percentageConstraint = ConstraintObject(0, injector) `when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(percentageConstraint) `when`(rh.gs(info.nightscout.core.ui.R.string.connectiontimedout)).thenReturn("Connection timed out") `when`(rh.gs(info.nightscout.core.ui.R.string.format_insulin_units)).thenReturn("%1\$.2f U") diff --git a/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt b/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt index f8e3494ac5..efbfd84f95 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt @@ -4,11 +4,11 @@ import android.content.Context import android.os.PowerManager import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.database.impl.AppRepository import info.nightscout.implementation.queue.commands.CommandTempBasalAbsolute import info.nightscout.interfaces.AndroidPermission -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.defs.PumpDescription @@ -25,7 +25,7 @@ import org.mockito.Mockito class QueueThreadTest : TestBaseWithProfile() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var powerManager: PowerManager @Mock lateinit var repository: AppRepository @Mock lateinit var androidPermission: AndroidPermission @@ -34,6 +34,9 @@ class QueueThreadTest : TestBaseWithProfile() { private val injector = HasAndroidInjector { AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } if (it is Command) { it.aapsLogger = aapsLogger it.rh = rh @@ -64,14 +67,14 @@ class QueueThreadTest : TestBaseWithProfile() { Mockito.`when`(context.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager) Mockito.`when`(profileFunction.getProfile()).thenReturn(validProfile) - val bolusConstraint = Constraint(0.0) + val bolusConstraint = ConstraintObject(0.0, injector) Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(bolusConstraint) Mockito.`when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(bolusConstraint) - val carbsConstraint = Constraint(0) + val carbsConstraint = ConstraintObject(0, injector) Mockito.`when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(carbsConstraint) - val rateConstraint = Constraint(0.0) + val rateConstraint = ConstraintObject(0.0, injector) Mockito.`when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(rateConstraint) - val percentageConstraint = Constraint(0) + val percentageConstraint = ConstraintObject(0, injector) Mockito.`when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())) .thenReturn(percentageConstraint) Mockito.`when`(rh.gs(ArgumentMatchers.eq(info.nightscout.core.ui.R.string.temp_basal_absolute), anyObject(), anyObject())).thenReturn("TEMP BASAL %1\$.2f U/h %2\$d min") diff --git a/implementation/src/test/java/info/nightscout/implementation/wizard/BolusWizardTest.kt b/implementation/src/test/java/info/nightscout/implementation/wizard/BolusWizardTest.kt index 707134a5ab..1435c70843 100644 --- a/implementation/src/test/java/info/nightscout/implementation/wizard/BolusWizardTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/wizard/BolusWizardTest.kt @@ -8,12 +8,11 @@ import info.nightscout.implementation.iob.GlucoseStatusProviderImpl import info.nightscout.interfaces.aps.AutosensDataStore import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.IobTotal import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.pump.defs.PumpDescription import info.nightscout.interfaces.queue.CommandQueue -import info.nightscout.rx.bus.RxBus import info.nightscout.sharedtests.TestBaseWithProfile import org.junit.jupiter.api.Test import org.mockito.Mock @@ -24,7 +23,7 @@ class BolusWizardTest : TestBaseWithProfile() { private val pumpBolusStep = 0.1 - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var loop: Loop @Mock lateinit var autosensDataStore: AutosensDataStore @@ -34,7 +33,7 @@ class BolusWizardTest : TestBaseWithProfile() { if (it is BolusWizard) { it.aapsLogger = aapsLogger it.rh = rh - it.rxBus = RxBus(aapsSchedulers, aapsLogger) + it.rxBus = rxBus it.profileFunction = profileFunction it.constraintChecker = constraintChecker it.activePlugin = activePlugin @@ -113,7 +112,7 @@ class BolusWizardTest : TestBaseWithProfile() { useAlarm = false ) val bolusForBg54 = bw.calculatedTotalInsulin - assertThat(bolusForBg54).isWithin( 0.01).of(bolusForBg42) + assertThat(bolusForBg54).isWithin(0.01).of(bolusForBg42) } @Test 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 60f7e05443..34c5314473 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 @@ -103,7 +103,7 @@ import info.nightscout.androidaps.plugins.pump.insight.utils.ParameterBlockUtil; import info.nightscout.core.events.EventNewNotification; import info.nightscout.interfaces.Config; import info.nightscout.interfaces.constraints.Constraint; -import info.nightscout.interfaces.constraints.Constraints; +import info.nightscout.interfaces.constraints.PluginConstraints; import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.plugin.OwnDatabasePlugin; import info.nightscout.interfaces.plugin.PluginDescription; @@ -134,9 +134,10 @@ import info.nightscout.shared.utils.DateUtil; import info.nightscout.shared.utils.T; @Singleton -public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, Constraints, OwnDatabasePlugin, +public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, PluginConstraints, OwnDatabasePlugin, InsightConnectionService.StateCallback { + public static final String ALERT_CHANNEL_ID = "AAPS-InsightAlert"; private final AAPSLogger aapsLogger; private final RxBus rxBus; private final ResourceHelper rh; @@ -148,13 +149,12 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, private final InsightDbHelper insightDbHelper; private final PumpSync pumpSync; private final InsightDatabase insightDatabase; - - public static final String ALERT_CHANNEL_ID = "AAPS-InsightAlert"; - private final PumpDescription pumpDescription; + private final Object $bolusLock = new Object[0]; + public double lastBolusAmount = 0; + public long lastBolusTimestamp = 0L; private InsightAlertService alertService; private InsightConnectionService connectionService; - private long timeOffset; private final ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder binder) { @@ -174,8 +174,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, connectionService = null; } }; - - private final Object $bolusLock = new Object[0]; + private long timeOffset; private int bolusID; private boolean bolusCancelled; private BasalProfile activeBasalProfile; @@ -192,8 +191,6 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, private List activeBoluses; private boolean statusLoaded; private TBROverNotificationBlock tbrOverNotificationBlock; - public double lastBolusAmount = 0; - public long lastBolusTimestamp = 0L; @Inject public LocalInsightPlugin( @@ -1589,22 +1586,22 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, @NonNull @Override public Constraint applyBasalPercentConstraints(Constraint percentRate, @NonNull Profile profile) { - percentRate.setIfGreater(getAapsLogger(), 0, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this); - percentRate.setIfSmaller(getAapsLogger(), getPumpDescription().getMaxTempPercent(), rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, getPumpDescription().getMaxTempPercent(), rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this); + percentRate.setIfGreater(0, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this); + percentRate.setIfSmaller(getPumpDescription().getMaxTempPercent(), rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, getPumpDescription().getMaxTempPercent(), rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this); return percentRate; } @NonNull @Override public Constraint applyBolusConstraints(@NonNull Constraint insulin) { if (!limitsFetched) return insulin; - insulin.setIfSmaller(getAapsLogger(), maximumBolusAmount, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, maximumBolusAmount, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this); + insulin.setIfSmaller(maximumBolusAmount, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, maximumBolusAmount, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this); if (insulin.value() < minimumBolusAmount) { //TODO: Add function to Constraints or use different approach // This only works if the interface of the InsightPlugin is called last. // If not, another constraint could theoretically set the value between 0 and minimumBolusAmount - insulin.set(getAapsLogger(), 0d, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, minimumBolusAmount, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this); + insulin.set(0d, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, minimumBolusAmount, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this); } return insulin; } diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt index c630615858..3ad966c702 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/APSResultObject.kt @@ -9,7 +9,7 @@ import info.nightscout.core.utils.HtmlHelper import info.nightscout.database.entities.GlucoseValue import info.nightscout.interfaces.aps.APSResult import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.iob.IobTotal import info.nightscout.interfaces.plugin.ActivePlugin @@ -34,7 +34,7 @@ import kotlin.math.max open class APSResultObject @Inject constructor(val injector: HasAndroidInjector) : APSResult { @Inject lateinit var aapsLogger: AAPSLogger - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var sp: SP @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var iobCobCalculator: IobCobCalculator @@ -74,12 +74,12 @@ open class APSResultObject @Inject constructor(val injector: HasAndroidInjector) val pump = activePlugin.activePump if (isChangeRequested) { // rate - var ret: String = if (rate == 0.0 && duration == 0) "${rh.gs(info.nightscout.core.ui.R.string.cancel_temp)} " - else if (rate == -1.0) "${rh.gs(info.nightscout.core.ui.R.string.let_temp_basal_run)}\n" - else if (usePercent) "${rh.gs(info.nightscout.core.ui.R.string.rate)}: ${decimalFormatter.to2Decimal(percent.toDouble())}% (${decimalFormatter.to2Decimal(percent * pump.baseBasalRate / 100.0)} U/h) " + - "${rh.gs(info.nightscout.core.ui.R.string.duration)}: ${decimalFormatter.to2Decimal(duration.toDouble())} min " - else "${rh.gs(info.nightscout.core.ui.R.string.rate)}: ${decimalFormatter.to2Decimal(rate)} U/h (${decimalFormatter.to2Decimal(rate / pump.baseBasalRate * 100)}%) " + - "${rh.gs(info.nightscout.core.ui.R.string.duration)}: ${decimalFormatter.to2Decimal(duration.toDouble())} min " + var ret: String = if (rate == 0.0 && duration == 0) "${rh.gs(R.string.cancel_temp)} " + else if (rate == -1.0) "${rh.gs(R.string.let_temp_basal_run)}\n" + else if (usePercent) "${rh.gs(R.string.rate)}: ${decimalFormatter.to2Decimal(percent.toDouble())}% (${decimalFormatter.to2Decimal(percent * pump.baseBasalRate / 100.0)} U/h) " + + "${rh.gs(R.string.duration)}: ${decimalFormatter.to2Decimal(duration.toDouble())} min " + else "${rh.gs(R.string.rate)}: ${decimalFormatter.to2Decimal(rate)} U/h (${decimalFormatter.to2Decimal(rate / pump.baseBasalRate * 100)}%) " + + "${rh.gs(R.string.duration)}: ${decimalFormatter.to2Decimal(duration.toDouble())} min " // smb if (smb != 0.0) ret += "SMB: ${decimalFormatter.toPumpSupportedBolus(smb, activePlugin.activePump.pumpDescription.bolusStep)} " if (isCarbsRequired) { @@ -92,7 +92,7 @@ open class APSResultObject @Inject constructor(val injector: HasAndroidInjector) } return if (isCarbsRequired) { carbsRequiredText - } else rh.gs(info.nightscout.core.ui.R.string.nochangerequested) + } else rh.gs(R.string.nochangerequested) } override fun toSpanned(): Spanned { @@ -100,17 +100,17 @@ open class APSResultObject @Inject constructor(val injector: HasAndroidInjector) if (isChangeRequested) { // rate var ret: String = - if (rate == 0.0 && duration == 0) rh.gs(info.nightscout.core.ui.R.string.cancel_temp) + "
" else if (rate == -1.0) rh.gs(info.nightscout.core.ui.R.string.let_temp_basal_run) + "
" else if (usePercent) "" + rh.gs( - info.nightscout.core.ui.R.string.rate + if (rate == 0.0 && duration == 0) rh.gs(R.string.cancel_temp) + "
" else if (rate == -1.0) rh.gs(R.string.let_temp_basal_run) + "
" else if (usePercent) "" + rh.gs( + R.string.rate ) + ": " + decimalFormatter.to2Decimal( percent.toDouble() ) + "% " + "(" + decimalFormatter.to2Decimal(percent * pump.baseBasalRate / 100.0) + " U/h)
" + - "" + rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + decimalFormatter.to2Decimal(duration.toDouble()) + " min
" else "" + rh.gs(info.nightscout.core.ui.R.string.rate) + ": " + decimalFormatter.to2Decimal( + "" + rh.gs(R.string.duration) + ": " + decimalFormatter.to2Decimal(duration.toDouble()) + " min
" else "" + rh.gs(R.string.rate) + ": " + decimalFormatter.to2Decimal( rate ) + " U/h " + "(" + decimalFormatter.to2Decimal(rate / pump.baseBasalRate * 100.0) + "%)
" + - "" + rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + decimalFormatter.to2Decimal(duration.toDouble()) + " min
" + "" + rh.gs(R.string.duration) + ": " + decimalFormatter.to2Decimal(duration.toDouble()) + " min
" // smb if (smb != 0.0) ret += "" + "SMB" + ": " + decimalFormatter.toPumpSupportedBolus(smb, activePlugin.activePump.pumpDescription.bolusStep) + "
" diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt index 568819f482..81c6df8f15 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/OpenAPSFragment.kt @@ -150,7 +150,7 @@ class OpenAPSFragment : DaggerFragment(), MenuProvider { binding.mealdata.text = jsonFormatter.format(determineBasalAdapter.mealDataParam) binding.scriptdebugdata.text = determineBasalAdapter.scriptDebug.replace("\\s+".toRegex(), " ") openAPSPlugin.lastAPSResult?.inputConstraints?.let { - binding.constraints.text = it.getReasons(aapsLogger) + binding.constraints.text = it.getReasons() } } if (openAPSPlugin.lastAPSRun != 0L) { diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt index 031f100c20..1cd172046e 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt @@ -12,12 +12,13 @@ import android.view.ViewGroup import androidx.core.view.MenuCompat import androidx.core.view.MenuProvider import androidx.lifecycle.Lifecycle +import dagger.android.HasAndroidInjector import dagger.android.support.DaggerFragment +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.pump.toHtml import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.plugins.aps.R import info.nightscout.plugins.aps.databinding.LoopFragmentBinding @@ -44,6 +45,7 @@ class LoopFragment : DaggerFragment(), MenuProvider { @Inject lateinit var loop: Loop @Inject lateinit var dateUtil: DateUtil @Inject lateinit var decimalFormatter: DecimalFormatter + @Inject lateinit var injector: HasAndroidInjector @Suppress("PrivatePropertyName") private val ID_MENU_RUN = 501 @@ -150,12 +152,12 @@ class LoopFragment : DaggerFragment(), MenuProvider { var constraints = it.constraintsProcessed?.let { constraintsProcessed -> - val allConstraints = Constraint(0.0) + val allConstraints = ConstraintObject(0.0, injector) constraintsProcessed.rateConstraint?.let { rateConstraint -> allConstraints.copyReasons(rateConstraint) } constraintsProcessed.smbConstraint?.let { smbConstraint -> allConstraints.copyReasons(smbConstraint) } - allConstraints.getMostLimitedReasons(aapsLogger) + allConstraints.getMostLimitedReasons() } ?: "" - constraints += loop.closedLoopEnabled?.getReasons(aapsLogger) ?: "" + constraints += loop.closedLoopEnabled?.getReasons() ?: "" binding.constraints.text = constraints binding.swipeRefresh.isRefreshing = false } diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt index 660b9b92e1..787938d90a 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt @@ -14,6 +14,7 @@ import android.os.SystemClock import androidx.core.app.NotificationCompat import dagger.android.HasAndroidInjector import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.events.EventNewNotification import info.nightscout.core.extensions.convertedToAbsolute import info.nightscout.core.extensions.convertedToPercent @@ -36,7 +37,7 @@ import info.nightscout.interfaces.aps.APSResult import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.aps.Loop.LastRun import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.notifications.Notification @@ -91,7 +92,7 @@ class LoopPlugin @Inject constructor( private val rxBus: RxBus, private val sp: SP, private val config: Config, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, rh: ResourceHelper, private val profileFunction: ProfileFunction, private val context: Context, @@ -230,7 +231,7 @@ class LoopPlugin @Inject constructor( if (!loopEnabled.value()) { val message = """ ${rh.gs(info.nightscout.core.ui.R.string.loop_disabled)} - ${loopEnabled.getReasons(aapsLogger)} + ${loopEnabled.getReasons()} """.trimIndent() aapsLogger.debug(LTag.APS, message) rxBus.send(EventLoopSetLastRunGui(message)) @@ -274,11 +275,11 @@ class LoopPlugin @Inject constructor( // check rate for constraints val resultAfterConstraints = apsResult.newAndClone(injector) - resultAfterConstraints.rateConstraint = Constraint(resultAfterConstraints.rate) + resultAfterConstraints.rateConstraint = ConstraintObject(resultAfterConstraints.rate, injector) resultAfterConstraints.rate = constraintChecker.applyBasalConstraints(resultAfterConstraints.rateConstraint!!, profile).value() - resultAfterConstraints.percentConstraint = Constraint(resultAfterConstraints.percent) + resultAfterConstraints.percentConstraint = ConstraintObject(resultAfterConstraints.percent, injector) resultAfterConstraints.percent = constraintChecker.applyBasalPercentConstraints(resultAfterConstraints.percentConstraint!!, profile).value() - resultAfterConstraints.smbConstraint = Constraint(resultAfterConstraints.smb) + resultAfterConstraints.smbConstraint = ConstraintObject(resultAfterConstraints.smb, injector) resultAfterConstraints.smb = constraintChecker.applyBolusConstraints(resultAfterConstraints.smbConstraint!!).value() // safety check for multiple SMBs diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/DetermineBasalAdapterAMAJS.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/DetermineBasalAdapterAMAJS.kt index 99f56f187d..4ae6517b9c 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/DetermineBasalAdapterAMAJS.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/DetermineBasalAdapterAMAJS.kt @@ -7,7 +7,7 @@ import info.nightscout.core.extensions.plannedRemainingMinutes import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.DetermineBasalAdapter import info.nightscout.interfaces.aps.SMBDefaults -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatus import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.iob.IobTotal @@ -43,7 +43,7 @@ class DetermineBasalAdapterAMAJS internal constructor(scriptReader: ScriptReader private val injector: HasAndroidInjector @Inject lateinit var aapsLogger: AAPSLogger - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var sp: SP @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var iobCobCalculator: IobCobCalculator @@ -107,7 +107,8 @@ class DetermineBasalAdapterAMAJS internal constructor(scriptReader: ScriptReader makeParam(profile, rhino, scope), makeParam(autosensData, rhino, scope), makeParam(mealData, rhino, scope), - setTempBasalFunctionsObj) + setTempBasalFunctionsObj + ) val jsResult = determineBasalObj.call(rhino, scope, scope, params) as NativeObject scriptDebug = LoggerCallback.scriptDebug diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt index 61af8fa1b6..ae7e8192c3 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt @@ -3,6 +3,7 @@ package info.nightscout.plugins.aps.openAPSAMA import android.content.Context import dagger.android.HasAndroidInjector import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.extensions.target import info.nightscout.core.utils.MidnightUtils import info.nightscout.core.utils.fabric.FabricPrivacy @@ -12,7 +13,8 @@ import info.nightscout.interfaces.aps.APS import info.nightscout.interfaces.aps.AutosensResult import info.nightscout.interfaces.aps.DetermineBasalAdapter import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin @@ -46,7 +48,7 @@ class OpenAPSAMAPlugin @Inject constructor( injector: HasAndroidInjector, aapsLogger: AAPSLogger, private val rxBus: RxBus, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, rh: ResourceHelper, private val profileFunction: ProfileFunction, private val context: Context, @@ -69,7 +71,7 @@ class OpenAPSAMAPlugin @Inject constructor( .preferencesId(R.xml.pref_openapsama) .description(R.string.description_ama), aapsLogger, rh, injector -), APS, Constraints { +), APS, PluginConstraints { // last values override var lastAPSRun: Long = 0 @@ -114,7 +116,7 @@ class OpenAPSAMAPlugin @Inject constructor( aapsLogger.debug(LTag.APS, rh.gs(R.string.openapsma_no_glucose_data)) return } - val inputConstraints = Constraint(0.0) // fake. only for collecting all results + val inputConstraints = ConstraintObject(0.0, injector) // fake. only for collecting all results val maxBasal = constraintChecker.getMaxBasalAllowed(profile).also { inputConstraints.copyReasons(it) }.value() @@ -237,8 +239,8 @@ class OpenAPSAMAPlugin @Inject constructor( override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint { if (isEnabled()) { val maxIobPref: Double = sp.getDouble(R.string.key_openapsma_max_iob, 1.5) - maxIob.setIfSmaller(aapsLogger, maxIobPref, rh.gs(R.string.limiting_iob, maxIobPref, rh.gs(R.string.maxvalueinpreferences)), this) - maxIob.setIfSmaller(aapsLogger, hardLimits.maxIobAMA(), rh.gs(R.string.limiting_iob, hardLimits.maxIobAMA(), rh.gs(R.string.hardlimit)), this) + maxIob.setIfSmaller(maxIobPref, rh.gs(R.string.limiting_iob, maxIobPref, rh.gs(R.string.maxvalueinpreferences)), this) + maxIob.setIfSmaller(hardLimits.maxIobAMA(), rh.gs(R.string.limiting_iob, hardLimits.maxIobAMA(), rh.gs(R.string.hardlimit)), this) } return maxIob } @@ -250,27 +252,26 @@ class OpenAPSAMAPlugin @Inject constructor( maxBasal = profile.getMaxDailyBasal() absoluteRate.addReason(rh.gs(R.string.increasing_max_basal), this) } - absoluteRate.setIfSmaller(aapsLogger, maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxBasal, rh.gs(R.string.maxvalueinpreferences)), this) + absoluteRate.setIfSmaller(maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxBasal, rh.gs(R.string.maxvalueinpreferences)), this) // Check percentRate but absolute rate too, because we know real current basal in pump val maxBasalMultiplier = sp.getDouble(R.string.key_openapsama_current_basal_safety_multiplier, 4.0) val maxFromBasalMultiplier = floor(maxBasalMultiplier * profile.getBasal() * 100) / 100 absoluteRate.setIfSmaller( - aapsLogger, maxFromBasalMultiplier, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxFromBasalMultiplier, rh.gs(R.string.max_basal_multiplier)), this ) val maxBasalFromDaily = sp.getDouble(R.string.key_openapsama_max_daily_safety_multiplier, 3.0) val maxFromDaily = floor(profile.getMaxDailyBasal() * maxBasalFromDaily * 100) / 100 - absoluteRate.setIfSmaller(aapsLogger, maxFromDaily, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxFromDaily, rh.gs(R.string.max_daily_basal_multiplier)), this) + absoluteRate.setIfSmaller(maxFromDaily, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxFromDaily, rh.gs(R.string.max_daily_basal_multiplier)), this) } return absoluteRate } override fun isAutosensModeEnabled(value: Constraint): Constraint { val enabled = sp.getBoolean(R.string.key_openapsama_use_autosens, false) - if (!enabled) value.set(aapsLogger, false, rh.gs(R.string.autosens_disabled_in_preferences), this) + if (!enabled) value.set(false, rh.gs(R.string.autosens_disabled_in_preferences), this) return value } } \ No newline at end of file diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/DetermineBasalAdapterSMBJS.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/DetermineBasalAdapterSMBJS.kt index 89c7e6f9ba..bc15d9ccde 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/DetermineBasalAdapterSMBJS.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/DetermineBasalAdapterSMBJS.kt @@ -7,7 +7,7 @@ import info.nightscout.core.extensions.plannedRemainingMinutes import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.DetermineBasalAdapter import info.nightscout.interfaces.aps.SMBDefaults -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatus import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.iob.IobTotal @@ -42,7 +42,7 @@ import javax.inject.Inject class DetermineBasalAdapterSMBJS internal constructor(private val scriptReader: ScriptReader, private val injector: HasAndroidInjector) : DetermineBasalAdapter { @Inject lateinit var aapsLogger: AAPSLogger - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var sp: SP @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var iobCobCalculator: IobCobCalculator diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt index 5d528e4b5d..8c93012f07 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.extensions.target import info.nightscout.core.utils.MidnightUtils import info.nightscout.database.ValueWrapper @@ -14,7 +15,8 @@ import info.nightscout.interfaces.aps.DetermineBasalAdapter import info.nightscout.interfaces.aps.SMBDefaults import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin @@ -44,7 +46,7 @@ open class OpenAPSSMBPlugin @Inject constructor( injector: HasAndroidInjector, aapsLogger: AAPSLogger, private val rxBus: RxBus, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, rh: ResourceHelper, private val profileFunction: ProfileFunction, val context: Context, @@ -69,7 +71,7 @@ open class OpenAPSSMBPlugin @Inject constructor( .description(R.string.description_smb) .setDefault(), aapsLogger, rh, injector -), APS, Constraints { +), APS, PluginConstraints { // DynamicISF specific var tdd1D: Double? = null @@ -77,7 +79,7 @@ open class OpenAPSSMBPlugin @Inject constructor( var tddLast24H: Double? = null var tddLast4H: Double? = null var tddLast8to4H: Double? = null - var dynIsfEnabled: Constraint = Constraint(false) + var dynIsfEnabled: Constraint = ConstraintObject(false, injector) // last values override var lastAPSRun: Long = 0 @@ -129,7 +131,7 @@ open class OpenAPSSMBPlugin @Inject constructor( return } - val inputConstraints = Constraint(0.0) // fake. only for collecting all results + val inputConstraints = ConstraintObject(0.0, injector) // fake. only for collecting all results val maxBasal = constraintChecker.getMaxBasalAllowed(profile).also { inputConstraints.copyReasons(it) }.value() @@ -207,19 +209,19 @@ open class OpenAPSSMBPlugin @Inject constructor( val iobArray = iobCobCalculator.calculateIobArrayForSMB(lastAutosensResult, SMBDefaults.exercise_mode, SMBDefaults.half_basal_exercise_target, isTempTarget) profiler.log(LTag.APS, "calculateIobArrayInDia()", startPart) startPart = System.currentTimeMillis() - val smbAllowed = Constraint(!tempBasalFallback).also { + val smbAllowed = ConstraintObject(!tempBasalFallback, injector).also { constraintChecker.isSMBModeEnabled(it) inputConstraints.copyReasons(it) } - val advancedFiltering = Constraint(!tempBasalFallback).also { + val advancedFiltering = ConstraintObject(!tempBasalFallback, injector).also { constraintChecker.isAdvancedFilteringEnabled(it) inputConstraints.copyReasons(it) } - val uam = Constraint(true).also { + val uam = ConstraintObject(true, injector).also { constraintChecker.isUAMEnabled(it) inputConstraints.copyReasons(it) } - dynIsfEnabled = Constraint(true).also { + dynIsfEnabled = ConstraintObject(true, injector).also { constraintChecker.isDynIsfModeEnabled(it) inputConstraints.copyReasons(it) } @@ -239,12 +241,12 @@ open class OpenAPSSMBPlugin @Inject constructor( if (tdd1D == null || tdd7D == null || tddLast4H == null || tddLast8to4H == null || tddLast24H == null) { inputConstraints.copyReasons( - Constraint(false).also { - it.set(aapsLogger, false, rh.gs(R.string.fallback_smb_no_tdd), this) + ConstraintObject(false, injector).also { + it.set(false, rh.gs(R.string.fallback_smb_no_tdd), this) } ) inputConstraints.copyReasons( - Constraint(false).apply { set(aapsLogger, true, "tdd1D=$tdd1D tdd7D=$tdd7D tddLast4H=$tddLast4H tddLast8to4H=$tddLast8to4H tddLast24H=$tddLast24H", this) } + ConstraintObject(false, injector).apply { set(true, "tdd1D=$tdd1D tdd7D=$tdd7D tddLast4H=$tddLast4H tddLast8to4H=$tddLast8to4H tddLast24H=$tddLast24H", this) } ) } @@ -293,15 +295,15 @@ open class OpenAPSSMBPlugin @Inject constructor( } override fun isSuperBolusEnabled(value: Constraint): Constraint { - value.set(aapsLogger, false) + value.set(false) return value } override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint { if (isEnabled()) { val maxIobPref: Double = sp.getDouble(R.string.key_openapssmb_max_iob, 3.0) - maxIob.setIfSmaller(aapsLogger, maxIobPref, rh.gs(R.string.limiting_iob, maxIobPref, rh.gs(R.string.maxvalueinpreferences)), this) - maxIob.setIfSmaller(aapsLogger, hardLimits.maxIobSMB(), rh.gs(R.string.limiting_iob, hardLimits.maxIobSMB(), rh.gs(R.string.hardlimit)), this) + maxIob.setIfSmaller(maxIobPref, rh.gs(R.string.limiting_iob, maxIobPref, rh.gs(R.string.maxvalueinpreferences)), this) + maxIob.setIfSmaller(hardLimits.maxIobSMB(), rh.gs(R.string.limiting_iob, hardLimits.maxIobSMB(), rh.gs(R.string.hardlimit)), this) } return maxIob } @@ -313,39 +315,38 @@ open class OpenAPSSMBPlugin @Inject constructor( maxBasal = profile.getMaxDailyBasal() absoluteRate.addReason(rh.gs(R.string.increasing_max_basal), this) } - absoluteRate.setIfSmaller(aapsLogger, maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxBasal, rh.gs(R.string.maxvalueinpreferences)), this) + absoluteRate.setIfSmaller(maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxBasal, rh.gs(R.string.maxvalueinpreferences)), this) // Check percentRate but absolute rate too, because we know real current basal in pump val maxBasalMultiplier = sp.getDouble(R.string.key_openapsama_current_basal_safety_multiplier, 4.0) val maxFromBasalMultiplier = floor(maxBasalMultiplier * profile.getBasal() * 100) / 100 absoluteRate.setIfSmaller( - aapsLogger, maxFromBasalMultiplier, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxFromBasalMultiplier, rh.gs(R.string.max_basal_multiplier)), this ) val maxBasalFromDaily = sp.getDouble(R.string.key_openapsama_max_daily_safety_multiplier, 3.0) val maxFromDaily = floor(profile.getMaxDailyBasal() * maxBasalFromDaily * 100) / 100 - absoluteRate.setIfSmaller(aapsLogger, maxFromDaily, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxFromDaily, rh.gs(R.string.max_daily_basal_multiplier)), this) + absoluteRate.setIfSmaller(maxFromDaily, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, maxFromDaily, rh.gs(R.string.max_daily_basal_multiplier)), this) } return absoluteRate } override fun isSMBModeEnabled(value: Constraint): Constraint { val enabled = sp.getBoolean(R.string.key_use_smb, false) - if (!enabled) value.set(aapsLogger, false, rh.gs(R.string.smb_disabled_in_preferences), this) + if (!enabled) value.set(false, rh.gs(R.string.smb_disabled_in_preferences), this) return value } override fun isUAMEnabled(value: Constraint): Constraint { val enabled = sp.getBoolean(R.string.key_use_uam, false) - if (!enabled) value.set(aapsLogger, false, rh.gs(R.string.uam_disabled_in_preferences), this) + if (!enabled) value.set(false, rh.gs(R.string.uam_disabled_in_preferences), this) return value } override fun isAutosensModeEnabled(value: Constraint): Constraint { val enabled = sp.getBoolean(R.string.key_openapsama_use_autosens, false) - if (!enabled) value.set(aapsLogger, false, rh.gs(R.string.autosens_disabled_in_preferences), this) + if (!enabled) value.set(false, rh.gs(R.string.autosens_disabled_in_preferences), this) return value } diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMBDynamicISF/OpenAPSSMBDynamicISFPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMBDynamicISF/OpenAPSSMBDynamicISFPlugin.kt index 2b83d11856..9ade4e2cde 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMBDynamicISF/OpenAPSSMBDynamicISFPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMBDynamicISF/OpenAPSSMBDynamicISFPlugin.kt @@ -6,7 +6,7 @@ import info.nightscout.annotations.OpenForTesting import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.aps.DetermineBasalAdapter import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin @@ -32,7 +32,7 @@ class OpenAPSSMBDynamicISFPlugin @Inject constructor( injector: HasAndroidInjector, aapsLogger: AAPSLogger, rxBus: RxBus, - constraintChecker: Constraints, + constraintChecker: ConstraintsChecker, rh: ResourceHelper, profileFunction: ProfileFunction, context: Context, diff --git a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt index 422da5253c..3f926606f6 100644 --- a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt +++ b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt @@ -2,11 +2,11 @@ package info.nightscout.plugins.aps.loop import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.utils.JsonHelper.safeGetDouble import info.nightscout.database.entities.TemporaryBasal import info.nightscout.interfaces.aps.APSResult -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.sharedtests.TestBaseWithProfile import org.junit.jupiter.api.Assertions @@ -18,11 +18,11 @@ import org.mockito.Mockito.`when` class APSResultTest : TestBaseWithProfile() { - @Mock lateinit var constraints: Constraints + @Mock lateinit var constraintsChecker: ConstraintsChecker private val injector = HasAndroidInjector { AndroidInjector { } } - private var closedLoopEnabled = Constraint(false) + private var closedLoopEnabled = ConstraintObject(false, injector) private fun APSResult.percent(percent: Int): APSResult { this.percent = percent @@ -55,7 +55,7 @@ class APSResultTest : TestBaseWithProfile() { val apsResult = info.nightscout.plugins.aps.APSResultObject { AndroidInjector { } } .also { it.aapsLogger = aapsLogger - it.constraintChecker = constraints + it.constraintChecker = constraintsChecker it.sp = sp it.activePlugin = activePlugin it.iobCobCalculator = iobCobCalculator @@ -70,7 +70,7 @@ class APSResultTest : TestBaseWithProfile() { apsResult.usePercent(true) // closed loop mode return original request - closedLoopEnabled.set(aapsLogger, true) + closedLoopEnabled.set(true) `when`(iobCobCalculator.getTempBasalIncludingConvertedExtended(ArgumentMatchers.anyLong())).thenReturn(null) apsResult.tempBasalRequested(false) Assertions.assertEquals(false, apsResult.isChangeRequested) @@ -78,7 +78,7 @@ class APSResultTest : TestBaseWithProfile() { Assertions.assertEquals(true, apsResult.isChangeRequested) // open loop - closedLoopEnabled.set(aapsLogger, false) + closedLoopEnabled.set(false) // no change requested `when`(iobCobCalculator.getTempBasalIncludingConvertedExtended(ArgumentMatchers.anyLong())).thenReturn(null) apsResult.tempBasalRequested(false) @@ -184,7 +184,7 @@ class APSResultTest : TestBaseWithProfile() { apsResult.usePercent(false) // open loop - closedLoopEnabled.set(aapsLogger, false) + closedLoopEnabled.set(false) // request 100% when no temp is running `when`(iobCobCalculator.getTempBasalIncludingConvertedExtended(ArgumentMatchers.anyLong())).thenReturn(null) apsResult.tempBasalRequested(true).rate(1.0).duration(30) @@ -296,7 +296,7 @@ class APSResultTest : TestBaseWithProfile() { val apsResult = info.nightscout.plugins.aps.APSResultObject { AndroidInjector { } } .also { it.aapsLogger = aapsLogger - it.constraintChecker = constraints + it.constraintChecker = constraintsChecker it.sp = sp it.activePlugin = activePlugin it.iobCobCalculator = iobCobCalculator @@ -309,11 +309,11 @@ class APSResultTest : TestBaseWithProfile() { } @Test fun jsonTest() { - closedLoopEnabled.set(aapsLogger, true) + closedLoopEnabled.set(true) val apsResult = info.nightscout.plugins.aps.APSResultObject { AndroidInjector { } } .also { it.aapsLogger = aapsLogger - it.constraintChecker = constraints + it.constraintChecker = constraintsChecker it.sp = sp it.activePlugin = activePlugin it.iobCobCalculator = iobCobCalculator @@ -328,7 +328,7 @@ class APSResultTest : TestBaseWithProfile() { @BeforeEach fun prepare() { - `when`(constraints.isClosedLoopAllowed(anyObject())).thenReturn(closedLoopEnabled) + `when`(constraintsChecker.isClosedLoopAllowed(anyObject())).thenReturn(closedLoopEnabled) `when`(sp.getDouble(ArgumentMatchers.anyInt(), ArgumentMatchers.anyDouble())).thenReturn(30.0) `when`(profileFunction.getProfile()).thenReturn(validProfile) } diff --git a/plugins/automation/build.gradle b/plugins/automation/build.gradle index 2fecd1f02e..94a09517e0 100644 --- a/plugins/automation/build.gradle +++ b/plugins/automation/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation project(':database:impl') testImplementation project(':app-wear-shared:shared-tests') + testImplementation project(':app-wear-shared:shared-impl') testImplementation project(':implementation') testImplementation project(':plugins:main') diff --git a/plugins/automation/src/main/java/info/nightscout/automation/AutomationPlugin.kt b/plugins/automation/src/main/java/info/nightscout/automation/AutomationPlugin.kt index 725788bebb..7d2c20da06 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/AutomationPlugin.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/AutomationPlugin.kt @@ -49,7 +49,7 @@ import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.automation.Automation import info.nightscout.interfaces.automation.AutomationEvent -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription @@ -87,7 +87,7 @@ class AutomationPlugin @Inject constructor( private val fabricPrivacy: FabricPrivacy, private val loop: Loop, private val rxBus: RxBus, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, aapsLogger: AAPSLogger, private val aapsSchedulers: AapsSchedulers, private val config: Config, @@ -244,7 +244,7 @@ class AutomationPlugin @Inject constructor( } val enabled = constraintChecker.isAutomationEnabled() if (!enabled.value()) { - executionLog.add(enabled.getMostLimitedReasons(aapsLogger)) + executionLog.add(enabled.getMostLimitedReasons()) rxBus.send(EventAutomationUpdateGui()) commonEventsEnabled = false } @@ -413,7 +413,7 @@ class AutomationPlugin @Inject constructor( } /** - * Generate reminder via [info.nightscout.interfaces.utils.TimerUtil] + * Generate reminder via [info.nightscout.automation.ui.TimerUtil] * * @param seconds seconds to the future */ diff --git a/plugins/automation/src/test/java/info/nightscout/automation/AutomationEventTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/AutomationEventTest.kt index 195baece55..84e723e73d 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/AutomationEventTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/AutomationEventTest.kt @@ -10,7 +10,6 @@ import info.nightscout.automation.triggers.TriggerConnectorTest import info.nightscout.automation.triggers.TriggerDummy import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.aps.Loop -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.sharedtests.TestBase import org.json.JSONObject @@ -36,7 +35,7 @@ class AutomationEventTest : TestBase() { it.loopPlugin = loopPlugin it.rh = rh it.configBuilder = configBuilder - it.rxBus = RxBus(aapsSchedulers, aapsLogger) + it.rxBus = rxBus } } } diff --git a/plugins/automation/src/test/java/info/nightscout/automation/BolusTimerImplTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/BolusTimerImplTest.kt index c598d29860..a5d6a4a35d 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/BolusTimerImplTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/BolusTimerImplTest.kt @@ -10,13 +10,13 @@ import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Config import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -32,8 +32,7 @@ class BolusTimerImplTest : TestBase() { @Mock lateinit var sp: SP @Mock lateinit var fabricPrivacy: FabricPrivacy @Mock lateinit var loop: Loop - @Mock lateinit var rxBus: RxBus - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var config: Config @Mock lateinit var locationServiceHelper: LocationServiceHelper @Mock lateinit var activePlugin: ActivePlugin @@ -49,16 +48,17 @@ class BolusTimerImplTest : TestBase() { } } private lateinit var dateUtil: DateUtil - private lateinit var automationPlugin: AutomationPlugin @BeforeEach fun init() { Mockito.`when`(rh.gs(anyInt())).thenReturn("") Mockito.`when`(profileFunction.getUnits()).thenReturn(GlucoseUnit.MGDL) - dateUtil = DateUtil(context) - automationPlugin = AutomationPlugin(injector, rh, context, sp, fabricPrivacy, loop, rxBus, constraintChecker, aapsLogger, aapsSchedulers, config, locationServiceHelper, dateUtil, - activePlugin, timerUtil) + dateUtil = DateUtilImpl(context) + automationPlugin = AutomationPlugin( + injector, rh, context, sp, fabricPrivacy, loop, rxBus, constraintChecker, aapsLogger, aapsSchedulers, config, locationServiceHelper, dateUtil, + activePlugin, timerUtil + ) } @Test diff --git a/plugins/automation/src/test/java/info/nightscout/automation/CarbTimerImplTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/CarbTimerImplTest.kt index ab6416eb4d..4d4ca8d8c3 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/CarbTimerImplTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/CarbTimerImplTest.kt @@ -10,13 +10,13 @@ import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Config import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -33,8 +33,7 @@ class CarbTimerImplTest : TestBase() { @Mock lateinit var sp: SP @Mock lateinit var fabricPrivacy: FabricPrivacy @Mock lateinit var loop: Loop - @Mock lateinit var rxBus: RxBus - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var config: Config @Mock lateinit var locationServiceHelper: LocationServiceHelper @Mock lateinit var activePlugin: ActivePlugin @@ -57,7 +56,7 @@ class CarbTimerImplTest : TestBase() { fun init() { Mockito.`when`(rh.gs(anyInt())).thenReturn("") Mockito.`when`(profileFunction.getUnits()).thenReturn(GlucoseUnit.MGDL) - dateUtil = DateUtil(context) + dateUtil = DateUtilImpl(context) timerUtil = TimerUtil(context) automationPlugin = AutomationPlugin( injector, rh, context, sp, fabricPrivacy, loop, rxBus, constraintChecker, aapsLogger, aapsSchedulers, config, locationServiceHelper, dateUtil, diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt index 11b7cc8518..b4ff42be96 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionAlarmTest.kt @@ -9,7 +9,6 @@ import info.nightscout.automation.ui.TimerUtil import info.nightscout.interfaces.Config import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.utils.DateUtil import info.nightscout.sharedtests.TestBase @@ -23,7 +22,6 @@ import org.mockito.Mockito.`when` class ActionAlarmTest : TestBase() { @Mock lateinit var rh: ResourceHelper - @Mock lateinit var rxBus: RxBus @Mock lateinit var context: Context @Mock lateinit var dateUtil: DateUtil @Mock lateinit var config: Config diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt index a8fc633ab6..1cf9a096c7 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionNotificationTest.kt @@ -26,7 +26,7 @@ class ActionNotificationTest : TestBase() { @Mock lateinit var rh: ResourceHelper @Mock lateinit var context: Context - @Mock lateinit var rxBus: RxBus + @Mock lateinit var rxBusMocked: RxBus @Mock lateinit var repository: AppRepository private lateinit var sut: ActionNotification @@ -34,7 +34,7 @@ class ActionNotificationTest : TestBase() { AndroidInjector { if (it is ActionNotification) { it.rh = rh - it.rxBus = rxBus + it.rxBus = rxBusMocked it.repository = repository } if (it is PumpEnactResult) { @@ -78,7 +78,7 @@ class ActionNotificationTest : TestBase() { Assertions.assertTrue(result.success) } }) - Mockito.verify(rxBus, Mockito.times(2)).send(anyObject()) + Mockito.verify(rxBusMocked, Mockito.times(2)).send(anyObject()) //Mockito.verify(repository, Mockito.times(1)).runTransaction(any(Transaction::class.java)) } diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt index 1e5ede19a8..0976da4cc7 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt @@ -3,29 +3,24 @@ package info.nightscout.automation.actions import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.automation.triggers.Trigger -import info.nightscout.database.entities.DeviceStatus +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.database.entities.OfflineEvent import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.Profile -import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.ProfileSource -import info.nightscout.interfaces.pump.Pump import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.CommandQueue -import info.nightscout.interfaces.receivers.ReceiverStatusStore import info.nightscout.interfaces.smsCommunicator.SmsCommunicator import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.interfaces.ResourceHelper -import info.nightscout.shared.utils.DateUtil import info.nightscout.sharedtests.TestBaseWithProfile import org.junit.jupiter.api.BeforeEach import org.mockito.Mock @@ -45,7 +40,7 @@ ActionsTestBase : TestBaseWithProfile() { private var suspended = false override var lastRun: Loop.LastRun? = Loop.LastRun() - override var closedLoopEnabled: Constraint? = Constraint(true) + override var closedLoopEnabled: Constraint? = ConstraintObject(true, injector) override val isSuspended: Boolean = suspended override val isLGS: Boolean = false override val isSuperBolus: Boolean = false @@ -174,6 +169,9 @@ ActionsTestBase : TestBaseWithProfile() { it.rh = rh it.aapsLogger = aapsLogger } + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } } } diff --git a/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerTestBase.kt b/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerTestBase.kt index 21aed46957..825a61499a 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerTestBase.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/triggers/TriggerTestBase.kt @@ -8,7 +8,6 @@ import info.nightscout.database.impl.AppRepository import info.nightscout.implementation.iob.GlucoseStatusProviderImpl import info.nightscout.interfaces.aps.AutosensDataStore import info.nightscout.interfaces.receivers.ReceiverStatusStore -import info.nightscout.rx.bus.RxBus import info.nightscout.sharedtests.TestBaseWithProfile import org.junit.jupiter.api.BeforeEach import org.mockito.Mock @@ -31,7 +30,7 @@ open class TriggerTestBase : TestBaseWithProfile() { AndroidInjector { if (it is Trigger) { it.aapsLogger = aapsLogger - it.rxBus = RxBus(aapsSchedulers, aapsLogger) + it.rxBus = rxBus it.rh = rh it.profileFunction = profileFunction it.sp = sp diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsImpl.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsCheckerImpl.kt similarity index 57% rename from plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsImpl.kt rename to plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsCheckerImpl.kt index 990e860a28..09b1688ec8 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsImpl.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsCheckerImpl.kt @@ -1,109 +1,135 @@ package info.nightscout.plugins.constraints +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Profile import javax.inject.Inject import javax.inject.Singleton @Singleton -class ConstraintsImpl @Inject constructor(private val activePlugin: ActivePlugin) : Constraints { +class ConstraintsCheckerImpl @Inject constructor( + private val activePlugin: ActivePlugin, + val injector: HasAndroidInjector +) : ConstraintsChecker { + + override fun isLoopInvocationAllowed(): Constraint = isLoopInvocationAllowed(ConstraintObject(true, injector)) override fun isLoopInvocationAllowed(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isLoopInvocationAllowed(value) } return value } + override fun isClosedLoopAllowed(): Constraint = isClosedLoopAllowed(ConstraintObject(true, injector)) + override fun isClosedLoopAllowed(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isClosedLoopAllowed(value) } return value } + override fun isLgsAllowed(): Constraint = isLgsAllowed(ConstraintObject(true, injector)) + override fun isLgsAllowed(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isLgsAllowed(value) } return value } + override fun isAutosensModeEnabled(): Constraint = isAutosensModeEnabled(ConstraintObject(true, injector)) + override fun isAutosensModeEnabled(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isAutosensModeEnabled(value) } return value } + override fun isSMBModeEnabled(): Constraint = isSMBModeEnabled(ConstraintObject(true, injector)) + override fun isSMBModeEnabled(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isSMBModeEnabled(value) } return value } + override fun isDynIsfModeEnabled(): Constraint = isDynIsfModeEnabled(ConstraintObject(true, injector)) + override fun isDynIsfModeEnabled(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isDynIsfModeEnabled(value) } return value } + override fun isUAMEnabled(): Constraint = isUAMEnabled(ConstraintObject(true, injector)) + override fun isUAMEnabled(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isUAMEnabled(value) } return value } + override fun isAdvancedFilteringEnabled(): Constraint = isAdvancedFilteringEnabled(ConstraintObject(true, injector)) + override fun isAdvancedFilteringEnabled(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isAdvancedFilteringEnabled(value) } return value } + override fun isSuperBolusEnabled(): Constraint = isSuperBolusEnabled(ConstraintObject(true, injector)) + override fun isSuperBolusEnabled(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isSuperBolusEnabled(value) } return value } + override fun isAutomationEnabled(): Constraint = isAutomationEnabled(ConstraintObject(true, injector)) + override fun applyBasalConstraints(absoluteRate: Constraint, profile: Profile): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.applyBasalConstraints(absoluteRate, profile) } @@ -111,9 +137,9 @@ class ConstraintsImpl @Inject constructor(private val activePlugin: ActivePlugin } override fun applyBasalPercentConstraints(percentRate: Constraint, profile: Profile): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constrain = p as Constraints + val constrain = p as PluginConstraints if (!p.isEnabled()) continue constrain.applyBasalPercentConstraints(percentRate, profile) } @@ -121,9 +147,9 @@ class ConstraintsImpl @Inject constructor(private val activePlugin: ActivePlugin } override fun applyBolusConstraints(insulin: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constrain = p as Constraints + val constrain = p as PluginConstraints if (!p.isEnabled()) continue constrain.applyBolusConstraints(insulin) } @@ -131,9 +157,9 @@ class ConstraintsImpl @Inject constructor(private val activePlugin: ActivePlugin } override fun applyExtendedBolusConstraints(insulin: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constrain = p as Constraints + val constrain = p as PluginConstraints if (!p.isEnabled()) continue constrain.applyExtendedBolusConstraints(insulin) } @@ -141,9 +167,9 @@ class ConstraintsImpl @Inject constructor(private val activePlugin: ActivePlugin } override fun applyCarbsConstraints(carbs: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constrain = p as Constraints + val constrain = p as PluginConstraints if (!p.isEnabled()) continue constrain.applyCarbsConstraints(carbs) } @@ -151,9 +177,9 @@ class ConstraintsImpl @Inject constructor(private val activePlugin: ActivePlugin } override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constrain = p as Constraints + val constrain = p as PluginConstraints if (!p.isEnabled()) continue constrain.applyMaxIOBConstraints(maxIob) } @@ -161,12 +187,34 @@ class ConstraintsImpl @Inject constructor(private val activePlugin: ActivePlugin } override fun isAutomationEnabled(value: Constraint): Constraint { - val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(Constraints::class.java) + val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) for (p in constraintsPlugins) { - val constraint = p as Constraints + val constraint = p as PluginConstraints if (!p.isEnabled()) continue constraint.isAutomationEnabled(value) } return value } + + /* + * Determine max values by walking through all constraints + */ + + override fun getMaxBasalAllowed(profile: Profile): Constraint = + applyBasalConstraints(ConstraintObject(Double.MAX_VALUE, injector), profile) + + override fun getMaxBasalPercentAllowed(profile: Profile): Constraint = + applyBasalPercentConstraints(ConstraintObject(Int.MAX_VALUE, injector), profile) + + override fun getMaxBolusAllowed(): Constraint = + applyBolusConstraints(ConstraintObject(Double.MAX_VALUE, injector)) + + override fun getMaxExtendedBolusAllowed(): Constraint = + applyExtendedBolusConstraints(ConstraintObject(Double.MAX_VALUE, injector)) + + override fun getMaxCarbsAllowed(): Constraint = + applyCarbsConstraints(ConstraintObject(Int.MAX_VALUE, injector)) + + override fun getMaxIOBAllowed(): Constraint = + applyMaxIOBConstraints(ConstraintObject(Double.MAX_VALUE, injector)) } \ No newline at end of file diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPlugin.kt index 13f92597cc..3e2a9adf07 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPlugin.kt @@ -5,7 +5,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase @@ -48,7 +48,7 @@ class BgQualityCheckPlugin @Inject constructor( .showInList(false) .pluginName(R.string.bg_quality), aapsLogger, rh, injector -), Constraints, BgQualityCheck { +), PluginConstraints, BgQualityCheck { private var disposable: CompositeDisposable = CompositeDisposable() @@ -71,7 +71,7 @@ class BgQualityCheckPlugin @Inject constructor( // Fallback to LGS if BG values are doubled override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint = if (state == BgQualityCheck.State.DOUBLED) - maxIob.set(aapsLogger, 0.0, "Doubled values in BGSource", this) + maxIob.set(0.0, "Doubled values in BGSource", this) else maxIob diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt index 3fbc067aa2..f212ea58de 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/di/PluginsConstraintsModule.kt @@ -3,9 +3,9 @@ package info.nightscout.plugins.constraints.di import dagger.Binds import dagger.Module import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.versionChecker.VersionCheckerUtils -import info.nightscout.plugins.constraints.ConstraintsImpl +import info.nightscout.plugins.constraints.ConstraintsCheckerImpl import info.nightscout.plugins.constraints.bgQualityCheck.BgQualityCheckPlugin import info.nightscout.plugins.constraints.versionChecker.VersionCheckerUtilsImpl @@ -24,6 +24,6 @@ abstract class PluginsConstraintsModule { @Binds fun bindVersionCheckerUtils(versionCheckerUtils: VersionCheckerUtilsImpl): VersionCheckerUtils @Binds fun bindBgQualityCheck(bgQualityCheck: BgQualityCheckPlugin): BgQualityCheck - @Binds fun bindsConstraints(constraintsImpl: ConstraintsImpl): Constraints + @Binds fun bindsConstraintChecker(constraintsCheckerImpl: ConstraintsCheckerImpl): ConstraintsChecker } } \ No newline at end of file diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/dstHelper/DstHelperPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/dstHelper/DstHelperPlugin.kt index ba7293a6ee..d51b2d833e 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/dstHelper/DstHelperPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/dstHelper/DstHelperPlugin.kt @@ -3,7 +3,7 @@ package info.nightscout.plugins.constraints.dstHelper import dagger.android.HasAndroidInjector import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase @@ -35,7 +35,7 @@ class DstHelperPlugin @Inject constructor( .showInList(false) .pluginName(R.string.dst_plugin_name), aapsLogger, rh, injector -), Constraints { +), PluginConstraints { companion object { @@ -74,7 +74,7 @@ class DstHelperPlugin @Inject constructor( } else { aapsLogger.debug(LTag.CONSTRAINTS, "Loop already suspended") } - value.set(aapsLogger, false, "DST in last 3 hours.", this) + value.set(false, "DST in last 3 hours.", this) } return value } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesPlugin.kt index d1aa0a557c..9fec153972 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/ObjectivesPlugin.kt @@ -3,7 +3,6 @@ package info.nightscout.plugins.constraints.objectives import dagger.android.HasAndroidInjector import info.nightscout.interfaces.Config import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.constraints.Objectives import info.nightscout.interfaces.constraints.Objectives.Companion.AUTOSENS_OBJECTIVE import info.nightscout.interfaces.constraints.Objectives.Companion.AUTO_OBJECTIVE @@ -12,6 +11,7 @@ import info.nightscout.interfaces.constraints.Objectives.Companion.FIRST_OBJECTI import info.nightscout.interfaces.constraints.Objectives.Companion.MAXBASAL_OBJECTIVE import info.nightscout.interfaces.constraints.Objectives.Companion.MAXIOB_ZERO_CL_OBJECTIVE import info.nightscout.interfaces.constraints.Objectives.Companion.SMB_OBJECTIVE +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription @@ -54,7 +54,7 @@ class ObjectivesPlugin @Inject constructor( .shortName(R.string.objectives_shortname) .description(R.string.description_objectives), aapsLogger, rh, injector -), Constraints, Objectives { +), PluginConstraints, Objectives { var objectives: MutableList = ArrayList() @@ -112,49 +112,49 @@ class ObjectivesPlugin @Inject constructor( */ override fun isLoopInvocationAllowed(value: Constraint): Constraint { if (!objectives[FIRST_OBJECTIVE].isStarted) - value.set(aapsLogger, false, rh.gs(R.string.objectivenotstarted, FIRST_OBJECTIVE + 1), this) + value.set(false, rh.gs(R.string.objectivenotstarted, FIRST_OBJECTIVE + 1), this) return value } override fun isLgsAllowed(value: Constraint): Constraint { if (!objectives[MAXBASAL_OBJECTIVE].isStarted) - value.set(aapsLogger, false, rh.gs(R.string.objectivenotstarted, MAXBASAL_OBJECTIVE + 1), this) + value.set(false, rh.gs(R.string.objectivenotstarted, MAXBASAL_OBJECTIVE + 1), this) return value } override fun isClosedLoopAllowed(value: Constraint): Constraint { if (!objectives[MAXIOB_ZERO_CL_OBJECTIVE].isStarted) - value.set(aapsLogger, false, rh.gs(R.string.objectivenotstarted, MAXIOB_ZERO_CL_OBJECTIVE + 1), this) + value.set(false, rh.gs(R.string.objectivenotstarted, MAXIOB_ZERO_CL_OBJECTIVE + 1), this) return value } override fun isAutosensModeEnabled(value: Constraint): Constraint { if (!objectives[AUTOSENS_OBJECTIVE].isStarted) - value.set(aapsLogger, false, rh.gs(R.string.objectivenotstarted, AUTOSENS_OBJECTIVE + 1), this) + value.set(false, rh.gs(R.string.objectivenotstarted, AUTOSENS_OBJECTIVE + 1), this) return value } override fun isSMBModeEnabled(value: Constraint): Constraint { if (!objectives[SMB_OBJECTIVE].isStarted) - value.set(aapsLogger, false, rh.gs(R.string.objectivenotstarted, SMB_OBJECTIVE + 1), this) + value.set(false, rh.gs(R.string.objectivenotstarted, SMB_OBJECTIVE + 1), this) return value } override fun isDynIsfModeEnabled(value: Constraint): Constraint { if (!objectives[DYN_ISF_OBJECTIVE].isStarted) - value.set(aapsLogger, false, rh.gs(R.string.objectivenotstarted, DYN_ISF_OBJECTIVE + 1), this) + value.set(false, rh.gs(R.string.objectivenotstarted, DYN_ISF_OBJECTIVE + 1), this) return value } override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint { if (objectives[MAXIOB_ZERO_CL_OBJECTIVE].isStarted && !objectives[MAXIOB_ZERO_CL_OBJECTIVE].isAccomplished) - maxIob.set(aapsLogger, 0.0, rh.gs(R.string.objectivenotfinished, MAXIOB_ZERO_CL_OBJECTIVE + 1), this) + maxIob.set(0.0, rh.gs(R.string.objectivenotfinished, MAXIOB_ZERO_CL_OBJECTIVE + 1), this) return maxIob } override fun isAutomationEnabled(value: Constraint): Constraint { if (!objectives[AUTO_OBJECTIVE].isStarted) - value.set(aapsLogger, false, rh.gs(R.string.objectivenotstarted, AUTO_OBJECTIVE + 1), this) + value.set(false, rh.gs(R.string.objectivenotstarted, AUTO_OBJECTIVE + 1), this) return value } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt index a1398fe8ef..49c035bb2f 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt @@ -1,9 +1,8 @@ package info.nightscout.plugins.constraints.objectives.objectives import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.Constants -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.plugins.constraints.R @@ -14,12 +13,13 @@ class Objective4(injector: HasAndroidInjector) : Objective(injector, "maxbasal", @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var activePlugin: ActivePlugin + init { tasks.add( object : Task(this, R.string.objectives_maxbasal_gate) { override fun isCompleted(): Boolean { val profile = profileFunction.getProfile() ?: return false - val maxBasalSet = (activePlugin.activeAPS as Constraints).applyBasalConstraints(Constraint(Constants.REALLYHIGHBASALRATE), profile) + val maxBasalSet = (activePlugin.activeAPS as PluginConstraints).applyBasalConstraints(ConstraintObject(Double.MAX_VALUE, injector), profile) val maxDailyBasal = profile.getMaxDailyBasal() return maxBasalSet.value() > 2.8 * maxDailyBasal } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt index d73cd22a2f..65dbe484e8 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt @@ -1,7 +1,7 @@ package info.nightscout.plugins.constraints.objectives.objectives import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.plugins.constraints.R import info.nightscout.plugins.constraints.safety.SafetyPlugin import info.nightscout.shared.utils.T @@ -17,7 +17,7 @@ class Objective5(injector: HasAndroidInjector) : Objective(injector, "maxiobzero tasks.add( object : Task(this, R.string.closedmodeenabled) { override fun isCompleted(): Boolean { - val closedLoopEnabled = Constraint(true) + val closedLoopEnabled = ConstraintObject(true, injector) safetyPlugin.isClosedLoopAllowed(closedLoopEnabled) return closedLoopEnabled.value() } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective6.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective6.kt index a9030b8c2c..0b0b586b5d 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective6.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective6.kt @@ -2,7 +2,7 @@ package info.nightscout.plugins.constraints.objectives.objectives import dagger.android.HasAndroidInjector import info.nightscout.interfaces.ApsMode -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.plugins.constraints.R import info.nightscout.shared.utils.T import javax.inject.Inject @@ -10,7 +10,7 @@ import javax.inject.Inject @Suppress("SpellCheckingInspection") class Objective6(injector: HasAndroidInjector) : Objective(injector, "maxiob", R.string.objectives_maxiob_objective, R.string.objectives_maxiob_gate) { - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker init { tasks.add(MinimumDurationTask(this, T.days(1).msecs())) diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/phoneChecker/PhoneCheckerPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/phoneChecker/PhoneCheckerPlugin.kt index 689bdd57a0..bab63a246d 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/phoneChecker/PhoneCheckerPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/phoneChecker/PhoneCheckerPlugin.kt @@ -4,7 +4,7 @@ import android.content.Context import android.os.Build import com.scottyab.rootbeer.RootBeer import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType @@ -22,13 +22,13 @@ class PhoneCheckerPlugin @Inject constructor( private val context: Context ) : PluginBase( PluginDescription() - .mainType(PluginType.CONSTRAINTS) - .neverVisible(true) - .alwaysEnabled(true) - .showInList(false) - .pluginName(R.string.phone_checker), + .mainType(PluginType.CONSTRAINTS) + .neverVisible(true) + .alwaysEnabled(true) + .showInList(false) + .pluginName(R.string.phone_checker), aapsLogger, rh, injector -), Constraints { +), PluginConstraints { var phoneRooted: Boolean = false var devMode: Boolean = false @@ -36,8 +36,10 @@ class PhoneCheckerPlugin @Inject constructor( val manufacturer: String = Build.MANUFACTURER private fun isDevModeEnabled(): Boolean { - return android.provider.Settings.Secure.getInt(context.contentResolver, - android.provider.Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0 + return android.provider.Settings.Secure.getInt( + context.contentResolver, + android.provider.Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0 + ) != 0 } override fun onStart() { diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt index 3c104f31e0..1ce7e85d93 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt @@ -1,6 +1,7 @@ package info.nightscout.plugins.constraints.safety import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.utils.extensions.putDouble import info.nightscout.core.utils.extensions.putInt import info.nightscout.core.utils.extensions.putString @@ -10,7 +11,8 @@ import info.nightscout.core.utils.extensions.storeString import info.nightscout.interfaces.ApsMode import info.nightscout.interfaces.Config import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.constraints.Safety import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.notifications.Notification @@ -39,7 +41,7 @@ class SafetyPlugin @Inject constructor( aapsLogger: AAPSLogger, rh: ResourceHelper, private val sp: SP, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val activePlugin: ActivePlugin, private val hardLimits: HardLimits, private val config: Config, @@ -56,57 +58,57 @@ class SafetyPlugin @Inject constructor( .pluginName(R.string.safety) .preferencesId(R.xml.pref_safety), aapsLogger, rh, injector -), Constraints, Safety { +), PluginConstraints, Safety { /** * Constraints interface */ override fun isLoopInvocationAllowed(value: Constraint): Constraint { - if (!activePlugin.activePump.pumpDescription.isTempBasalCapable) value.set(aapsLogger, false, rh.gs(R.string.pumpisnottempbasalcapable), this) + if (!activePlugin.activePump.pumpDescription.isTempBasalCapable) value.set(false, rh.gs(R.string.pumpisnottempbasalcapable), this) return value } override fun isClosedLoopAllowed(value: Constraint): Constraint { val mode = ApsMode.fromString(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)) - if (mode == ApsMode.OPEN) value.set(aapsLogger, false, rh.gs(R.string.closedmodedisabledinpreferences), this) + if (mode == ApsMode.OPEN) value.set(false, rh.gs(R.string.closedmodedisabledinpreferences), this) if (!config.isEngineeringModeOrRelease()) { if (value.value()) { uiInteraction.addNotification(Notification.TOAST_ALARM, rh.gs(R.string.closed_loop_disabled_on_dev_branch), Notification.NORMAL) } - value.set(aapsLogger, false, rh.gs(R.string.closed_loop_disabled_on_dev_branch), this) + value.set(false, rh.gs(R.string.closed_loop_disabled_on_dev_branch), this) } val pump = activePlugin.activePump if (!pump.isFakingTempsByExtendedBoluses && iobCobCalculator.getExtendedBolus(dateUtil.now()) != null) { - value.set(aapsLogger, false, rh.gs(R.string.closed_loop_disabled_with_eb), this) + value.set(false, rh.gs(R.string.closed_loop_disabled_with_eb), this) } return value } override fun isSMBModeEnabled(value: Constraint): Constraint { val closedLoop = constraintChecker.isClosedLoopAllowed() - if (!closedLoop.value()) value.set(aapsLogger, false, rh.gs(R.string.smbnotallowedinopenloopmode), this) + if (!closedLoop.value()) value.set(false, rh.gs(R.string.smbnotallowedinopenloopmode), this) return value } override fun isAdvancedFilteringEnabled(value: Constraint): Constraint { val bgSource = activePlugin.activeBgSource - if (!bgSource.advancedFilteringSupported()) value.set(aapsLogger, false, rh.gs(R.string.smbalwaysdisabled), this) + if (!bgSource.advancedFilteringSupported()) value.set(false, rh.gs(R.string.smbalwaysdisabled), this) return value } override fun applyBasalConstraints(absoluteRate: Constraint, profile: Profile): Constraint { - absoluteRate.setIfGreater(aapsLogger, 0.0, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, 0.0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) - absoluteRate.setIfSmaller(aapsLogger, hardLimits.maxBasal(), rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, hardLimits.maxBasal(), rh.gs(R.string.hardlimit)), this) + absoluteRate.setIfGreater(0.0, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, 0.0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) + absoluteRate.setIfSmaller(hardLimits.maxBasal(), rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, hardLimits.maxBasal(), rh.gs(R.string.hardlimit)), this) val pump = activePlugin.activePump // check for pump max if (pump.pumpDescription.tempBasalStyle == PumpDescription.ABSOLUTE) { val pumpLimit = pump.pumpDescription.pumpType.tbrSettings?.maxDose ?: 0.0 - absoluteRate.setIfSmaller(aapsLogger, pumpLimit, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, pumpLimit, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + absoluteRate.setIfSmaller(pumpLimit, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, pumpLimit, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) } // do rounding if (pump.pumpDescription.tempBasalStyle == PumpDescription.ABSOLUTE) { - absoluteRate.set(aapsLogger, Round.roundTo(absoluteRate.value(), pump.pumpDescription.tempAbsoluteStep)) + absoluteRate.set(Round.roundTo(absoluteRate.value(), pump.pumpDescription.tempAbsoluteStep)) } return absoluteRate } @@ -119,52 +121,58 @@ class SafetyPlugin @Inject constructor( currentBasal ) + " U/h", this ) - val absoluteConstraint = Constraint(absoluteRate) + val absoluteConstraint = ConstraintObject(absoluteRate, injector) applyBasalConstraints(absoluteConstraint, profile) percentRate.copyReasons(absoluteConstraint) val pump = activePlugin.activePump var percentRateAfterConst = java.lang.Double.valueOf(absoluteConstraint.value() / currentBasal * 100).toInt() - percentRateAfterConst = if (percentRateAfterConst < 100) Round.ceilTo(percentRateAfterConst.toDouble(), pump.pumpDescription.tempPercentStep.toDouble()).toInt() else Round.floorTo(percentRateAfterConst.toDouble(), pump.pumpDescription.tempPercentStep.toDouble()).toInt() - percentRate.set(aapsLogger, percentRateAfterConst, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, percentRateAfterConst, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + percentRateAfterConst = + if (percentRateAfterConst < 100) Round.ceilTo(percentRateAfterConst.toDouble(), pump.pumpDescription.tempPercentStep.toDouble()) + .toInt() else Round.floorTo(percentRateAfterConst.toDouble(), pump.pumpDescription.tempPercentStep.toDouble()).toInt() + percentRate.set(percentRateAfterConst, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, percentRateAfterConst, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) if (pump.pumpDescription.tempBasalStyle == PumpDescription.PERCENT) { val pumpLimit = pump.pumpDescription.pumpType.tbrSettings?.maxDose ?: 0.0 - percentRate.setIfSmaller(aapsLogger, pumpLimit.toInt(), rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, pumpLimit, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + percentRate.setIfSmaller(pumpLimit.toInt(), rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, pumpLimit, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) } return percentRate } override fun applyBolusConstraints(insulin: Constraint): Constraint { - insulin.setIfGreater(aapsLogger, 0.0, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, 0.0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) + insulin.setIfGreater(0.0, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, 0.0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) val maxBolus = sp.getDouble(info.nightscout.core.utils.R.string.key_treatmentssafety_maxbolus, 3.0) - insulin.setIfSmaller(aapsLogger, maxBolus, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, maxBolus, rh.gs(R.string.maxvalueinpreferences)), this) - insulin.setIfSmaller(aapsLogger, hardLimits.maxBolus(), rh.gs(info.nightscout.core.ui.R.string.limitingbolus, hardLimits.maxBolus(), rh.gs(R.string.hardlimit)), this) + insulin.setIfSmaller(maxBolus, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, maxBolus, rh.gs(R.string.maxvalueinpreferences)), this) + insulin.setIfSmaller(hardLimits.maxBolus(), rh.gs(info.nightscout.core.ui.R.string.limitingbolus, hardLimits.maxBolus(), rh.gs(R.string.hardlimit)), this) val pump = activePlugin.activePump val rounded = pump.pumpDescription.pumpType.determineCorrectBolusSize(insulin.value()) - insulin.setIfDifferent(aapsLogger, rounded, rh.gs(info.nightscout.core.ui.R.string.pumplimit), this) + insulin.setIfDifferent(rounded, rh.gs(info.nightscout.core.ui.R.string.pumplimit), this) return insulin } override fun applyExtendedBolusConstraints(insulin: Constraint): Constraint { - insulin.setIfGreater(aapsLogger, 0.0, rh.gs(R.string.limitingextendedbolus, 0.0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) + insulin.setIfGreater(0.0, rh.gs(R.string.limitingextendedbolus, 0.0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) val maxBolus = sp.getDouble(info.nightscout.core.utils.R.string.key_treatmentssafety_maxbolus, 3.0) - insulin.setIfSmaller(aapsLogger, maxBolus, rh.gs(R.string.limitingextendedbolus, maxBolus, rh.gs(R.string.maxvalueinpreferences)), this) - insulin.setIfSmaller(aapsLogger, hardLimits.maxBolus(), rh.gs(R.string.limitingextendedbolus, hardLimits.maxBolus(), rh.gs(R.string.hardlimit)), this) + insulin.setIfSmaller(maxBolus, rh.gs(R.string.limitingextendedbolus, maxBolus, rh.gs(R.string.maxvalueinpreferences)), this) + insulin.setIfSmaller(hardLimits.maxBolus(), rh.gs(R.string.limitingextendedbolus, hardLimits.maxBolus(), rh.gs(R.string.hardlimit)), this) val pump = activePlugin.activePump val rounded = pump.pumpDescription.pumpType.determineCorrectExtendedBolusSize(insulin.value()) - insulin.setIfDifferent(aapsLogger, rounded, rh.gs(info.nightscout.core.ui.R.string.pumplimit), this) + insulin.setIfDifferent(rounded, rh.gs(info.nightscout.core.ui.R.string.pumplimit), this) return insulin } override fun applyCarbsConstraints(carbs: Constraint): Constraint { - carbs.setIfGreater(aapsLogger, 0, rh.gs(R.string.limitingcarbs, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) + carbs.setIfGreater(0, rh.gs(R.string.limitingcarbs, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) val maxCarbs = sp.getInt(info.nightscout.core.utils.R.string.key_treatmentssafety_maxcarbs, 48) - carbs.setIfSmaller(aapsLogger, maxCarbs, rh.gs(R.string.limitingcarbs, maxCarbs, rh.gs(R.string.maxvalueinpreferences)), this) + carbs.setIfSmaller(maxCarbs, rh.gs(R.string.limitingcarbs, maxCarbs, rh.gs(R.string.maxvalueinpreferences)), this) return carbs } override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint { val apsMode = ApsMode.fromString(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)) - if (apsMode == ApsMode.LGS) maxIob.setIfSmaller(aapsLogger, HardLimits.MAX_IOB_LGS, rh.gs(info.nightscout.core.ui.R.string.limiting_iob, HardLimits.MAX_IOB_LGS, rh.gs(info.nightscout.core.ui.R.string.lowglucosesuspend)), this) + if (apsMode == ApsMode.LGS) maxIob.setIfSmaller( + HardLimits.MAX_IOB_LGS, + rh.gs(info.nightscout.core.ui.R.string.limiting_iob, HardLimits.MAX_IOB_LGS, rh.gs(info.nightscout.core.ui.R.string.lowglucosesuspend)), + this + ) return maxIob } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/signatureVerifier/SignatureVerifierPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/signatureVerifier/SignatureVerifierPlugin.kt index 6aaff96f09..97f966f3e1 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/signatureVerifier/SignatureVerifierPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/signatureVerifier/SignatureVerifierPlugin.kt @@ -6,7 +6,7 @@ import android.os.Handler import android.os.HandlerThread import dagger.android.HasAndroidInjector import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription @@ -54,7 +54,7 @@ class SignatureVerifierPlugin @Inject constructor( .showInList(false) .pluginName(R.string.signature_verifier), aapsLogger, rh, injector -), Constraints { +), PluginConstraints { private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) @@ -88,7 +88,7 @@ class SignatureVerifierPlugin @Inject constructor( override fun isLoopInvocationAllowed(value: Constraint): Constraint { if (hasIllegalSignature()) { showNotification() - value.set(aapsLogger, false) + value.set(false) } if (shouldDownloadCerts()) { handler.post { diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/storage/StorageConstraintPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/storage/StorageConstraintPlugin.kt index 53d10c5296..677d1d7709 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/storage/StorageConstraintPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/storage/StorageConstraintPlugin.kt @@ -6,7 +6,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.annotations.OpenForTesting import info.nightscout.interfaces.Constants import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription @@ -34,13 +34,13 @@ class StorageConstraintPlugin @Inject constructor( .showInList(false) .pluginName(R.string.storage), aapsLogger, rh, injector -), Constraints { +), PluginConstraints { override fun isClosedLoopAllowed(value: Constraint): Constraint { val diskFree = availableInternalMemorySize() if (diskFree < Constants.MINIMUM_FREE_SPACE) { aapsLogger.debug(LTag.CONSTRAINTS, "Closed loop disabled. Internal storage free (Mb):$diskFree") - value.set(aapsLogger, false, rh.gs(R.string.disk_full, Constants.MINIMUM_FREE_SPACE), this) + value.set(false, rh.gs(R.string.disk_full, Constants.MINIMUM_FREE_SPACE), this) activeNames.addNotification(Notification.DISK_FULL, rh.gs(R.string.disk_full, Constants.MINIMUM_FREE_SPACE), Notification.NORMAL) } return value diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerPlugin.kt index 5bf36f822d..b2f27e1b9a 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/versionChecker/VersionCheckerPlugin.kt @@ -3,7 +3,7 @@ package info.nightscout.plugins.constraints.versionChecker import dagger.android.HasAndroidInjector import info.nightscout.interfaces.Config import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription @@ -40,7 +40,7 @@ class VersionCheckerPlugin @Inject constructor( .showInList(false) .pluginName(R.string.version_checker), aapsLogger, rh, injector -), Constraints { +), PluginConstraints { enum class GracePeriod(val warning: Long, val old: Long, val veryOld: Long) { RELEASE(30, 60, 90), @@ -64,16 +64,16 @@ class VersionCheckerPlugin @Inject constructor( checkWarning() versionCheckerUtils.triggerCheckVersion() if (lastCheckOlderThan(gracePeriod.veryOld.daysToMillis())) - value.set(aapsLogger, false, rh.gs(R.string.very_old_version), this) + value.set(false, rh.gs(R.string.very_old_version), this) val endDate = sp.getLong(rh.gs(info.nightscout.core.utils.R.string.key_app_expiration) + "_" + config.VERSION_NAME, 0) if (endDate != 0L && dateUtil.now() > endDate) - value.set(aapsLogger, false, rh.gs(R.string.application_expired), this) + value.set(false, rh.gs(R.string.application_expired), this) return value } override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint = if (lastCheckOlderThan(gracePeriod.old.daysToMillis())) - maxIob.set(aapsLogger, 0.0, rh.gs(R.string.old_version), this) + maxIob.set(0.0, rh.gs(R.string.old_version), this) else maxIob diff --git a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt index c1e599c8f5..09e07728a2 100644 --- a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt +++ b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt @@ -2,16 +2,15 @@ package info.nightscout.plugins.constraints.bgQualityCheck import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.entities.GlucoseValue import info.nightscout.interfaces.aps.AutosensDataStore import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck -import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.iob.InMemoryGlucoseValue import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.plugins.constraints.R -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T @@ -35,7 +34,13 @@ class BgQualityCheckPluginTest : TestBase() { private lateinit var plugin: BgQualityCheckPlugin - private val injector = HasAndroidInjector { AndroidInjector { } } + private val injector = HasAndroidInjector { + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } + } private val now = 100000000L //private val autosensDataStore = AutosensDataStoreObject() @@ -46,7 +51,7 @@ class BgQualityCheckPluginTest : TestBase() { injector, aapsLogger, rh, - RxBus(aapsSchedulers, aapsLogger), + rxBus, iobCobCalculator, aapsSchedulers, fabricPrivacy, @@ -75,10 +80,46 @@ class BgQualityCheckPluginTest : TestBase() { Assertions.assertEquals(R.drawable.ic_baseline_warning_24_yellow, plugin.icon()) val superData: MutableList = ArrayList() - superData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = T.mins(20).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - superData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = T.mins(15).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - superData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = T.mins(10).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - superData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = T.mins(5).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) + superData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = T.mins(20).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + superData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = T.mins(15).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + superData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = T.mins(10).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + superData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = T.mins(5).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) `when`(autosensDataStore.getBgReadingsDataTableCopy()).thenReturn(superData) `when`(autosensDataStore.lastUsed5minCalculation).thenReturn(true) @@ -205,16 +246,106 @@ class BgQualityCheckPluginTest : TestBase() { // Flat data Libre val flatData: MutableList = ArrayList() - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(0).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-5).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 101.0, timestamp = now + T.mins(-10).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-15).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-20).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-25).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 99.0, timestamp = now + T.mins(-30).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-35).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-40).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-45).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(0).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-5).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 101.0, + timestamp = now + T.mins(-10).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-15).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-20).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-25).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 99.0, + timestamp = now + T.mins(-30).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-35).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-40).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-45).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) `when`(autosensDataStore.getBgReadingsDataTableCopy()).thenReturn(flatData) `when`(iobCobCalculator.ads.lastBg()).thenReturn(InMemoryGlucoseValue(flatData[0])) @@ -224,16 +355,106 @@ class BgQualityCheckPluginTest : TestBase() { // Flat data Libre val flatDataDexcom: MutableList = ArrayList() - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(0).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-5).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 101.0, timestamp = now + T.mins(-10).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-15).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-20).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-25).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 99.0, timestamp = now + T.mins(-30).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-35).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-40).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatDataDexcom.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-45).msecs(), sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, trendArrow = GlucoseValue.TrendArrow.FLAT)) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(0).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-5).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 101.0, + timestamp = now + T.mins(-10).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-15).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-20).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-25).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 99.0, + timestamp = now + T.mins(-30).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-35).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-40).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatDataDexcom.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-45).msecs(), + sourceSensor = GlucoseValue.SourceSensor.DEXCOM_G6_NATIVE, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) `when`(autosensDataStore.getBgReadingsDataTableCopy()).thenReturn(flatDataDexcom) `when`(iobCobCalculator.ads.lastBg()).thenReturn(InMemoryGlucoseValue(flatDataDexcom[0])) @@ -243,19 +464,100 @@ class BgQualityCheckPluginTest : TestBase() { // not enough data val incompleteData: MutableList = ArrayList() - incompleteData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(0).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - incompleteData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-5).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) + incompleteData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(0).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + incompleteData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-5).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) `when`(autosensDataStore.getBgReadingsDataTableCopy()).thenReturn(incompleteData) `when`(iobCobCalculator.ads.lastBg()).thenReturn(InMemoryGlucoseValue(incompleteData[0])) plugin.processBgData()// must be more than 5 values Assertions.assertNotEquals(BgQualityCheck.State.FLAT, plugin.state) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 101.0, timestamp = now + T.mins(-10).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-15).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-20).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-25).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 99.0, timestamp = now + T.mins(-30).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-35).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) - flatData.add(GlucoseValue(raw = 0.0, noise = 0.0, value = 100.0, timestamp = now + T.mins(-40).msecs(), sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, trendArrow = GlucoseValue.TrendArrow.FLAT)) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 101.0, + timestamp = now + T.mins(-10).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-15).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-20).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-25).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 99.0, + timestamp = now + T.mins(-30).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-35).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) + flatData.add( + GlucoseValue( + raw = 0.0, + noise = 0.0, + value = 100.0, + timestamp = now + T.mins(-40).msecs(), + sourceSensor = GlucoseValue.SourceSensor.LIBRE_1_OTHER, + trendArrow = GlucoseValue.TrendArrow.FLAT + ) + ) plugin.processBgData() // must be at least 45 min old Assertions.assertNotEquals(BgQualityCheck.State.FLAT, plugin.state) } @@ -263,13 +565,13 @@ class BgQualityCheckPluginTest : TestBase() { @Test fun applyMaxIOBConstraintsTest() { plugin.state = BgQualityCheck.State.UNKNOWN - Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(Constraint(10.0)).value(), 0.001) + Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) plugin.state = BgQualityCheck.State.FIVE_MIN_DATA - Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(Constraint(10.0)).value(), 0.001) + Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) plugin.state = BgQualityCheck.State.RECALCULATED - Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(Constraint(10.0)).value(), 0.001) + Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) plugin.state = BgQualityCheck.State.DOUBLED - Assertions.assertEquals(0.0, plugin.applyMaxIOBConstraints(Constraint(10.0)).value(), 0.001) + Assertions.assertEquals(0.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) } } \ No newline at end of file diff --git a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt index ea712ceea9..e668b07c09 100644 --- a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt +++ b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt @@ -2,8 +2,8 @@ package info.nightscout.plugins.constraints.objectives import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.Config -import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Objectives import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.plugins.constraints.R @@ -35,6 +35,9 @@ class ObjectivesPluginTest : TestBase() { it.rh = rh it.dateUtil = dateUtil } + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } } } @@ -49,34 +52,30 @@ class ObjectivesPluginTest : TestBase() { @Test fun notStartedObjectivesShouldLimitLoopInvocation() { objectivesPlugin.objectives[Objectives.FIRST_OBJECTIVE].startedOn = 0 - var c = Constraint(true) - c = objectivesPlugin.isLoopInvocationAllowed(c) - Assertions.assertEquals("Objectives: Objective 1 not started", c.getReasons(aapsLogger)) + val c = objectivesPlugin.isLoopInvocationAllowed(ConstraintObject(true, injector)) + Assertions.assertEquals("Objectives: Objective 1 not started", c.getReasons()) Assertions.assertEquals(false, c.value()) objectivesPlugin.objectives[Objectives.FIRST_OBJECTIVE].startedOn = dateUtil.now() } @Test fun notStartedObjective6ShouldLimitClosedLoop() { objectivesPlugin.objectives[Objectives.MAXIOB_ZERO_CL_OBJECTIVE].startedOn = 0 - var c = Constraint(true) - c = objectivesPlugin.isClosedLoopAllowed(c) - Assertions.assertEquals(true, c.getReasons(aapsLogger).contains("Objective 6 not started")) + val c = objectivesPlugin.isClosedLoopAllowed(ConstraintObject(true, injector)) + Assertions.assertEquals(true, c.getReasons().contains("Objective 6 not started")) Assertions.assertEquals(false, c.value()) } @Test fun notStartedObjective8ShouldLimitAutosensMode() { objectivesPlugin.objectives[Objectives.AUTOSENS_OBJECTIVE].startedOn = 0 - var c = Constraint(true) - c = objectivesPlugin.isAutosensModeEnabled(c) - Assertions.assertEquals(true, c.getReasons(aapsLogger).contains("Objective 8 not started")) + val c = objectivesPlugin.isAutosensModeEnabled(ConstraintObject(true, injector)) + Assertions.assertEquals(true, c.getReasons().contains("Objective 8 not started")) Assertions.assertEquals(false, c.value()) } @Test fun notStartedObjective10ShouldLimitSMBMode() { objectivesPlugin.objectives[Objectives.SMB_OBJECTIVE].startedOn = 0 - var c = Constraint(true) - c = objectivesPlugin.isSMBModeEnabled(c) - Assertions.assertEquals(true, c.getReasons(aapsLogger).contains("Objective 9 not started")) + val c = objectivesPlugin.isSMBModeEnabled(ConstraintObject(true, injector)) + Assertions.assertEquals(true, c.getReasons().contains("Objective 9 not started")) Assertions.assertEquals(false, c.value()) } } \ No newline at end of file diff --git a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt index 8e917a0652..51c8a130c9 100644 --- a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt +++ b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt @@ -2,7 +2,7 @@ package info.nightscout.plugins.constraints.storage import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.interfaces.ResourceHelper @@ -20,6 +20,13 @@ class StorageConstraintPluginTest : TestBase() { @Mock lateinit var rh: ResourceHelper @Mock lateinit var uiInteraction: UiInteraction + private val injector = HasAndroidInjector { + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } + } private lateinit var storageConstraintPlugin: StorageConstraintPlugin @BeforeEach fun prepareMock() { @@ -42,9 +49,9 @@ class StorageConstraintPluginTest : TestBase() { val mocked = MockedStorageConstraintPlugin({ AndroidInjector { } }, aapsLogger, rh, uiInteraction) // Set free space under 200(Mb) to disable loop mocked.memSize = 150L - Assertions.assertEquals(false, mocked.isClosedLoopAllowed(Constraint(true)).value()) + Assertions.assertEquals(false, mocked.isClosedLoopAllowed(ConstraintObject(true, injector)).value()) // Set free space over 200(Mb) to enable loop mocked.memSize = 300L - Assertions.assertEquals(true, mocked.isClosedLoopAllowed(Constraint(true)).value()) + Assertions.assertEquals(true, mocked.isClosedLoopAllowed(ConstraintObject(true, injector)).value()) } } \ No newline at end of file diff --git a/plugins/insulin/src/test/java/info/nightscout/insulin/InsulinOrefFreePeakPluginTest.kt b/plugins/insulin/src/test/java/info/nightscout/insulin/InsulinOrefFreePeakPluginTest.kt index f9a2ae62dc..af3df55f01 100644 --- a/plugins/insulin/src/test/java/info/nightscout/insulin/InsulinOrefFreePeakPluginTest.kt +++ b/plugins/insulin/src/test/java/info/nightscout/insulin/InsulinOrefFreePeakPluginTest.kt @@ -7,7 +7,6 @@ import info.nightscout.interfaces.insulin.Insulin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase @@ -29,7 +28,6 @@ class InsulinOrefFreePeakPluginTest : TestBase() { @Mock lateinit var sp: SP @Mock lateinit var rh: ResourceHelper - @Mock lateinit var rxBus: RxBus @Mock lateinit var profileFunction: ProfileFunction @Mock lateinit var config: Config @Mock lateinit var hardLimits: HardLimits diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt index 0a19977f25..1157f7ee2a 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt @@ -27,6 +27,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.jjoe64.graphview.GraphView import dagger.android.HasAndroidInjector import dagger.android.support.DaggerFragment +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.extensions.directionToIcon import info.nightscout.core.graph.OverviewData import info.nightscout.core.iob.displayText @@ -49,8 +50,7 @@ import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.aps.VariableSensitivityResult import info.nightscout.interfaces.automation.Automation import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger @@ -121,7 +121,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList @Inject lateinit var defaultValueHelper: DefaultValueHelper @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var profileUtil: ProfileUtil - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var statusLightHandler: StatusLightHandler @Inject lateinit var processedDeviceStatusData: ProcessedDeviceStatusData @Inject lateinit var nsSettingsStatus: NSSettingsStatus @@ -516,7 +516,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList binding.buttonsLayout.quickWizardButton.visibility = View.VISIBLE val wizard = quickWizardEntry.doCalc(profile, profileName, actualBg) if (wizard.calculatedTotalInsulin > 0.0 && quickWizardEntry.carbs() > 0.0) { - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(quickWizardEntry.carbs())).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(quickWizardEntry.carbs(), injector)).value() activity?.let { if (abs(wizard.insulinAfterConstraints - wizard.calculatedTotalInsulin) >= pump.pumpDescription.pumpType.determineCorrectBolusStepSize(wizard.insulinAfterConstraints) || carbsAfterConstraints != quickWizardEntry.carbs()) { OKDialog.show(it, rh.gs(info.nightscout.core.ui.R.string.treatmentdeliveryerror), rh.gs(R.string.constraints_violation) + "\n" + rh.gs(R.string.change_your_input)) diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt index b05207344e..ea6a505ea8 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt @@ -11,6 +11,7 @@ import androidx.work.WorkerParameters import androidx.work.workDataOf import dagger.android.HasAndroidInjector import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.events.EventNewNotification import info.nightscout.core.iob.generateCOBString import info.nightscout.core.iob.round @@ -34,8 +35,7 @@ import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.XDripBroadcast import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger @@ -91,7 +91,7 @@ class SmsCommunicatorPlugin @Inject constructor( private val smsManager: SmsManager?, private val aapsSchedulers: AapsSchedulers, private val sp: SP, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val rxBus: RxBus, private val profileFunction: ProfileFunction, private val profileUtil: ProfileUtil, @@ -732,7 +732,7 @@ class SmsCommunicatorPlugin @Inject constructor( else if (tempBasalPct == 0 && divided[1] != "0%") sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.sms_wrong_tbr_duration, durationStep))) else { - tempBasalPct = constraintChecker.applyBasalPercentConstraints(Constraint(tempBasalPct), profile).value() + tempBasalPct = constraintChecker.applyBasalPercentConstraints(ConstraintObject(tempBasalPct, injector), profile).value() val passCode = generatePassCode() val reply = rh.gs(R.string.smscommunicator_basal_pct_reply_with_code, tempBasalPct, duration, passCode) receivedSms.processed = true @@ -787,7 +787,7 @@ class SmsCommunicatorPlugin @Inject constructor( else if (tempBasal == 0.0 && divided[1] != "0") sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.sms_wrong_tbr_duration, durationStep))) else { - tempBasal = constraintChecker.applyBasalConstraints(Constraint(tempBasal), profile).value() + tempBasal = constraintChecker.applyBasalConstraints(ConstraintObject(tempBasal, injector), profile).value() val passCode = generatePassCode() val reply = rh.gs(R.string.smscommunicator_basal_reply_with_code, tempBasal, duration, passCode) receivedSms.processed = true @@ -864,7 +864,7 @@ class SmsCommunicatorPlugin @Inject constructor( } else { var extended = SafeParse.stringToDouble(divided[1]) val duration = SafeParse.stringToInt(divided[2]) - extended = constraintChecker.applyExtendedBolusConstraints(Constraint(extended)).value() + extended = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(extended, injector)).value() if (extended == 0.0 || duration == 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else { val passCode = generatePassCode() @@ -918,7 +918,7 @@ class SmsCommunicatorPlugin @Inject constructor( private fun processBOLUS(divided: Array, receivedSms: Sms) { var bolus = SafeParse.stringToDouble(divided[1]) val isMeal = divided.size > 2 && divided[2].equals("MEAL", ignoreCase = true) - bolus = constraintChecker.applyBolusConstraints(Constraint(bolus)).value() + bolus = constraintChecker.applyBolusConstraints(ConstraintObject(bolus, injector)).value() if (divided.size == 3 && !isMeal) { sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) } else if (bolus > 0.0) { @@ -1031,7 +1031,7 @@ class SmsCommunicatorPlugin @Inject constructor( return } } - grams = constraintChecker.applyCarbsConstraints(Constraint(grams)).value() + grams = constraintChecker.applyCarbsConstraints(ConstraintObject(grams, injector)).value() if (grams == 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else { val passCode = generatePassCode() diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt index fbb7e0701a..55b368a20f 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt @@ -3,6 +3,7 @@ package info.nightscout.plugins.general.wear.wearintegration import android.app.NotificationManager import android.content.Context import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.extensions.convertedToAbsolute import info.nightscout.core.extensions.toStringShort import info.nightscout.core.extensions.valueToUnits @@ -33,8 +34,7 @@ import info.nightscout.interfaces.Config import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.InMemoryGlucoseValue @@ -104,7 +104,7 @@ class DataHandlerMobile @Inject constructor( private val defaultValueHelper: DefaultValueHelper, private val trendCalculator: TrendCalculator, private val dateUtil: DateUtil, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val uel: UserEntryLogger, private val activePlugin: ActivePlugin, private val commandQueue: CommandQueue, @@ -269,7 +269,7 @@ class DataHandlerMobile @Inject constructor( .observeOn(aapsSchedulers.io) .subscribe({ aapsLogger.debug(LTag.WEAR, "ActionFillConfirmed received $it from ${it.sourceNodeId}") - if (constraintChecker.applyBolusConstraints(Constraint(it.insulin)).value() - it.insulin != 0.0) { + if (constraintChecker.applyBolusConstraints(ConstraintObject(it.insulin, injector)).value() - it.insulin != 0.0) { ToastUtils.showToastInUiThread(context, "aborting: previously applied constraint changed") sendError("aborting: previously applied constraint changed") } else @@ -383,7 +383,7 @@ class DataHandlerMobile @Inject constructor( return } val carbsBeforeConstraints = command.carbs - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(carbsBeforeConstraints)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbsBeforeConstraints, injector)).value() if (carbsAfterConstraints - carbsBeforeConstraints != 0) { sendError(rh.gs(info.nightscout.core.ui.R.string.wizard_carbs_constraint)) return @@ -480,7 +480,7 @@ class DataHandlerMobile @Inject constructor( val wizard = quickWizardEntry.doCalc(profile, profileName, actualBg) - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(quickWizardEntry.carbs())).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(quickWizardEntry.carbs(), injector)).value() if (carbsAfterConstraints != quickWizardEntry.carbs()) { sendError(rh.gs(info.nightscout.core.ui.R.string.wizard_carbs_constraint)) return @@ -506,8 +506,8 @@ class DataHandlerMobile @Inject constructor( } private fun handleBolusPreCheck(command: EventData.ActionBolusPreCheck) { - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(command.insulin)).value() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(command.carbs)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(command.insulin, injector)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(command.carbs, injector)).value() val pump = activePlugin.activePump if (insulinAfterConstraints > 0 && (!pump.isInitialized() || pump.isSuspended() || loop.isDisconnected)) { sendError(rh.gs(info.nightscout.core.ui.R.string.wizard_pump_not_available)) @@ -530,7 +530,7 @@ class DataHandlerMobile @Inject constructor( private fun handleECarbsPreCheck(command: EventData.ActionECarbsPreCheck) { val startTimeStamp = System.currentTimeMillis() + T.mins(command.carbsTimeShift.toLong()).msecs() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(command.carbs)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(command.carbs, injector)).value() var message = rh.gs(info.nightscout.core.ui.R.string.carbs) + ": " + carbsAfterConstraints + rh.gs(R.string.grams_short) + "\n" + rh.gs(info.nightscout.core.ui.R.string.time) + ": " + dateUtil.timeString(startTimeStamp) + "\n" + rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + command.duration + rh.gs(R.string.hour_short) @@ -558,7 +558,7 @@ class DataHandlerMobile @Inject constructor( 3 -> sp.getDouble("fill_button3", 0.0) else -> return } - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(amount)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() var message = rh.gs(info.nightscout.core.ui.R.string.prime_fill) + ": " + insulinAfterConstraints + rh.gs(R.string.units_short) if (insulinAfterConstraints - amount != 0.0) message += "\n" + rh.gs(info.nightscout.core.ui.R.string.constraint_applied) rxBus.send( @@ -572,7 +572,7 @@ class DataHandlerMobile @Inject constructor( } private fun handleFillPreCheck(command: EventData.ActionFillPreCheck) { - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(command.insulin)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(command.insulin, injector)).value() var message = rh.gs(info.nightscout.core.ui.R.string.prime_fill) + ": " + insulinAfterConstraints + rh.gs(R.string.units_short) if (insulinAfterConstraints - command.insulin != 0.0) message += "\n" + rh.gs(info.nightscout.core.ui.R.string.constraint_applied) rxBus.send( diff --git a/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt b/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt index a591e04dc8..825555b7c8 100644 --- a/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt +++ b/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt @@ -4,6 +4,7 @@ import android.telephony.SmsManager import com.google.common.truth.Truth.assertThat import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.database.entities.GlucoseValue import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.transactions.CancelCurrentOfflineEventIfAnyTransaction @@ -16,8 +17,7 @@ import info.nightscout.interfaces.Constants import info.nightscout.interfaces.XDripBroadcast import info.nightscout.interfaces.aps.AutosensDataStore import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.CobInfo import info.nightscout.interfaces.iob.InMemoryGlucoseValue import info.nightscout.interfaces.iob.IobTotal @@ -48,7 +48,7 @@ import org.mockito.invocation.InvocationOnMock @Suppress("SpellCheckingInspection") class SmsCommunicatorPluginTest : TestBaseWithProfile() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var loop: Loop @Mock lateinit var profileSource: ProfileSource @@ -62,6 +62,9 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { private var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } if (it is PumpEnactResult) { it.context = context } @@ -836,7 +839,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BASAL 20% 20") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("TBR duration must be a multiple of 30 minutes and greater than 0.") - `when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(Constraint(20)) + `when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(20, injector)) //BASAL 20% 30 smsCommunicatorPlugin.messages = ArrayList() @@ -862,7 +865,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BASAL 1 0") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("TBR duration must be a multiple of 30 minutes and greater than 0.") - `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(Constraint(1.0)) + `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(1.0, injector)) //BASAL 1 20 smsCommunicatorPlugin.messages = ArrayList() @@ -870,7 +873,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BASAL 1 20") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("TBR duration must be a multiple of 30 minutes and greater than 0.") - `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(Constraint(1.0)) + `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(1.0, injector)) //BASAL 1 30 smsCommunicatorPlugin.messages = ArrayList() @@ -918,7 +921,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("EXTENDED a%") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(Constraint(1.0)) + `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) //EXTENDED 1 0 smsCommunicatorPlugin.messages = ArrayList() @@ -955,7 +958,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BOLUS") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(1.0)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) `when`(dateUtilMocked.now()).thenReturn(1000L) `when`(sp.getLong(R.string.key_smscommunicator_remote_bolus_min_distance, T.msecs(Constants.remoteBolusMinDistance).mins())).thenReturn(15L) //BOLUS 1 @@ -964,7 +967,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BOLUS 1") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Remote bolus not available. Try again later.") - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) `when`(dateUtilMocked.now()).thenReturn(Constants.remoteBolusMinDistance + 1002L) //BOLUS 0 @@ -980,8 +983,8 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BOLUS a") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(Constraint(1.0)) - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(1.0)) + `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) //BOLUS 1 smsCommunicatorPlugin.messages = ArrayList() @@ -1078,7 +1081,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("CARBS") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(Constraint(0)) + `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(ConstraintObject(0, injector)) //CARBS 0 smsCommunicatorPlugin.messages = ArrayList() @@ -1086,7 +1089,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("CARBS 0") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(Constraint(1)) + `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(ConstraintObject(1, injector)) //CARBS 1 smsCommunicatorPlugin.messages = ArrayList() diff --git a/plugins/main/src/test/java/info/nightscout/plugins/iob/AutosensDataStoreTest.kt b/plugins/main/src/test/java/info/nightscout/plugins/iob/AutosensDataStoreTest.kt index 56f3215545..e342e4eeb9 100644 --- a/plugins/main/src/test/java/info/nightscout/plugins/iob/AutosensDataStoreTest.kt +++ b/plugins/main/src/test/java/info/nightscout/plugins/iob/AutosensDataStoreTest.kt @@ -12,6 +12,7 @@ import info.nightscout.plugins.iob.iobCobCalculator.data.AutosensDataStoreObject import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil +import info.nightscout.shared.utils.DateUtilImpl import info.nightscout.shared.utils.T import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions @@ -46,7 +47,7 @@ class AutosensDataStoreTest : TestBase() { @BeforeEach fun mock() { - dateUtil = DateUtil(context) + dateUtil = DateUtilImpl(context) } @Test diff --git a/plugins/sensitivity/src/main/java/info/nightscout/sensitivity/SensitivityOref1Plugin.kt b/plugins/sensitivity/src/main/java/info/nightscout/sensitivity/SensitivityOref1Plugin.kt index f98681d3b8..d77c1de943 100644 --- a/plugins/sensitivity/src/main/java/info/nightscout/sensitivity/SensitivityOref1Plugin.kt +++ b/plugins/sensitivity/src/main/java/info/nightscout/sensitivity/SensitivityOref1Plugin.kt @@ -12,7 +12,7 @@ import info.nightscout.interfaces.aps.AutosensResult import info.nightscout.interfaces.aps.SMBDefaults import info.nightscout.interfaces.aps.Sensitivity.SensitivityType import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.ProfileFunction @@ -51,7 +51,7 @@ class SensitivityOref1Plugin @Inject constructor( .description(R.string.description_sensitivity_oref1) .setDefault(), injector, aapsLogger, rh, sp -), Constraints { +), PluginConstraints { override fun detectSensitivity(ads: AutosensDataStore, fromTime: Long, toTime: Long): AutosensResult { val profile = profileFunction.getProfile() @@ -260,7 +260,7 @@ class SensitivityOref1Plugin @Inject constructor( get() = SensitivityType.SENSITIVITY_OREF1 override fun isUAMEnabled(value: Constraint): Constraint { - if (!isEnabled()) value.set(aapsLogger, false, rh.gs(R.string.uam_disabled_oref1_not_selected), this) + if (!isEnabled()) value.set(false, rh.gs(R.string.uam_disabled_oref1_not_selected), this) return value } } \ No newline at end of file diff --git a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclient/ReceiverDelegateTest.kt b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclient/ReceiverDelegateTest.kt index 3903925b52..ea9149f0c7 100644 --- a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclient/ReceiverDelegateTest.kt +++ b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclient/ReceiverDelegateTest.kt @@ -3,7 +3,6 @@ package info.nightscout.plugins.sync.nsclient import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.receivers.ReceiverStatusStore import info.nightscout.plugins.sync.R -import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventChargingState import info.nightscout.rx.events.EventNetworkChange import info.nightscout.shared.interfaces.ResourceHelper @@ -20,7 +19,6 @@ class ReceiverDelegateTest : TestBase() { @Mock lateinit var sp: SP @Mock lateinit var rh: ResourceHelper @Mock lateinit var fabricPrivacy: FabricPrivacy - private val rxBus = RxBus(aapsSchedulers, aapsLogger) @Mock private lateinit var receiverStatusStore: ReceiverStatusStore private lateinit var sut: ReceiverDelegate diff --git a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/DataSyncWorkerTest.kt b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/DataSyncWorkerTest.kt index 18eab903ec..4173e6e8e6 100644 --- a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/DataSyncWorkerTest.kt +++ b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/DataSyncWorkerTest.kt @@ -10,7 +10,6 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.sync.NsClient import info.nightscout.plugins.sync.nsclientV3.DataSyncSelectorV3 import info.nightscout.plugins.sync.nsclientV3.NSClientV3Plugin -import info.nightscout.rx.bus.RxBus import info.nightscout.sharedtests.TestBase import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest @@ -30,7 +29,6 @@ internal class DataSyncWorkerTest : TestBase() { @Mock lateinit var dataSyncSelectorV3: DataSyncSelectorV3 @Mock lateinit var activePlugin: ActivePlugin @Mock lateinit var nsClient: NsClient - @Mock lateinit var rxBus: RxBus @Mock lateinit var nsClientV3Plugin: NSClientV3Plugin @Mock lateinit var context: ContextWithInjector diff --git a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorkerTest.kt b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorkerTest.kt index 917dd76573..6e88ae34d7 100644 --- a/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorkerTest.kt +++ b/plugins/sync/src/test/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorkerTest.kt @@ -26,7 +26,6 @@ import info.nightscout.plugins.sync.nsclient.data.NSDeviceStatusHandler import info.nightscout.plugins.sync.nsclientV3.DataSyncSelectorV3 import info.nightscout.plugins.sync.nsclientV3.NSClientV3Plugin import info.nightscout.plugins.sync.nsclientV3.extensions.toNSSvgV3 -import info.nightscout.rx.bus.RxBus import info.nightscout.sdk.interfaces.NSAndroidClient import info.nightscout.sdk.remotemodel.LastModified import info.nightscout.shared.interfaces.ResourceHelper @@ -66,7 +65,6 @@ internal class LoadBgWorkerTest : TestBase() { @Mock lateinit var nsIncomingDataProcessor: NsIncomingDataProcessor @Mock lateinit var context: ContextWithInjector - private val rxBus: RxBus = RxBus(aapsSchedulers, aapsLogger) private lateinit var nsClientV3Plugin: NSClientV3Plugin private lateinit var receiverDelegate: ReceiverDelegate private lateinit var dataWorkerStorage: DataWorkerStorage diff --git a/pump/combo/src/main/java/info/nightscout/pump/combo/ComboPlugin.java b/pump/combo/src/main/java/info/nightscout/pump/combo/ComboPlugin.java index e880a9684b..60076f31cd 100644 --- a/pump/combo/src/main/java/info/nightscout/pump/combo/ComboPlugin.java +++ b/pump/combo/src/main/java/info/nightscout/pump/combo/ComboPlugin.java @@ -22,7 +22,7 @@ import javax.inject.Singleton; import dagger.android.HasAndroidInjector; import info.nightscout.core.utils.fabric.InstanceId; import info.nightscout.interfaces.constraints.Constraint; -import info.nightscout.interfaces.constraints.Constraints; +import info.nightscout.interfaces.constraints.PluginConstraints; import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.plugin.PluginDescription; import info.nightscout.interfaces.plugin.PluginType; @@ -86,23 +86,41 @@ import info.nightscout.shared.utils.T; * Created by mike on 05.08.2016. */ @Singleton -public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { +public class ComboPlugin extends PumpPluginBase implements Pump, PluginConstraints { + private final static PumpDescription pumpDescription = new PumpDescription(); + @NonNull + private static final ComboPump pump = new ComboPump(); // collaborators private final ProfileFunction profileFunction; private final SP sp; - private RxBus rxBus; private final CommandQueue commandQueue; private final PumpSync pumpSync; private final DateUtil dateUtil; private final RuffyCommands ruffyScripter; private final UiInteraction uiInteraction; - - private final static PumpDescription pumpDescription = new PumpDescription(); - - - @NonNull - private static final ComboPump pump = new ComboPump(); - + private RxBus rxBus; + private final BolusProgressReporter bolusProgressReporter = (state, percent, delivered) -> { + EventOverviewBolusProgress event = EventOverviewBolusProgress.INSTANCE; + switch (state) { + case PROGRAMMING: + event.setStatus(getRh().gs(R.string.combo_programming_bolus)); + break; + case DELIVERING: + event.setStatus(getRh().gs(info.nightscout.core.ui.R.string.bolus_delivering, delivered)); + break; + case DELIVERED: + event.setStatus(getRh().gs(info.nightscout.core.ui.R.string.bolus_delivered_successfully, delivered)); + break; + case STOPPING: + event.setStatus(getRh().gs(R.string.bolusstopping)); + break; + case STOPPED: + event.setStatus(getRh().gs(R.string.bolusstopped)); + break; + } + event.setPercent(percent); + rxBus.send(event); + }; /** * This is used to determine when to pass a bolus cancel request to the scripter */ @@ -112,7 +130,6 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { * will reset this flag. */ private volatile boolean cancelBolus; - /** * This is set (in {@link #checkHistory()} whenever a connection to the pump is made and * indicates if new history records on the pump have been found. This effectively blocks @@ -128,7 +145,6 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { * direction - so that adding more complexity yields little benefit. */ private volatile boolean pumpHistoryChanged = false; - /** * Cache of the last <=2 boluses on the pump. Used to detect changes in pump history, * requiring reading more pump history. This is read/set in {@link #checkHistory()} when changed @@ -136,8 +152,11 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { * after bolus delivery. Newest record is the first one. */ private volatile List recentBoluses = new ArrayList<>(0); - private PumpEnactResult OPERATION_NOT_SUPPORTED; + // Constraints interface + private long lowSuspendOnlyLoopEnforcedUntil = 0; + private long violationWarningRaisedForBolusAt = 0; + private boolean validBasalRateProfileSelectedOnPump = true; @Inject public ComboPlugin( @@ -469,29 +488,6 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { } } - private final BolusProgressReporter bolusProgressReporter = (state, percent, delivered) -> { - EventOverviewBolusProgress event = EventOverviewBolusProgress.INSTANCE; - switch (state) { - case PROGRAMMING: - event.setStatus(getRh().gs(R.string.combo_programming_bolus)); - break; - case DELIVERING: - event.setStatus(getRh().gs(info.nightscout.core.ui.R.string.bolus_delivering, delivered)); - break; - case DELIVERED: - event.setStatus(getRh().gs(info.nightscout.core.ui.R.string.bolus_delivered_successfully, delivered)); - break; - case STOPPING: - event.setStatus(getRh().gs(R.string.bolusstopping)); - break; - case STOPPED: - event.setStatus(getRh().gs(R.string.bolusstopped)); - break; - } - event.setPercent(percent); - rxBus.send(event); - }; - /** * Updates Treatment records with carbs and boluses and delivers a bolus if needed */ @@ -850,10 +846,6 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { return 0; } - private interface CommandExecution { - CommandResult execute(); - } - /** * Runs a command, sets an activity if provided, retries if requested and updates fields * concerned with last connection. @@ -980,7 +972,6 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { return null; } - private void checkBasalRate(PumpState state) { if (!pump.initialized) { // no cached profile to compare against @@ -1386,22 +1377,17 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { return result; } - // Constraints interface - private long lowSuspendOnlyLoopEnforcedUntil = 0; - private long violationWarningRaisedForBolusAt = 0; - private boolean validBasalRateProfileSelectedOnPump = true; - @NonNull @Override public Constraint isLoopInvocationAllowed(@NonNull Constraint value) { if (!validBasalRateProfileSelectedOnPump) - value.set(getAapsLogger(), false, getRh().gs(info.nightscout.core.ui.R.string.no_valid_basal_rate), this); + value.set(false, getRh().gs(info.nightscout.core.ui.R.string.no_valid_basal_rate), this); return value; } @NonNull @Override public Constraint applyMaxIOBConstraints(@NonNull Constraint maxIob) { if (lowSuspendOnlyLoopEnforcedUntil > System.currentTimeMillis()) - maxIob.setIfSmaller(getAapsLogger(), 0d, getRh().gs(info.nightscout.core.ui.R.string.limiting_iob, 0d, getRh().gs(R.string.unsafeusage)), this); + maxIob.setIfSmaller(0d, getRh().gs(info.nightscout.core.ui.R.string.limiting_iob, 0d, getRh().gs(R.string.unsafeusage)), this); return maxIob; } @@ -1409,4 +1395,8 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { public boolean canHandleDST() { return false; } + + private interface CommandExecution { + CommandResult execute(); + } } diff --git a/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt b/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt index 1d238e0cb4..dee5d1eb5b 100644 --- a/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt +++ b/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt @@ -3,7 +3,7 @@ package info.nightscout.pump.combo import android.content.Context import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.PumpEnactResult @@ -12,7 +12,6 @@ import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.pump.combo.ruffyscripter.RuffyScripter import info.nightscout.pump.combo.ruffyscripter.history.Bolus -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil @@ -37,6 +36,9 @@ class ComboPluginTest : TestBase() { private val injector = HasAndroidInjector { AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } if (it is PumpEnactResult) { it.context = context } @@ -49,16 +51,15 @@ class ComboPluginTest : TestBase() { fun prepareMocks() { `when`(rh.gs(info.nightscout.core.ui.R.string.no_valid_basal_rate)).thenReturn("No valid basal rate read from pump") `when`(context.getString(R.string.combo_pump_unsupported_operation)).thenReturn("Requested operation not supported by pump") - comboPlugin = ComboPlugin(injector, aapsLogger, RxBus(aapsSchedulers, aapsLogger), rh, profileFunction, sp, commandQueue, pumpSync, dateUtil, ruffyScripter, uiInteraction) + comboPlugin = ComboPlugin(injector, aapsLogger, rxBus, rh, profileFunction, sp, commandQueue, pumpSync, dateUtil, ruffyScripter, uiInteraction) } @Test fun invalidBasalRateOnComboPumpShouldLimitLoopInvocation() { comboPlugin.setPluginEnabled(PluginType.PUMP, true) comboPlugin.setValidBasalRateProfileSelectedOnPump(false) - var c = Constraint(true) - c = comboPlugin.isLoopInvocationAllowed(c) - Assertions.assertEquals("Combo: No valid basal rate read from pump", c.getReasons(aapsLogger)) + val c = comboPlugin.isLoopInvocationAllowed(ConstraintObject(true, injector)) + Assertions.assertEquals("Combo: No valid basal rate read from pump", c.getReasons()) Assertions.assertEquals(false, c.value()) comboPlugin.setPluginEnabled(PluginType.PUMP, false) } diff --git a/pump/combov2/build.gradle b/pump/combov2/build.gradle index fd35c11a7e..902108af6a 100644 --- a/pump/combov2/build.gradle +++ b/pump/combov2/build.gradle @@ -13,6 +13,7 @@ apply from: "${project.rootDir}/core/main/jacoco_global.gradle" dependencies { implementation project(':core:libraries') implementation project(':core:interfaces') + implementation project(':core:main') implementation project(':core:ui') implementation project(':core:utils') implementation(project(":pump:combov2:comboctl")) diff --git a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt index 4cfac85c8e..b4029a24fd 100644 --- a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt +++ b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt @@ -25,12 +25,14 @@ import info.nightscout.comboctl.parser.AlertScreenContent import info.nightscout.comboctl.parser.AlertScreenException import info.nightscout.comboctl.parser.BatteryState import info.nightscout.comboctl.parser.ReservoirState +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.Config import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType @@ -101,14 +103,14 @@ import info.nightscout.comboctl.main.PumpManager as ComboCtlPumpManager internal const val PUMP_ERROR_TIMEOUT_INTERVAL_MSECS = 1000L * 60 * 5 @Singleton -class ComboV2Plugin @Inject constructor ( +class ComboV2Plugin @Inject constructor( injector: HasAndroidInjector, aapsLogger: AAPSLogger, rh: ResourceHelper, commandQueue: CommandQueue, private val context: Context, private val rxBus: RxBus, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val sp: SP, private val pumpSync: PumpSync, private val dateUtil: DateUtil, @@ -132,7 +134,7 @@ class ComboV2Plugin @Inject constructor ( commandQueue ), Pump, - Constraints { + PluginConstraints { // Coroutine scope and the associated job. All coroutines // that are started in this plugin are part of this scope. @@ -208,6 +210,7 @@ class ComboV2Plugin @Inject constructor ( // overwritten. This check is performed in checkBasalProfile(). // In setNewBasalProfile(), this value is changed. private var activeBasalProfile: BasalProfile? = null + // This is used for checking that the correct basal profile is // active in the Combo. If not, loop invocation is disallowed. // This is _not_ reset by disconnect(). That's on purpose; it @@ -220,22 +223,28 @@ class ComboV2Plugin @Inject constructor ( /*** Public functions and base class & interface overrides ***/ sealed class DriverState(@Suppress("unused") val label: String) { + // Initial state when the driver is created. - object NotInitialized : DriverState("notInitialized") + data object NotInitialized : DriverState("notInitialized") + // Driver is disconnected from the pump, or no pump // is currently paired. In onStart() the driver state // changes from NotInitialized to this. - object Disconnected : DriverState("disconnected") + data object Disconnected : DriverState("disconnected") + // Driver is currently connecting to the pump. isBusy() // will return true in this state. - object Connecting : DriverState("connecting") + data object Connecting : DriverState("connecting") + // Driver is running checks on the pump, like verifying // that the basal rate is OK, checking for any bolus // and TBR activity that AAPS doesn't know about etc. // isBusy() will return true in this state. - object CheckingPump : DriverState("checkingPump") + data object CheckingPump : DriverState("checkingPump") + // Driver is connected and ready to execute commands. - object Ready : DriverState("ready") + data object Ready : DriverState("ready") + // Driver is connected, but pump is suspended and // cannot currently execute commands. This state is // special in that it technically persists even after @@ -252,11 +261,12 @@ class ComboV2Plugin @Inject constructor ( // the pump is currently suspended or not. Use // isSuspended() instead. See the pumpIsSuspended // documentation for details. - object Suspended : DriverState("suspended") + data object Suspended : DriverState("suspended") + // Driver is currently executing a command. // isBusy() will return true in this state. class ExecutingCommand(val description: ComboCtlPump.CommandDescription) : DriverState("executingCommand") - object Error : DriverState("error") + data object Error : DriverState("error") } private val driverStateFlow = _driverStateFlow.asStateFlow() @@ -264,7 +274,9 @@ class ComboV2Plugin @Inject constructor ( // Used by ComboV2PairingActivity to launch its own // custom activities that have a result. var customDiscoveryActivityStartCallback: ((intent: Intent) -> Unit)? - set(value) { bluetoothInterface?.customDiscoveryActivityStartCallback = value } + set(value) { + bluetoothInterface?.customDiscoveryActivityStartCallback = value + } get() = bluetoothInterface?.customDiscoveryActivityStartCallback init { @@ -494,6 +506,7 @@ class ComboV2Plugin @Inject constructor ( // returning true then causes problems with AAPS' KeepAlive mechanism. DriverState.CheckingPump, is DriverState.ExecutingCommand -> true + else -> false } @@ -509,6 +522,7 @@ class ComboV2Plugin @Inject constructor ( DriverState.Ready, DriverState.Suspended, is DriverState.ExecutingCommand -> true + else -> false } @@ -516,7 +530,8 @@ class ComboV2Plugin @Inject constructor ( when (driverStateFlow.value) { DriverState.Connecting, DriverState.CheckingPump -> true - else -> false + + else -> false } // There is no corresponding indicator for this @@ -554,7 +569,8 @@ class ComboV2Plugin @Inject constructor ( ) return } - else -> Unit + + else -> Unit } if (!isPaired()) { @@ -575,6 +591,7 @@ class ComboV2Plugin @Inject constructor ( unpairDueToPumpDataError() return } + else -> address } @@ -608,13 +625,13 @@ class ComboV2Plugin @Inject constructor ( // the rxBus too early, potentially causing a situation where the connect() // call isn't fully done yet, but the queue gets that event and thinks that // it can try to reconnect now. - ComboCtlPump.State.Disconnected -> return@onEach - ComboCtlPump.State.Connecting -> DriverState.Connecting - ComboCtlPump.State.CheckingPump -> DriverState.CheckingPump - ComboCtlPump.State.ReadyForCommands -> DriverState.Ready + ComboCtlPump.State.Disconnected -> return@onEach + ComboCtlPump.State.Connecting -> DriverState.Connecting + ComboCtlPump.State.CheckingPump -> DriverState.CheckingPump + ComboCtlPump.State.ReadyForCommands -> DriverState.Ready is ComboCtlPump.State.ExecutingCommand -> DriverState.ExecutingCommand(pumpState.description) - ComboCtlPump.State.Suspended -> DriverState.Suspended - is ComboCtlPump.State.Error -> DriverState.Error + ComboCtlPump.State.Suspended -> DriverState.Suspended + is ComboCtlPump.State.Error -> DriverState.Error } setDriverState(driverState) } @@ -686,7 +703,8 @@ class ComboV2Plugin @Inject constructor ( pumpIsSuspended = when (it.stateFlow.value) { ComboCtlPump.State.Suspended, is ComboCtlPump.State.Error -> true - else -> false + + else -> false } aapsLogger.debug(LTag.PUMP, "Pump is suspended: $pumpIsSuspended") @@ -970,8 +988,8 @@ class ComboV2Plugin @Inject constructor ( pumpStatus?.batteryState?.let { newState -> val newLevel = when (newState) { - BatteryState.NO_BATTERY -> 5 - BatteryState.LOW_BATTERY -> 25 + BatteryState.NO_BATTERY -> 5 + BatteryState.LOW_BATTERY -> 25 BatteryState.FULL_BATTERY -> 100 } @@ -996,7 +1014,7 @@ class ComboV2Plugin @Inject constructor ( override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { val oldInsulinAmount = detailedBolusInfo.insulin detailedBolusInfo.insulin = constraintChecker - .applyBolusConstraints(Constraint(detailedBolusInfo.insulin)) + .applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)) .value() aapsLogger.debug( LTag.PUMP, @@ -1015,8 +1033,8 @@ class ComboV2Plugin @Inject constructor ( val requestedBolusAmount = detailedBolusInfo.insulin.iuToCctlBolus() val bolusReason = when (detailedBolusInfo.bolusType) { - DetailedBolusInfo.BolusType.NORMAL -> ComboCtlPump.StandardBolusReason.NORMAL - DetailedBolusInfo.BolusType.SMB -> ComboCtlPump.StandardBolusReason.SUPERBOLUS + DetailedBolusInfo.BolusType.NORMAL -> ComboCtlPump.StandardBolusReason.NORMAL + DetailedBolusInfo.BolusType.SMB -> ComboCtlPump.StandardBolusReason.SUPERBOLUS DetailedBolusInfo.BolusType.PRIMING -> ComboCtlPump.StandardBolusReason.PRIMING_INFUSION_SET } @@ -1055,13 +1073,15 @@ class ComboV2Plugin @Inject constructor ( bolusingEvent.status = rh.gs(info.nightscout.core.ui.R.string.bolus_delivering, detailedBolusInfo.insulin) rxBus.send(bolusingEvent) } - BasicProgressStage.Finished -> { + + BasicProgressStage.Finished -> { val bolusingEvent = EventOverviewBolusProgress bolusingEvent.percent = (progressReport.overallProgress * 100.0).toInt() bolusingEvent.status = "Bolus finished, performing post-bolus checks" rxBus.send(bolusingEvent) } - else -> Unit + + else -> Unit } } } @@ -1190,10 +1210,11 @@ class ComboV2Plugin @Inject constructor ( aapsLogger.debug(LTag.PUMP, "Calculated percentage of $percentage% out of absolute rate $absoluteRate; rounded to: $roundedPercentage%; limited to: $limitedPercentage%") val cctlTbrType = when (tbrType) { - PumpSync.TemporaryBasalType.NORMAL -> ComboCtlTbr.Type.NORMAL + PumpSync.TemporaryBasalType.NORMAL -> ComboCtlTbr.Type.NORMAL PumpSync.TemporaryBasalType.EMULATED_PUMP_SUSPEND -> ComboCtlTbr.Type.EMULATED_COMBO_STOP - PumpSync.TemporaryBasalType.SUPERBOLUS -> ComboCtlTbr.Type.SUPERBOLUS - PumpSync.TemporaryBasalType.PUMP_SUSPEND -> { + PumpSync.TemporaryBasalType.SUPERBOLUS -> ComboCtlTbr.Type.SUPERBOLUS + + PumpSync.TemporaryBasalType.PUMP_SUSPEND -> { aapsLogger.error( LTag.PUMP, "PUMP_SUSPEND TBR type produced by AAPS for the TBR initiation even though this is supposed to only be produced by pump drivers" @@ -1221,10 +1242,11 @@ class ComboV2Plugin @Inject constructor ( aapsLogger.debug(LTag.PUMP, "Got percentage of $percent%; rounded to: $roundedPercentage%; limited to: $limitedPercentage%") val cctlTbrType = when (tbrType) { - PumpSync.TemporaryBasalType.NORMAL -> ComboCtlTbr.Type.NORMAL + PumpSync.TemporaryBasalType.NORMAL -> ComboCtlTbr.Type.NORMAL PumpSync.TemporaryBasalType.EMULATED_PUMP_SUSPEND -> ComboCtlTbr.Type.EMULATED_COMBO_STOP - PumpSync.TemporaryBasalType.SUPERBOLUS -> ComboCtlTbr.Type.SUPERBOLUS - PumpSync.TemporaryBasalType.PUMP_SUSPEND -> { + PumpSync.TemporaryBasalType.SUPERBOLUS -> ComboCtlTbr.Type.SUPERBOLUS + + PumpSync.TemporaryBasalType.PUMP_SUSPEND -> { aapsLogger.error( LTag.PUMP, "PUMP_SUSPEND TBR type produced by AAPS for the TBR initiation even though this is supposed to only be produced by pump drivers" @@ -1277,10 +1299,13 @@ class ComboV2Plugin @Inject constructor ( val tbrComment = when (acquiredPump.setTbr(percentage, durationInMinutes, tbrType, force100Percent)) { ComboCtlPump.SetTbrOutcome.SET_NORMAL_TBR -> rh.gs(R.string.combov2_setting_tbr_succeeded) + ComboCtlPump.SetTbrOutcome.SET_EMULATED_100_TBR -> rh.gs(R.string.combov2_set_emulated_100_tbr) + ComboCtlPump.SetTbrOutcome.LETTING_EMULATED_100_TBR_FINISH -> rh.gs(R.string.combov2_letting_emulated_100_tbr_finish) + ComboCtlPump.SetTbrOutcome.IGNORED_REDUNDANT_100_TBR -> rh.gs(R.string.combov2_ignoring_redundant_100_tbr) } @@ -1381,7 +1406,7 @@ class ComboV2Plugin @Inject constructor ( } ?: aapsLogger.info( LTag.PUMP, "Cannot include reservoir level in JSON status " + - "since no such level is currently known" + "since no such level is currently known" ) put("extended", JSONObject().apply { put("Version", version) @@ -1401,15 +1426,17 @@ class ComboV2Plugin @Inject constructor ( aapsLogger.info( LTag.PUMP, "Cannot include base basal rate in JSON status " + - "since no basal profile is currently active" + "since no basal profile is currently active" ) put("ActiveProfile", profileName) when (val alert = lastComboAlert) { is AlertScreenContent.Warning -> put("WarningCode", alert.code) - is AlertScreenContent.Error -> + + is AlertScreenContent.Error -> put("ErrorCode", alert.code) - else -> Unit + + else -> Unit } }) } @@ -1448,8 +1475,8 @@ class ComboV2Plugin @Inject constructor ( val alertCodeString = when (val alert = lastComboAlert) { is AlertScreenContent.Warning -> "W${alert.code}" - is AlertScreenContent.Error -> "E${alert.code}" - else -> null + is AlertScreenContent.Error -> "E${alert.code}" + else -> null } if (alertCodeString != null) lines += rh.gs(R.string.combov2_short_status_alert, alertCodeString) @@ -1476,8 +1503,8 @@ class ComboV2Plugin @Inject constructor ( it.availableUnitsInReservoir ) val batteryStateDesc = when (it.batteryState) { - BatteryState.NO_BATTERY -> rh.gs(R.string.combov2_short_status_battery_state_empty) - BatteryState.LOW_BATTERY -> rh.gs(R.string.combov2_short_status_battery_state_low) + BatteryState.NO_BATTERY -> rh.gs(R.string.combov2_short_status_battery_state_empty) + BatteryState.LOW_BATTERY -> rh.gs(R.string.combov2_short_status_battery_state_low) BatteryState.FULL_BATTERY -> rh.gs(R.string.combov2_short_status_battery_state_full) } lines += rh.gs( @@ -1562,9 +1589,9 @@ class ComboV2Plugin @Inject constructor ( val reason = when (timeChangeType) { TimeChangeType.TimezoneChanged -> rh.gs(R.string.combov2_timezone_changed) - TimeChangeType.TimeChanged -> rh.gs(R.string.combov2_datetime_changed) - TimeChangeType.DSTStarted -> rh.gs(R.string.combov2_dst_started) - TimeChangeType.DSTEnded -> rh.gs(R.string.combov2_dst_ended) + TimeChangeType.TimeChanged -> rh.gs(R.string.combov2_datetime_changed) + TimeChangeType.DSTStarted -> rh.gs(R.string.combov2_dst_started) + TimeChangeType.DSTEnded -> rh.gs(R.string.combov2_dst_ended) } // Updating pump status implicitly also updates the pump's local datetime, // which is what we want after the system datetime/timezone/DST changed. @@ -1594,12 +1621,7 @@ class ComboV2Plugin @Inject constructor ( ) if (!isAllowed) { - value.set( - aapsLogger, - false, - rh.gs(R.string.combov2_incorrect_active_basal_profile, lastActiveBasalProfileNumber), - this - ) + value.set(false, rh.gs(R.string.combov2_incorrect_active_basal_profile, lastActiveBasalProfileNumber), this) } } else { aapsLogger.info( @@ -1753,7 +1775,6 @@ class ComboV2Plugin @Inject constructor ( // the PumpManager onPumpUnpaired callback. } - /*** User interface flows ***/ // "UI flows" are hot flows that are meant to be used for showing @@ -1788,6 +1809,7 @@ class ComboV2Plugin @Inject constructor ( // establishing a BT connection, or delivering a bolus, setting // a basal rate factor, reading the current pump datetime etc. data class CurrentActivityInfo(val description: String, val overallProgress: Double) + private fun noCurrentActivity() = CurrentActivityInfo("", 0.0) private var _currentActivityUIFlow = MutableStateFlow(noCurrentActivity()) val currentActivityUIFlow = _currentActivityUIFlow.asStateFlow() @@ -1799,6 +1821,7 @@ class ComboV2Plugin @Inject constructor ( val batteryStateUIFlow = _batteryStateUIFlow.asStateFlow() data class ReservoirLevel(val state: ReservoirState, val availableUnits: Int) + private var _reservoirLevelUIFlow = MutableStateFlow(null) val reservoirLevelUIFlow = _reservoirLevelUIFlow.asStateFlow() @@ -1830,7 +1853,6 @@ class ComboV2Plugin @Inject constructor ( private var _displayFrameUIFlow = MutableSharedFlow(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST) val displayFrameUIFlow = _displayFrameUIFlow.asSharedFlow() - /*** Misc private functions ***/ private fun setupUiFlows(acquiredPump: ComboCtlPump) { @@ -1845,6 +1867,7 @@ class ComboV2Plugin @Inject constructor ( R.string.combov2_establishing_bt_connection, progStage.currentAttemptNr ) + BasicProgressStage.PerformingConnectionHandshake -> rh.gs(R.string.combov2_pairing_performing_handshake) else -> "" } @@ -1860,10 +1883,12 @@ class ComboV2Plugin @Inject constructor ( val description = when (progressReport.stage) { RTCommandProgressStage.SettingDateTimeHour, RTCommandProgressStage.SettingDateTimeMinute -> rh.gs(R.string.combov2_setting_current_pump_time) + RTCommandProgressStage.SettingDateTimeYear, RTCommandProgressStage.SettingDateTimeMonth, - RTCommandProgressStage.SettingDateTimeDay -> rh.gs(R.string.combov2_setting_current_pump_date) - else -> "" + RTCommandProgressStage.SettingDateTimeDay -> rh.gs(R.string.combov2_setting_current_pump_date) + + else -> "" } _currentActivityUIFlow.value = CurrentActivityInfo( description, @@ -1877,7 +1902,8 @@ class ComboV2Plugin @Inject constructor ( val description = when (val stage = progressReport.stage) { is RTCommandProgressStage.GettingBasalProfile -> rh.gs(R.string.combov2_getting_basal_profile, stage.numSetFactors) - else -> "" + + else -> "" } _currentActivityUIFlow.value = CurrentActivityInfo( description, @@ -1891,7 +1917,8 @@ class ComboV2Plugin @Inject constructor ( val description = when (val stage = progressReport.stage) { is RTCommandProgressStage.SettingBasalProfile -> rh.gs(R.string.combov2_setting_basal_profile, stage.numSetFactors) - else -> "" + + else -> "" } _currentActivityUIFlow.value = CurrentActivityInfo( description, @@ -1906,10 +1933,11 @@ class ComboV2Plugin @Inject constructor ( is RTCommandProgressStage.DeliveringBolus -> rh.gs( R.string.combov2_delivering_bolus, - stage.deliveredImmediateAmount .cctlBolusToIU(), + stage.deliveredImmediateAmount.cctlBolusToIU(), stage.totalImmediateAmount.cctlBolusToIU() ) - else -> "" + + else -> "" } _currentActivityUIFlow.value = CurrentActivityInfo( description, @@ -1981,7 +2009,7 @@ class ComboV2Plugin @Inject constructor ( aapsLogger.debug(LTag.PUMP, "Handling pump event $event") when (event) { - is ComboCtlPump.Event.BatteryLow -> { + is ComboCtlPump.Event.BatteryLow -> { uiInteraction.addNotification( Notification.COMBO_PUMP_ALARM, text = rh.gs(R.string.combov2_battery_low_warning), @@ -1989,7 +2017,7 @@ class ComboV2Plugin @Inject constructor ( ) } - is ComboCtlPump.Event.ReservoirLow -> { + is ComboCtlPump.Event.ReservoirLow -> { uiInteraction.addNotification( Notification.COMBO_PUMP_ALARM, text = rh.gs(R.string.combov2_reservoir_low_warning), @@ -1997,7 +2025,7 @@ class ComboV2Plugin @Inject constructor ( ) } - is ComboCtlPump.Event.QuickBolusInfused -> { + is ComboCtlPump.Event.QuickBolusInfused -> { pumpSync.syncBolusWithPumpId( event.timestamp.toEpochMilliseconds(), event.bolusAmount.cctlBolusToIU(), @@ -2010,8 +2038,8 @@ class ComboV2Plugin @Inject constructor ( is ComboCtlPump.Event.StandardBolusInfused -> { val bolusType = when (event.standardBolusReason) { - ComboCtlPump.StandardBolusReason.NORMAL -> DetailedBolusInfo.BolusType.NORMAL - ComboCtlPump.StandardBolusReason.SUPERBOLUS -> DetailedBolusInfo.BolusType.SMB + ComboCtlPump.StandardBolusReason.NORMAL -> DetailedBolusInfo.BolusType.NORMAL + ComboCtlPump.StandardBolusReason.SUPERBOLUS -> DetailedBolusInfo.BolusType.SMB ComboCtlPump.StandardBolusReason.PRIMING_INFUSION_SET -> DetailedBolusInfo.BolusType.PRIMING } pumpSync.syncBolusWithPumpId( @@ -2036,7 +2064,7 @@ class ComboV2Plugin @Inject constructor ( ) } - is ComboCtlPump.Event.ExtendedBolusEnded -> { + is ComboCtlPump.Event.ExtendedBolusEnded -> { pumpSync.syncStopExtendedBolusWithPumpId( event.timestamp.toEpochMilliseconds(), event.bolusId, @@ -2045,15 +2073,15 @@ class ComboV2Plugin @Inject constructor ( ) } - is ComboCtlPump.Event.TbrStarted -> { + is ComboCtlPump.Event.TbrStarted -> { aapsLogger.debug(LTag.PUMP, "Pump reports TBR started; expected state according to AAPS: ${pumpSync.expectedPumpState()}") val tbrStartTimestampInMs = event.tbr.timestamp.toEpochMilliseconds() val tbrType = when (event.tbr.type) { - ComboCtlTbr.Type.NORMAL -> PumpSync.TemporaryBasalType.NORMAL + ComboCtlTbr.Type.NORMAL -> PumpSync.TemporaryBasalType.NORMAL ComboCtlTbr.Type.EMULATED_100_PERCENT -> PumpSync.TemporaryBasalType.NORMAL - ComboCtlTbr.Type.SUPERBOLUS -> PumpSync.TemporaryBasalType.SUPERBOLUS - ComboCtlTbr.Type.EMULATED_COMBO_STOP -> PumpSync.TemporaryBasalType.EMULATED_PUMP_SUSPEND - ComboCtlTbr.Type.COMBO_STOPPED -> PumpSync.TemporaryBasalType.PUMP_SUSPEND + ComboCtlTbr.Type.SUPERBOLUS -> PumpSync.TemporaryBasalType.SUPERBOLUS + ComboCtlTbr.Type.EMULATED_COMBO_STOP -> PumpSync.TemporaryBasalType.EMULATED_PUMP_SUSPEND + ComboCtlTbr.Type.COMBO_STOPPED -> PumpSync.TemporaryBasalType.PUMP_SUSPEND } pumpSync.syncTemporaryBasalWithPumpId( timestamp = tbrStartTimestampInMs, @@ -2067,7 +2095,7 @@ class ComboV2Plugin @Inject constructor ( ) } - is ComboCtlPump.Event.TbrEnded -> { + is ComboCtlPump.Event.TbrEnded -> { aapsLogger.debug(LTag.PUMP, "Pump reports TBR ended; expected state according to AAPS: ${pumpSync.expectedPumpState()}") val tbrEndTimestampInMs = event.timestampWhenTbrEnded.toEpochMilliseconds() pumpSync.syncStopTemporaryBasalWithPumpId( @@ -2078,7 +2106,7 @@ class ComboV2Plugin @Inject constructor ( ) } - is ComboCtlPump.Event.UnknownTbrDetected -> { + is ComboCtlPump.Event.UnknownTbrDetected -> { // Inform about this unknown TBR that was observed (and automatically aborted). val remainingDurationString = String.format( "%02d:%02d", @@ -2096,7 +2124,7 @@ class ComboV2Plugin @Inject constructor ( ) } - else -> Unit + else -> Unit } } @@ -2229,9 +2257,11 @@ class ComboV2Plugin @Inject constructor ( when (driverStateUIFlow.value) { DriverState.Error, DriverState.Suspended -> false - else -> true + + else -> true } } + else -> true } if (updateUIState) { @@ -2264,10 +2294,12 @@ class ComboV2Plugin @Inject constructor ( if (oldState != DriverState.Suspended) rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.CONNECTED)) } + DriverState.Suspended -> { if (oldState != DriverState.Ready) rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.CONNECTED)) } + else -> Unit } } @@ -2336,8 +2368,8 @@ class ComboV2Plugin @Inject constructor ( when (alert) { is AlertScreenContent.Warning -> { val desc = when (alert.code) { - 4 -> rh.gs(R.string.combov2_warning_4) - 10 -> rh.gs(R.string.combov2_warning_10) + 4 -> rh.gs(R.string.combov2_warning_4) + 10 -> rh.gs(R.string.combov2_warning_10) else -> "" } @@ -2345,18 +2377,18 @@ class ComboV2Plugin @Inject constructor ( if (desc.isEmpty()) "" else ": $desc" } - is AlertScreenContent.Error -> { + is AlertScreenContent.Error -> { val desc = when (alert.code) { - 1 -> rh.gs(R.string.combov2_error_1) - 2 -> rh.gs(R.string.combov2_error_2) - 4 -> rh.gs(R.string.combov2_error_4) - 5 -> rh.gs(R.string.combov2_error_5) - 6 -> rh.gs(R.string.combov2_error_6) - 7 -> rh.gs(R.string.combov2_error_7) - 8 -> rh.gs(R.string.combov2_error_8) - 9 -> rh.gs(R.string.combov2_error_9) - 10 -> rh.gs(R.string.combov2_error_10) - 11 -> rh.gs(R.string.combov2_error_11) + 1 -> rh.gs(R.string.combov2_error_1) + 2 -> rh.gs(R.string.combov2_error_2) + 4 -> rh.gs(R.string.combov2_error_4) + 5 -> rh.gs(R.string.combov2_error_5) + 6 -> rh.gs(R.string.combov2_error_6) + 7 -> rh.gs(R.string.combov2_error_7) + 8 -> rh.gs(R.string.combov2_error_8) + 9 -> rh.gs(R.string.combov2_error_9) + 10 -> rh.gs(R.string.combov2_error_10) + 11 -> rh.gs(R.string.combov2_error_11) else -> "" } @@ -2364,7 +2396,7 @@ class ComboV2Plugin @Inject constructor ( if (desc.isEmpty()) "" else ": $desc" } - else -> rh.gs(R.string.combov2_unrecognized_alert) + else -> rh.gs(R.string.combov2_unrecognized_alert) } private fun notifyAboutComboAlert(alert: AlertScreenContent) { @@ -2411,6 +2443,7 @@ class ComboV2Plugin @Inject constructor ( when (driverStateFlow.value) { DriverState.NotInitialized, DriverState.Disconnected -> true - else -> false + + else -> false } } 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 b2f3b92da9..f6936bc825 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 @@ -10,9 +10,9 @@ import info.nightscout.androidaps.danaRKorean.services.DanaRKoreanExecutionServi import info.nightscout.androidaps.danar.AbstractDanaRPlugin import info.nightscout.androidaps.danar.R import info.nightscout.annotations.OpenForTesting +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.utils.fabric.FabricPrivacy -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.pump.DetailedBolusInfo @@ -51,7 +51,7 @@ class DanaRKoreanPlugin @Inject constructor( rxBus: RxBus, private val context: Context, rh: ResourceHelper, - constraintChecker: Constraints, + constraintChecker: ConstraintsChecker, activePlugin: ActivePlugin, sp: SP, commandQueue: CommandQueue, @@ -147,7 +147,7 @@ class DanaRKoreanPlugin @Inject constructor( } override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(Constraint(detailedBolusInfo.insulin)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() require(detailedBolusInfo.carbs > 0) return if (detailedBolusInfo.insulin > 0) { val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) @@ -192,7 +192,7 @@ 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 - val absoluteRateAfterConstraint = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() + val absoluteRateAfterConstraint = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() var doTempOff = baseBasalRate - absoluteRateAfterConstraint == 0.0 && absoluteRateAfterConstraint >= 0.10 val doLowTemp = absoluteRateAfterConstraint < baseBasalRate || absoluteRateAfterConstraint < 0.10 val doHighTemp = absoluteRateAfterConstraint > baseBasalRate && !useExtendedBoluses @@ -266,7 +266,7 @@ class DanaRKoreanPlugin @Inject constructor( val durationInHalfHours = max(durationInMinutes / 30, 1) // We keep current basal running so need to sub current basal var extendedRateToSet: Double = absoluteRateAfterConstraint - baseBasalRate - extendedRateToSet = constraintChecker.applyBasalConstraints(Constraint(extendedRateToSet), profile).value() + extendedRateToSet = constraintChecker.applyBasalConstraints(ConstraintObject(extendedRateToSet, injector), profile).value() // needs to be rounded to 0.1 extendedRateToSet = Round.roundTo(extendedRateToSet, pumpDescription.extendedBolusStep * 2) // *2 because of half hours diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java b/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java index efe68dac24..062262cf4e 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java @@ -34,7 +34,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.interfaces.Constants; -import info.nightscout.interfaces.constraints.Constraints; +import info.nightscout.interfaces.constraints.ConstraintsChecker; import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.profile.Profile; import info.nightscout.interfaces.profile.ProfileFunction; @@ -62,7 +62,7 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService { @Inject AAPSLogger aapsLogger; @Inject RxBus rxBus; @Inject ResourceHelper rh; - @Inject Constraints constraintChecker; + @Inject ConstraintsChecker constraintChecker; @Inject DanaPump danaPump; @Inject DanaRPlugin danaRPlugin; @Inject DanaRKoreanPlugin danaRKoreanPlugin; @@ -83,12 +83,6 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService { mBinder = new LocalBinder(); } - public class LocalBinder extends Binder { - public DanaRKoreanExecutionService getServiceInstance() { - return DanaRKoreanExecutionService.this; - } - } - @SuppressLint("MissingPermission") public void connect() { if (mConnectionInProgress) return; @@ -330,4 +324,10 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService { return null; } + public class LocalBinder extends Binder { + public DanaRKoreanExecutionService getServiceInstance() { + return DanaRKoreanExecutionService.this; + } + } + } 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 7c35ab543e..77b6cc0aa7 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 @@ -16,9 +16,9 @@ import info.nightscout.androidaps.danaRv2.services.DanaRv2ExecutionService; import info.nightscout.androidaps.danar.AbstractDanaRPlugin; import info.nightscout.androidaps.danar.R; import info.nightscout.annotations.OpenForTesting; +import info.nightscout.core.constraints.ConstraintObject; import info.nightscout.core.utils.fabric.FabricPrivacy; -import info.nightscout.interfaces.constraints.Constraint; -import info.nightscout.interfaces.constraints.Constraints; +import info.nightscout.interfaces.constraints.ConstraintsChecker; import info.nightscout.interfaces.plugin.ActivePlugin; import info.nightscout.interfaces.profile.Profile; import info.nightscout.interfaces.pump.DetailedBolusInfo; @@ -53,6 +53,19 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { private final DetailedBolusInfoStorage detailedBolusInfoStorage; private final TemporaryBasalStorage temporaryBasalStorage; private final FabricPrivacy fabricPrivacy; + private final ServiceConnection mConnection = new ServiceConnection() { + + public void onServiceDisconnected(ComponentName name) { + aapsLogger.debug(LTag.PUMP, "Service is disconnected"); + sExecutionService = null; + } + + public void onServiceConnected(ComponentName name, IBinder service) { + aapsLogger.debug(LTag.PUMP, "Service is connected"); + DanaRv2ExecutionService.LocalBinder mLocalBinder = (DanaRv2ExecutionService.LocalBinder) service; + sExecutionService = mLocalBinder.getServiceInstance(); + } + }; @Inject public DanaRv2Plugin( @@ -62,7 +75,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { RxBus rxBus, Context context, ResourceHelper rh, - Constraints constraintChecker, + ConstraintsChecker constraintChecker, ActivePlugin activePlugin, SP sp, CommandQueue commandQueue, @@ -111,20 +124,6 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { super.onStop(); } - private final ServiceConnection mConnection = new ServiceConnection() { - - public void onServiceDisconnected(ComponentName name) { - aapsLogger.debug(LTag.PUMP, "Service is disconnected"); - sExecutionService = null; - } - - public void onServiceConnected(ComponentName name, IBinder service) { - aapsLogger.debug(LTag.PUMP, "Service is connected"); - DanaRv2ExecutionService.LocalBinder mLocalBinder = (DanaRv2ExecutionService.LocalBinder) service; - sExecutionService = mLocalBinder.getServiceInstance(); - } - }; - // Plugin base interface @NonNull @Override @@ -160,7 +159,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { // Pump interface @NonNull @Override public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new Constraint<>(detailedBolusInfo.insulin)).value(); + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new ConstraintObject<>(detailedBolusInfo.insulin, getInjector())).value(); if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { // v2 stores end time for bolus, we need to adjust time // default delivery speed is 12 sec/U @@ -225,7 +224,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { PumpEnactResult result = new PumpEnactResult(getInjector()); - absoluteRate = constraintChecker.applyBasalConstraints(new Constraint<>(absoluteRate), profile).value(); + absoluteRate = constraintChecker.applyBasalConstraints(new ConstraintObject<>(absoluteRate, getInjector()), profile).value(); boolean doTempOff = getBaseBasalRate() - absoluteRate == 0d && absoluteRate >= 0.10d; final boolean doLowTemp = absoluteRate < getBaseBasalRate() || absoluteRate < 0.10d; @@ -291,7 +290,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { public PumpEnactResult setTempBasalPercent(int percent, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { DanaPump pump = danaPump; PumpEnactResult result = new PumpEnactResult(getInjector()); - percent = constraintChecker.applyBasalPercentConstraints(new Constraint<>(percent), profile).value(); + percent = constraintChecker.applyBasalPercentConstraints(new ConstraintObject<>(percent, getInjector()), profile).value(); if (percent < 0) { result.isTempCancel(false).enacted(false).success(false).comment(info.nightscout.core.ui.R.string.invalid_input); aapsLogger.error("setTempBasalPercent: Invalid input"); @@ -352,7 +351,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult setExtendedBolus(double insulin, int durationInMinutes) { DanaPump pump = danaPump; - insulin = constraintChecker.applyExtendedBolusConstraints(new Constraint<>(insulin)).value(); + insulin = constraintChecker.applyExtendedBolusConstraints(new ConstraintObject<>(insulin, getInjector())).value(); // needs to be rounded int durationInHalfHours = Math.max(durationInMinutes / 30, 1); insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); 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 f5d7c965d4..1304e70ca5 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 @@ -7,8 +7,10 @@ import org.json.JSONObject; import dagger.android.HasAndroidInjector; import info.nightscout.androidaps.danar.services.AbstractDanaRExecutionService; +import info.nightscout.core.constraints.ConstraintObject; import info.nightscout.interfaces.constraints.Constraint; -import info.nightscout.interfaces.constraints.Constraints; +import info.nightscout.interfaces.constraints.ConstraintsChecker; +import info.nightscout.interfaces.constraints.PluginConstraints; import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.plugin.ActivePlugin; import info.nightscout.interfaces.plugin.OwnDatabasePlugin; @@ -46,7 +48,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable; * Created by mike on 28.01.2018. */ -public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump, Dana, Constraints, OwnDatabasePlugin { +public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump, Dana, PluginConstraints, OwnDatabasePlugin { protected AbstractDanaRExecutionService sExecutionService; protected CompositeDisposable disposable = new CompositeDisposable(); @@ -55,7 +57,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump protected PumpDescription pumpDescription = new PumpDescription(); protected DanaPump danaPump; - protected Constraints constraintChecker; + protected ConstraintsChecker constraintChecker; protected RxBus rxBus; protected ActivePlugin activePlugin; protected SP sp; @@ -65,11 +67,12 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump protected UiInteraction uiInteraction; protected DanaHistoryDatabase danaHistoryDatabase; protected DecimalFormatter decimalFormatter; + protected AbstractDanaRPlugin( HasAndroidInjector injector, DanaPump danaPump, ResourceHelper rh, - Constraints constraintChecker, + ConstraintsChecker constraintChecker, AAPSLogger aapsLogger, AapsSchedulers aapsSchedulers, CommandQueue commandQueue, @@ -223,7 +226,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()); - percent = constraintChecker.applyBasalPercentConstraints(new Constraint<>(percent), profile).value(); + percent = constraintChecker.applyBasalPercentConstraints(new ConstraintObject<>(percent, getInjector()), profile).value(); if (percent < 0) { result.isTempCancel(false).enacted(false).success(false).comment(info.nightscout.core.ui.R.string.invalid_input); getAapsLogger().error("setTempBasalPercent: Invalid input"); @@ -270,7 +273,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump @NonNull @Override public PumpEnactResult setExtendedBolus(double insulin, int durationInMinutes) { - insulin = constraintChecker.applyExtendedBolusConstraints(new Constraint<>(insulin)).value(); + insulin = constraintChecker.applyExtendedBolusConstraints(new ConstraintObject<>(insulin, getInjector())).value(); // needs to be rounded int durationInHalfHours = Math.max(durationInMinutes / 30, 1); insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); @@ -462,21 +465,21 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump @NonNull @Override public Constraint applyBasalConstraints(Constraint absoluteRate, @NonNull Profile profile) { - absoluteRate.setIfSmaller(getAapsLogger(), danaPump.getMaxBasal(), getRh().gs(info.nightscout.core.ui.R.string.limitingbasalratio, danaPump.getMaxBasal(), getRh().gs(info.nightscout.core.ui.R.string.pumplimit)), this); + absoluteRate.setIfSmaller(danaPump.getMaxBasal(), getRh().gs(info.nightscout.core.ui.R.string.limitingbasalratio, danaPump.getMaxBasal(), getRh().gs(info.nightscout.core.ui.R.string.pumplimit)), this); return absoluteRate; } @NonNull @Override public Constraint applyBasalPercentConstraints(Constraint percentRate, @NonNull Profile profile) { - percentRate.setIfGreater(getAapsLogger(), 0, getRh().gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, getRh().gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this); - percentRate.setIfSmaller(getAapsLogger(), getPumpDescription().getMaxTempPercent(), getRh().gs(info.nightscout.core.ui.R.string.limitingpercentrate, getPumpDescription().getMaxTempPercent(), getRh().gs(info.nightscout.core.ui.R.string.pumplimit)), this); + percentRate.setIfGreater(0, getRh().gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, getRh().gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this); + percentRate.setIfSmaller(getPumpDescription().getMaxTempPercent(), getRh().gs(info.nightscout.core.ui.R.string.limitingpercentrate, getPumpDescription().getMaxTempPercent(), getRh().gs(info.nightscout.core.ui.R.string.pumplimit)), this); return percentRate; } @NonNull @Override public Constraint applyBolusConstraints(Constraint insulin) { - insulin.setIfSmaller(getAapsLogger(), danaPump.getMaxBolus(), getRh().gs(info.nightscout.core.ui.R.string.limitingbolus, danaPump.getMaxBolus(), getRh().gs(info.nightscout.core.ui.R.string.pumplimit)), this); + insulin.setIfSmaller(danaPump.getMaxBolus(), getRh().gs(info.nightscout.core.ui.R.string.limitingbolus, danaPump.getMaxBolus(), getRh().gs(info.nightscout.core.ui.R.string.pumplimit)), this); return insulin; } 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 ce102e2d25..ff4d9873be 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 @@ -14,9 +14,9 @@ import javax.inject.Singleton; import dagger.android.HasAndroidInjector; import info.nightscout.androidaps.danar.services.DanaRExecutionService; import info.nightscout.annotations.OpenForTesting; +import info.nightscout.core.constraints.ConstraintObject; import info.nightscout.core.utils.fabric.FabricPrivacy; -import info.nightscout.interfaces.constraints.Constraint; -import info.nightscout.interfaces.constraints.Constraints; +import info.nightscout.interfaces.constraints.ConstraintsChecker; import info.nightscout.interfaces.plugin.ActivePlugin; import info.nightscout.interfaces.profile.Profile; import info.nightscout.interfaces.pump.DetailedBolusInfo; @@ -46,8 +46,20 @@ public class DanaRPlugin extends AbstractDanaRPlugin { private final AAPSLogger aapsLogger; private final Context context; private final ResourceHelper rh; - private final Constraints constraints; private final FabricPrivacy fabricPrivacy; + private final ServiceConnection mConnection = new ServiceConnection() { + + public void onServiceDisconnected(ComponentName name) { + aapsLogger.debug(LTag.PUMP, "Service is disconnected"); + sExecutionService = null; + } + + public void onServiceConnected(ComponentName name, IBinder service) { + aapsLogger.debug(LTag.PUMP, "Service is connected"); + DanaRExecutionService.LocalBinder mLocalBinder = (DanaRExecutionService.LocalBinder) service; + sExecutionService = mLocalBinder.getServiceInstance(); + } + }; @Inject public DanaRPlugin( @@ -57,7 +69,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { RxBus rxBus, Context context, ResourceHelper rh, - Constraints constraints, + ConstraintsChecker constraintsChecker, ActivePlugin activePlugin, SP sp, CommandQueue commandQueue, @@ -69,11 +81,10 @@ public class DanaRPlugin extends AbstractDanaRPlugin { DanaHistoryDatabase danaHistoryDatabase, DecimalFormatter decimalFormatter ) { - super(injector, danaPump, rh, constraints, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, uiInteraction, danaHistoryDatabase, decimalFormatter); + super(injector, danaPump, rh, constraintsChecker, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, uiInteraction, danaHistoryDatabase, decimalFormatter); this.aapsLogger = aapsLogger; this.context = context; this.rh = rh; - this.constraints = constraints; this.fabricPrivacy = fabricPrivacy; useExtendedBoluses = sp.getBoolean(info.nightscout.core.utils.R.string.key_danar_useextended, false); @@ -114,20 +125,6 @@ public class DanaRPlugin extends AbstractDanaRPlugin { super.onStop(); } - private final ServiceConnection mConnection = new ServiceConnection() { - - public void onServiceDisconnected(ComponentName name) { - aapsLogger.debug(LTag.PUMP, "Service is disconnected"); - sExecutionService = null; - } - - public void onServiceConnected(ComponentName name, IBinder service) { - aapsLogger.debug(LTag.PUMP, "Service is connected"); - DanaRExecutionService.LocalBinder mLocalBinder = (DanaRExecutionService.LocalBinder) service; - sExecutionService = mLocalBinder.getServiceInstance(); - } - }; - // Plugin base interface @NonNull @Override @@ -163,7 +160,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { - detailedBolusInfo.insulin = constraints.applyBolusConstraints(new Constraint<>(detailedBolusInfo.insulin)).value(); + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new ConstraintObject<>(detailedBolusInfo.insulin, getInjector())).value(); if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId()); boolean connectionOK = false; @@ -210,7 +207,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { //This should not be needed while using queue because connection should be done before calling this PumpEnactResult result = new PumpEnactResult(getInjector()); - absoluteRate = constraints.applyBasalConstraints(new Constraint<>(absoluteRate), profile).value(); + absoluteRate = constraintChecker.applyBasalConstraints(new ConstraintObject<>(absoluteRate, getInjector()), profile).value(); boolean doTempOff = getBaseBasalRate() - absoluteRate == 0d && absoluteRate >= 0.10d; final boolean doLowTemp = absoluteRate < getBaseBasalRate() || absoluteRate < 0.10d; @@ -289,7 +286,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { int durationInHalfHours = Math.max(durationInMinutes / 30, 1); // We keep current basal running so need to sub current basal double extendedRateToSet = absoluteRate - getBaseBasalRate(); - extendedRateToSet = constraints.applyBasalConstraints(new Constraint<>(extendedRateToSet), profile).value(); + extendedRateToSet = constraintChecker.applyBasalConstraints(new ConstraintObject<>(extendedRateToSet, getInjector()), profile).value(); // needs to be rounded to 0.1 extendedRateToSet = Round.INSTANCE.roundTo(extendedRateToSet, pumpDescription.getExtendedBolusStep() * 2); // *2 because of half hours diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt index a4e81c0bbf..785bc1c840 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt @@ -7,7 +7,7 @@ import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.danar.comm.MessageOriginalNames.getName import info.nightscout.androidaps.utils.CRC.getCrc16 import info.nightscout.interfaces.ConfigBuilder -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.pump.DetailedBolusInfoStorage import info.nightscout.interfaces.pump.PumpSync @@ -48,7 +48,7 @@ open class MessageBase(injector: HasAndroidInjector) { @Inject lateinit var commandQueue: CommandQueue @Inject lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Inject lateinit var temporaryBasalStorage: TemporaryBasalStorage - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var pumpSync: PumpSync @Inject lateinit var danaHistoryRecordDao: DanaHistoryRecordDao @Inject lateinit var uiInteraction: UiInteraction diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt index d22424bed1..0049f5b93e 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt @@ -1,10 +1,9 @@ package info.nightscout.androidaps.danar.comm import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.rx.logging.LTag - class MsgBolusStart( injector: HasAndroidInjector, private var amount: Double @@ -13,7 +12,7 @@ class MsgBolusStart( init { setCommand(0x0102) // HARDCODED LIMIT - amount = constraintChecker.applyBolusConstraints(Constraint(amount)).value() + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() addParamInt((amount * 100).toInt()) aapsLogger.debug(LTag.PUMPBTCOMM, "Bolus start : $amount") } diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt index caa86a6b6b..3a0c72d41a 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt @@ -1,10 +1,9 @@ package info.nightscout.androidaps.danar.comm import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.rx.logging.LTag - class MsgBolusStartWithSpeed( injector: HasAndroidInjector, private var amount: Double, @@ -14,7 +13,7 @@ class MsgBolusStartWithSpeed( init { setCommand(0x0104) // HARDCODED LIMIT - amount = constraintChecker.applyBolusConstraints(Constraint(amount)).value() + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() addParamInt((amount * 100).toInt()) addParamByte(speed.toByte()) aapsLogger.debug(LTag.PUMPBTCOMM, "Bolus start : $amount speed: $speed") @@ -24,10 +23,10 @@ class MsgBolusStartWithSpeed( val errorCode = intFromBuff(bytes, 0, 1) if (errorCode != 2) { failed = true - aapsLogger.debug(LTag.PUMPBTCOMM, "Messsage response: $errorCode FAILED!!") + aapsLogger.debug(LTag.PUMPBTCOMM, "Message response: $errorCode FAILED!!") } else { failed = false - aapsLogger.debug(LTag.PUMPBTCOMM, "Messsage response: $errorCode OK") + aapsLogger.debug(LTag.PUMPBTCOMM, "Message response: $errorCode OK") } danaPump.bolusStartErrorCode = errorCode } diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt index 3bfc0a5aad..9c1f1ed0bc 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt @@ -1,14 +1,13 @@ package info.nightscout.androidaps.danar.comm import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.rx.logging.LTag - class MsgSetExtendedBolusStart( injector: HasAndroidInjector, private var amount: Double, - private var halfhours: Byte + private var halfHours: Byte ) : MessageBase(injector) { @@ -16,12 +15,12 @@ class MsgSetExtendedBolusStart( setCommand(0x0407) aapsLogger.debug(LTag.PUMPBTCOMM, "New message") // HARDCODED LIMITS - if (halfhours < 1) halfhours = 1 - if (halfhours > 16) halfhours = 16 - amount = constraintChecker.applyBolusConstraints(Constraint(amount)).value() + if (halfHours < 1) halfHours = 1 + if (halfHours > 16) halfHours = 16 + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() addParamInt((amount * 100).toInt()) - addParamByte(halfhours) - aapsLogger.debug(LTag.PUMPBTCOMM, "Set extended bolus start: " + (amount * 100).toInt() / 100.0 + "U halfhours: " + halfhours.toInt()) + addParamByte(halfHours) + aapsLogger.debug(LTag.PUMPBTCOMM, "Set extended bolus start: " + (amount * 100).toInt() / 100.0 + "U halfHours: " + halfHours.toInt()) } override fun handleMessage(bytes: ByteArray) { diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt index 095d7a676e..9f3585447a 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt @@ -3,9 +3,8 @@ package info.nightscout.pump.danaR import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.danar.DanaRPlugin -import info.nightscout.interfaces.Constants -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.pump.PumpSync @@ -22,7 +21,7 @@ import org.mockito.Mockito.`when` class DanaRPluginTest : TestBaseWithProfile() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var pumpSync: PumpSync @Mock lateinit var instantiator: Instantiator @@ -34,7 +33,11 @@ class DanaRPluginTest : TestBaseWithProfile() { private lateinit var danaRPlugin: DanaRPlugin val injector = HasAndroidInjector { - AndroidInjector { } + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } } @BeforeEach @@ -57,11 +60,11 @@ class DanaRPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHBASALRATE) + val c = ConstraintObject(Double.MAX_VALUE, injector) danaRPlugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(0.8, c.value(), 0.01) - Assertions.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons()) + Assertions.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons()) } @Test @Throws(Exception::class) @@ -69,10 +72,10 @@ class DanaRPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHPERCENTBASALRATE) + val c = ConstraintObject(Int.MAX_VALUE, injector) danaRPlugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) - Assertions.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getReasons()) + Assertions.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons()) } } \ No newline at end of file diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt index 363ccba06c..6f294d210b 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt @@ -6,8 +6,9 @@ import info.nightscout.androidaps.danaRKorean.DanaRKoreanPlugin import info.nightscout.androidaps.danaRv2.DanaRv2Plugin import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.danar.comm.MessageBase +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.ConfigBuilder -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.pump.DetailedBolusInfoStorage import info.nightscout.interfaces.pump.PumpSync @@ -15,7 +16,6 @@ import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.database.DanaHistoryRecordDao -import info.nightscout.rx.bus.RxBus import info.nightscout.sharedtests.TestBaseWithProfile import org.junit.jupiter.api.BeforeEach import org.mockito.ArgumentMatchers @@ -32,7 +32,7 @@ open class DanaRTestBase : TestBaseWithProfile() { @Mock lateinit var configBuilder: ConfigBuilder @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var pumpSync: PumpSync @Mock lateinit var danaHistoryRecordDao: DanaHistoryRecordDao @Mock lateinit var instantiator: Instantiator @@ -50,6 +50,9 @@ open class DanaRTestBase : TestBaseWithProfile() { val injector = HasAndroidInjector { AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } if (it is MessageBase) { it.aapsLogger = aapsLogger it.dateUtil = dateUtil @@ -57,7 +60,7 @@ open class DanaRTestBase : TestBaseWithProfile() { it.danaRPlugin = danaRPlugin it.danaRKoreanPlugin = danaRKoreanPlugin it.danaRv2Plugin = danaRv2Plugin - it.rxBus = RxBus(aapsSchedulers, aapsLogger) + it.rxBus = rxBus it.rh = rh it.activePlugin = activePlugin it.configBuilder = configBuilder diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt index 9f4c683f63..83ac7c65e1 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt @@ -1,7 +1,7 @@ package info.nightscout.pump.danaR.comm import info.nightscout.androidaps.danar.comm.MessageHashTableR -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.mockito.Mockito @@ -9,7 +9,7 @@ import org.mockito.Mockito class MessageHashTableRTest : DanaRTestBase() { @Test fun runTest() { - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) val messageHashTable = MessageHashTableR(injector) val testMessage = messageHashTable.findMessage(0x41f2) Assertions.assertEquals("CMD_HISTORY_ALL", testMessage.messageName) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt index da974f3209..daa4a0fb5a 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt @@ -1,7 +1,7 @@ package info.nightscout.pump.danaR.comm import info.nightscout.androidaps.danar.comm.MsgBolusStart -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.mockito.Mockito.`when` @@ -9,7 +9,7 @@ import org.mockito.Mockito.`when` class MsgBolusStartTest : DanaRTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) val packet = MsgBolusStart(injector, 1.0) // test message decoding diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt index ff2313a4a5..0493dc8b1e 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt @@ -1,7 +1,7 @@ package info.nightscout.pump.danaR.comm import info.nightscout.androidaps.danar.comm.MsgBolusStartWithSpeed -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.mockito.Mockito @@ -9,7 +9,7 @@ import org.mockito.Mockito class MsgBolusStartWithSpeedTest : DanaRTestBase() { @Test fun runTest() { - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) val packet = MsgBolusStartWithSpeed(injector, 0.0, 0) // test message decoding diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt index 2cea8ca437..d881bd911e 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt @@ -1,7 +1,7 @@ package info.nightscout.pump.danaR.comm import info.nightscout.androidaps.danar.comm.MsgSetExtendedBolusStart -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.mockito.Mockito.`when` @@ -9,7 +9,7 @@ import org.mockito.Mockito.`when` class MsgSetExtendedBolusStartTest : DanaRTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) val packet = MsgSetExtendedBolusStart(injector, 2.0, 2.toByte()) // test message decoding diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt index 59c583263f..d843b7e67c 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt @@ -3,9 +3,8 @@ package info.nightscout.pump.danaRKorean import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.danaRKorean.DanaRKoreanPlugin -import info.nightscout.interfaces.Constants -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.pump.PumpSync @@ -22,7 +21,7 @@ import org.mockito.Mockito.`when` class DanaRKoreanPluginTest : TestBaseWithProfile() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var pumpSync: PumpSync @Mock lateinit var instantiator: Instantiator @@ -34,7 +33,11 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() { private lateinit var danaRPlugin: DanaRKoreanPlugin val injector = HasAndroidInjector { - AndroidInjector { } + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } } @BeforeEach @@ -57,11 +60,11 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHBASALRATE) + val c = ConstraintObject(Double.MAX_VALUE, injector) danaRPlugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(0.8, c.value(), 0.01) - Assertions.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons()) + Assertions.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons()) } @Test @Throws(Exception::class) @@ -69,10 +72,10 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHPERCENTBASALRATE) + val c = ConstraintObject(Int.MAX_VALUE, injector) danaRPlugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) - Assertions.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getReasons()) + Assertions.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons()) } } \ No newline at end of file diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt index 79fca9b748..8b43ed6677 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt @@ -1,7 +1,7 @@ package info.nightscout.pump.danaRKorean.comm import info.nightscout.androidaps.danaRKorean.comm.MessageHashTableRKorean -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.pump.danaR.comm.DanaRTestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test @@ -10,7 +10,7 @@ import org.mockito.Mockito class MessageHashTableRKoreanTest : DanaRTestBase() { @Test fun runTest() { - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) val messageHashTable = MessageHashTableRKorean(injector) val testMessage = messageHashTable.findMessage(0x41f2) Assertions.assertEquals("CMD_HISTORY_ALL", testMessage.messageName) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt index d19b855b65..a95b45eef0 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt @@ -3,9 +3,8 @@ package info.nightscout.pump.danaRv2 import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.danaRv2.DanaRv2Plugin -import info.nightscout.interfaces.Constants -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.pump.DetailedBolusInfoStorage @@ -24,7 +23,7 @@ import org.mockito.Mockito.`when` class DanaRv2PluginTest : TestBaseWithProfile() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage @@ -38,7 +37,11 @@ class DanaRv2PluginTest : TestBaseWithProfile() { private lateinit var danaRv2Plugin: DanaRv2Plugin val injector = HasAndroidInjector { - AndroidInjector { } + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } } @BeforeEach @@ -61,11 +64,11 @@ class DanaRv2PluginTest : TestBaseWithProfile() { danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHBASALRATE) + val c = ConstraintObject(Double.MAX_VALUE, injector) danaRv2Plugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(0.8, c.value(), 0.01) - Assertions.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons()) + Assertions.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons()) } @Test @@ -73,10 +76,10 @@ class DanaRv2PluginTest : TestBaseWithProfile() { danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHPERCENTBASALRATE) + val c = ConstraintObject(Int.MAX_VALUE, injector) danaRv2Plugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) - Assertions.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getReasons()) + Assertions.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons()) } } \ No newline at end of file diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt index 178b1488fc..94bfe539a4 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt @@ -3,7 +3,7 @@ package info.nightscout.pump.danaRv2.comm import info.nightscout.androidaps.danaRv2.comm.MessageHashTableRv2 import info.nightscout.androidaps.danaRv2.comm.MsgStatusAPS_v2 import info.nightscout.androidaps.danar.comm.MessageBase -import info.nightscout.interfaces.constraints.Constraint +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.pump.danaR.comm.DanaRTestBase import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test @@ -13,7 +13,7 @@ class MessageHashTableRv2Test : DanaRTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) val messageHashTableRv2 = MessageHashTableRv2(injector) val forTesting: MessageBase = MsgStatusAPS_v2(injector) val testPacket: MessageBase = messageHashTableRv2.findMessage(forTesting.command) diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt index 2374eb15ae..89ce1b2430 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt @@ -8,10 +8,12 @@ import android.os.IBinder import android.text.format.DateFormat import androidx.preference.Preference import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.OwnDatabasePlugin import info.nightscout.interfaces.plugin.PluginDescription @@ -68,7 +70,7 @@ class DanaRSPlugin @Inject constructor( private val rxBus: RxBus, private val context: Context, rh: ResourceHelper, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val profileFunction: ProfileFunction, private val sp: SP, commandQueue: CommandQueue, @@ -92,7 +94,7 @@ class DanaRSPlugin @Inject constructor( .preferencesId(R.xml.pref_danars) .description(info.nightscout.pump.dana.R.string.description_pump_dana_rs), injector, aapsLogger, rh, commandQueue -), Pump, Dana, Constraints, OwnDatabasePlugin { +), Pump, Dana, PluginConstraints, OwnDatabasePlugin { private val disposable = CompositeDisposable() private var danaRSService: DanaRSService? = null @@ -202,18 +204,22 @@ class DanaRSPlugin @Inject constructor( // Constraints interface override fun applyBasalConstraints(absoluteRate: Constraint, profile: Profile): Constraint { - absoluteRate.setIfSmaller(aapsLogger, danaPump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, danaPump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + absoluteRate.setIfSmaller(danaPump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, danaPump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) return absoluteRate } override fun applyBasalPercentConstraints(percentRate: Constraint, profile: Profile): Constraint { - percentRate.setIfGreater(aapsLogger, 0, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) - percentRate.setIfSmaller(aapsLogger, pumpDescription.maxTempPercent, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, pumpDescription.maxTempPercent, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + percentRate.setIfGreater(0, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) + percentRate.setIfSmaller( + pumpDescription.maxTempPercent, + rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, pumpDescription.maxTempPercent, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), + this + ) return percentRate } override fun applyBolusConstraints(insulin: Constraint): Constraint { - insulin.setIfSmaller(aapsLogger, danaPump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, danaPump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + insulin.setIfSmaller(danaPump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, danaPump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) return insulin } @@ -282,7 +288,7 @@ class DanaRSPlugin @Inject constructor( @Synchronized override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(Constraint(detailedBolusInfo.insulin)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() return if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { val preferencesSpeed = sp.getInt(info.nightscout.pump.dana.R.string.key_danars_bolusspeed, 0) var speed = 12 @@ -337,7 +343,7 @@ 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 { - val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() + val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() var doTempOff = baseBasalRate - absoluteAfterConstrain == 0.0 val doLowTemp = absoluteAfterConstrain < baseBasalRate val doHighTemp = absoluteAfterConstrain > baseBasalRate @@ -413,7 +419,7 @@ class DanaRSPlugin @Inject constructor( @Synchronized override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { val result = PumpEnactResult(injector) - var percentAfterConstraint = constraintChecker.applyBasalPercentConstraints(Constraint(percent), profile).value() + var percentAfterConstraint = constraintChecker.applyBasalPercentConstraints(ConstraintObject(percent, injector), profile).value() if (percentAfterConstraint < 0) { result.isTempCancel = false result.enacted = false @@ -483,7 +489,7 @@ class DanaRSPlugin @Inject constructor( @Synchronized override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult { - var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(Constraint(insulin)).value() + var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() // needs to be rounded val durationInHalfHours = max(durationInMinutes / 30, 1) insulinAfterConstraint = Round.roundTo(insulinAfterConstraint, pumpDescription.extendedBolusStep) diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt index 07c2c171ec..7ded74eea2 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt @@ -2,8 +2,8 @@ package info.nightscout.pump.danars.comm import dagger.android.HasAndroidInjector import info.nightscout.androidaps.danars.encryption.BleEncryption -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.pump.dana.DanaPump import info.nightscout.rx.logging.LTag import javax.inject.Inject @@ -15,13 +15,13 @@ class DanaRSPacketBolusSetStepBolusStart( ) : DanaRSPacket(injector) { @Inject lateinit var danaPump: DanaPump - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker init { opCode = BleEncryption.DANAR_PACKET__OPCODE_BOLUS__SET_STEP_BOLUS_START // Speed 0 => 12 sec/U, 1 => 30 sec/U, 2 => 60 sec/U // HARDCODED LIMIT - if there is one that could be created - amount = constraintChecker.applyBolusConstraints(Constraint(amount)).value() + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() aapsLogger.debug(LTag.PUMPCOMM, "Bolus start : $amount speed: $speed") } diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt index a230a49c53..e2e2d8a869 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt @@ -10,7 +10,7 @@ import dagger.android.DaggerService import dagger.android.HasAndroidInjector import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Constants -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Profile @@ -103,7 +103,7 @@ class DanaRSService : DaggerService() { @Inject lateinit var danaRSPlugin: DanaRSPlugin @Inject lateinit var danaPump: DanaPump @Inject lateinit var activePlugin: ActivePlugin - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var uiInteraction: UiInteraction @Inject lateinit var bleComm: BLEComm @Inject lateinit var fabricPrivacy: FabricPrivacy diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt index 958f46f0b4..c2a9d6cc36 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt @@ -1,9 +1,8 @@ package info.nightscout.pump.danars import dagger.android.AndroidInjector -import info.nightscout.interfaces.Constants -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.pump.DetailedBolusInfoStorage import info.nightscout.interfaces.pump.PumpSync @@ -20,7 +19,7 @@ import org.mockito.Mockito @Suppress("SpellCheckingInspection") class DanaRSPluginTest : DanaRSTestBase() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage @@ -34,11 +33,11 @@ class DanaRSPluginTest : DanaRSTestBase() { danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHBASALRATE) + val c = ConstraintObject(Double.MAX_VALUE, injector) danaRSPlugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(java.lang.Double.valueOf(0.8), c.value(), 0.0001) - Assertions.assertEquals("DanaRS: limitingbasalratio", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaRS: limitingbasalratio", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaRS: limitingbasalratio", c.getReasons()) + Assertions.assertEquals("DanaRS: limitingbasalratio", c.getMostLimitedReasons()) } @Test @@ -46,11 +45,11 @@ class DanaRSPluginTest : DanaRSTestBase() { danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = Constraint(Constants.REALLYHIGHPERCENTBASALRATE) + val c = ConstraintObject(Int.MAX_VALUE, injector) danaRSPlugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) - Assertions.assertEquals("DanaRS: limitingpercentrate", c.getReasons(aapsLogger)) - Assertions.assertEquals("DanaRS: limitingpercentrate", c.getMostLimitedReasons(aapsLogger)) + Assertions.assertEquals("DanaRS: limitingpercentrate", c.getReasons()) + Assertions.assertEquals("DanaRS: limitingpercentrate", c.getMostLimitedReasons()) } @BeforeEach diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt index e64101e1f1..7c56fb2d9c 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt @@ -1,5 +1,8 @@ package info.nightscout.pump.danars +import dagger.android.AndroidInjector +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.pump.dana.DanaPump @@ -17,6 +20,14 @@ open class DanaRSTestBase : TestBaseWithProfile() { lateinit var danaPump: DanaPump + val injector = HasAndroidInjector { + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } + } + @BeforeEach fun prepare() { Mockito.`when`(rh.gs(ArgumentMatchers.anyInt())).thenReturn("AnyString") diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt index 466890cfb9..97a189240c 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt @@ -3,8 +3,8 @@ package info.nightscout.pump.danars.comm import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.danars.encryption.BleEncryption -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.danars.DanaRSTestBase import org.junit.jupiter.api.Assertions @@ -14,7 +14,7 @@ import org.mockito.Mockito.`when` class DanaRsMessageHashTableTest : DanaRSTestBase() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker private val packetInjector = HasAndroidInjector { AndroidInjector { @@ -36,7 +36,7 @@ class DanaRsMessageHashTableTest : DanaRSTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) val danaRSMessageHashTable = DanaRSMessageHashTable(packetInjector) val forTesting: DanaRSPacket = DanaRSPacketAPSSetEventHistory(packetInjector, DanaPump.HistoryEntry.CARBS.value, 0, 0, 0) diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt index b142a13226..27a8dcd7cd 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt @@ -2,8 +2,8 @@ package info.nightscout.pump.danars.comm import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.core.constraints.ConstraintObject +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.pump.DetailedBolusInfoStorage import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.TemporaryBasalStorage @@ -18,7 +18,7 @@ import org.mockito.Mockito class DanaRsPacketBolusSetStepBolusStartTest : DanaRSTestBase() { - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage @@ -75,6 +75,6 @@ class DanaRsPacketBolusSetStepBolusStartTest : DanaRSTestBase() { danaHistoryDatabase, decimalFormatter ) - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) } } \ No newline at end of file diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt index dc0cdef0e8..08865517af 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt @@ -2,7 +2,7 @@ package info.nightscout.pump.danars.comm import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.pump.DetailedBolusInfoStorage import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.TemporaryBasalStorage @@ -20,7 +20,7 @@ import org.mockito.Mockito.`when` class DanaRsPacketNotifyDeliveryRateDisplayTest : DanaRSTestBase() { @Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase - @Mock lateinit var constraintChecker: Constraints + @Mock lateinit var constraintChecker: ConstraintsChecker @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt index caf8c0f2c0..0ed3187bbb 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt @@ -9,10 +9,12 @@ import android.text.format.DateFormat import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.OwnDatabasePlugin import info.nightscout.interfaces.plugin.PluginDescription @@ -66,7 +68,7 @@ class DiaconnG8Plugin @Inject constructor( private val rxBus: RxBus, private val context: Context, rh: ResourceHelper, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val profileFunction: ProfileFunction, private val sp: SP, commandQueue: CommandQueue, @@ -90,7 +92,7 @@ class DiaconnG8Plugin @Inject constructor( .preferencesId(R.xml.pref_diaconn) .description(R.string.description_pump_diaconn_g8), injector, aapsLogger, rh, commandQueue -), Pump, Diaconn, Constraints, OwnDatabasePlugin { +), Pump, Diaconn, PluginConstraints, OwnDatabasePlugin { private val disposable = CompositeDisposable() private var diaconnG8Service: DiaconnG8Service? = null @@ -185,18 +187,22 @@ class DiaconnG8Plugin @Inject constructor( // Constraints interface override fun applyBasalConstraints(absoluteRate: Constraint, profile: Profile): Constraint { - absoluteRate.setIfSmaller(aapsLogger, diaconnG8Pump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, diaconnG8Pump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + absoluteRate.setIfSmaller(diaconnG8Pump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio, diaconnG8Pump.maxBasal, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) return absoluteRate } override fun applyBasalPercentConstraints(percentRate: Constraint, profile: Profile): Constraint { - percentRate.setIfGreater(aapsLogger, 0, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) - percentRate.setIfSmaller(aapsLogger, pumpDescription.maxTempPercent, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, pumpDescription.maxTempPercent, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + percentRate.setIfGreater(0, rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, 0, rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)), this) + percentRate.setIfSmaller( + pumpDescription.maxTempPercent, + rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate, pumpDescription.maxTempPercent, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), + this + ) return percentRate } override fun applyBolusConstraints(insulin: Constraint): Constraint { - insulin.setIfSmaller(aapsLogger, diaconnG8Pump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, diaconnG8Pump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) + insulin.setIfSmaller(diaconnG8Pump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.limitingbolus, diaconnG8Pump.maxBolus, rh.gs(info.nightscout.core.ui.R.string.pumplimit)), this) return insulin } @@ -265,7 +271,7 @@ class DiaconnG8Plugin @Inject constructor( @Synchronized override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(Constraint(detailedBolusInfo.insulin)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() return if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { val carbs = detailedBolusInfo.carbs detailedBolusInfo.carbs = 0.0 @@ -304,7 +310,7 @@ class DiaconnG8Plugin @Inject constructor( @Synchronized override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { val result = PumpEnactResult(injector) - val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() + val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() val doTempOff = baseBasalRate - absoluteAfterConstrain == 0.0 val doLowTemp = absoluteAfterConstrain < baseBasalRate val doHighTemp = absoluteAfterConstrain > baseBasalRate @@ -391,7 +397,7 @@ class DiaconnG8Plugin @Inject constructor( @Synchronized override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult { - var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(Constraint(insulin)).value() + var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() // needs to be rounded insulinAfterConstraint = Round.roundTo(insulinAfterConstraint, pumpDescription.extendedBolusStep) val result = PumpEnactResult(injector) diff --git a/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicTestBase.kt b/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicTestBase.kt index ced4a4bc8f..f58892816e 100644 --- a/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicTestBase.kt +++ b/pump/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicTestBase.kt @@ -11,8 +11,6 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.pump.PumpSync import info.nightscout.pump.common.sync.PumpSyncStorage import info.nightscout.pump.core.utils.ByteUtil -import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase @@ -21,7 +19,6 @@ import org.mockito.Mock open class MedtronicTestBase : TestBase() { - var rxBus: RxBus = RxBus(TestAapsSchedulers(), aapsLogger) var byteUtil = ByteUtil() var rileyLinkUtil = RileyLinkUtil() 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 434eb8e8df..dd77853710 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 @@ -14,8 +14,6 @@ import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil import info.nightscout.database.impl.serialisation.SealedClassHelper import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.pump.core.utils.ByteUtil -import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.rx.bus.RxBus import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -37,8 +35,6 @@ import org.mockito.Mock @BeforeEach fun setup() { - rxBus = RxBus(TestAapsSchedulers(), aapsLogger) - medtronicPumpStatus = MedtronicPumpStatus(rh, sp, rxBus, rileyLinkUtil) medtronicUtil = MedtronicUtil(aapsLogger, rxBus, rileyLinkUtil, medtronicPumpStatus, uiInteraction) decoder = MedtronicPumpHistoryDecoder(aapsLogger, medtronicUtil, byteUtil) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt index efcda22669..d4f41f9e74 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt @@ -12,12 +12,12 @@ import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.PreferenceFragmentCompat import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.validators.ValidatingEditTextPreference -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType @@ -67,7 +67,7 @@ import kotlin.math.abs aapsLogger: AAPSLogger, rh: ResourceHelper, commandQueue: CommandQueue, - private val constraintChecker: Constraints, + private val constraintChecker: ConstraintsChecker, private val aapsSchedulers: AapsSchedulers, private val rxBus: RxBus, private val context: Context, @@ -348,7 +348,7 @@ import kotlin.math.abs override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { aapsLogger.debug(LTag.PUMP, "deliverTreatment: " + detailedBolusInfo.insulin + "U") if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false) - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(Constraint(detailedBolusInfo.insulin)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() return if (detailedBolusInfo.insulin > 0 && detailedBolusInfo.carbs == 0.0) { aapsLogger.debug(LTag.PUMP, "deliverTreatment: Delivering bolus: " + detailedBolusInfo.insulin + "U") val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) @@ -388,7 +388,7 @@ import kotlin.math.abs aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - absoluteRate: $absoluteRate, durationInMinutes: $durationInMinutes, enforceNew: $enforceNew") // round rate to pump rate - val pumpRate = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), profile).value() + val pumpRate = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() temporaryBasalStorage.add(PumpSync.PumpState.TemporaryBasal(dateUtil.now(), T.mins(durationInMinutes.toLong()).msecs(), pumpRate, true, tbrType, 0L, 0L)) val connectionOK = medtrumService?.setTempBasal(pumpRate, durationInMinutes) ?: false return if (connectionOK diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt index a94d4dde69..b5165b47c4 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt @@ -9,7 +9,7 @@ import android.os.SystemClock import dagger.android.DaggerService import dagger.android.HasAndroidInjector import info.nightscout.core.utils.fabric.FabricPrivacy -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Profile @@ -86,7 +86,7 @@ class MedtrumService : DaggerService(), BLECommCallback { @Inject lateinit var medtrumPlugin: MedtrumPlugin @Inject lateinit var medtrumPump: MedtrumPump @Inject lateinit var activePlugin: ActivePlugin - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var uiInteraction: UiInteraction @Inject lateinit var bleComm: BLEComm @Inject lateinit var fabricPrivacy: FabricPrivacy @@ -432,7 +432,7 @@ class MedtrumService : DaggerService(), BLECommCallback { connectionRetryCounter++ } else { communicationLost = true - aapsLogger.warn(LTag.PUMPCOMM, "Retry connection faled, communication stopped") + aapsLogger.warn(LTag.PUMPCOMM, "Retry connection failed, communication stopped") disconnect("Communication stopped") } } else { diff --git a/pump/omnipod-dash/build.gradle b/pump/omnipod-dash/build.gradle index 2021a42fa5..7057f8a12c 100644 --- a/pump/omnipod-dash/build.gradle +++ b/pump/omnipod-dash/build.gradle @@ -41,6 +41,7 @@ dependencies { api "androidx.room:room-rxjava3:$room_version" kapt "androidx.room:room-compiler:$room_version" + androidTestImplementation project(':app-wear-shared:shared-tests') testImplementation project(':app-wear-shared:shared-tests') testImplementation "commons-codec:commons-codec:$commonscodec_version" 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 1dfda4ffc1..8c9ea1cd8f 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 @@ -10,7 +10,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.database.His import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.mapper.HistoryMapper import info.nightscout.sharedtests.AAPSLoggerTest import org.junit.Before -import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test import org.junit.runner.RunWith diff --git a/pump/omnipod-eros/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/history/ErosHistoryTest.kt b/pump/omnipod-eros/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/history/ErosHistoryTest.kt index c585f2552e..d8c0da7cae 100644 --- a/pump/omnipod-eros/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/history/ErosHistoryTest.kt +++ b/pump/omnipod-eros/src/androidTest/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/history/ErosHistoryTest.kt @@ -10,6 +10,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.database.Ero import org.junit.Assert.assertNotNull import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test class ErosHistoryTest { 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 9b7bd7e5a3..a4dae6e21f 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 @@ -14,10 +14,9 @@ import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.pump.common.defs.TempBasalPair -import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.sharedtests.TestBase +import info.nightscout.sharedtests.rx.TestAapsSchedulers import org.joda.time.DateTimeZone import org.joda.time.tz.UTCProvider import org.junit.jupiter.api.Assertions @@ -41,7 +40,6 @@ class OmnipodErosPumpPluginTest : TestBase() { @Mock lateinit var erosHistoryDatabase: ErosHistoryDatabase private lateinit var decimalFormatter: DecimalFormatter - private var rxBusWrapper = RxBus(TestAapsSchedulers(), aapsLogger) @BeforeEach fun prepare() { `when`(rh.gs(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong())) @@ -54,7 +52,7 @@ class OmnipodErosPumpPluginTest : TestBase() { // mock all the things val plugin = OmnipodErosPumpPlugin( - injector, aapsLogger, TestAapsSchedulers(), rxBusWrapper, null, + injector, aapsLogger, TestAapsSchedulers(), rxBus, null, rh, null, null, aapsOmnipodErosManager, commandQueue, null, null, null, null, rileyLinkUtil, null, null, pumpSync, uiInteraction, erosHistoryDatabase, decimalFormatter 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 9d63fafec5..f798368d1c 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 @@ -2,10 +2,8 @@ package info.nightscout.androidaps.plugins.pump.omnipod.eros.manager 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.shared.impl.rx.bus.RxBusImpl import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase -import info.nightscout.sharedtests.rx.TestAapsSchedulers import org.joda.time.DateTime import org.joda.time.DateTimeUtils import org.joda.time.DateTimeZone @@ -19,8 +17,6 @@ class AapsErosPodStateManagerTest : TestBase() { @Mock lateinit var sp: SP - private val rxBus = RxBusImpl(TestAapsSchedulers(), aapsLogger) - @Test fun times() { val timeZone = DateTimeZone.UTC DateTimeZone.setDefault(timeZone) diff --git a/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt b/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt index 3c5517200a..fbf9738856 100644 --- a/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt +++ b/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt @@ -8,7 +8,7 @@ import com.google.gson.Gson import com.google.gson.GsonBuilder import dagger.android.HasAndroidInjector import info.nightscout.core.utils.fabric.FabricPrivacy -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.profile.Profile @@ -63,7 +63,7 @@ abstract class PumpPluginAbstract protected constructor( var pumpSync: PumpSync, var pumpSyncStorage: PumpSyncStorage, var decimalFormatter: DecimalFormatter -) : PumpPluginBase(pluginDescription, injector, aapsLogger, rh, commandQueue), Pump, Constraints, PumpSyncEntriesCreator { +) : PumpPluginBase(pluginDescription, injector, aapsLogger, rh, commandQueue), Pump, PluginConstraints, PumpSyncEntriesCreator { protected val disposable = CompositeDisposable() diff --git a/pump/virtual/src/test/java/info/nightscout/pump/virtual/VirtualPumpPluginUTest.kt b/pump/virtual/src/test/java/info/nightscout/pump/virtual/VirtualPumpPluginUTest.kt index e9c2922e52..87722bf9b4 100644 --- a/pump/virtual/src/test/java/info/nightscout/pump/virtual/VirtualPumpPluginUTest.kt +++ b/pump/virtual/src/test/java/info/nightscout/pump/virtual/VirtualPumpPluginUTest.kt @@ -9,7 +9,6 @@ import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.interfaces.queue.CommandQueue -import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil @@ -22,7 +21,6 @@ import org.mockito.Mockito.`when` class VirtualPumpPluginUTest : TestBase() { - private val rxBus = RxBus(aapsSchedulers, aapsLogger) @Mock lateinit var fabricPrivacy: FabricPrivacy @Mock lateinit var rh: ResourceHelper @Mock lateinit var sp: SP diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt index 927733e1e7..8095e08415 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt @@ -8,6 +8,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.common.base.Joiner +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.HtmlHelper @@ -23,8 +25,7 @@ import info.nightscout.interfaces.Constants.CARBS_FAV2_DEFAULT import info.nightscout.interfaces.Constants.CARBS_FAV3_DEFAULT import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.automation.Automation -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger @@ -54,7 +55,7 @@ class CarbsDialog : DialogFragmentWithDate() { @Inject lateinit var ctx: Context @Inject lateinit var rh: ResourceHelper - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var defaultValueHelper: DefaultValueHelper @Inject lateinit var profileUtil: ProfileUtil @Inject lateinit var iobCobCalculator: IobCobCalculator @@ -66,6 +67,7 @@ class CarbsDialog : DialogFragmentWithDate() { @Inject lateinit var protectionCheck: ProtectionCheck @Inject lateinit var uiInteraction: UiInteraction @Inject lateinit var decimalFormatter: DecimalFormatter + @Inject lateinit var injector: HasAndroidInjector private var queryingProtection = false private val disposable = CompositeDisposable() @@ -225,7 +227,7 @@ class CarbsDialog : DialogFragmentWithDate() { override fun submit(): Boolean { if (_binding == null) return false val carbs = binding.carbs.value.toInt() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(carbs)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, injector)).value() val units = profileUtil.units val activityTTDuration = defaultValueHelper.determineActivityTTDuration() val activityTT = defaultValueHelper.determineActivityTT() diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt index 10f02b2f0f..49ecf11135 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt @@ -6,14 +6,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.common.base.Joiner +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.protection.ProtectionCheck @@ -34,12 +35,13 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { @Inject lateinit var ctx: Context @Inject lateinit var rh: ResourceHelper - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var commandQueue: CommandQueue @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var uel: UserEntryLogger @Inject lateinit var protectionCheck: ProtectionCheck @Inject lateinit var uiInteraction: UiInteraction + @Inject lateinit var injector: HasAndroidInjector private var queryingProtection = false private var _binding: DialogExtendedbolusBinding? = null @@ -94,7 +96,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { val insulin = SafeParse.stringToDouble(binding.insulin.text) val durationInMinutes = binding.duration.value.toInt() val actions: LinkedList = LinkedList() - val insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(Constraint(insulin)).value() + val insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() actions.add(rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, insulinAfterConstraint)) actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_mins, durationInMinutes)) if (abs(insulinAfterConstraint - insulin) > 0.01) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt index 2b1084f47b..7f149d45d6 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt @@ -6,6 +6,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.common.base.Joiner +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.HtmlHelper @@ -15,8 +17,7 @@ import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.transactions.InsertIfNewByTimestampTherapyEventTransaction -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.protection.ProtectionCheck @@ -38,7 +39,7 @@ import kotlin.math.abs class FillDialog : DialogFragmentWithDate() { - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var rh: ResourceHelper @Inject lateinit var ctx: Context @Inject lateinit var commandQueue: CommandQueue @@ -48,6 +49,7 @@ class FillDialog : DialogFragmentWithDate() { @Inject lateinit var protectionCheck: ProtectionCheck @Inject lateinit var uiInteraction: UiInteraction @Inject lateinit var decimalFormatter: DecimalFormatter + @Inject lateinit var injector: HasAndroidInjector private var queryingProtection = false private val disposable = CompositeDisposable() @@ -116,7 +118,7 @@ class FillDialog : DialogFragmentWithDate() { val insulin = SafeParse.stringToDouble(binding.fillInsulinAmount.text) val actions: LinkedList = LinkedList() - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(insulin)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, injector)).value() if (insulinAfterConstraints > 0) { actions.add(rh.gs(R.string.fill_warning)) actions.add("") diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt index c741980f7c..9602f779c1 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt @@ -8,6 +8,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.common.base.Joiner +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.HtmlHelper @@ -23,8 +25,7 @@ import info.nightscout.interfaces.Constants.INSULIN_PLUS2_DEFAULT import info.nightscout.interfaces.Constants.INSULIN_PLUS3_DEFAULT import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.automation.Automation -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin @@ -56,7 +57,7 @@ import kotlin.math.max class InsulinDialog : DialogFragmentWithDate() { - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var rh: ResourceHelper @Inject lateinit var defaultValueHelper: DefaultValueHelper @Inject lateinit var profileFunction: ProfileFunction @@ -72,6 +73,7 @@ class InsulinDialog : DialogFragmentWithDate() { @Inject lateinit var uiInteraction: UiInteraction @Inject lateinit var persistenceLayer: PersistenceLayer @Inject lateinit var decimalFormatter: DecimalFormatter + @Inject lateinit var injector: HasAndroidInjector private var queryingProtection = false private val disposable = CompositeDisposable() @@ -189,7 +191,7 @@ class InsulinDialog : DialogFragmentWithDate() { if (_binding == null) return false val pumpDescription = activePlugin.activePump.pumpDescription val insulin = SafeParse.stringToDouble(binding.amount.text) - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(insulin)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, injector)).value() val actions: LinkedList = LinkedList() val units = profileFunction.getUnits() val unitLabel = if (units == GlucoseUnit.MMOL) rh.gs(info.nightscout.core.ui.R.string.mmol) else rh.gs(info.nightscout.core.ui.R.string.mgdl) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt index e668f6bee8..eb9ed9bbee 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt @@ -10,7 +10,9 @@ import android.view.ViewGroup import android.view.Window import android.view.WindowManager import androidx.fragment.app.FragmentManager +import dagger.android.HasAndroidInjector import dagger.android.support.DaggerDialogFragment +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.fabric.FabricPrivacy @@ -20,11 +22,10 @@ import info.nightscout.database.entities.ValueWithUnit import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.transactions.CancelCurrentOfflineEventIfAnyTransaction import info.nightscout.database.impl.transactions.InsertAndCancelCurrentOfflineEventTransaction -import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.ApsMode +import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.aps.Loop -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.constraints.Objectives import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin @@ -64,7 +65,7 @@ class LoopDialog : DaggerDialogFragment() { @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var loop: Loop @Inject lateinit var activePlugin: ActivePlugin - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var commandQueue: CommandQueue @Inject lateinit var configBuilder: ConfigBuilder @Inject lateinit var uel: UserEntryLogger @@ -72,6 +73,7 @@ class LoopDialog : DaggerDialogFragment() { @Inject lateinit var repository: AppRepository @Inject lateinit var protectionCheck: ProtectionCheck @Inject lateinit var uiInteraction: UiInteraction + @Inject lateinit var injector: HasAndroidInjector private var queryingProtection = false private var showOkCancel: Boolean = true @@ -152,16 +154,14 @@ class LoopDialog : DaggerDialogFragment() { disposable.clear() } - var task: Runnable? = null - @Synchronized fun updateGUI(from: String) { if (_binding == null) return aapsLogger.debug("UpdateGUI from $from") val pumpDescription: PumpDescription = activePlugin.activePump.pumpDescription - val closedLoopAllowed = constraintChecker.isClosedLoopAllowed(Constraint(true)) + val closedLoopAllowed = constraintChecker.isClosedLoopAllowed(ConstraintObject(true, injector)) val closedLoopAllowed2 = activePlugin.activeObjectives?.isAccomplished(Objectives.MAXIOB_OBJECTIVE) ?: false - val lgsEnabled = constraintChecker.isLgsAllowed(Constraint(true)) + val lgsEnabled = constraintChecker.isLgsAllowed(ConstraintObject(true, injector)) val apsMode = ApsMode.fromString(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)) val pump = activePlugin.activePump @@ -279,7 +279,7 @@ class LoopDialog : DaggerDialogFragment() { return true } - fun onClick(v: View): Boolean { + private fun onClick(v: View): Boolean { when (v.id) { R.id.overview_closeloop -> { uel.log(UserEntry.Action.CLOSED_LOOP_MODE, UserEntry.Sources.LoopDialog) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt index 730af01f57..4cf3cf85d8 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt @@ -6,14 +6,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.common.base.Joiner +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.HtmlHelper import info.nightscout.core.utils.extensions.formatColor import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction @@ -35,7 +36,7 @@ import kotlin.math.abs class TempBasalDialog : DialogFragmentWithDate() { - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var rh: ResourceHelper @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var activePlugin: ActivePlugin @@ -44,6 +45,7 @@ class TempBasalDialog : DialogFragmentWithDate() { @Inject lateinit var uel: UserEntryLogger @Inject lateinit var protectionCheck: ProtectionCheck @Inject lateinit var uiInteraction: UiInteraction + @Inject lateinit var injector: HasAndroidInjector private var queryingProtection = false private var isPercentPump = true @@ -118,13 +120,13 @@ class TempBasalDialog : DialogFragmentWithDate() { val actions: LinkedList = LinkedList() if (isPercentPump) { val basalPercentInput = SafeParse.stringToInt(binding.basalPercentInput.text) - percent = constraintChecker.applyBasalPercentConstraints(Constraint(basalPercentInput), profile).value() + percent = constraintChecker.applyBasalPercentConstraints(ConstraintObject(basalPercentInput, injector), profile).value() actions.add(rh.gs(info.nightscout.core.ui.R.string.tempbasal_label) + ": $percent%") actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_mins, durationInMinutes)) if (percent != basalPercentInput) actions.add(rh.gs(info.nightscout.core.ui.R.string.constraint_applied)) } else { val basalAbsoluteInput = SafeParse.stringToDouble(binding.basalAbsoluteInput.text) - absolute = constraintChecker.applyBasalConstraints(Constraint(basalAbsoluteInput), profile).value() + absolute = constraintChecker.applyBasalConstraints(ConstraintObject(basalAbsoluteInput, injector), profile).value() actions.add(rh.gs(info.nightscout.core.ui.R.string.tempbasal_label) + ": " + rh.gs(info.nightscout.core.ui.R.string.pump_base_basal_rate, absolute)) actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_mins, durationInMinutes)) if (abs(absolute - basalAbsoluteInput) > 0.01) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt index 7e08d66765..8fe66ed052 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TempTargetDialog.kt @@ -20,7 +20,7 @@ import info.nightscout.database.impl.transactions.CancelCurrentTemporaryTargetIf import info.nightscout.database.impl.transactions.InsertAndCancelCurrentTemporaryTargetTransaction import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.profile.DefaultValueHelper import info.nightscout.interfaces.profile.ProfileFunction @@ -39,7 +39,7 @@ import javax.inject.Inject class TempTargetDialog : DialogFragmentWithDate() { - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var rh: ResourceHelper @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var profileUtil: ProfileUtil diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt index 25e2905bf4..02099655ce 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt @@ -8,6 +8,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.common.base.Joiner +import dagger.android.HasAndroidInjector +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.HtmlHelper @@ -16,8 +18,7 @@ import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.ValueWithUnit import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin @@ -32,7 +33,6 @@ import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.ui.R import info.nightscout.ui.databinding.DialogTreatmentBinding -import io.reactivex.rxjava3.disposables.CompositeDisposable import java.text.DecimalFormat import java.util.LinkedList import javax.inject.Inject @@ -40,7 +40,7 @@ import kotlin.math.abs class TreatmentDialog : DialogFragmentWithDate() { - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var rh: ResourceHelper @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var commandQueue: CommandQueue @@ -52,9 +52,9 @@ class TreatmentDialog : DialogFragmentWithDate() { @Inject lateinit var uiInteraction: UiInteraction @Inject lateinit var persistenceLayer: PersistenceLayer @Inject lateinit var decimalFormatter: DecimalFormatter + @Inject lateinit var injector: HasAndroidInjector private var queryingProtection = false - private val disposable = CompositeDisposable() private var _binding: DialogTreatmentBinding? = null // This property is only valid between onCreateView and onDestroyView. @@ -138,8 +138,8 @@ class TreatmentDialog : DialogFragmentWithDate() { val carbs = SafeParse.stringToInt(binding.carbs.text) val recordOnlyChecked = binding.recordOnly.isChecked val actions: LinkedList = LinkedList() - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(insulin)).value() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(carbs)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, injector)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, injector)).value() if (insulinAfterConstraints > 0) { actions.add( diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt index 690e6080a1..3b8dd042bf 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt @@ -18,6 +18,7 @@ import android.widget.CompoundButton import androidx.fragment.app.FragmentManager import dagger.android.HasAndroidInjector import dagger.android.support.DaggerDialogFragment +import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.extensions.valueToUnits import info.nightscout.core.iob.round import info.nightscout.core.profile.ProfileSealed @@ -30,8 +31,7 @@ import info.nightscout.database.ValueWrapper import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit -import info.nightscout.interfaces.constraints.Constraint -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Profile @@ -65,7 +65,7 @@ class WizardDialog : DaggerDialogFragment() { @Inject lateinit var injector: HasAndroidInjector @Inject lateinit var aapsLogger: AAPSLogger @Inject lateinit var aapsSchedulers: AapsSchedulers - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var ctx: Context @Inject lateinit var sp: SP @Inject lateinit var rxBus: RxBus @@ -444,7 +444,7 @@ class WizardDialog : DaggerDialogFragment() { SafeParse.stringToDouble(binding.correctionInput.text) } else sp.getInt(info.nightscout.core.utils.R.string.key_boluswizard_percentage, 100).toDouble() - val carbsAfterConstraint = constraintChecker.applyCarbsConstraints(Constraint(carbs)).value() + val carbsAfterConstraint = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, injector)).value() if (abs(carbs - carbsAfterConstraint) > 0.01) { binding.carbsInput.value = 0.0 ToastUtils.warnToast(ctx, R.string.carbs_constraint_applied) diff --git a/ui/src/main/java/info/nightscout/ui/widget/Widget.kt b/ui/src/main/java/info/nightscout/ui/widget/Widget.kt index beaadb4a0a..972fe0c565 100644 --- a/ui/src/main/java/info/nightscout/ui/widget/Widget.kt +++ b/ui/src/main/java/info/nightscout/ui/widget/Widget.kt @@ -22,7 +22,7 @@ import info.nightscout.interfaces.Config import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.aps.VariableSensitivityResult -import info.nightscout.interfaces.constraints.Constraints +import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.plugin.ActivePlugin @@ -62,10 +62,11 @@ class Widget : AppWidgetProvider() { @Inject lateinit var loop: Loop @Inject lateinit var config: Config @Inject lateinit var sp: SP - @Inject lateinit var constraintChecker: Constraints + @Inject lateinit var constraintChecker: ConstraintsChecker @Inject lateinit var decimalFormatter: DecimalFormatter companion object { + // This object doesn't behave like singleton, // many threads were created. Making handler static resolve this issue private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) @@ -78,6 +79,7 @@ class Widget : AppWidgetProvider() { }) } } + private val intentAction = "OpenApp" override fun onReceive(context: Context, intent: Intent?) { @@ -133,9 +135,9 @@ class Widget : AppWidgetProvider() { overviewData.lastBg(iobCobCalculator.ads)?.let { profileUtil.fromMgdlToStringInUnits(it.value) } ?: rh.gs(info.nightscout.core.ui.R.string.value_unavailable_short)) views.setTextColor( R.id.bg, when { - overviewData.isLow(iobCobCalculator.ads) -> rh.gc(info.nightscout.core.ui.R.color.widget_low) + overviewData.isLow(iobCobCalculator.ads) -> rh.gc(info.nightscout.core.ui.R.color.widget_low) overviewData.isHigh(iobCobCalculator.ads) -> rh.gc(info.nightscout.core.ui.R.color.widget_high) - else -> rh.gc(info.nightscout.core.ui.R.color.widget_inrange) + else -> rh.gc(info.nightscout.core.ui.R.color.widget_inrange) } ) trendCalculator.getTrendArrow(iobCobCalculator.ads)?.let { From 1ff6aa7bbf5abae17df4355cef2e8e403f5477db Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 19 Sep 2023 14:36:36 +0200 Subject: [PATCH 41/65] cleanup --- app/src/main/java/info/nightscout/androidaps/MainActivity.kt | 3 +-- .../src/main/java/info/nightscout/interfaces/iob/CobInfo.kt | 2 +- .../interfaces/notifications/NotificationUserMessage.kt | 2 +- .../nightscout/interfaces/smsCommunicator/SmsCommunicator.kt | 1 + .../src/main/java/info/nightscout/core/wizard/BolusWizard.kt | 3 +-- .../main/java/info/nightscout/core/wizard/QuickWizardEntry.kt | 3 +-- .../implementation/queue/commands/CommandSetProfile.kt | 3 +-- .../info/nightscout/automation/actions/ActionLoopDisable.kt | 2 +- .../info/nightscout/automation/actions/ActionLoopEnable.kt | 2 +- .../info/nightscout/configuration/AndroidPermissionImpl.kt | 3 +-- .../activities/DaggerAppCompatActivityWithResult.kt | 1 - .../activities}/OptimizationPermissionContract.kt | 2 +- .../plugins/general/wear/wearintegration/DataHandlerMobile.kt | 4 ++-- ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt | 2 +- 14 files changed, 14 insertions(+), 19 deletions(-) rename {core/interfaces/src/main/java/info/nightscout/interfaces/permissions => plugins/configuration/src/main/java/info/nightscout/configuration/activities}/OptimizationPermissionContract.kt (92%) diff --git a/app/src/main/java/info/nightscout/androidaps/MainActivity.kt b/app/src/main/java/info/nightscout/androidaps/MainActivity.kt index ffc876d687..468547aa58 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/MainActivity.kt @@ -56,7 +56,6 @@ import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.plugin.ActivePlugin -import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.protection.ProtectionCheck import info.nightscout.interfaces.smsCommunicator.SmsCommunicator @@ -283,7 +282,7 @@ class MainActivity : DaggerAppCompatActivityWithResult() { private fun start() { binding.splash.visibility = View.GONE //Check here if loop plugin is disabled. Else check via constraints - if (!(loop as PluginBase).isEnabled()) versionCheckerUtils.triggerCheckVersion() + if (!loop.isEnabled()) versionCheckerUtils.triggerCheckVersion() setUserStats() setupViews() diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/iob/CobInfo.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/iob/CobInfo.kt index 35c70f8d5f..4a52fefcec 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/iob/CobInfo.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/iob/CobInfo.kt @@ -1,4 +1,4 @@ package info.nightscout.interfaces.iob /** All COB up to now, including carbs not yet processed by IobCob calculation. */ -class CobInfo(val timestamp: Long, val displayCob: Double?, val futureCarbs: Double) \ No newline at end of file +data class CobInfo(val timestamp: Long, val displayCob: Double?, val futureCarbs: Double) \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/NotificationUserMessage.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/NotificationUserMessage.kt index be39876b5a..3eb2d74945 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/NotificationUserMessage.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/NotificationUserMessage.kt @@ -1,6 +1,6 @@ package info.nightscout.interfaces.notifications -class NotificationUserMessage (text :String): Notification() { +class NotificationUserMessage(text: String) : Notification() { init { var hash = text.hashCode() diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/smsCommunicator/SmsCommunicator.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/smsCommunicator/SmsCommunicator.kt index a699169598..ae5484cf6d 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/smsCommunicator/SmsCommunicator.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/smsCommunicator/SmsCommunicator.kt @@ -5,4 +5,5 @@ interface SmsCommunicator { var messages: ArrayList fun sendNotificationToAllNumbers(text: String): Boolean fun sendSMS(sms: Sms): Boolean + fun isEnabled(): Boolean } \ No newline at end of file diff --git a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt index f623f9681e..4bba468c45 100644 --- a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt +++ b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt @@ -27,7 +27,6 @@ import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin -import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.pump.DetailedBolusInfo @@ -455,7 +454,7 @@ class BolusWizard @Inject constructor( if (insulinAfterConstraints > 0 || carbs > 0) { if (useSuperBolus) { uel.log(Action.SUPERBOLUS_TBR, Sources.WizardDialog) - if ((loop as PluginBase).isEnabled()) { + if (loop.isEnabled()) { loop.goToZeroTemp(2 * 60, profile, OfflineEvent.Reason.SUPER_BOLUS) rxBus.send(EventRefreshOverview("WizardDialog")) } diff --git a/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt b/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt index eeb936de5d..ff0d7ff78f 100644 --- a/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt +++ b/core/main/src/main/java/info/nightscout/core/wizard/QuickWizardEntry.kt @@ -13,7 +13,6 @@ import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.iob.GlucoseStatusProvider import info.nightscout.interfaces.iob.InMemoryGlucoseValue import info.nightscout.interfaces.iob.IobCobCalculator -import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.rx.logging.AAPSLogger @@ -141,7 +140,7 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec if (useSuperBolus() == YES && sp.getBoolean(info.nightscout.core.utils.R.string.key_usesuperbolus, false)) { superBolus = true } - if ((loop as PluginBase).isEnabled() && loop.isSuperBolus) superBolus = false + if (loop.isEnabled() && loop.isSuperBolus) superBolus = false // Trend val glucoseStatus = glucoseStatusProvider.glucoseStatusData var trend = false 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 1167b0a127..eae3887c20 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 @@ -5,7 +5,6 @@ import info.nightscout.database.ValueWrapper import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config import info.nightscout.interfaces.plugin.ActivePlugin -import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.interfaces.queue.Callback @@ -42,7 +41,7 @@ class CommandSetProfile constructor( // Send SMS notification if ProfileSwitch is coming from NS val profileSwitch = repository.getEffectiveProfileSwitchActiveAt(dateUtil.now()).blockingGet() if (profileSwitch is ValueWrapper.Existing && r.enacted && hasNsId && !config.NSCLIENT) { - if ((smsCommunicator as PluginBase).isEnabled()) + if (smsCommunicator.isEnabled()) smsCommunicator.sendNotificationToAllNumbers(rh.gs(info.nightscout.core.ui.R.string.profile_set_ok)) } } diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt index d39ff2f888..ee6301043d 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopDisable.kt @@ -30,7 +30,7 @@ class ActionLoopDisable(injector: HasAndroidInjector) : Action(injector) { @DrawableRes override fun icon(): Int = R.drawable.ic_stop_24dp override fun doAction(callback: Callback) { - if ((loopPlugin as PluginBase).isEnabled()) { + if (loopPlugin.isEnabled()) { (loopPlugin as PluginBase).setPluginEnabled(PluginType.LOOP, false) configBuilder.storeSettings("ActionLoopDisable") uel.log(UserEntry.Action.LOOP_DISABLED, Sources.Automation, title) diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt index 5caad06cad..30617bdd49 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionLoopEnable.kt @@ -28,7 +28,7 @@ class ActionLoopEnable(injector: HasAndroidInjector) : Action(injector) { @DrawableRes override fun icon(): Int = R.drawable.ic_play_circle_outline_24dp override fun doAction(callback: Callback) { - if (!(loopPlugin as PluginBase).isEnabled()) { + if (!loopPlugin.isEnabled()) { (loopPlugin as PluginBase).setPluginEnabled(PluginType.LOOP, true) configBuilder.storeSettings("ActionLoopEnable") rxBus.send(EventRefreshOverview("ActionLoopEnable")) diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/AndroidPermissionImpl.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/AndroidPermissionImpl.kt index d6113c01d8..6e2c57c310 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/AndroidPermissionImpl.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/AndroidPermissionImpl.kt @@ -20,7 +20,6 @@ import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.Config import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.plugin.ActivePlugin -import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.smsCommunicator.SmsCommunicator import info.nightscout.shared.interfaces.ResourceHelper import javax.inject.Inject @@ -86,7 +85,7 @@ class AndroidPermissionImpl @Inject constructor( @Synchronized override fun notifyForSMSPermissions(activity: FragmentActivity, smsCommunicator: SmsCommunicator) { - if ((smsCommunicator as PluginBase).isEnabled()) { + if (smsCommunicator.isEnabled()) { if (permissionNotGranted(activity, Manifest.permission.RECEIVE_SMS)) activePlugin.activeOverview.addNotification( id = Notification.PERMISSION_SMS, diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/activities/DaggerAppCompatActivityWithResult.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/activities/DaggerAppCompatActivityWithResult.kt index febf53fe67..f13e61ffe9 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/activities/DaggerAppCompatActivityWithResult.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/activities/DaggerAppCompatActivityWithResult.kt @@ -13,7 +13,6 @@ import info.nightscout.configuration.maintenance.PrefsFileContract import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.locale.LocaleHelper import info.nightscout.interfaces.maintenance.ImportExportPrefs -import info.nightscout.interfaces.permissions.OptimizationPermissionContract import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventThemeSwitch import info.nightscout.rx.logging.AAPSLogger diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/permissions/OptimizationPermissionContract.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/activities/OptimizationPermissionContract.kt similarity index 92% rename from core/interfaces/src/main/java/info/nightscout/interfaces/permissions/OptimizationPermissionContract.kt rename to plugins/configuration/src/main/java/info/nightscout/configuration/activities/OptimizationPermissionContract.kt index c28d65c84f..b68ebc579d 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/permissions/OptimizationPermissionContract.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/activities/OptimizationPermissionContract.kt @@ -1,4 +1,4 @@ -package info.nightscout.interfaces.permissions +package info.nightscout.configuration.activities import android.content.Context import android.content.Intent diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt index 55b368a20f..953b7c3f42 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt @@ -1038,7 +1038,7 @@ class DataHandlerMobile @Inject constructor( get() { var ret = "" // decide if enabled/disabled closed/open; what Plugin as APS? - if ((loop as PluginBase).isEnabled()) { + if (loop.isEnabled()) { ret += if (constraintChecker.isClosedLoopAllowed().value()) { rh.gs(R.string.loop_status_closed) + "\n" } else { @@ -1137,7 +1137,7 @@ class DataHandlerMobile @Inject constructor( private fun generateStatusString(profile: Profile?): String { var status = "" profile ?: return rh.gs(info.nightscout.core.ui.R.string.noprofile) - if (!(loop as PluginBase).isEnabled()) status += rh.gs(R.string.disabled_loop) + "\n" + if (!loop.isEnabled()) status += rh.gs(R.string.disabled_loop) + "\n" return status } diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt index eb9ed9bbee..00577a4b11 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt @@ -189,7 +189,7 @@ class LoopDialog : DaggerDialogFragment() { binding.overviewReconnect.visibility = View.VISIBLE } - !(loop as PluginBase).isEnabled() -> { + !loop.isEnabled() -> { binding.overviewLoop.visibility = View.VISIBLE binding.overviewEnable.visibility = View.VISIBLE binding.overviewDisable.visibility = View.GONE From 5f92f29f414feaa2428cc874877cbff1f57eacba Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 19 Sep 2023 14:45:27 +0200 Subject: [PATCH 42/65] fix tests --- .../plugins/aps/loop/APSResultTest.kt | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt index 3f926606f6..43e34c3038 100644 --- a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt +++ b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt @@ -6,8 +6,10 @@ import info.nightscout.core.constraints.ConstraintObject import info.nightscout.core.utils.JsonHelper.safeGetDouble import info.nightscout.database.entities.TemporaryBasal import info.nightscout.interfaces.aps.APSResult +import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.pump.defs.PumpType +import info.nightscout.plugins.aps.APSResultObject import info.nightscout.sharedtests.TestBaseWithProfile import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -20,9 +22,15 @@ class APSResultTest : TestBaseWithProfile() { @Mock lateinit var constraintsChecker: ConstraintsChecker - private val injector = HasAndroidInjector { AndroidInjector { } } + private val injector = HasAndroidInjector { + AndroidInjector { + if (it is ConstraintObject<*>) { + it.aapsLogger = aapsLogger + } + } + } - private var closedLoopEnabled = ConstraintObject(false, injector) + private lateinit var closedLoopEnabled: Constraint private fun APSResult.percent(percent: Int): APSResult { this.percent = percent @@ -52,7 +60,7 @@ class APSResultTest : TestBaseWithProfile() { @Test fun changeRequestedTest() { - val apsResult = info.nightscout.plugins.aps.APSResultObject { AndroidInjector { } } + val apsResult = APSResultObject { AndroidInjector { } } .also { it.aapsLogger = aapsLogger it.constraintChecker = constraintsChecker @@ -293,7 +301,7 @@ class APSResultTest : TestBaseWithProfile() { } @Test fun cloneTest() { - val apsResult = info.nightscout.plugins.aps.APSResultObject { AndroidInjector { } } + val apsResult = APSResultObject(injector) .also { it.aapsLogger = aapsLogger it.constraintChecker = constraintsChecker @@ -310,7 +318,7 @@ class APSResultTest : TestBaseWithProfile() { @Test fun jsonTest() { closedLoopEnabled.set(true) - val apsResult = info.nightscout.plugins.aps.APSResultObject { AndroidInjector { } } + val apsResult = APSResultObject(injector) .also { it.aapsLogger = aapsLogger it.constraintChecker = constraintsChecker @@ -328,7 +336,8 @@ class APSResultTest : TestBaseWithProfile() { @BeforeEach fun prepare() { - `when`(constraintsChecker.isClosedLoopAllowed(anyObject())).thenReturn(closedLoopEnabled) + closedLoopEnabled = ConstraintObject(false, injector) + `when`(constraintsChecker.isClosedLoopAllowed()).thenReturn(closedLoopEnabled) `when`(sp.getDouble(ArgumentMatchers.anyInt(), ArgumentMatchers.anyDouble())).thenReturn(30.0) `when`(profileFunction.getProfile()).thenReturn(validProfile) } From 77922ca76ed5bf8e944f5d76ea940c9901c0f4ac Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 19 Sep 2023 14:57:11 +0200 Subject: [PATCH 43/65] New Crowdin updates (#2795) * New translations strings.xml (Lithuanian) * New translations strings.xml (Lithuanian) * New translations strings.xml (Polish) * New translations strings.xml (Polish) * New translations strings.xml (Lithuanian) * New translations strings.xml (Polish) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations objectives.xml (Korean) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * Update source file strings.xml * Update source file strings.xml * Update source file strings.xml * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Ukrainian) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Czech) * New translations strings.xml (Czech) * New translations strings.xml (Portuguese) * New translations strings.xml (Danish) * New translations strings.xml (Spanish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Spanish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Spanish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations protection.xml (Danish) * New translations strings.xml (Danish) * New translations exam.xml (Danish) * New translations objectives.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Spanish) * New translations oh_strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Portuguese) * New translations strings.xml (Danish) * New translations strings.xml (Portuguese) * New translations strings.xml (Danish) * New translations strings_alarm.xml (Danish) * New translations strings.xml (Danish) * New translations arrays.xml (Danish) * New translations strings.xml (Polish) * New translations strings.xml (Polish) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) --- .../src/main/res/values-da-rDK/strings.xml | 2 + .../src/main/res/values-lt-rLT/strings.xml | 2 + .../src/main/res/values-pl-rPL/strings.xml | 2 + .../src/main/res/values-af-rZA/strings.xml | 1 - .../src/main/res/values-bg-rBG/strings.xml | 11 -- .../src/main/res/values-ca-rES/strings.xml | 11 -- .../src/main/res/values-cs-rCZ/strings.xml | 11 -- .../src/main/res/values-da-rDK/strings.xml | 11 -- .../src/main/res/values-de-rDE/strings.xml | 11 -- .../src/main/res/values-el-rGR/strings.xml | 11 -- .../src/main/res/values-es-rES/strings.xml | 11 -- .../src/main/res/values-fr-rFR/strings.xml | 11 -- .../src/main/res/values-hr-rHR/strings.xml | 1 - .../src/main/res/values-hu-rHU/strings.xml | 5 - .../src/main/res/values-it-rIT/strings.xml | 11 -- .../src/main/res/values-iw-rIL/strings.xml | 11 -- .../src/main/res/values-ko-rKR/strings.xml | 11 -- .../src/main/res/values-lt-rLT/strings.xml | 11 -- .../src/main/res/values-nl-rNL/strings.xml | 11 -- .../src/main/res/values-no-rNO/strings.xml | 11 -- .../src/main/res/values-pl-rPL/strings.xml | 11 -- .../src/main/res/values-pt-rBR/strings.xml | 11 -- .../src/main/res/values-pt-rPT/strings.xml | 11 -- .../src/main/res/values-ro-rRO/strings.xml | 11 -- .../src/main/res/values-ru-rRU/strings.xml | 11 -- .../src/main/res/values-sk-rSK/strings.xml | 11 -- .../src/main/res/values-sr-rCS/strings.xml | 1 - .../src/main/res/values-sv-rSE/strings.xml | 11 -- .../src/main/res/values-tr-rTR/strings.xml | 11 -- .../src/main/res/values-uk-rUA/strings.xml | 1 - .../src/main/res/values-zh-rCN/strings.xml | 11 -- .../src/main/res/values-da-rDK/protection.xml | 9 ++ .../ui/src/main/res/values-da-rDK/strings.xml | 45 +++++++ .../ui/src/main/res/values-es-rES/strings.xml | 16 +++ .../ui/src/main/res/values-lt-rLT/strings.xml | 16 +++ .../ui/src/main/res/values-pl-rPL/strings.xml | 16 +++ .../ui/src/main/res/values-pt-rPT/strings.xml | 2 + .../ui/src/main/res/values-sk-rSK/strings.xml | 16 +++ .../src/main/res/values-da-rDK/strings.xml | 1 + .../src/main/res/values-da-rDK/strings.xml | 12 ++ .../src/main/res/values-da-rDK/strings.xml | 4 + .../src/main/res/values-af-rZA/strings.xml | 1 + .../src/main/res/values-bg-rBG/strings.xml | 1 + .../src/main/res/values-ca-rES/strings.xml | 1 + .../src/main/res/values-cs-rCZ/strings.xml | 11 ++ .../src/main/res/values-da-rDK/strings.xml | 22 ++++ .../src/main/res/values-de-rDE/strings.xml | 1 + .../src/main/res/values-el-rGR/strings.xml | 1 + .../src/main/res/values-es-rES/strings.xml | 11 ++ .../src/main/res/values-fr-rFR/strings.xml | 1 + .../src/main/res/values-hr-rHR/strings.xml | 1 + .../src/main/res/values-hu-rHU/strings.xml | 1 + .../src/main/res/values-it-rIT/strings.xml | 1 + .../src/main/res/values-iw-rIL/strings.xml | 1 + .../src/main/res/values-ko-rKR/strings.xml | 1 + .../src/main/res/values-lt-rLT/strings.xml | 1 + .../src/main/res/values-nl-rNL/strings.xml | 1 + .../src/main/res/values-no-rNO/strings.xml | 1 + .../src/main/res/values-pl-rPL/strings.xml | 11 ++ .../src/main/res/values-pt-rBR/strings.xml | 1 + .../src/main/res/values-pt-rPT/strings.xml | 11 ++ .../src/main/res/values-ro-rRO/strings.xml | 1 + .../src/main/res/values-ru-rRU/strings.xml | 1 + .../src/main/res/values-sk-rSK/strings.xml | 11 ++ .../src/main/res/values-sr-rCS/strings.xml | 1 + .../src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values-tr-rTR/strings.xml | 11 ++ .../src/main/res/values-uk-rUA/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 1 + .../src/main/res/values-da-rDK/exam.xml | 59 ++++++++++ .../src/main/res/values-da-rDK/objectives.xml | 38 ++++++ .../src/main/res/values-da-rDK/strings.xml | 22 ++++ .../src/main/res/values-ko-rKR/objectives.xml | 2 +- .../src/main/res/values-da-rDK/strings.xml | 3 + .../src/main/res/values-da-rDK/strings.xml | 53 +++++++++ .../src/main/res/values-da-rDK/strings.xml | 14 +++ .../src/main/res/values-da-rDK/oh_strings.xml | 4 + .../src/main/res/values-da-rDK/strings.xml | 25 ++++ .../src/main/res/values-da-rDK/strings.xml | 110 ++++++++++++++++++ .../src/main/res/values-da-rDK/strings.xml | 64 ++++++++++ .../main/res/values-da-rDK/strings_alarm.xml | 32 ++++- .../src/main/res/values-da-rDK/arrays.xml | 13 ++- .../src/main/res/values-da-rDK/strings.xml | 110 ++++++++++++++++++ .../src/main/res/values-da-rDK/strings.xml | 2 + .../src/main/res/values-da-rDK/strings.xml | 3 + .../src/main/res/values-af-rZA/strings.xml | 1 + .../src/main/res/values-bg-rBG/strings.xml | 1 + .../src/main/res/values-ca-rES/strings.xml | 1 + .../src/main/res/values-cs-rCZ/strings.xml | 9 ++ .../src/main/res/values-da-rDK/strings.xml | 9 ++ .../src/main/res/values-de-rDE/strings.xml | 1 + .../src/main/res/values-el-rGR/strings.xml | 1 + .../src/main/res/values-es-rES/strings.xml | 9 ++ .../src/main/res/values-fr-rFR/strings.xml | 1 + .../src/main/res/values-hr-rHR/strings.xml | 1 + .../src/main/res/values-hu-rHU/strings.xml | 1 + .../src/main/res/values-it-rIT/strings.xml | 1 + .../src/main/res/values-iw-rIL/strings.xml | 1 + .../src/main/res/values-ko-rKR/strings.xml | 1 + .../src/main/res/values-lt-rLT/strings.xml | 1 + .../src/main/res/values-nl-rNL/strings.xml | 1 + .../src/main/res/values-no-rNO/strings.xml | 1 + .../src/main/res/values-pl-rPL/strings.xml | 9 ++ .../src/main/res/values-pt-rBR/strings.xml | 1 + .../src/main/res/values-pt-rPT/strings.xml | 9 ++ .../src/main/res/values-ro-rRO/strings.xml | 1 + .../src/main/res/values-ru-rRU/strings.xml | 1 + .../src/main/res/values-sk-rSK/strings.xml | 1 + .../src/main/res/values-sr-rCS/strings.xml | 1 + .../src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values-tr-rTR/strings.xml | 9 ++ .../src/main/res/values-uk-rUA/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 1 + .../src/main/res/values-da-rDK/strings.xml | 6 + .../src/main/res/values-es-rES/strings.xml | 1 + .../src/main/res/values-lt-rLT/strings.xml | 1 + .../src/main/res/values-pl-rPL/strings.xml | 1 + .../src/main/res/values-sk-rSK/strings.xml | 1 + wear/src/main/res/values-da-rDK/strings.xml | 1 + 119 files changed, 890 insertions(+), 265 deletions(-) diff --git a/app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml b/app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml index f35084621c..c48f52c7d1 100644 --- a/app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-da-rDK/strings.xml @@ -55,6 +55,7 @@ Vis BSI Vis Retningspil Vis alder + Vis ugenummer Standard urskive, du kan klikke på EKSPORTÉR URSKIVE-knappen for at generere en skabelon Standard Urskive Baggrundsbillede @@ -81,6 +82,7 @@ AM eller PM Navn på ugedag Dag (DD) + Ugenummer (uu) Måned navn (kort) Loop status og tid Retningspil diff --git a/app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml b/app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml index 2c287ad28f..70fcce1325 100644 --- a/app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-lt-rLT/strings.xml @@ -55,6 +55,7 @@ Rodyti GĮ Rodyti krypties rodyklę Laikas nuo pask. vertės + Rodyti savaitės numerį Numatytasis ekranas. Paspaudus EKSPORTUOTI, bus sukurtas ruošinys Numatytasis ekranas Fono paveiksliukas @@ -81,6 +82,7 @@ AM ar PM Savaitės diena Diena (d.) + Savaitės numeris Mėnuo (sutrump.) Ciklo būsena Tendencijos rodyklė diff --git a/app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml b/app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml index b3eedc562a..dc43538e87 100644 --- a/app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-pl-rPL/strings.xml @@ -55,6 +55,7 @@ Pokaż BGI Pokaż Strzałkę Trendu Pokaż Aktualność + Pokaż numer tygodnia Domyślna tarcza, możesz kliknąć na EXPORTUJ TARCZĘ aby wygenerować szablon Domyślna Tarcza Obraz w tle @@ -81,6 +82,7 @@ AM lub PM Nazwa dnia tygodnia Dzień (DD) + Numer tygodnia (ww) Nazwa miesiąca (krótka) Status pętli i aktualność Strzałka trendu diff --git a/core/interfaces/src/main/res/values-af-rZA/strings.xml b/core/interfaces/src/main/res/values-af-rZA/strings.xml index 01a2c661d9..7cf1037ec1 100644 --- a/core/interfaces/src/main/res/values-af-rZA/strings.xml +++ b/core/interfaces/src/main/res/values-af-rZA/strings.xml @@ -1,5 +1,4 @@ - diff --git a/core/interfaces/src/main/res/values-bg-rBG/strings.xml b/core/interfaces/src/main/res/values-bg-rBG/strings.xml index ef4540b652..d67e7da2fb 100644 --- a/core/interfaces/src/main/res/values-bg-rBG/strings.xml +++ b/core/interfaces/src/main/res/values-bg-rBG/strings.xml @@ -1,16 +1,5 @@ - - Формат на файла - Създаден на - Версия на AAPS - вариант - Име на пациента - Модел на телефона: - Криптиране - Нов формат - Нов формат (незащитен) - Непознат формат Драйверът на помпата е променен. diff --git a/core/interfaces/src/main/res/values-ca-rES/strings.xml b/core/interfaces/src/main/res/values-ca-rES/strings.xml index 3c1acc89ef..7cf1037ec1 100644 --- a/core/interfaces/src/main/res/values-ca-rES/strings.xml +++ b/core/interfaces/src/main/res/values-ca-rES/strings.xml @@ -1,15 +1,4 @@ - - Format del fitxer - Creat: - Versió d\'AAPS - Variant de compilació - Exportant nom del pacient del dispositiu - Exportant model del dispositiu - Encriptació d\'arxius - Format nou d\'encriptació - Nou format de debug (no encriptat) - Format d\'exportació desconegut diff --git a/core/interfaces/src/main/res/values-cs-rCZ/strings.xml b/core/interfaces/src/main/res/values-cs-rCZ/strings.xml index 807b0646d9..e8b585edd8 100644 --- a/core/interfaces/src/main/res/values-cs-rCZ/strings.xml +++ b/core/interfaces/src/main/res/values-cs-rCZ/strings.xml @@ -1,16 +1,5 @@ - - Formát souboru - Vytvořeno - Verze AAPS - Varianta sestavení - Jméno pacienta použité při exportu - Model zaříení použitý při exportu - Šifrování souboru - Nový zašifrovaný formát - Nový formát pro ladění (nešifrovaný) - Neznámý formát souboru Změněn ovladač pumpy. diff --git a/core/interfaces/src/main/res/values-da-rDK/strings.xml b/core/interfaces/src/main/res/values-da-rDK/strings.xml index 39c10df923..849acfb10a 100644 --- a/core/interfaces/src/main/res/values-da-rDK/strings.xml +++ b/core/interfaces/src/main/res/values-da-rDK/strings.xml @@ -1,16 +1,5 @@ - - Filformat - Oprettet den - AAPS Version - Build Variant - Eksporterer enhedens patientnavn - Eksporterer enhedsmodel - Filkryptering - Nyt krypteret format - Nyt debug format (ukrypteret) - Ukendt eksportformat Pumpe driver ændret. diff --git a/core/interfaces/src/main/res/values-de-rDE/strings.xml b/core/interfaces/src/main/res/values-de-rDE/strings.xml index 18c4c403e0..ef2e06257e 100644 --- a/core/interfaces/src/main/res/values-de-rDE/strings.xml +++ b/core/interfaces/src/main/res/values-de-rDE/strings.xml @@ -1,16 +1,5 @@ - - Dateiformat - Erstellt am - AAPS-Version - Build-Variante - Patientenname des exportierenden Geräts - Modell des exportierenden Geräts - Dateiverschlüsselung - Neues verschlüsseltes Format - Neues Debugformat (unverschlüsselt) - Unbekanntes Export-Format Pumpentreiber geändert. diff --git a/core/interfaces/src/main/res/values-el-rGR/strings.xml b/core/interfaces/src/main/res/values-el-rGR/strings.xml index 4d51273452..f5467546f1 100644 --- a/core/interfaces/src/main/res/values-el-rGR/strings.xml +++ b/core/interfaces/src/main/res/values-el-rGR/strings.xml @@ -1,16 +1,5 @@ - - Μορφή αρχείου - Δημιουργήθηκε στις - Έκδοση AAPS - Δημιουργία Παραλλαγής - Εξαγωγή ονόματος συσκευής ασθενούς - Εξαγωγή μοντέλου συσκευής - Κρυπτογράφηση αρχείων - Νέα κρυπτογραφημένη μορφή - Νέα μορφή εντοπισμού σφαλμάτων (μη κρυπτογραφημένη) - Άγνωστη μορφή εξαγωγής Ο οδηγός της αντλίας άλλαξε. diff --git a/core/interfaces/src/main/res/values-es-rES/strings.xml b/core/interfaces/src/main/res/values-es-rES/strings.xml index 063a6c9005..291b09fa68 100644 --- a/core/interfaces/src/main/res/values-es-rES/strings.xml +++ b/core/interfaces/src/main/res/values-es-rES/strings.xml @@ -1,16 +1,5 @@ - - Formato del archivo - Creado el - Versión de AAPS - Construir Variante - Exportar el nombre del paciente del dispositivo - Exportar modelo de dispositivo - Encriptación de archivos - Nuevo formato cifrado - Nuevo formato de depuración (sin cifrar) - Formato de exportación desconocido Controlador de bomba cambiado diff --git a/core/interfaces/src/main/res/values-fr-rFR/strings.xml b/core/interfaces/src/main/res/values-fr-rFR/strings.xml index 3338dc695a..0b4b8c7d04 100644 --- a/core/interfaces/src/main/res/values-fr-rFR/strings.xml +++ b/core/interfaces/src/main/res/values-fr-rFR/strings.xml @@ -1,16 +1,5 @@ - - Format de fichier - Créé le - Version d\'AAPS - Variante de Build - Export du nom du patient de l\'appareil - Export du modèle de l\'appareil - Cryptage du fichier - Nouveau format crypté - Nouveau format de débug (non crypté) - Format d\'export inconnu Pilote pompe changé. diff --git a/core/interfaces/src/main/res/values-hr-rHR/strings.xml b/core/interfaces/src/main/res/values-hr-rHR/strings.xml index 01a2c661d9..7cf1037ec1 100644 --- a/core/interfaces/src/main/res/values-hr-rHR/strings.xml +++ b/core/interfaces/src/main/res/values-hr-rHR/strings.xml @@ -1,5 +1,4 @@ - diff --git a/core/interfaces/src/main/res/values-hu-rHU/strings.xml b/core/interfaces/src/main/res/values-hu-rHU/strings.xml index 7c21add268..7cf1037ec1 100644 --- a/core/interfaces/src/main/res/values-hu-rHU/strings.xml +++ b/core/interfaces/src/main/res/values-hu-rHU/strings.xml @@ -1,9 +1,4 @@ - - Fájlformátum - Létrehozva - AAPS verzió - Build variant diff --git a/core/interfaces/src/main/res/values-it-rIT/strings.xml b/core/interfaces/src/main/res/values-it-rIT/strings.xml index 592d29f43e..deddc4ce22 100644 --- a/core/interfaces/src/main/res/values-it-rIT/strings.xml +++ b/core/interfaces/src/main/res/values-it-rIT/strings.xml @@ -1,16 +1,5 @@ - - Formato file - Creato: - Versione AAPS - Variante build - Esportazione nome dispositivo paziente - Esportazione modello dispositivo - Crittografia file - Nuovo formato crittografato - Nuovo formato di debug (non crittografato) - Formato esportazione sconosciuto Driver micro cambiato. diff --git a/core/interfaces/src/main/res/values-iw-rIL/strings.xml b/core/interfaces/src/main/res/values-iw-rIL/strings.xml index fbf0d2a365..bb142473df 100644 --- a/core/interfaces/src/main/res/values-iw-rIL/strings.xml +++ b/core/interfaces/src/main/res/values-iw-rIL/strings.xml @@ -1,16 +1,5 @@ - - פורמט הקובץ - נוצר ב- - גרסת AAPS - גרסת בנייה - מייצא את שם מכשיר המטופל\\ת - מייצא את דגם המכשיר - הצפנת קבצים - פורמט הצפנה חדש - פורמט דיבאג חדש (בלתי מוצפן) - פורמט ייצוא לא ידוע מנהל התקן המשאבה שונה. diff --git a/core/interfaces/src/main/res/values-ko-rKR/strings.xml b/core/interfaces/src/main/res/values-ko-rKR/strings.xml index 8a16fa0155..328d8edf38 100644 --- a/core/interfaces/src/main/res/values-ko-rKR/strings.xml +++ b/core/interfaces/src/main/res/values-ko-rKR/strings.xml @@ -1,16 +1,5 @@ - - 파일 형식 - 생성 일자 - AAPS 버전 - 다른 형식 빌드 - 장치의 환자 이름 내보내기 - 장치 모델 내보내기 - 파일 암호화 - 암호화된 새로운 형식 - 오류가 제거된 새로운 형식 (암호화되지 않음) - 알려지지 않은 내보내기 형식 펌프 드라이버가 변경되었습니다. diff --git a/core/interfaces/src/main/res/values-lt-rLT/strings.xml b/core/interfaces/src/main/res/values-lt-rLT/strings.xml index c806d1c9e2..b612dac835 100644 --- a/core/interfaces/src/main/res/values-lt-rLT/strings.xml +++ b/core/interfaces/src/main/res/values-lt-rLT/strings.xml @@ -1,16 +1,5 @@ - - Failo formatas - Sukurta - AAPS versija - Versijos variantas - Eksportuojamas paciento vardas - Eksportuojamas prietaiso modelis - Failo šifravimas - Naujas šifruotas formatas - Naujas derinimo formatas (nešifruotas) - Nežinomas eksporto formatas Pompos valdik. pakeistas. diff --git a/core/interfaces/src/main/res/values-nl-rNL/strings.xml b/core/interfaces/src/main/res/values-nl-rNL/strings.xml index 93f3ace0cc..80e2ff9cff 100644 --- a/core/interfaces/src/main/res/values-nl-rNL/strings.xml +++ b/core/interfaces/src/main/res/values-nl-rNL/strings.xml @@ -1,16 +1,5 @@ - - Bestandsformaat - Gemaakt op - AAPS versie - Build variant - Patiëntnaam van exporterend apparaat - Modelnaam/nr van exporterend apparaat - Bestandsversleuteling - Nieuwe versleutelde indeling - Nieuwe debug indeling (onversleuteld) - Onbekende export indeling Pomp stuurprogramma gewijzigd. diff --git a/core/interfaces/src/main/res/values-no-rNO/strings.xml b/core/interfaces/src/main/res/values-no-rNO/strings.xml index 3b6346e562..26f3dee7a2 100644 --- a/core/interfaces/src/main/res/values-no-rNO/strings.xml +++ b/core/interfaces/src/main/res/values-no-rNO/strings.xml @@ -1,16 +1,5 @@ - - Filformat - Opprettet den - AAPS versjon - Byggvariant - Eksporterer enhetens pasientnavn - Eksportere enhetsmodell - Filkryptering - Nytt krypteringsformat - Nytt feilsøkingsformat (ukryptert) - Ukjent eksportformat Pumpedriver er endret. diff --git a/core/interfaces/src/main/res/values-pl-rPL/strings.xml b/core/interfaces/src/main/res/values-pl-rPL/strings.xml index 40fba81898..a560c753ef 100644 --- a/core/interfaces/src/main/res/values-pl-rPL/strings.xml +++ b/core/interfaces/src/main/res/values-pl-rPL/strings.xml @@ -1,16 +1,5 @@ - - Format pliku - Data utworzenia - Wersja AAPS - Wariant kompilacji - Eksportowanie nazwy urządzenia pacjenta - Eksportowanie modelu urządzenia - Szyfrowanie pliku - Nowy zaszyfrowany format - Nowy format testowy (niezaszyfrowany) - Nieznany format eksportu Zmieniono ster. pompy. diff --git a/core/interfaces/src/main/res/values-pt-rBR/strings.xml b/core/interfaces/src/main/res/values-pt-rBR/strings.xml index 66140eec54..bd8f1972cc 100644 --- a/core/interfaces/src/main/res/values-pt-rBR/strings.xml +++ b/core/interfaces/src/main/res/values-pt-rBR/strings.xml @@ -1,16 +1,5 @@ - - Formato do arquivo - Criado em - Versão AAPS - Variante de Compilação - Exportando nome do paciente do dispositivo - Exportando modelo do dispositivo - Criptografia do arquivo - Novo formato de encriptação - Novo formato de depuração (não encriptado) - Formato de exportação desconhecido Driver da bomba alterado. diff --git a/core/interfaces/src/main/res/values-pt-rPT/strings.xml b/core/interfaces/src/main/res/values-pt-rPT/strings.xml index d4630959c7..4686fb8799 100644 --- a/core/interfaces/src/main/res/values-pt-rPT/strings.xml +++ b/core/interfaces/src/main/res/values-pt-rPT/strings.xml @@ -1,16 +1,5 @@ - - Formato do ficheiro - Criado em - Versão AAPS - Variante de Compilação - A exportar nome do paciente do dispositivo - A exportar modelo do dispositivo - Encriptação do Ficheiro - Novo formato de encriptação - Novo formato de depuração (não encriptado) - Formato de exportação desconhecido Driver da bomba trocado. diff --git a/core/interfaces/src/main/res/values-ro-rRO/strings.xml b/core/interfaces/src/main/res/values-ro-rRO/strings.xml index 3200efb550..b8f0d8ac4b 100644 --- a/core/interfaces/src/main/res/values-ro-rRO/strings.xml +++ b/core/interfaces/src/main/res/values-ro-rRO/strings.xml @@ -1,16 +1,5 @@ - - Format fișier - Creat la - Versiune AAPS - Versiune de build - Exporta numele dispozitivului pacientului - Exportarea modelului dispozitivului - Criptarea fișierului - Format nou criptat - Format nou pentru debug (necriptat) - Format de export necunoscut Driver-ul pompei a fost schimbat. diff --git a/core/interfaces/src/main/res/values-ru-rRU/strings.xml b/core/interfaces/src/main/res/values-ru-rRU/strings.xml index 704af18386..01aeb37521 100644 --- a/core/interfaces/src/main/res/values-ru-rRU/strings.xml +++ b/core/interfaces/src/main/res/values-ru-rRU/strings.xml @@ -1,16 +1,5 @@ - - Формат файла - Дата создания - Версия AAPS - Версия сборки - Имя пациента экспортируемого устройства - Модель экспортируемого устройства - Шифрование файла - Новый зашифрованный формат - Новый формат отладки (незашифрованный) - Неизвестный формат экспорта Драйвер помпы изменен. diff --git a/core/interfaces/src/main/res/values-sk-rSK/strings.xml b/core/interfaces/src/main/res/values-sk-rSK/strings.xml index e9ba2149cf..52b4bac2d3 100644 --- a/core/interfaces/src/main/res/values-sk-rSK/strings.xml +++ b/core/interfaces/src/main/res/values-sk-rSK/strings.xml @@ -1,16 +1,5 @@ - - Formát súboru - Vytvorené - Verzia AAPS - Verzia zostavy - Meno pacienta použité pri exporte - Model zariadenia použitý pri exporte - Šifrovanie súborov - Nový šifrovaný formát - Nový formát pre ladenie (nešifrovaný) - Neznámy formát exportu Ovládač pumpy zmenený. diff --git a/core/interfaces/src/main/res/values-sr-rCS/strings.xml b/core/interfaces/src/main/res/values-sr-rCS/strings.xml index 01a2c661d9..7cf1037ec1 100644 --- a/core/interfaces/src/main/res/values-sr-rCS/strings.xml +++ b/core/interfaces/src/main/res/values-sr-rCS/strings.xml @@ -1,5 +1,4 @@ - diff --git a/core/interfaces/src/main/res/values-sv-rSE/strings.xml b/core/interfaces/src/main/res/values-sv-rSE/strings.xml index d82ff46d9d..cdcec5de88 100644 --- a/core/interfaces/src/main/res/values-sv-rSE/strings.xml +++ b/core/interfaces/src/main/res/values-sv-rSE/strings.xml @@ -1,16 +1,5 @@ - - Filformat - Skapad - AAPS-version - Build-variant - Exporterar patientens namn - Exporterar enhetsmodell - · Filkryptering - Nytt krypterat format - Nytt debug-format (okrypterat) - Okänt exportformat Pumpdrivr. byttes. diff --git a/core/interfaces/src/main/res/values-tr-rTR/strings.xml b/core/interfaces/src/main/res/values-tr-rTR/strings.xml index f075013aaf..b124c1d9f3 100644 --- a/core/interfaces/src/main/res/values-tr-rTR/strings.xml +++ b/core/interfaces/src/main/res/values-tr-rTR/strings.xml @@ -1,16 +1,5 @@ - - Dosya formatı - Oluşturuldu - AAPS Versiyonu - Yapı Varyantı - Cihaz hasta adını dışa aktarma - Cihaz modelini dışa aktarma - Dosya şifreleme - Yeni şifrelenmiş format - Yeni hata ayıklama formatı (şifrelenmemiş) - Bilinmeyen dışa aktarma formatı Pompa sürücüsü değişti. diff --git a/core/interfaces/src/main/res/values-uk-rUA/strings.xml b/core/interfaces/src/main/res/values-uk-rUA/strings.xml index 01a2c661d9..7cf1037ec1 100644 --- a/core/interfaces/src/main/res/values-uk-rUA/strings.xml +++ b/core/interfaces/src/main/res/values-uk-rUA/strings.xml @@ -1,5 +1,4 @@ - diff --git a/core/interfaces/src/main/res/values-zh-rCN/strings.xml b/core/interfaces/src/main/res/values-zh-rCN/strings.xml index 41936b4a76..a0d1e444a6 100644 --- a/core/interfaces/src/main/res/values-zh-rCN/strings.xml +++ b/core/interfaces/src/main/res/values-zh-rCN/strings.xml @@ -1,16 +1,5 @@ - - 文件格式 - 创建于 - AAPS 版本 - 构建变体 - 导出设备的患者姓名 - 导出设备型号 - 文件加密密钥。 - 新的加密格式 - 新调试格式 (未加密) - 未知的导出格式 泵驱动程序已变更 diff --git a/core/ui/src/main/res/values-da-rDK/protection.xml b/core/ui/src/main/res/values-da-rDK/protection.xml index bd05c6f561..12392f22fd 100644 --- a/core/ui/src/main/res/values-da-rDK/protection.xml +++ b/core/ui/src/main/res/values-da-rDK/protection.xml @@ -19,4 +19,13 @@ Ingen beskyttelse Usikkert Tilbagefald For at være effektiv har biometrisk beskyttelse brug for en primær adgangskode i tilfælde af tilbagefald.\n\nAngiv venligst en primær adgangskode! + Adgangskode angivet! + PIN angivet! + Adgangskode ikke angivet + PIN ikke angivet + Adgangskode ikke ændret + PIN ikke ændret + PIN fjernet! + Indtast adgangskode her + Indtast PIN her diff --git a/core/ui/src/main/res/values-da-rDK/strings.xml b/core/ui/src/main/res/values-da-rDK/strings.xml index 79dfc8db6e..11efb38ca2 100644 --- a/core/ui/src/main/res/values-da-rDK/strings.xml +++ b/core/ui/src/main/res/values-da-rDK/strings.xml @@ -14,6 +14,7 @@ %1$.2f E/t Pumpe ikke initialiseret, profil ikke angivet! Opdatering af basal profil mislykkedes + Bolus %1$.2fE leveret succesfuldt Ingen gyldig basal rate læst fra pumpen Begrænser IOB til %1$.1f IE på grund af %2$s LOOP DEAKTIVERET AF BEGRÆNSNINGER @@ -35,6 +36,7 @@ Upload BG data til NS Insulin ikke tilgængelig + Hovedadgangskode Eksporter brugerindtastninger til Excel (csv) Bekræft Pumpe @@ -43,7 +45,9 @@ Lydløs i 5 minutter Lydløs Succes + Avancerede indstillinger Forlænget bolus leveringsfejl + APS-Tilstand Forlænget bolus Pauset TDD Total @@ -58,6 +62,8 @@ Vent venligst… Stop Kulhydrater + Ugyldig profil! + INGEN PROFIL SAT ]]> Dato Enheder @@ -100,6 +106,7 @@ Indlæser … Bemærkninger Fjern + Tilføj ny Tilføj ny ovenfor Data kommer fra en anden pumpe. Skift pumpedriver for at nulstille pumpetilstand. BG @@ -146,6 +153,7 @@ Basal IOB UGYLDIG Log ind + Prime / Fyld Insulin Stop midlertidig mål Lukket Loop @@ -154,6 +162,9 @@ DIA IC ISF + Annullering af midlertidig basal mislykkedes + Annullering af forlænget bolus mislykkedes + Upload pumpestatus til NS eller Tidepool Deaktiveret/Suspendéret Loop Insulin om bord (IOB) @@ -171,6 +182,7 @@ Start profil %1$d%% i %2$d min + Annuller midlertidig basal Lad midlertidig basal køre Dosis Varighed @@ -192,9 +204,12 @@ Notat : %1$s Spørgsmål : %1$s Motion: %1$s + Skift indstikssted + CGM Sensor Indsæt CGM Sensor Start CGM Sensor Stop Diabeteshund alarm + Skift af insulinampul Profilskift Snack Bolus Måltidsbolus @@ -204,6 +219,8 @@ Midlertidig basal slut Korrektion for kulhydrater OpenAPS Offline + Skift af pumpebatteri + Midlertidigt mål Midlertidig mål værdi Afslut midlertidigt mål Bolusberegner @@ -232,6 +249,7 @@ %1$d g ekstra kulhydrater kræves inden for %2$d minutter + Akkumuleret TDD Eksponentielt Vægtet TDD Basal Bolus @@ -317,6 +335,7 @@ EKSPORTER INDSTILLINGER IMPORTER INDSTILLINGER NULSTIL DATABASER + RENS DATABASER EKSPORTER DATABASER IMPORTER DATABASER OTP EKSPORT @@ -357,6 +376,9 @@ KH %1$d g FORLÆNGET BOLUS %1$.2f IE %2$d min INDLÆS BEGIVENHEDER + RYD ALARMER + DEAKTIVÉR + OPDATÉR TID INDLÆS HISTORIK %1$d LÆS TDD\'er SÆT PROFIL @@ -402,6 +424,7 @@ Autotune fungerer med kun én IC-værdi, din profil har %1$d værdier. Gennemsnitsværdi er %2$.2fg/E Autotune virker med kun én ISF-værdi, din profil har %1$d værdier. Gennemsnitlig værdi er %2$.1f%3$s/E Fejl i inputdata, prøv at køre autotune igen eller reducer antallet af dage + Fejl i inputdata, øg antallet af dage Automatisk beregning startet, vær venligst tålmodig Kontrollér resultaterne omhyggeligt, før du bruger dem! Delvis resultat dag %1$d / %2$d justeret @@ -420,6 +443,8 @@ Opdater %1$s profil med Autotune profil? Gendan %1$s profil med Input-profilen? Profil ugyldig + Autotune kørt uden profilskift + Autotune kørte og profilen blev automatisk skiftet Fejl under sidste Autotune kørsel Autotune kører allerede, annulleret @@ -427,9 +452,14 @@ Akut alarm INFO + Bolus-rådgiver + Du har høj glycæmi. I stedet for at spise nu anbefales det at vente på bedre glycæmi. Ønsker du at lave en korrektionsbolus nu og minde dig om, hvornår det er tid til at spise? I dette tilfælde vil ingen kulhydrater blive registreret, og du skal bruge guiden igen, når vi påminder dig. COB vs IOB !!!!! Langsomme kulhydrater opdaget: %2$d%% af tiden. Dobbelttjek din beregning. COB kan overvurderes og der kan således gives mere insulin !!!!!
]]>
Afgiv denne del af bolusguidens resultat [%] + Gammel glykæmi tidstærskel [min] + Bolus-begrænsning anvendt: %1$.2f IE til %2$.2f IE + Bolus registreres kun (bliver ikke leveret af pumpe) Kør alarm når det er tid til at spise Ingen handling valgt, intet vil ske Ingen nylig BG til at basere beregningen på! @@ -448,11 +478,19 @@ Midl: %1$s %1$s til %2$s Ingen pumpe tilgængelig! + QuickWizard + Barn Teeanger Voksen + Insulinresistent voksen Graviditet + Vælg venligst patienttype til opsætning af sikkerhedsgrænser + Maks tilladt bolus [IE] + Maks tilladte kulhydrater [g] + Patienttype + Lås indstillinger op Batteri Reservoir @@ -479,6 +517,7 @@ Pumpe er optaget Forbindelsesfejl til pumpe Læser pumpehistorik + Adgangskode slettet! Parring Initialiserer ... @@ -522,6 +561,9 @@ Manglende sms tilladelse + Dræb ikke min app? + Upload af Crash logs deaktiveret! + \n\nDocumentation:\nhttps://wiki.aaps.app\n\nFacebook:\nhttps://www.facebook.com/groups/AndroidAPSUsers %1$d dag %1$d dage @@ -535,6 +577,9 @@ %1$d minutter + Vil du rydde op i databasen?\nDet vil fjerne sporede ændringer og historiske data ældre end 3 måneder. + Vil du rydde op i databasen?\nDet vil fjerne sporede ændringer og historiske data ældre end 3 måneder.\nAt gøre dette vil også sætte hastigheden drastisk op på fuld synkronisering. + Slettede poster Søn Lør diff --git a/core/ui/src/main/res/values-es-rES/strings.xml b/core/ui/src/main/res/values-es-rES/strings.xml index b5ec288252..5804d89e91 100644 --- a/core/ui/src/main/res/values-es-rES/strings.xml +++ b/core/ui/src/main/res/values-es-rES/strings.xml @@ -581,6 +581,22 @@ ¿Deseas limpiar la base de datos?\nSe eliminarán los cambios registrados y los datos históricos de más de 3 meses.\nAl hacerlo, la sincronización completa se acelerará drásticamente Entradas eliminadas + Dom + Sab + Vie + Jue + Mie + Mar + Lun + L + M + X + J + V + S + D + %1$.1f U + %1$.2f U diff --git a/core/ui/src/main/res/values-lt-rLT/strings.xml b/core/ui/src/main/res/values-lt-rLT/strings.xml index 3fb24b73b7..c2b090cc8e 100644 --- a/core/ui/src/main/res/values-lt-rLT/strings.xml +++ b/core/ui/src/main/res/values-lt-rLT/strings.xml @@ -587,6 +587,22 @@ Ar norite išvalyti duombazę?\nIstoriniai duomenys ir pakeitimai, senesni nei 3 mėn., bus ištrinti.\nSinchronizacija reikšmingai pagreitės. Ištrinti įrašai + S + Š + Pn + K + T + A + P + mėn. + A + T + K + Pn + Š + S + %1$.1f V + %1$.2f V diff --git a/core/ui/src/main/res/values-pl-rPL/strings.xml b/core/ui/src/main/res/values-pl-rPL/strings.xml index 92c853643d..08e5d69b6e 100644 --- a/core/ui/src/main/res/values-pl-rPL/strings.xml +++ b/core/ui/src/main/res/values-pl-rPL/strings.xml @@ -587,6 +587,22 @@ Czy chcesz wyczyścić bazę danych?\nTa operacja usunie odnotowane zmiany i dane historyczne starsze niż 3 miesiące.\nWyczyszczenie bazy dramatycznie przyśpieszy pełną synchronizację. Usunięte wpisy + Nie + Sob + Pią + Czw + Śr + Wt + Pon + P + W + Ś + C + P + S + N + %1$.1f U + %1$.2f U diff --git a/core/ui/src/main/res/values-pt-rPT/strings.xml b/core/ui/src/main/res/values-pt-rPT/strings.xml index 1d718d284b..953249c98c 100644 --- a/core/ui/src/main/res/values-pt-rPT/strings.xml +++ b/core/ui/src/main/res/values-pt-rPT/strings.xml @@ -492,4 +492,6 @@ + %1$.1f U + %1$.2f U diff --git a/core/ui/src/main/res/values-sk-rSK/strings.xml b/core/ui/src/main/res/values-sk-rSK/strings.xml index 01ab41e329..fcc6f72401 100644 --- a/core/ui/src/main/res/values-sk-rSK/strings.xml +++ b/core/ui/src/main/res/values-sk-rSK/strings.xml @@ -587,6 +587,22 @@ Chcete vyčistiť databázu?\nOdstráni sledované zmeny a historické dáta staršie ako 3 mesiace.\nVýrazne to urýchli úplnú synchronizáciu. Vymazané záznamy + Ned + Sob + Pia + Štv + Str + Uto + Pon + Po + Ut + St + Št + Pi + So + Ne + %1$.1f JI + %1$.2f JI diff --git a/implementation/src/main/res/values-da-rDK/strings.xml b/implementation/src/main/res/values-da-rDK/strings.xml index 77077ef6e6..802971890e 100644 --- a/implementation/src/main/res/values-da-rDK/strings.xml +++ b/implementation/src/main/res/values-da-rDK/strings.xml @@ -4,6 +4,7 @@ Kommando udføres lige nu Basal værdi under minimum. Profil ikke angivet! Tilladelse + %1$s har brug for batterioptimeringstilladelse for at opnå den rette ydeevne Applikationen mangler lokations tilladelse til BT scanning og WIFI identifikation Applikationen mangler lagerstyrings tilladelse for at gemme logfiler og exporteringsindstillinger diff --git a/plugins/aps/src/main/res/values-da-rDK/strings.xml b/plugins/aps/src/main/res/values-da-rDK/strings.xml index 630feef414..2ca881cbd8 100644 --- a/plugins/aps/src/main/res/values-da-rDK/strings.xml +++ b/plugins/aps/src/main/res/values-da-rDK/strings.xml @@ -90,15 +90,27 @@ Top + Kør nu En bolus blev leveret inden for de sidste 3 minutter, springer SMB over + Pumpe ikke initialiseret! LOOP Aktiver eller deaktiver implementeringen som aktiverer Loop. + INGEN APS VALGT ELLER GIVET RESULTAT Ignorér 5m Ignorér 15m Ignorér 30m + Kulhydrater Forslag + Nyt forslag tilgængeligt Basal sat korrekt + Seneste kørsel APS + Anmod + Efter bearbejdede begrænsninger + Midlertidig basal anmodningstid + Midlertidig basal udførselstid Midlertidig basal sat af pumpe + SMB-anmodningstid + SMB-udførelsestid SMB indstillet af pumpe Minimal anmodningsændring [%] Åben Loop vil kun foreslå ny ændringsanmodning, hvis ændringen er større end denne værdi i %. Standardværdien er 20% diff --git a/plugins/automation/src/main/res/values-da-rDK/strings.xml b/plugins/automation/src/main/res/values-da-rDK/strings.xml index dbcf7bb1f0..83847ae13f 100644 --- a/plugins/automation/src/main/res/values-da-rDK/strings.xml +++ b/plugins/automation/src/main/res/values-da-rDK/strings.xml @@ -85,6 +85,8 @@ Sidste bolus tid %1$s %2$s min siden COB COB %1$s %2$.0f + Puls + HR %1$s %2$.0f IOB [IE]: Dist [m]: Tilbagevendende tid @@ -111,5 +113,7 @@ Tilføj regel Stop afvikling + Tid til at spise!\nBrug Bolusguiden og beregn igen. Tid til bolus!\nKør Bolus-guiden og lav beregningen igen. + Fejl under indstilling af fremtidig alarm diff --git a/plugins/configuration/src/main/res/values-af-rZA/strings.xml b/plugins/configuration/src/main/res/values-af-rZA/strings.xml index daed111930..b8302b3a89 100644 --- a/plugins/configuration/src/main/res/values-af-rZA/strings.xml +++ b/plugins/configuration/src/main/res/values-af-rZA/strings.xml @@ -73,4 +73,5 @@ + diff --git a/plugins/configuration/src/main/res/values-bg-rBG/strings.xml b/plugins/configuration/src/main/res/values-bg-rBG/strings.xml index 1403ddb163..431fd6b295 100644 --- a/plugins/configuration/src/main/res/values-bg-rBG/strings.xml +++ b/plugins/configuration/src/main/res/values-bg-rBG/strings.xml @@ -156,4 +156,5 @@ Избор на персонализиран Watchface Моля рестартирайте телефона си или AAPS от Системни настройки, иначе AAPS няма да има логове (това е важно за да се проследява и верифицира, че алгоритъма работи правилно)! + diff --git a/plugins/configuration/src/main/res/values-ca-rES/strings.xml b/plugins/configuration/src/main/res/values-ca-rES/strings.xml index 244139ff2e..ef555b1f54 100644 --- a/plugins/configuration/src/main/res/values-ca-rES/strings.xml +++ b/plugins/configuration/src/main/res/values-ca-rES/strings.xml @@ -133,4 +133,5 @@ Algoritme d\'encriptació no compatible o no especificat! + diff --git a/plugins/configuration/src/main/res/values-cs-rCZ/strings.xml b/plugins/configuration/src/main/res/values-cs-rCZ/strings.xml index b412eed226..195d4fed27 100644 --- a/plugins/configuration/src/main/res/values-cs-rCZ/strings.xml +++ b/plugins/configuration/src/main/res/values-cs-rCZ/strings.xml @@ -156,4 +156,15 @@ Vyberte vlastní ciferník Prosím restartujte Váš telefon nebo restartujte AAPS z nastavení systému\njinak nebudou zaznamenány ladící informace (důležité pro sledování a kontrolu, zda algoritmus pracuje správně)! + + Formát souboru + Vytvořeno + Verze AAPS + Varianta sestavení + Jméno pacienta použité při exportu + Model zaříení použitý při exportu + Šifrování souboru + Nový zašifrovaný formát + Nový formát pro ladění (nešifrovaný) + Neznámý formát souboru diff --git a/plugins/configuration/src/main/res/values-da-rDK/strings.xml b/plugins/configuration/src/main/res/values-da-rDK/strings.xml index 44b12e2524..2bccb8c040 100644 --- a/plugins/configuration/src/main/res/values-da-rDK/strings.xml +++ b/plugins/configuration/src/main/res/values-da-rDK/strings.xml @@ -6,6 +6,7 @@ Forrige Installationsguide FÆRDIG + Velkommen Velkommen til opsætningsguiden. Den vil guide dig gennem opsætningsprocessen\n Slutbrugerlicensaftale MÅ IKKE BRUGES TIL AT TRÆFFE MEDICINSKE BESLUTNINGER. DER ER INGEN GARANTI FOR PROGRAMMET, I DET OMFANG GÆLDENDE LOV TILLADER DET. UNDTAGEN NÅR DET ELLERS ER ANFØRT SKRIFTLIGT, AT RETTIGHEDSHAVERE OG / ELLER ANDRE PARTER LEVERER PROGRAMMET \"SOM BESET\" UDEN NOGEN FORM FOR GARANTI, HVERKEN UDTRYKT ELLER UNDERFORSTÅET, HERUNDER, MEN IKKE BEGRÆNSET TIL, DE UNDERFORSTÅELIGHEDER, DER ER FORBUNDET MED EGNETHED OG EGNETHED TIL ET BESTEMT FORMÅL. HELE RISIKOEN MED HENSYN TIL KVALITETEN OG YDEEVNEN AF PROGRAMMET ER DIN. HVIS PROGRAMMET VISER SIG AT VÆRE DEFEKT, BÆRER DU SELV OMKOSTNINGERNE VED ALLE NØDVENDIGE SERVICER, REPARATIONER ELLER KORREKTIONER SOM ER NØDVENDIGE. @@ -20,10 +21,12 @@ Applikationen mangler lokations tilladelse til BT scanning og WIFI identifikation Applikationen mangler lagerstyrings tilladelse for at gemme logfiler og exporteringsindstillinger Anmod om tilladelse + %1$s har brug for batterioptimeringstilladelse for at opnå den rette ydeevne Gemte indstillinger fundet Hovedadgangskode bruges til backup kryptering og til at tilsidesætte sikkerhed i applikationen. Husk det eller gem et sikkert sted. Nuværende hovedadgangskode Brug værdien af den største mængde mad du plejer at indtage\n + Synkronisér data til skyen. Du kan springe denne del nu, men du vil ikke være i stand til at passere mål, før du opretter en Nightscout- eller Tidepool-klient. Status: Patientens navn Angiv venligst patientnavn eller kaldenavn for at skelne mellem flere opsætninger @@ -35,6 +38,7 @@ Spring opsætningsguiden over Tryk på knappen nedenfor for at aktivere at AAPS foreslår/foretager basale ændringer Følsomhedsplugin bruges til detektering af følsomhed og COB beregning. For mere info besøg: + https://wiki.aaps.app/da/latest/Configuration/Sensitivity-detection-and-COB.html Vælg en fra tilgængelige algoritmer. De er sorteret fra ældste til nyeste. Nyere algoritme er normalt mere kraftfulde og mere aggressive. Så hvis du er ny looper bør du sandsynligvis starte med AMA og ikke med den nyeste. Glem ikke at læse OpenAPS dokumentationen og konfigurere den før brug. Konfigurer venligst din RileyLink nedenfor. Når du har valgt en RileyLink, vil det være muligt at fortsætte opsætningen, når RileyLink-status er \"Tilsluttet\". Dette kan tage et minut.\n Bemærk: Du kan fortsætte opsætningen, når pumpen er konfigureret.\n @@ -62,12 +66,15 @@ Generelt Disse er nogle generelle tilføjelser, som du måske kan finde nyttige. Synkronisering + Data-upload og synkroniserings-plugins. Hvilke begrænsninger er anvendt? Loop Brug dette til at aktivere AAPS\' loop integration. Hvilken type insulin bruger du? BG kilde Hvor skal AAPS få sine data fra? + Udjævning + Vælg udjævningsalgoritme Detektering af følsomhed Hvilken følsomhedsalgoritme skal anvendes? KONF @@ -101,10 +108,13 @@ Gå venligst tilbage til hovedskærmen og prøv igen. Afslutter applikationen for at anvende indstillinger. Brugerindtastninger exporteret + Beskyttelse + Hovedadgangskode er ikke angivet!\n\nAngiv venligst din hovedadgangskode i præferencer (%1$s → %2$s) Vedligeholdelse MAINT Giver flere funktioner til vedligeholdelse (f.eks. log afsendelse, log sletning). + Database-oprydning Er du sikker på, at du vil nulstille databaserne? Vedligeholdelses Indstillinger E-mail modtager @@ -143,6 +153,18 @@ Manglende krypteringskonfiguration, indstillingsformat er ugyldigt! Ikke-understøttet eller ikke angivet krypteringsalgoritme! + Vælg Brugerdefineret Urskive Genstart venligst din telefon eller genstart AAPS fra Systemindstillinger \nellers vil AndroidAPS ikke have logning (vigtigt at spore og kontrollere, at algoritmerne fungerer korrekt)! + + Filformat + Oprettet den + AAPS Version + Build-variant + Eksporterer enhedens patientnavn + Eksporterer enhedsmodel + Filkryptering + Nyt krypteret format + Nyt fejlfindingsformat (ukrypteret) + Ukendt eksportformat diff --git a/plugins/configuration/src/main/res/values-de-rDE/strings.xml b/plugins/configuration/src/main/res/values-de-rDE/strings.xml index 5025cbaf34..77cc5dbcb5 100644 --- a/plugins/configuration/src/main/res/values-de-rDE/strings.xml +++ b/plugins/configuration/src/main/res/values-de-rDE/strings.xml @@ -156,4 +156,5 @@ Eigene Watchface auswählen Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu.\nAndernfalls wird AndroidAPS nichts protokollieren (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert)! + diff --git a/plugins/configuration/src/main/res/values-el-rGR/strings.xml b/plugins/configuration/src/main/res/values-el-rGR/strings.xml index d79f932d57..aa605fbe65 100644 --- a/plugins/configuration/src/main/res/values-el-rGR/strings.xml +++ b/plugins/configuration/src/main/res/values-el-rGR/strings.xml @@ -156,4 +156,5 @@ Επιλογή προσαρμοσμένης όψης ρολογιου Παρακαλώ κάντε επανεκίνηση στο τηλέφώνο ή restart στο AndroidAPS από τις Ρυθμίσεις Συστήματος, \nδιαφορετικά το AndroidAPS δεν θα έχει καταγραφή (επαληθεύστε ότι οι αλγόριθμοι δουλεύουν σωστά)! + diff --git a/plugins/configuration/src/main/res/values-es-rES/strings.xml b/plugins/configuration/src/main/res/values-es-rES/strings.xml index 037856e883..e0b4bc3fe2 100644 --- a/plugins/configuration/src/main/res/values-es-rES/strings.xml +++ b/plugins/configuration/src/main/res/values-es-rES/strings.xml @@ -156,4 +156,15 @@ Seleccionar esfera por defecto Por favor, reinicia el teléfono o AAPS desde los ajustes del sistema \nde lo contrario AAPS no guardará registros (importante para trazar y verificar que el algoritmo está funcionando correctamente) + + Formato de archivo + Creado el + Versión de AAPS + Versión de compilación + Exportando el nombre del paciente del dispositivo + Exportando el modelo del dispositivo + Cifrado de archivos + Nuevo formato cifrado + Nuevo formato de depuración (sin cifrar) + Formato de exportación desconocido diff --git a/plugins/configuration/src/main/res/values-fr-rFR/strings.xml b/plugins/configuration/src/main/res/values-fr-rFR/strings.xml index 644eac58d5..a8a9347e91 100644 --- a/plugins/configuration/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/configuration/src/main/res/values-fr-rFR/strings.xml @@ -157,4 +157,5 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Sélectionner un cadran personnalisé Veuillez redémarrer votre téléphone ou redémarrer AAPS à partir des Paramètres du système\nsinon AAPS ne sera pas connecté aux journaux (important pour suivre et vérifier que les algorithmes fonctionnent correctement)! + diff --git a/plugins/configuration/src/main/res/values-hr-rHR/strings.xml b/plugins/configuration/src/main/res/values-hr-rHR/strings.xml index eab136d8de..a1bdc37309 100644 --- a/plugins/configuration/src/main/res/values-hr-rHR/strings.xml +++ b/plugins/configuration/src/main/res/values-hr-rHR/strings.xml @@ -65,4 +65,5 @@ Ponovno pokrenite telefon ili ponovno pokrenite AAPS iz postavki sustava \n u suprotnom Android APS neće imati zapisivanje (važno je pratiti i provjeriti rade li algoritmi ispravno)! + diff --git a/plugins/configuration/src/main/res/values-hu-rHU/strings.xml b/plugins/configuration/src/main/res/values-hu-rHU/strings.xml index 578fb269ea..0186370c60 100644 --- a/plugins/configuration/src/main/res/values-hu-rHU/strings.xml +++ b/plugins/configuration/src/main/res/values-hu-rHU/strings.xml @@ -25,4 +25,5 @@ + diff --git a/plugins/configuration/src/main/res/values-it-rIT/strings.xml b/plugins/configuration/src/main/res/values-it-rIT/strings.xml index ab76ba358a..0dd614c556 100644 --- a/plugins/configuration/src/main/res/values-it-rIT/strings.xml +++ b/plugins/configuration/src/main/res/values-it-rIT/strings.xml @@ -156,4 +156,5 @@ Seleziona watchface personalizzata Riavvia il tuo telefono oppure fai ripartire AndroidAPS dalle impostazioni di sistema \naltrimenti Android APS non farà il log (è importante monitorare e verificare che gli algoritmi stiano funzionando correttamente)! + diff --git a/plugins/configuration/src/main/res/values-iw-rIL/strings.xml b/plugins/configuration/src/main/res/values-iw-rIL/strings.xml index b0ba9c36c7..be22aad54e 100644 --- a/plugins/configuration/src/main/res/values-iw-rIL/strings.xml +++ b/plugins/configuration/src/main/res/values-iw-rIL/strings.xml @@ -156,4 +156,5 @@ בחירת פני שעון מותאמים אישית נא לאתחל את הסמרטפון שלכם או הפעילו מחדש את אפלקציית AndroidAPS בהגדרות המערכת \nאחרת AndroidAPS לא יוכל לבצע רישום (חשוב לעקוב ולוודא כי האלגוריתמים פועלים כראוי)! + diff --git a/plugins/configuration/src/main/res/values-ko-rKR/strings.xml b/plugins/configuration/src/main/res/values-ko-rKR/strings.xml index 5aed2fea95..26dde3ea46 100644 --- a/plugins/configuration/src/main/res/values-ko-rKR/strings.xml +++ b/plugins/configuration/src/main/res/values-ko-rKR/strings.xml @@ -156,4 +156,5 @@ 사용자 지정 워치페이스 선택하기 폰을 다시시작하거나 시스템 설정에서 AAPS를 다시 시작하십시오 \n그렇지 않으면 Android APS에 로그 기록이 남지 않습니다 (알고리즘이 올바르게 작동하는지 확인하기 위해 로그가 중요합니다)! + diff --git a/plugins/configuration/src/main/res/values-lt-rLT/strings.xml b/plugins/configuration/src/main/res/values-lt-rLT/strings.xml index 02ae1bcc9d..807d9e1ff8 100644 --- a/plugins/configuration/src/main/res/values-lt-rLT/strings.xml +++ b/plugins/configuration/src/main/res/values-lt-rLT/strings.xml @@ -156,4 +156,5 @@ Pasirinkite laikrodžio ekraną Prašome perkrauti telefoną arba sistemos nustatymuose iš naujo paleisti AAPS \nkitaip AndroidAPS negalės registruoti prisijungimų (svarbu stebėti ir tikrinti, ar algoritmai veikia tinkamai)! + diff --git a/plugins/configuration/src/main/res/values-nl-rNL/strings.xml b/plugins/configuration/src/main/res/values-nl-rNL/strings.xml index 91d5eba4b8..18069e6dbd 100644 --- a/plugins/configuration/src/main/res/values-nl-rNL/strings.xml +++ b/plugins/configuration/src/main/res/values-nl-rNL/strings.xml @@ -156,4 +156,5 @@ Selecteer aangepaste watchface Herstart je telefoon of herstart AndroidAPS vanuit de systeem instellingen a. u. b. \nanders zal AndroidAPS geen log mogelijkheid hebben (Dit is belangrijk om te controleren of de algoritmes correct werken)! + diff --git a/plugins/configuration/src/main/res/values-no-rNO/strings.xml b/plugins/configuration/src/main/res/values-no-rNO/strings.xml index b26b366859..cd97d79a15 100644 --- a/plugins/configuration/src/main/res/values-no-rNO/strings.xml +++ b/plugins/configuration/src/main/res/values-no-rNO/strings.xml @@ -156,4 +156,5 @@ Velg tilpasset klokkebakgrunn Vennligst start mobilen på nytt eller restart AAPS fra Innstillinger \nellers vil ikke AAPS ha aktivert loggføring (viktig for å spore og kontrollere at algoritmene fungerer riktig)! + diff --git a/plugins/configuration/src/main/res/values-pl-rPL/strings.xml b/plugins/configuration/src/main/res/values-pl-rPL/strings.xml index 9d93dfc0fb..e0827d5c0f 100644 --- a/plugins/configuration/src/main/res/values-pl-rPL/strings.xml +++ b/plugins/configuration/src/main/res/values-pl-rPL/strings.xml @@ -156,4 +156,15 @@ Wybierz niestandardową tarczę Proszę uruchomić ponownie telefon lub zrestartować AAPS (z poziomu ustawieniach systemu telefonu / menu aplikacje)\ninaczej AAPS nie będzie w stanie zapisywać dziennika (ważne ze względu na śledzenie błędów i sprawdzanie poprawności działania algorytmów)! + + Format pliku + Utworzono + Wersja AAPS + Wariant kompilacji + Eksportowanie nazwy pacjenta urządzenia + Eksportowanie modelu urządzenia + Szyfrowanie pliku + Nowy zaszyfrowany format + Nowy format testowy (niezaszyfrowany) + Nieznany format eksportu diff --git a/plugins/configuration/src/main/res/values-pt-rBR/strings.xml b/plugins/configuration/src/main/res/values-pt-rBR/strings.xml index f285917b4b..dd93594e82 100644 --- a/plugins/configuration/src/main/res/values-pt-rBR/strings.xml +++ b/plugins/configuration/src/main/res/values-pt-rBR/strings.xml @@ -156,4 +156,5 @@ Selecionar Watchface Personalizado Por favor, reinicie seu telefone ou reinicie o AndroidAPS nas Configurações do Sistema \nCaso contrário o Android APS não terá registro (importante para rastrear e verificar se os algoritmos estão funcionando corretamente)! + diff --git a/plugins/configuration/src/main/res/values-pt-rPT/strings.xml b/plugins/configuration/src/main/res/values-pt-rPT/strings.xml index ed92b3e5bb..532e1b1a24 100644 --- a/plugins/configuration/src/main/res/values-pt-rPT/strings.xml +++ b/plugins/configuration/src/main/res/values-pt-rPT/strings.xml @@ -156,4 +156,15 @@ Selecionar Watchface Personalizada Por favor, reinicie o telefone ou reinicie a AAPS nas Configurações do Sistema \ncaso contrário a android APS não terá registo (isto é importante para analisar e verificar se os algoritmos estão funcionando corretamente)! + + Formato do ficheiro + Criado em + Versão AAPS + Variante de Compilação + A exportar nome do paciente do dispositivo + A exportar modelo do dispositivo + Encriptação do Ficheiro + Novo formato de encriptação + Novo formato de depuração (não encriptado) + Formato de exportação desconhecido diff --git a/plugins/configuration/src/main/res/values-ro-rRO/strings.xml b/plugins/configuration/src/main/res/values-ro-rRO/strings.xml index c5c9bb45d1..36fa1c2324 100644 --- a/plugins/configuration/src/main/res/values-ro-rRO/strings.xml +++ b/plugins/configuration/src/main/res/values-ro-rRO/strings.xml @@ -156,4 +156,5 @@ Selectare aspect ceas personalizat Restartați telefonul sau reporniți aplicația AAPS din System Settings \naltfel AAPS nu va putea înregistra loguri (importante pentru verificarea corectitudinii funcționării algoritmilor)! + diff --git a/plugins/configuration/src/main/res/values-ru-rRU/strings.xml b/plugins/configuration/src/main/res/values-ru-rRU/strings.xml index c994bab7eb..735ccdf57d 100644 --- a/plugins/configuration/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/configuration/src/main/res/values-ru-rRU/strings.xml @@ -156,4 +156,5 @@ Выберите пользовательский циферблат Перезагрузите телефон или перезапустите AAPS из системных настроек \n иначе AAPS не будет вести лог (важно для отслеживания и проверки алгоритмов)! + diff --git a/plugins/configuration/src/main/res/values-sk-rSK/strings.xml b/plugins/configuration/src/main/res/values-sk-rSK/strings.xml index 6d030faab7..99d4c00101 100644 --- a/plugins/configuration/src/main/res/values-sk-rSK/strings.xml +++ b/plugins/configuration/src/main/res/values-sk-rSK/strings.xml @@ -156,4 +156,15 @@ Vyberte vlastný ciferník Prosím reštartujte Váš telefón, alebo reštartujte AndroidAPS z nastavení \nv opačnom prípade AndroidAPS nebude mocť zaznamenávať logy (dôležité kvôli sledovaniu a overovaniu, že algoritmus pracuje správne)! + + Formát súboru + Vytvorené + Verzia AAPS + Verzia zostavy + Meno pacienta použité pri exporte + Model zariadenia použitý pri exporte + Šifrovanie súborov + Nový šifrovaný formát + Nový formát pre ladenie (nešifrovaný) + Neznámy formát exportu diff --git a/plugins/configuration/src/main/res/values-sr-rCS/strings.xml b/plugins/configuration/src/main/res/values-sr-rCS/strings.xml index 03adfec6b6..90a3832e6e 100644 --- a/plugins/configuration/src/main/res/values-sr-rCS/strings.xml +++ b/plugins/configuration/src/main/res/values-sr-rCS/strings.xml @@ -55,4 +55,5 @@ + diff --git a/plugins/configuration/src/main/res/values-sv-rSE/strings.xml b/plugins/configuration/src/main/res/values-sv-rSE/strings.xml index bb17e8c574..29f26b4253 100644 --- a/plugins/configuration/src/main/res/values-sv-rSE/strings.xml +++ b/plugins/configuration/src/main/res/values-sv-rSE/strings.xml @@ -156,4 +156,5 @@ Välj anpassad urtavla Vänligen starta om telefonen eller starta om AAPS från systeminställningar \nannars kommer Android APS inte att ha loggning aktiverat (viktigt för att spåra och kontrollera att algoritmerna fungerar korrekt)! + diff --git a/plugins/configuration/src/main/res/values-tr-rTR/strings.xml b/plugins/configuration/src/main/res/values-tr-rTR/strings.xml index a3ab54fd8f..8cc94052d4 100644 --- a/plugins/configuration/src/main/res/values-tr-rTR/strings.xml +++ b/plugins/configuration/src/main/res/values-tr-rTR/strings.xml @@ -156,4 +156,15 @@ Özel Saat arayüzünü Seçin Lütfen telefonunu yeniden başlat, yada AAPS sistem ayarları üzerinden yeniden başlat.\nAksi taktirde Android APS hiç bir günlük tutmayacak (takip ve doğrulama, algoritmanın düzenli çalışmasi için önemli)! + + Dosya formatı + Oluşturulma tarihi + AAPS Versiyonu + Yapı Varyantı + Cihaz hasta adını dışa aktarma + Cihaz modelini dışa aktarma + Dosya şifreleme + Yeni şifrelenmiş format + Yeni hata ayıklama formatı (şifrelenmemiş) + Bilinmeyen dışa aktarma formatı diff --git a/plugins/configuration/src/main/res/values-uk-rUA/strings.xml b/plugins/configuration/src/main/res/values-uk-rUA/strings.xml index 546b9b2c0c..b38f1e913e 100644 --- a/plugins/configuration/src/main/res/values-uk-rUA/strings.xml +++ b/plugins/configuration/src/main/res/values-uk-rUA/strings.xml @@ -6,4 +6,5 @@ + diff --git a/plugins/configuration/src/main/res/values-zh-rCN/strings.xml b/plugins/configuration/src/main/res/values-zh-rCN/strings.xml index cbe111c769..13470b7066 100644 --- a/plugins/configuration/src/main/res/values-zh-rCN/strings.xml +++ b/plugins/configuration/src/main/res/values-zh-rCN/strings.xml @@ -135,4 +135,5 @@ 不支持或未指定加密算法! + diff --git a/plugins/constraints/src/main/res/values-da-rDK/exam.xml b/plugins/constraints/src/main/res/values-da-rDK/exam.xml index 88ce2014e9..141965f83d 100644 --- a/plugins/constraints/src/main/res/values-da-rDK/exam.xml +++ b/plugins/constraints/src/main/res/values-da-rDK/exam.xml @@ -4,17 +4,27 @@ Varighed af insulin aktivitet (DIA) Du skal angive værdien for DIA i din profil. Den mindst tilladte værdi er 5 timer. + https://wiki.aaps.app/da/latest/Configuration/Config-Builder.html#insulin + Hvis du er tilfreds med værdien for DIA, som du brugte i din pumpe før AAPS, er der ingen grund til at ændre den, når du starter på looping. Du bør selv bestemme, hvad den passende værdi af DIA er for dig. Hypo midlertidig basal + Hvad er den primære årsag til at sætte et hypo midlertidigt mål? For at rette op for hypo, forårsaget af forkerte basal rate indstillinger. + For at forhindre AAPS i at overkorrigere en stigning i blodsukkeret forårsaget af de hurtigtvirkende kulhydrater anvendt til behandling af hypoglykæmi. At korrigere for hypoglykæmi (Lavt blodsukker) induceret som følge af motion. For at undgå lav blodglukose, hvis der allerede er en midlertidig basal på 0%. + https://wiki.aaps.app/da/latest/Usage/temptarget.html Hvilken profil kan bruges og konfigureres offline? Emne: Offlineprofil NS-profil kan bruges, men ikke konfigureres. + https://wiki.aaps.app/da/latest/Configuration/Config-Builder.html#profile Årsager til anvendelse af \"Afbryd pumpe\" i AAPS + Hvad skal man gøre, når man frakobler pumpen fra kroppen? Dette er unødvendigt, da insulin ikke vil blive leveret, hvis pumpen er fysisk afbrudt. + Det forhindrer AAPS i at tage højde for insulin, der ikke blev leveret, mens pumpen er fysisk frakoblet. + Det vil ikke stoppe insulinleveringen, hvis pumpen forbliver forbundet til kroppen. Det vil sende AAPS i åben loop tilstand. + https://wiki.aaps.app/da/latest/Getting-Started/FAQ.html#other-settings AAPS Indstillinger AAPS Indstillinger Hvad er den bedste fremgangsmåde for at lave en backup af dine indstillinger? @@ -26,24 +36,29 @@ Dine indstillinger kan findes i mappen Internt Lager/AAPS/preferences på din telefon. Kopiér dine indstillinger til en sikker placering uden for din telefon (f.eks. ved at bruge et cloud-drev, forbind et kabel fra din telefon til en computer, e-mail osv.) Hvis din telefon er beskadiget eller blevet væk, kan du nemt gendanne dine indstillinger uden en backup. + https://wiki.aaps.app/da/latest/Usage/ExportImportSettings.html + https://wiki.aaps.app/da/latest/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me CGM målinger med \"støj\" Hvad skal der gøres, hvis der er støj i CGM data? Gør ingenting - AAPS vil håndtere det. Deaktivér lukket loop for at undgå mulig over- eller underdosering. Erstat konsekvent støjende eller unøjagtige sensorer. Kontrollér, at din CGM-app viser udjævnet data. + https://wiki.aaps.app/da/latest/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data Øvelser og profiler Hvordan kan du bruge profiler til at hjælpe systemet med at håndtere motion? Lav en profil, der skifter til mindre end 100%. Lav et profilskift der skifter til mere end 100%. Lad profilen være sat til 100%. Suspendér Loop. + https://wiki.aaps.app/da/latest/Usage/temptarget.html#activity-temp-target Motion og midlertidige basaler Hvordan kan du bruge midlertidige basaler til bedst muligt at hjælpe systemet med at håndtere motion? Set et aktivitets blodsukkermål der starter, en passende tid før du begynder motion. Set et aktivitetsblodsukker efter motion. Lad dit blodsukker være uændret. Vent, til blodsukkeret falder under din midlertidige hypo-basal, og spis 15g hurtigt virkende kulhydrater. + https://wiki.aaps.app/da/latest/Usage/temptarget.html#activity-temp-target Modtager jeg insulin, når Loop er deaktiveret/suspenderet? Ja, basal insulin fortsætter med at blive levereret. Nej, levering af insulin er stoppet. @@ -53,6 +68,7 @@ Når du oplever hyppig højt eller lavt blodsukker. Mindst én gang om ugen. Når de er angivet og valideret, skal disse værdier ikke ændres over tid. + https://wiki.aaps.app/da/latest/Getting-Started/FAQ.html#androidaps-settings Forudsætninger Hvad er afgørende for at opsætte og bruge AAPS? Valideret profilinformationer (Basaler, I:C, ISF, DIA). @@ -65,13 +81,16 @@ En Github konto. Erfaring med programmering eller redigering af kode. En MiniMed 670G pumpe. + https://wiki.aaps.app/da/latest/Module/module.html Et Smartwatch. En Understøttet CGM. Forudsætninger Hvad er afgørende for at opsætte og bruge AAPS? Valideret information til at konfigurere en profil (ISF, I:C ratio, basal rate, DIA osv.). En kompatibel Android-enhed (f.eks. mobil / mobiltelefon, Android-ur eller tablet). + AndroidAPS kræver en internetforbindelse for at køre i lukket loop. En understøttet CGM og relevant app til at modtage blodsukkerværdier på telefonen/enheden. + https://wiki.aaps.app/da/latest/Module/module.html Opdaterer AAPS Tjek alle de korrekte svar. Du skal have installeret Git og konfigureret på din computer. @@ -79,22 +98,31 @@ Du skal gemme og notere placeringen af din keystore og bruge det samme kodeord til opdateringer som ved den forrige installation. Opdater aldrig, hvis systemet fungerer godt. Hvis du har svært ved at bygge apk\'en, kan du installere en apk, der er blevet bygget af en ven. + https://wiki.aaps.app/da/latest/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch Fejlfinding Hvor kan du lede efter hjælp til AAPS? Du kan bede om råd i \"AAPS-users\" Facebook-gruppen. Du bør læse (og genlæse) AAPS-dokumentationen. Du kan bede om råd og notere tekniske problemer eller problemer på AAPS Discord. Du bør spørge din diabetessygeplejerske/endokrinolog. + https://wiki.aaps.app/da/latest/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ https://discord.gg/4fQUWHZ4Mw + Insulin-pluins Hvilken insulin skal du bruge sammen med Ultra-Rapid Oref-pluginnet? Fiasp® NovoRapid®/Novolog® Humalog® Actrapid®/Humalin R®/\"regulært\" humant insulin. + https://wiki.aaps.app/da/latest/Configuration/Config-Builder.html#insulin Sensitivitets plugins Tjek alle de korrekte svar. Sensitivitetsplugins giver AAPS mulighed for at justere midlertidigt eller kortvarige ændringer i insulin-følsomheden (f.eks. hormonelle ændringer eller problemer med absorption på infusionsstedet). + Sensitivitetsplugins giver brugeren forslag til ændringer i basalrater, IC-forhold og ISF, der kan bruges til at redigere profilen. + Notering af cannula-skift vil nulstille Autosens-ratio tilbage til 100%. + Nogle af plugin-mulighederne har konfigurérbare tidsintervaller, der kan indstilles af brugeren. + https://wiki.aaps.app/da/latest/Configuration/Sensitivity-detection-and-COB.html + https://wiki.aaps.app/da/latest/Usage/Open-APS-features.html#autosens Kulhydrat indtastningsfejl Hvad gør du, hvis du har lavet en forkert kulhydrat indtastning? Slet den forkerte indtastning i Behandlinger og indtast korrekte nye kulhydrat værdier. @@ -102,15 +130,23 @@ Gør ingenting – AAPS vil foretage de passende justeringer. Bolus med insulin ved hjælp af knappen (bolus) i oversigt. Fejl i insulinlevering/indtastning + Hvad skal du gøre hvis du har fået mindre insulin end pumpehistorikken foreslog, f.eks. på grund af en okklusion, mislykket cannula eller du glemmer at sætte pumpen på igen efter et bad? Slet insulinleveringsdata fra Nightscouts Careportal for at slette det fra pumpehistorikken. Sammenlign værdier i AAPS og pumpehistorik (hvis pumpen understøtter dette). Bolus en del af din beregnede \"glemte\" insulin med enten sprøjter / pen eller brug af en kanylefyldning. Gør ingenting, og lad AAPS korrigere eventuelle resulterende højt blodsukker. Kulhydrater om bord (COB) + Hvordan påvirker ændring af ISF-værdien COB-beregningen? + Øgning af ISF vil gøre den beregnede kulhydratabsorptionstid længere + Øgning af ISF vil gøre den beregnede kulhydratabsorptionstid kortere Øget ISF vil ikke påvirke absorbering af beregnet kulhydrat Hvordan ændring af IC værdi påvirker COB beregning? + Øgning af IC vil gøre den beregnede kulhydratabsorptionstid længere + Øgning af IC vil gøre den beregnede kulhydratabsorptionstid kortere Øget IC vil ikke påvirke absorbering af beregnet kulhydrat Hvordan skift af profil procent påvirker COB beregning? + Indstilling af profilen til 150% vil gøre den beregnede kulhydratabsorptionstid længere + Indstilling af profilen til 150% vil gøre den beregnede kulhydratabsorptionstid kortere Ved indstilling af profil til 150%, påvirkes absorbering af beregnet kulhydrat ikke IOB-værdi påvirkes af midlertidige basaler. Høj midlertidlig basal vil ikke blive givet, når dit blodsukker er under målet. @@ -119,22 +155,31 @@ Kulhydrat indtastninger og bolusser Kun gram skal bruges til at estimere og registrere kulhydrater, der er indtaget. Kulhydrater der er indtaget, kan blive registreret ved hjælp af et passende udvekslingssystem (F.eks. DAFNE \"CHO\"-udvekslinger eller europæiske \"brød-enheder\"). + AAPS bruger en dynamisk model til at estimere kulhydratabsorption og beregne COB. Hvis blodsukkeret er uden for acceptable værdier (for lavt eller for høj), kan bolusberegneren bruges til at levere forslag til kulhydrat eller insulin korrektioner. + https://wiki.aaps.app/da/latest/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u e-kulhydrater Hvad kan du bruge e-kulhydrater (Forlængede kulhydrater) til? Til at planlægge kulhydrat i fremtiden, evt. uddelt over et interval (svarende til en forlænget bolus, der distribuerer insulin over et interval). Til at logge \'gratis\' motions kulhydrater du ønsker at skjule fra AAPS. e-kulhydrater (distribueret i fremtiden) kan hjælpe AAPS i forbindelse med måltider med højt fedt/protein. + Til at registrere redningskulhydrater du bruger til at behandle et lavt blodsukker. + https://wiki.aaps.app/da/latest/Usage/Extended-Carbs.html Ekstern overvågning Hvordan kan du overvåge AAPS (f.eks. for dit barn) eksternt? AAPSClient app, Nightscout app og Nightscout webside alle giver dig mulighed for at følge AAPS eksternt. Andre apps (f.eks Dexcom følger appen eller X-drip der kører i følger tilstand) tillader dig at følge nogle parametre (f.eks blodsukker eller sensor værdier), men bruger forskellige algoritmer, så de kan have ukorrekte IOB eller COB værdier. For at følge AAPS eksternt, skal begge enheder have internetadgang (f.eks. via Wi-Fi eller mobilnetværk). AAPSClient, der anvendes som ekstern følger, vil både overvåge og give fuld kontrol over AAPS. + https://wiki.aaps.app/da/latest/Children/Children.html Insulinfølsomhedsfaktor (ISF) En forhøjelse af ISF-værdierne vil føre til mere insulintilførsel for at dække en bestemt mængde kulhydrater. + Reduktion af ISF-værdier fører til mere insulintilførsel for at korrigere for et højt blodsukker. + Forhøjelse eller sænkning af ISF har ingen effekt på insulinlevering, når blodsukkeret er under målet. ISF skal indtastes i dine AAPS præferencer. Ændring af ISF-værdien i din profil er nok til at anvende ændringen. + https://wiki.aaps.app/da/latest/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u + https://wiki.aaps.app/da/latest/Usage/Profiles.html Du kan bruge mere end en værdi for I:C forholdet i din profil. Hvis du ændrer din ISF i din profil, bør du også altid ændre dit I:C-forhold. Insulin til kulhydratforhold (I:C ratio) @@ -142,12 +187,17 @@ Lavere I:C-forhold fører til mindre insulin, der leveres til en given mængde af kulhydrater. Hvis du har 0 COB, vil en ændring af I:C-forholdet føre til en anden mængde af insulin for at rette en given BS-værdi. IC vil være anderledes, hvis du tæller brød (udvekslingsenhed) som 10g eller 12g. + Betydningen af IC er: Hvor mange brødenheder er dækket af 1IE insulin? + https://wiki.aaps.app/da/latest/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u Profilskift + Når et 90% profilskift angives, hvilke svar er så sande? Basalrater vil være 10% lavere. ISF vil være 10% højere. Værdien af I:C forholdet vil være et 10% lavere tal. ISF og I:C-forhold vil være uændret. + https://wiki.aaps.app/da/latest/Usage/Profiles.html#profile-switch Profilskift + Når et 120% profilskift angives, hvilke svar er så sande? Blodsukkermålet vil være 20% højere. Basalrater vil være 20% højere. Blodsukkermålet vil være uændret. @@ -156,12 +206,21 @@ Hvis du står op 2 timer tidligere end normalt, hvordan skal du så fortælle AndroidAPS om ændringen i din tidsplan? Start et profilskift med et tidsskift på 2 Start et profilskift med et tidsskift på -2 + Sæt et \"Spiser snart\" midlertidigt blodsukkermål. + Lav et profilskift med en procent på mere end 100%. + https://wiki.aaps.app/da/latest/Usage/Profiles.html#timeshift Ændringer til profiler Basal rater, ISF, I:C ratioer, mv. skal indstilles i profiler. Aktivering af ændringer til din Nightscout-profil kræver, at din AAPS-telefon har internetforbindelse. Redigering af profiler til ændring af værdier er tilstrækkelig til at foretage ændringer. + Flere profiler kan oprettes og vælges til at tilpasse til skiftende omstændigheder (f.eks. hormonelle ændringer, skiftende arbejde, hverdags- / weekendlivsstil). + https://wiki.aaps.app/da/latest/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy Hjælp til basal rater + Hvor man skal opsøge hjælp med at oprette sin basalrate og andre indstillinger. Dit diabetes team Google Facebook + Anden medicin. Læs venligst erklæringen nedenfor og check boksen for at acceptere den. + AAPS reducerer basalraten eller suspenderer insulintilførslen for at hæve blodsukkeret. Medicin i klassen SGLT-2-hæmmere (glifloziner) kan forhindre øgelsen in blodglukose og kan, af denne årsag, producere et farligt insulinmangel som leder til DKA. +\nAlmindelige mærkenavne er: Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nJeg lover hermed, at jeg ikke tager sådan medicin under brug af AAPS eller vil deaktivere loopet før sådan medicin tages i brug. diff --git a/plugins/constraints/src/main/res/values-da-rDK/objectives.xml b/plugins/constraints/src/main/res/values-da-rDK/objectives.xml index d3e98fddd0..bf9fd53f2c 100644 --- a/plugins/constraints/src/main/res/values-da-rDK/objectives.xml +++ b/plugins/constraints/src/main/res/values-da-rDK/objectives.xml @@ -16,8 +16,10 @@ Vær opmærksom på sikkerhedsfunktionerne og juster sikkerhedsparametre, når det er nødvendigt. Begynde at bruge lukket loop med lav glukose suspendering Kør i lukket loop med max IOB = 0 i et par dage uden for mange LGS-begivenheder + Indstilling af MaxIOB til nul forhindrer dig i at få hypoglykæmi og vil ikke tilføje mere insulin udover basalraten (undtagen i situationer med negative IOB) Tuning af lukket loop, hæv max IOB over 0 og sænk gradvist BG målet Kør i et par dage, og mindst én nat uden lave BG alarmer, før du sætter målet for BG ned + Opdater MaxIOB som barnet vokser. Lad ikke systemet give dig mere insulin, end du kan dække med mad = virkelig høj værdier er en dårlig idé. Justér om nødvendigt basaler og forhold og aktivér derefter auto-sens 1 uges vellykket looping i dagtimerne med alle måltider tastet ind Hvis dit Autosens-resultat ikke oscillerer omkring 100%, er din profil sandsynligvis forkert. @@ -25,11 +27,18 @@ Du skal læse wikien og hæve maxIOB for at få SMB\'er til at fungere fint! En god start er maxIOB=gennemsnitlig måltidsbolus + 3 x max daglig basal Brug af SMB er dit mål. Oref1-algoritmen var designet til også at hjælpe dig med dine bolusser. Du bør ikke give fuld bolus for din mad, men kun en del af det og lade AAPS give dig resten, hvis det er nødvendigt. På denne måde har du mere plads til at fejlberegne kulhydrater. Vidste du, at du kan indstille en procentdel af boluslommeregnerens resultat for at reducere størrelsen af bolus? Aktiverer yderligere funktioner til brug i dagtimerne, såsom Dynamisk sensitivitet-plugin + Sørg for, at SMB fungerer korrekt. Aktivér DynamicISF-plugin\'et og identificér den passende kalibrering for din krop specifikt. Det er tilrådeligt at begynde med en værdi, der er lavere end 100% af sikkerhedsmæssige årsager. + Den Dynamiske Sensitivitetsplugin er baseret på den idé, at det totale insulinforbrug og nuværende glycæmi-niveauer påvirker din følsomhed. DynamicISF-plugin kan justere Insulinfølsomhedsfaktoren (ISF) som algoritmen benytter. Aktiverer automatisering + Læs dokumentationen om hvordan automatisering virker. Opsæt dine første enkle regler. I stedet for handling, lad kun AAPS vise notifikationer. Når du er sikker på, at automatisering udløses på det rigtige tidspunkt, skal du erstatte notifikationen med reel handling. (https://wiki.aaps.app/en/latest/Usage/Automation.html) + Automatisering kan være en god tjener, men en dårlig mester. Lad være med at overbruge den. Forsøg ikke at erstatte den underliggende algoritme. Test kun reglen med besked før brug. Det afhænger af rækkefølgen. + BS er tilgængeligt i NS eller Tidepool + Pumpestatus tilgængelig i NS eller Tidepool Manuelle handlinger Udført: %1$s Lær at styre AAPS Udfør forskellige handlinger i AAPS + Du har lært at håndtere det grundlæggende omkring AAPS. De vigtigste knapper er på Overblik-skærmen tilgængelig ved klik eller langt klik. Der er også adgang til flere knapper på Action-skærmen. Du bør vide, hvordan man sætter et plugin\'s skærm på toppen af rullebaren eller lade det vise i øverste venstre liste af aktiverede plugins. Indstil profil til 90% i 10 min (Tryk og hold på profilnavn i Oversigt) Simulér brusebad. Afbryd pumpen i 1t (Tryk og hold på Open Loop) ... og genforbind på samme måde @@ -39,12 +48,41 @@ Brug skala-funktion ved at trykke på BG-diagrammet længe Bevis din viden Undersøg spørgsmålene. Du får fire mulige svar på hvert spørgsmål. Der kan være mere end et korrekt svar. Tjek alle dem, der er korrekte, og vælg GODKEND. + Du behøver ikke at være udvikler, men du har brug for NS til at passere mål. Derudover er en kompatibel pumpe og computer til at bygge AAPS for første gang og for hver opdatering også nødvendige. + AAPS kan køres offline. + Profilen skal gennemgås og opdateres. Bedre profil = bedre resultater. + DIA i looping har en anden betydning (tid indtil alt insulin absorberes) end i klassisk pumpebehandling (tid indtil det meste insulin absorberes). + Du lærte betydningen af ISF-værdi, og hvordan det påvirker mængden af insulin, der anvendes til BS korrektion. + Du lærte betydningen af IC-værdi, og hvordan det påvirker mængden af insulin, der anvendes til at dække kulhydrater. + Hypo midlertidigt mål bruges kun til at forhindre overkorrektion efter hypo, når IOB er negativ. Yderligere handlinger bør evalueres for at forhindre denne situation igen i fremtiden. + Brug af procent påvirker ikke BS-mål men basal, ISF og IC justeres for at give mere insulin (over 100%%) eller mindre insulin (under 100%%). + Ved at bruge tidsforskydning i profilmenuen kan du tilpasse døgnprofilen til uregelmæssigheder som at vågne senere. + Redigering af profilen i sig selv er ikke tilstrækkeligt til at foretage en ændring. Du skal stadig udføre et profilskift for at aktivere ændringerne. + Du bør reducere mængden af insulin i kroppen mindst 1 time før start af motion ved at vælge en profil under 100%. + Indstilling af et højere midlertidigt mål mindst 1 time før motion hjælper med at reducere mængden af insulin i kroppen. + Når du ikke kan stole på CGM-værdierne, bør du ikke bruge loop uden opsyn. + AAPS skal vide, at pumpen ikke er tilsluttet for at tælle IOB korrekt. + At fortælle hvilken insulin der er i pumpen er nødvendigt, da det påvirker IOB-beregningen. + Følsomhedsdetektion er en del af algoritmen, som giver mulighed for at tilpasse insulindosis til forskellige situationer. + Dine fremskridt i Målsætninger gemmes sammen med andre indstillinger, og du bør sikkerhedskopiere dem. + Behold altid eksporterede indstillinger og genererede APK, også uden for telefonen, hvis telefonen går tabt, bliver beskadiget osv. Et godt sted kan være enhver cloud-løsning tilgængelig fra telefonen. I dette tilfælde kan du gendanne AAPS på en anden enhed på et par minutter. God praksis er at gemme din hovedadgangskode et sikkert sted også. Uden den er din backup ubrugelig. Det samme gælder for signeringsnøgler (. ks fil) og adgangskoder, der bruges til at opbygge AAPS. Resten er ikke vigtigt - det kan når som helst downloades fra internettet igen. + Hvis du har lavet forkert input til AAPS eller det ikke matcher virkeligheden, så løs det så hurtigt som muligt, da det kan føre til overdosering. AAPS skal altid informeres bedst muligt om kulhydrat, insulin osv. + Hvis du analyserer om AAPS fungerer godt for dig, giver det meget nyttig information at kigge på IOB-grafen. + COB-beregninger afhænger af forholdet mellem ISF og IC. Stigende ISF eller faldende IC vil føre til længere absorptionstider, men profilskift med procent angivet ændrer begge værdier på samme tid og absorptionstid påvirkes ikke. + Kun gram er tilladt ved indtastning af kulhydrater. + E-kulhydrater er en erstatning for udvidet bolus i pumpeverdenen. + Fjernovervågning og -kontrol er muligt, men ikke alle funktioner skal nødvendigvis være tilgængelige eksternt. Svar deaktiveret indtil: %1$s Forkert svar! Næste uafsluttede Anmod om kode: %1$s (tjek alle de korrekte svar) + https://wiki.aaps.app/da/latest/Getting-Started/FAQ.html#what-to-do-when-taking-a-shower-or-bath + https://wiki.aaps.app/da/latest/Getting-Started/Screenshots.html#the-homescreen + https://wiki.aaps.app/da/latest/Configuration/Config-Builder.html + https://wiki.aaps.app/da/latest/Getting-Started/Screenshots.html#the-homescreen Ingen forbindelse til internettet Tid kunne ikke hentes Quiz krav ikke opfyldt + Hvad jeg har lært: diff --git a/plugins/constraints/src/main/res/values-da-rDK/strings.xml b/plugins/constraints/src/main/res/values-da-rDK/strings.xml index 290168079d..ed14a20b5c 100644 --- a/plugins/constraints/src/main/res/values-da-rDK/strings.xml +++ b/plugins/constraints/src/main/res/values-da-rDK/strings.xml @@ -2,11 +2,27 @@ + Sommertidsændring inden for de næste 24 timer eller mindre + Sommertidsændring mindre end 3 timer siden - Lukket loop deaktiveret + Frigør mindst %1$d MB fra intern lagerplads! Loop deaktiveret! + gammel version + meget gammel version + Applikationen er udløbet + Ny version er ikke blevet tjekket i mindst %1$d dage! Tilbagefalder til LGS efter %2$d dage, loop vil blive deaktiveret efter %3$d dage. Gendan internetforbindelse! + Vi har opdaget, at du kører en ugyldig version. Loop deaktiveret! + Version %1$s tilgængelig + Version %1$s udløber den %2$s + Genberegnede data anvendt + BG for tæt:\n%1$s\n%2$s + genberegnet + dobbelpostering + Flad data. Anses for at være forkert + Begrænser udvidet bolus til %1$.1f IE på grund af %2$s Begrænser kulhydrater til %1$d g på grund af %2$s Pumpe er ikke egnet til midlertidig basal Lukket loop tilstand deaktiveret i præferencer @@ -18,14 +34,20 @@ hård grænse Behandlings sikkerhed + Fuldført, godt klaret! Ikke afsluttet endnu Tid forløbet Maksimal IOB sat korrekt BS tilgængelig fra valgte kilde + Synkroniseringstjeneste har skriverettighed Loop aktiveret APS valgt Lukket tilstand aktiveret OBJ Oplæringsprogram Vil du nulstille objektiv start? Du kan miste dine fremskridt. + Næste + Forrige + Nulstil færdig tilstand + Nulstil startet tilstand diff --git a/plugins/constraints/src/main/res/values-ko-rKR/objectives.xml b/plugins/constraints/src/main/res/values-ko-rKR/objectives.xml index b6c8777f6a..0b0e2d5cf5 100644 --- a/plugins/constraints/src/main/res/values-ko-rKR/objectives.xml +++ b/plugins/constraints/src/main/res/values-ko-rKR/objectives.xml @@ -55,7 +55,7 @@ ISF 값의 의미와 인슐린 양이 어떻게 BG 보정에 영향을 미치는지 배웠습니다. IC 값의 의미와 이것이 탄수화물을 커버하는 데 필요한 인슐린의 양에 어떻게 영향을 미치는지 배웠습니다. 일반적으로 음성 IOB가 쌓여 있는 경우, 피하 주사 후 피하 주사 보정을 방지하기 위해 피하 주사 임시 대상이 사용됩니다. 향후 이러한 상황을 다시 방지하기 위해 추가 조치를 평가해야 합니다. - 백분율을 사용하는 것은 표적 BG에 영향을 미치지 않지만 basal, ISF 그리고 IC는 더 많은 인슐린 (100% 이상) 또는 더 적은 인슐린 (100% 미만)을 제공하도록 조정됩니다. + 백분율을 사용하는 것은 표적 BG에 영향을 미치지 않지만 basal, ISF 그리고 IC는 더 많은 인슐린 (100%% 이상) 또는 더 적은 인슐린 (100%% 미만)을 제공하도록 조정됩니다. 프로파일 스위치의 시간 이동을 사용하여 일일 프로파일을 늦은 기상과 같은 불규칙성에 적응시킬 수 있습니다. 프로파일 편집 자체만으로는 변경할 수 없습니다. 변경한 내용을 활성화하려면 프로파일 전환을 진행해야 합니다. 프로파일을 100% 이하로 선택하여 운동을 시작하기 최소 1시간 전에 체내 인슐린 양을 줄여야합니다. diff --git a/plugins/insulin/src/main/res/values-da-rDK/strings.xml b/plugins/insulin/src/main/res/values-da-rDK/strings.xml index f6c2efdda1..4f249408e8 100644 --- a/plugins/insulin/src/main/res/values-da-rDK/strings.xml +++ b/plugins/insulin/src/main/res/values-da-rDK/strings.xml @@ -11,5 +11,8 @@ Spidstidspunkt [min] Free-Peak Oref Rapid-Acting Oref + Ultra-Rapid Oref DIA af %1$f for kort - bruger %2$f i stedet! + Novorapid, Novolog, Humalog + Fiasp diff --git a/plugins/main/src/main/res/values-da-rDK/strings.xml b/plugins/main/src/main/res/values-da-rDK/strings.xml index 2828b0f607..f82470defa 100644 --- a/plugins/main/src/main/res/values-da-rDK/strings.xml +++ b/plugins/main/src/main/res/values-da-rDK/strings.xml @@ -23,6 +23,11 @@ 3. Test Engangsadgangskode Nulstil Autentificering På hver follower telefon installeres Authenticator app, der understøtter RFC 6238 TOTP tokens. Populære gratis apps er:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator + Ved at nulstille autentificeringen gør du alle allerede tilvejebragte authenticatorer ugyldige. Du vil bliver nødt til at opsætte dem igen! + OK + FORKERT STØRRELSE! + FORKERT PIN + FORKERT OTP Forkert kode. Kommandoen annulleret. Timeout mens du venter på afslutning af tidligere pumpe kommunikation Tilladte telefonnumre @@ -87,6 +92,9 @@ Ugyldigt beskedindhold Send sms, hvis der udløses en utilgængelig pumpebegivenhed Rapportér pumpe utilgængeligt + For at skifte Loop-tilstand til LGS (Low Glucose Suspend), svar med kode %1$s + For at skifte Loop-tilstand til Lukket loop, svar med kode %1$s + Nuværende loop-tilstand: %1$s Forkert Format BG: Sidste BG: @@ -133,6 +141,7 @@ Fejl i basal rate værdier Fejl i målværdier Fejl i ISF-værdier + Nogle af profilnavnene indeholder punktummer.\nDette understøttes ikke af NS.\nProfiler vil ikke blive uploadet til NS. Ugyldig profil %1$s blev ikke accepteret fra NS Vis Fejl @@ -165,6 +174,8 @@ Patch pumpe Vis statuslys på startskærm + Grænseværdi for advarsel på cannula-alder [t] + Grænseværdi for kritisk cannula-alder [t] Grænseværdi for insulin-alder [h] Grænseværdi for kritisk insulin-alder [h] Grænseværdi advarsel for sensoralder [h] @@ -232,6 +243,7 @@ Forkort titel Vis notefelt i behandlingsdialoger Bolus guiden udfører beregning, men kun denne del af beregnet insulin leveres. Nyttig med SMB algoritme. + Levér fuld bolus (100%), hvis glycæmi er ældre end Aktiver bolus rådgiver Brug påmindelse om at begynde at spise senere i stedet for guiden under høj glykæmi (\"pre-bolus\") Aktiver superbolus i guiden @@ -243,6 +255,7 @@ Forudsigelser Behandlinger + Puls Afvigelses hældning Aktivitet Blodsukker virkning @@ -260,6 +273,7 @@ ABS AFVHÆL BEHANDL + HR SENS Graf skala Graf @@ -269,12 +283,14 @@ Knapper vises altid nederst på skærmen Stort display Udseende + brug: Send dagens logfiler til udviklere sammen med denne tid. Uventet situation. UR Overvåg og kontrollér AndroidAPS ved hjælp af dit WearOS-ur. (Intet ur forbundet) + Pumpestatus Loop status Guide:\nInsulin: %1$.2fE\nKH: %2$dg Valgt guide er ikke længere tilgængeligt. Opdater venligst din widget @@ -296,9 +312,46 @@ Generelle indstillinger Giv besked ved SMB Vis SMB på uret som en standard bolus. + Brugerdefinerede Urskiveindstillinger + Brugerdefineret Urskivegodkendelse + Godkend indlæste brugerdefinerede urskive til at ændre og låse nogle overvågningsindstillinger der passer til urskivens design + Brugerdefineret Urskive: %1$s + Indlæs Urskive + Infos Urskiver + Eksporter skabelon + Brugerdefineret urskiveskabelon eksporteret Send alle data igen Åbn indstillinger på ur + Liste over præferencer låst af urskiven + Liste over præferencer påkrævet af urskiven + Liste over felter inkluderet i Urskiven Viser en løbende notifikation med en kort oversigt over, hvad dit loop gør GAMLE DATA + forsøger at hente data fra pumpen. + TDD: Stadig gammel data! Kan ikke indlæse fra pumpen. + g + t + Ingen aktiv profilskift! + Profil:\n\nTidsskift: %1$d\nProcent: %2$d%%\" + %1$.2fIE %1$.0f%% + Ingen profil indlæst + Gælder kun i APS-tilstand! + Sidste resultat ikke tilgængeligt! + LUKKET LOOP + ÅBEN LOOP + LOOP DEAKTIVERET + APS + Sidste brug + Sidste Aktivering + I dag + vægtet + Mål gælder kun i APS-tilstand! + Ingen historisk data! + IE + Midlertidigt mål + indtil + Standardmål + mål + Rate: %1$.2fIE/t (%2$.2f%%) \nVarighed %3$d min diff --git a/plugins/source/src/main/res/values-da-rDK/strings.xml b/plugins/source/src/main/res/values-da-rDK/strings.xml index c9c981ad8e..59ced584ab 100644 --- a/plugins/source/src/main/res/values-da-rDK/strings.xml +++ b/plugins/source/src/main/res/values-da-rDK/strings.xml @@ -1,14 +1,19 @@ + NSClient BS + NS BS Downloader BG data fra Nightscout + xDrip+ BS Modtag BG-værdier fra xDrip+. BYODA BYODA Modtag BS-værdier fra \'Byg din egen Dexcom App\'. Eversense App (patched) Modtag BG værdier fra den patchede Eversense app. + Glimp Modtag BG-værdier fra Glimp. + MM640g Modtag BG-værdier fra 600SeriesAndroidUploader. Poctech Modtag BS-værdier fra Poctech app @@ -19,7 +24,16 @@ Tomato (MiaoMiao) Tomato Modtag BS-værdier fra Tomato-appen (MiaoMiao enhed) + GlucoRx Aidex Aidex Modtag BG-værdier fra GlucoRx Aidex CGMS. + Tilfældigt BS + Generér tilfældig BS-data (kun demotilstand) + BS + Seng BS data til xDrip+ + I xDrip+, vælg 640g/Eversense som datakilde BS upload indstillinger + Log sensorændring til NS + Opret begivenhed \"Sensorskift\" i NS automatisk ved start af sensor + retning diff --git a/plugins/sync/src/main/res/values-da-rDK/oh_strings.xml b/plugins/sync/src/main/res/values-da-rDK/oh_strings.xml index d3ba81bbb1..5a87308ed0 100644 --- a/plugins/sync/src/main/res/values-da-rDK/oh_strings.xml +++ b/plugins/sync/src/main/res/values-da-rDK/oh_strings.xml @@ -1,5 +1,7 @@ + Open Humans + OH Open Humans giver dig mulighed for at uploade dine diabetes data og donere det til videnskabelige projekter. Log af Opsætning @@ -37,6 +39,8 @@ Algoritme Fejlretningsdata Data IKKE uploadet Kodeord + Nightscout URL + Nightscout API Secret Fritekstfelt Jeg forstår og er enig. Login på Open Humans diff --git a/plugins/sync/src/main/res/values-da-rDK/strings.xml b/plugins/sync/src/main/res/values-da-rDK/strings.xml index 77532fa147..74bbb5a74a 100644 --- a/plugins/sync/src/main/res/values-da-rDK/strings.xml +++ b/plugins/sync/src/main/res/values-da-rDK/strings.xml @@ -14,6 +14,7 @@ Opret Nightscout meddelelse for fejldialoger og lokale advarsler (kan også ses i Careportal under Behandlinger) Opret Nightscout meddelelser fra kulhydrat krævet advarsler Synkroniserer dine data med NightScout + Synkroniserer dine data med NightScout ved brug af v3 API Blokeret af opladningsmuligheder Blokeret af forbindelsesmuligheder Ikke understøttet version af Nightscout @@ -22,6 +23,8 @@ NSClient funktionsfejl. Overvej NS og NSClient genstart. NSCLIENT har ingen skrivetilladelse. Forkert API-secret? + NSClientV3 + NSV3 NSClient NSCI URL: @@ -32,6 +35,9 @@ NS API secret NS API secret Indtast NS API secret (min 12 tegn) + NS-adgangstoken + NS-adgangstoken + Adgangstoken genereret på NS-adminside (min. 17 tegn) Afgiver nu Ryd kø Vis kø @@ -69,6 +75,8 @@ Akut forældet data grænse [min] Log app-start til NS Kopier NS-indstillinger (hvis de findes)? + Opret forbindelse til websockets + Aktivering betyder: hurtigere opdateringer, modtagelse af alarmer og meddelelser og højere batteriforbrug svarende til v1. Alle andre uploadere til NS skal bruge v3-protokollen. Dit brugernavn til Tidepool, normalt din e-mailadresse Login Brugernavn @@ -88,7 +96,24 @@ Fjern alle Nulstil start Upload nu + Ikke tilsluttet + Skrivebeskyttet + Arbejder + xDrip+ + XD + Send data til xDrip+ + Vis detaljeret IOB + Bryd IOB ned i bolus- og basal-IOB på urskiven + Vis BGI + Tilføj BGI til statuslinje + xDrip+ Statuslinje Avanceret + Loop deaktiveret + Send statuslinje til xDrip+ + xDrip+ ikke installeret + Kalibrering sendt til xDrip+ + Send glukose og behandlingsdata til xDrip+. Datakilde \"xDrip+ Sync Follower\" skal vælges og accept af data skal være aktiveret i Indstillinger - \"Inter-app settings\" - \"Accept Glucose\"/\"Treatments\" + Aktivér udsendelser til xDrip+. diff --git a/pump/combov2/src/main/res/values-da-rDK/strings.xml b/pump/combov2/src/main/res/values-da-rDK/strings.xml index 5436d2dc1c..f8452e78ba 100644 --- a/pump/combov2/src/main/res/values-da-rDK/strings.xml +++ b/pump/combov2/src/main/res/values-da-rDK/strings.xml @@ -1,20 +1,130 @@ + Accu-Chek Combo + Indbygget pumpeintegration til Accu-Chek Combo-pumper + Kunne ikke forbinde til pumpen + Ikke parret til en pumpe + Pumpe afsluttede forbindelsen + Combo-advarsel + Combo-fejl + Ring til hotline for opdatering + Bluetoothfejl; lav parring igen + Reservoir tomt Batteri afladet Tilstopning + Afslutning af sikkerhedskopiering af pumpeoperation Mekanisk fejl + Elektronisk fejl + Strøm afbrudt + Afslutning af lånepumpeoperation + Reservoir-fejl + Infusionssæt ikke klargjort + Udvidet bolus understøttes ikke + Accu-Check Combo v2 + Par med pumpe + Upar pumpe + Driver-status + Nuværende aktivitet Bluetooth adresse + Start parring + Combo-parring i gang + Skridt til at udføre parring med din Combo:\n\n +1. Navigér til Bluetooth-indstillingerne på din pumpe\n +2. Tjek om en enhed allerede er vist som parret. I så fald, gå til pumpeskærmen \"Slet enhed\" for at slette/fjerne enheden\n +3. Gå til skærmen med \"Tilføj enhed\" og start parring på pumpen\n +4. Klik på knappen \"Start parring\" nedenfor for at starte parring i AndroidAPS\n + Efter et stykke tid vises telefonens navn på pumpens skærm; tryk på CHECK for at bekræfte.\n\n +bekræft den færdige parring på din pumpe efter parringen er fuldført og vend tilbage til hovedpumpeskærmen ved at trykke to gange på CHECK-knappen.\n\n +Hvis der ikke oprettes forbindelse efter mere end omkring 5 minutter:\n\n +1. Tryk på Tilbage eller \"Annuller Parring\"-knappen\n +2. Annuller parringen på Combo (tryk på både OP- og MENU-knapperne på samme tid for at annullere parring)\n +3. Prøv at parre igen + Indtast PIN + Annullér parring + 10-cifret PIN + Succesfuldt parret med Combo + Parring med Combo annulleret af bruger + Combo scanning timeout nået + Parring fejlede på grund af fejl: %1$s + Parring afbrudt af ukendt årsag + "Ugyldig parring PIN-længde: Har brug for %1$d cifre, fik %2$d" + Scanner efter pumpe + Etablerer Bluetooth-forbindelse (forsøg nr. %1$d) + Udfører håndtryk med pumpe + Pumpe anmoder om 10-cifret PIN + Færdiggør parring + Inen forbindelse i %1$d minutter + Mindre end 1 minut siden + Indstiller aktuel pumpetid + Indstiller aktuel pumpedato Ikke initialiseret + Kontrollerer pumpe Klar Sat på pause + Pumpe er suspenderet + Udfører Kommando + Læser basalprofil Indstiller basal profil + Indstiller %1$d%% TBR i %2$d minutter + Annullerer igangværende TBR + Leverer %1$.1f IE bolus + Henter TDD-historik + Opdaterer pumpetid + Opdaterer pumpestatus + PIN virkede ikke. Tjek om der var en tastefejl. Hvis dette bliver ved med at ske, annullér og prøv at parre igen. + Opdagelsesvarighed (i sekunder) + Aktivér detaljeret Combo-logning + Henter basalprofil; %1$d faktor(er) læst + Indstiller basalprofil; %1$d faktor(er) skrevet + Leverer bolus (%1$.1f af %2$.1f IE leveret) + Kan ikke levere behandling - pumpen er pauseret + Utilstrækkelig insulin i reservoir Bolus annulleret Bolus levering mislykkedes. Det ser ud til at ingen bolus blev leveret. Kontroller venligst pumpen for at undgå en dobbelt bolus og derefter bolus igen. For at beskytte mod fejl hentes bolusser ikke automatisk. + Bolus ikke leveret + Kan ikke få adgang til pumpedata; pumpen skal parres igen + Uagtede bolusleverancer opdaget. Annullerer bolus af sikkerhedsmæssige årsager. + Forkert aktiv basalprofil; profil 1 skal være den aktive, ikke profil %1$d + Ukendt Combo-alarm + Combo-alarm %1$d%% (%2$d min tilbage) + %1$d%% (mindre end 1 min tilbage) + Indlæsning af TDD\'er annulleret + Hentning af TDD\'er mislykkedes Pumpebatteri er lavt + Pumpe reservoir-niveau er lavt + Indstilling af TBR lykkedes + Indstilling af TBR mislykkedes + Sæt emuleret 100% TBR + Lader igangværende emuleret 100% TBR færdiggøre + Ignorerer redundant 100% TBR-anmodning + Uventet grænse opstod under justering af TBR: målprocent var %1$d%%, ramte en grænse på %2$d%% + Kan ikke indstille absolut TBR hvis basalraten er nul + Par AndroidAPS og Android med en pt. uparret Accu-Chek Combo-pumpe + Frakobl AndroidAPS og Android med en pt. parret Accu-Chek Combo-pumpe + Ukendt TBR blev fundet og stoppet; procent: %1$d%%; resterende varighed: %2$s + Forbindelsesfejl: %1$s Seneste forb: %1$d min siden + Alarm %s + Sidste bolus: %1$s @ %2$s Midl: %s Reservoir: %dIE tom lav + fuld + Batt.: %s + Detektér automatisk og indtast automatisk ændring af insulinreservoirændringer + Detektér automatisk og indtast automatisk ændring af batteriskift + Insulinreservoirændring automatisk indtastet af combov2-driver + Batteriændring indtastet automatisk af combov2-driver + Tidszone ændret + Dato og/eller klokkeslæt ændret + Sommertid startet + Sommertid afsluttet + Kan ikke oprette forbindelse til pumpen, da pumpen rapporterede en fejl. Brugeren skal håndtere fejlen, og derefter enten vente 5 minutter eller trykke på \'Opdater\'-knappen i fanen driver. + Genindlæser pumpens status, efter pumpen rapporterede en fejl + Gå tilbage + Kan ikke udføre parring fordi driveren ikke er initialiseret. Dette sker typisk, fordi de nødvendige Bluetooth-tilladelser ikke er blevet tildelt. Gå tilbage, tildel Bluetooth-tilladelser, og prøv derefter at parre igen. + Kan ikke starte driver - Bluetooth er deaktiveret + Driver kan ikke køre - denne enhed understøtter ikke Bluetooth diff --git a/pump/eopatch/src/main/res/values-da-rDK/strings.xml b/pump/eopatch/src/main/res/values-da-rDK/strings.xml index a71bac2b26..f53918104f 100644 --- a/pump/eopatch/src/main/res/values-da-rDK/strings.xml +++ b/pump/eopatch/src/main/res/values-da-rDK/strings.xml @@ -1,11 +1,39 @@ + EOPatch2 + EOP2 + Pumpeintegration til EOPatch2 / GlucoMen Day Alarmer + Lavt reservoir Alarmer + Patch Udløbspåmindelser + Patch buzzer-påmindelser + t:mm a + BLE-status + Serienummer + Lot-nummer + Vækningsdato & tid + Udløbstidspunkt Status Standard basal rate Midlertidig basal rate Total afgivet + Profilens basal er under 0.05 IE/t. EOPatch har en minimum injektionsenhed på 0.05IE. Prøv venligst igen efter profilen er sat til mere end den mindste injektionsenhed. + Ingen profil valgt. Vælg venligst en profil og prøv igen. dag + + + - + 30 min + 1 t + 1 t 30 min + 2 t + \u0020 + For at skifte til ny Patch skal den nuværende Patch kasseres. Al insulintilførsel fra Patchen annulleres. + Bortskaffelse af Patch afsluttet. + Patch er blevet deaktiveret.\nKassér Patchen.\nFjern Patchen fastgjort til din krop. + En bolus er i processen af at blive leveret. Vil du virkelig annullere insulintilførslen og kassere Patchen? + En midlertidig basal er i processen af at blive leveret. Vil du virkelig annullere insulintilførslen og kassere Patchen? + En bolus og en midlertidig basal er i processen af at blive leveret. Vil du virkelig annullere insulintilførslen og kassere Patchen? + Er du sikker på at du vil kassere en Patch? Resterende insulin Resterende tid Afslut @@ -26,11 +54,15 @@ 2. Lyt efter ét bip. Start parring + Patch parrer 2/6 + Den nye Patch parres.\nHold Patchen og mobilen så tæt på hinanden som muligt Forberéd dig på vedhæftning af Patchen 3/6 Fjern den klæbelige tape og tryk derefter på \'Næste\'. [Caution1] Hvis en nål stikker ud, skal du trykke på \'Kassér\'. + [Caution2] Hvis Patchen er våd eller beskidt, eller dens klæbetape er foldet, skal du trykke på \'Kassér\'. + Fastgøring af Patchen 4/6 Rens og tør påføringsstedet, og sæt derefter Patchen på huden. Kontrollér infusionsstedet, og tryk derefter på \'Start sikkerhedskontrol\'. @@ -53,8 +85,23 @@ Patch-kommunikationstjek Kontrollerer Patch-kommunikation… Placér din mobil tættere på Patchen. + Gå venligst til en anden lokation og prøv igen. + Kommunikationsfejl + Kommunikation lykkedes + Forbundet med Patchen. + Annullér parring dage +  IE + Efter suspenderingen vil den nuværende leverende Bolus & Midlertidig basal vil blive annulleret. \n\nRate : %1$s IE/t\nResterende tid : %2$s\n& Insulin tilbage: %3$.2f IE + Efter suspenderingen vil den aktuelt leverende Bolus blive annulleret. \n\nInsulin tilbage: %1$.2f IE + Efter suspenderingen vil den nuværende leverende Midlertidige Basal blive annulleret. \nRate : %1$s IE/t\nResterende tid : %2$s + Insulintilførslen suspenderes. + Kassér/Ændr Patch + Aktivér Patch + Kassér Patch Genoptag + Kassér + Kommunikationstjek Suspendér Sat på pause Kører @@ -62,8 +109,25 @@ Bekræft Alarm Forbinder + Lader + Behandler Prøv igen + [Caution] Fjern IKKE kanylehætten og bagsiden af klæbemidlet før yderligere instruktion. + Er du sikker på at du vil kassere den nuværende Patch? + Grundet ubekræftet bolusinformation kan Bolus calc ikke bruges før %s.\n\nEr du sikker på at du vil kassere den aktuelle Patch? + Nålindføringsfejl. + Kontrollér at retningen af hullet efterladt er lige efter drejningen af håndtaget og tryk derefter på \'Prøv igen\'. + Tryk på \'Kassér\' for at deaktivere Patch. + Basal-suspenderingstid + Genoptag insulintilførsel + Afslutning af insulinsuspension.\nTryk på \'Bekræft\' for at genoptage insulinleveringen.\n\n[Caution]\nInsulinleveringen vil ikke blive genoptaget, før du trykker på \'Bekræft\'.\nHvis du ikke trykker på \'Bekræft\', kan der opstå hyperglykæmi. Insulintilførslen suspenderet. + Insulintilførsel genoptaget. Afslut + resterende tid: %1$s:%2$s Næste + Prøv igen efter Patch-kommunikationstjek. + Suspendering mislykkedes. + Genoptagelse mislykkedes. + EEE, d MMM, åååå tt:mm a diff --git a/pump/eopatch/src/main/res/values-da-rDK/strings_alarm.xml b/pump/eopatch/src/main/res/values-da-rDK/strings_alarm.xml index 61862d1424..34381dab8b 100644 --- a/pump/eopatch/src/main/res/values-da-rDK/strings_alarm.xml +++ b/pump/eopatch/src/main/res/values-da-rDK/strings_alarm.xml @@ -1,2 +1,32 @@ - + + Tomt reservoir\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch udløbet\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Okklusion\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Fejl i tændinsselvtest\nPatch er blevet deaktiveret. Skift Patch nu. + Upassende temperatur\nInsulintilførsel eller \'Aktivér Patch\'-proces stoppet. Undgå ekstreme temperature med det samme. + Nålindsættelsesfejl\nTjek knappens position og tryk \'Prøv igen\'. + Patch batterifejl\nPach er blevet deaktiveret og\ninsulintilførsel er stoppet. Skift Patch nu. + Patch batterifejl\nPach er blevet deaktiveret og\ninsulintilførsel er stoppet. Skift Patch nu. + Patch aktiveringsfejl\n\'Aktivér Patch\'-proces er udløbet. Tryk på \'Bekræft\' for at deaktivere nuværende Patch. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og \ninsulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-Fejl\nPatch er blevet deaktiveret og insulintilførsel er stoppet. Skift Patch nu. + Patch-driftstid vil udløbe %s. Vær klar til at ændre Patch. + Afslutning af insulinsuspensionen\nTryk på \'Fortsæt\' for at genstarte insulintilførslen. + Lavt reservoir\nUdskift Patch snart. + Patch driftslevetid udløbet\nSkift Patch nu. + Patch udløber snart\nSkift Patch nu. + Ufuldstændig Patch-aktivering\nGennemfør \'Aktivér Patch\'-proces. + Patch-batteri lavt\nVær klar til at ændre Patch. + diff --git a/pump/medtrum/src/main/res/values-da-rDK/arrays.xml b/pump/medtrum/src/main/res/values-da-rDK/arrays.xml index 3ea04e700d..53f90ec7a5 100644 --- a/pump/medtrum/src/main/res/values-da-rDK/arrays.xml +++ b/pump/medtrum/src/main/res/values-da-rDK/arrays.xml @@ -1,2 +1,13 @@ - + + + Lys, vibration og bip + Lys og vibration + Lys og bip + Lys + Vibration og bip + Vibration + Bip + Lydløs + + diff --git a/pump/medtrum/src/main/res/values-da-rDK/strings.xml b/pump/medtrum/src/main/res/values-da-rDK/strings.xml index 36c8a820fe..1195d5afbe 100644 --- a/pump/medtrum/src/main/res/values-da-rDK/strings.xml +++ b/pump/medtrum/src/main/res/values-da-rDK/strings.xml @@ -1,9 +1,119 @@ + Medtrum + MT + Pumpeintegration for Medtrum Nano og Medtrum 300IE + Medtrum pumpeindstillinger + Pumpefejl: %1$s!! + Pumpe er pauseret + Pumpen er pauseret på grund af overskredet insulin pr. time + Pumpen er pauseret på grund af overskredet insulin pr. dag + Patch ikke aktiveret + Indstilling af brugerindstillinger til pumpe mislykkedes! + BLE Status + Sidst forbundet + Aktiv bolus + Pumpe tilstand + Aktive alarmer + %.2f IE + %.2f V + Basaltype + Basalrate + %.2f IE/t + Pumpetype + Firmwareversion + Patch nr. + Patch udløber + Genindlæs + Nulstil alarmer + Skift Patch + Anmodet af bruger + Ikke aktiveret + None + Pumpe lavt batteri + Pumpe lavt reservoir + Pumpe udløber snart + Lavt BG suspenderet + Lavt BG suspenderet 2 + Auto suspenderet + timemaksimum suspenderet + dagsmaksimum suspenderet + Suspenderet + Pauseret + Okklusion + Udløbet + Reservoir tomt + Patch-fejl + Patch-fejl 2 + Basisfejl + Batteri udløbet + Ingen kalibrering + Mislykkedes i at opdatere pumpetidszone, udskyd beskeden og opdatér manuelt. + Forsøg igen + Næste + Kassér + Aktivér Patch + Forbind og fyld + Klargør + Klargører + Klargøring afsluttet + Vedhæft Patch + Aktiverer... + Aktivering Fuldført + Deaktivér Patch + Deaktiverer... + Patch deaktiveret + Aktivering i gang + Uventet status: %1$s + Ingen profil valgt. Vælg venligst en profil og prøv igen. + Pumpe Basisserie: %1$X + Ingen aktiv patch. Tryk på Næste for at starte aktiveringsprocessen. + Pumpebasen må ikke forbindes til Patchen før næste trin! + Tilslut pumpebasen til en ny Patch, fjern resterende luft og fyld med insulin, tryk derefter på Næste. + Bemærk: Der kræves mindst 70 enheder til aktivering. + Sæt ikke Patchen på kroppen endnu. + Halvtryk på nåleknappen. Tryk derefter på Næste for at starte klargøring. + Vent venligst til klargøringen er færdig. + Kunne ikke klargøre, tryk på Prøv igen for at prøve igen. + Tryk på Næste for at fortsætte. + Tryk på Næste for at starte aktivering. + Fjern sikkerhedslåsen. Sæt pumpen på kroppen. Tryk på nåleknappen. + Aktiverer pumpen og indstiller den oprindelige basalrate. Vent venligst. + Kunne ikke aktivere, tryk på Prøv igen for at prøve igen. + Ny patch aktiveret. %.2f Enheder tilbage. + Tryk OK for at vende tilbage til hovedskærmen. + Er du sikker på, at du vil deaktivere den aktuelle Patch? + Er du sikker på, at du vil annullere aktiveringen? + Er du sikker? Denne handling kan ikke fortrydes!! + Tryk på Næste for at deaktivere eller Annullér for at vende tilbage til hovedskærmen. + Deaktiverer Patch. Vent venligst. + Kunne ikke deaktivere, tryk på Kassér for at glemme Patch. + Træk nålen tilbage. Fjern Patchen fra kroppen. + Fjern pumpebasen og bortskaf det brugte plaster på passende vis. + Tryk OK for at vende tilbage til hovedskærmen. Tryk Næste for at starte aktiveringen af en ny Patch. + Ups! Noget gik galt, det ser ud til, at der allerede er en aktivering i gang. + Tryk på Næste for at genoptage aktiveringen eller Kassér for at nulstille aktiveringsstatussen. + Vent venligst, læser aktiveringsstatussen fra pumpen. + Serienummer + Indtast serienummeret på din pumpebase. + Ugyldigt serienummer! + Utestet pumpe: %1$d! Kontakt os venligst på discord eller github for hjælp + Alarmindstillinger + Vælg dine fortrukne pumpealarmindstillinger. + Patch Udløber + Efter aktivering udløber patchen efter 3 dage med en nådeperiode på 8 timer herefter. + Maksimal Insulin pr. Time + Specificér det maksimale tilladte antal enheder insulin per time. Hvis denne overskrides, pauseres pumpen. + Maksimal Insulin pr. Dag + Specificér det maksimale tilladte antal enheder insulin per Dag. Hvis denne overskrides, pauseres pumpen. + Henter pumpestatus + Henter bolusstatus + Henter midlertidig basalstatus + Indstiller brugerindstillinger diff --git a/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml b/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml index a158a61f21..36e1456c48 100644 --- a/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml +++ b/pump/omnipod-common/src/main/res/values-da-rDK/strings.xml @@ -104,8 +104,10 @@ Vis knappen \"Suspendér levering\" i Omnipod fanen Automatisk tidszone og sommer/vintertid aktiveret Udløbspåmindelse aktiveret + Efter den er aktiveret, vil podden bippe når den specificerede mængde tid er gået Påmindelse i timer før udløb (72 timer) Udløbspåmindelse aktiveret + Efter den er aktiveret, vil podden bippe når den specificerede mængde tid er nået og én time før nedlukning Advarsel i timer før nedlukning (80 timer) Lav reservoir alarm aktiveret Antal enheder diff --git a/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml b/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml index df303f986d..1b27f95103 100644 --- a/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml +++ b/pump/omnipod-dash/src/main/res/values-da-rDK/strings.xml @@ -44,6 +44,7 @@ Profil sat OK Pausér insulintilførsel er ubekræftet! Genstart venligst manuelt Pod-statussen fra Omnipod-fanen og start tilførsel igen hvis nødvendigt. Insulintilførsel pauseret + Tidszone på pod er forskellig fra tidszone på telefon. Basalrate er forkert. Skift profil for at rette Kunne ikke indstille den nye basalprofil. Levering pauseret Indstilling af basalprofil mislykkedes måske. Insulintilførsel kan være pauseret! Opdatér venligst Pod-status manuelt fra Omnipod-fanen og genoptag tilførslen hvis nødvendigt. Bolustilførselsstatus usikker. Opdatér pod-status for at bekræfte eller afvise. @@ -51,4 +52,6 @@ Kontrollerer leveringsstatus Indstilling af midlertidig basal mislykkedes måske. Hvis en midlertidig basal tidligere var kørt, er den blevet annulleret. Opdatér venligst Pod-status manuelt fra Omnipod-fanen. Annullér midlertidig basal-resultat er usikkert + Ikke-bekræftet genoptagtilførselskommando. Opdatér pod-status + Aflysning af midlertidig basal mislykkedes. Hvis en midlertidig basal tidligere var kørt, kan den være blevet annulleret. Opdater venligst Pod-status manuelt fra Omnipod-fanen. diff --git a/pump/pump-common/src/main/res/values-af-rZA/strings.xml b/pump/pump-common/src/main/res/values-af-rZA/strings.xml index 8664248042..748348fff9 100644 --- a/pump/pump-common/src/main/res/values-af-rZA/strings.xml +++ b/pump/pump-common/src/main/res/values-af-rZA/strings.xml @@ -36,6 +36,7 @@ Verkeerde Maks Bolus gestel op Pomp(moet %1$.2f wees). Verkeerde Maks Basale op Pomp (moet %1$.2f %1$.2f wees),. + %1$d dae %1$d dae diff --git a/pump/pump-common/src/main/res/values-bg-rBG/strings.xml b/pump/pump-common/src/main/res/values-bg-rBG/strings.xml index d9ea9ba6a1..1abb751307 100644 --- a/pump/pump-common/src/main/res/values-bg-rBG/strings.xml +++ b/pump/pump-common/src/main/res/values-bg-rBG/strings.xml @@ -64,6 +64,7 @@ Грешен макс мазал в помпата (трябва да е %1$.2f). Тип: + %1$d ден %1$d дни diff --git a/pump/pump-common/src/main/res/values-ca-rES/strings.xml b/pump/pump-common/src/main/res/values-ca-rES/strings.xml index 6fd07f223c..b305ecc279 100644 --- a/pump/pump-common/src/main/res/values-ca-rES/strings.xml +++ b/pump/pump-common/src/main/res/values-ca-rES/strings.xml @@ -39,6 +39,7 @@ Basal màx. errònia configurada a la bomba (ha de ser %1$.2f). Tipus: + %1$d dia %1$d dies diff --git a/pump/pump-common/src/main/res/values-cs-rCZ/strings.xml b/pump/pump-common/src/main/res/values-cs-rCZ/strings.xml index 5b8f522bca..5a0a1d3884 100644 --- a/pump/pump-common/src/main/res/values-cs-rCZ/strings.xml +++ b/pump/pump-common/src/main/res/values-cs-rCZ/strings.xml @@ -64,6 +64,15 @@ Chybný maximální bazál na pumpě (musí být %1$.2f). Typ: + + Nikdy nekontaktováno + Spící + Probouzení + Aktivní + Chyba komunikace + Vypršel časový limit komunikace + Pumpa nedostupná + Neplatná konfigurace %1$d den %1$d dnů diff --git a/pump/pump-common/src/main/res/values-da-rDK/strings.xml b/pump/pump-common/src/main/res/values-da-rDK/strings.xml index 0f9f34633d..56e257ba29 100644 --- a/pump/pump-common/src/main/res/values-da-rDK/strings.xml +++ b/pump/pump-common/src/main/res/values-da-rDK/strings.xml @@ -64,6 +64,15 @@ Forkert Max Basal sat på Pump (skal være %1$.2f). Type: + + Aldrig kontaktet + Sovende + Vågner + Aktiv + Fejl i kommunikation + Timeout ved kommunikation + Pumpe utilgængelig + Ugyldig konfiguration %1$d dag %1$d dage diff --git a/pump/pump-common/src/main/res/values-de-rDE/strings.xml b/pump/pump-common/src/main/res/values-de-rDE/strings.xml index 9aad801896..7f1ba4da63 100644 --- a/pump/pump-common/src/main/res/values-de-rDE/strings.xml +++ b/pump/pump-common/src/main/res/values-de-rDE/strings.xml @@ -64,6 +64,7 @@ Falsche Max-Basal auf Pumpe eingestellt (muss %1$.2f sein). Typ: + %1$d Tag %1$d Tage diff --git a/pump/pump-common/src/main/res/values-el-rGR/strings.xml b/pump/pump-common/src/main/res/values-el-rGR/strings.xml index 44c292ae68..33a84bfd9e 100644 --- a/pump/pump-common/src/main/res/values-el-rGR/strings.xml +++ b/pump/pump-common/src/main/res/values-el-rGR/strings.xml @@ -64,6 +64,7 @@ Λάθος μέγιστο Βασικού ορίστηκε στην αντλία (πρέπει να είναι %1$.2f). Τύπος: + %1$d ημέρες %1$d ημέρες diff --git a/pump/pump-common/src/main/res/values-es-rES/strings.xml b/pump/pump-common/src/main/res/values-es-rES/strings.xml index f425f0f81a..48e4165e88 100644 --- a/pump/pump-common/src/main/res/values-es-rES/strings.xml +++ b/pump/pump-common/src/main/res/values-es-rES/strings.xml @@ -64,6 +64,15 @@ La basal máxima establecida en la bomba es incorrecta (debe ser %1$.2f). Tipo: + + Nunca contactado + En reposo + Iniciando + Activo + Error en la comunicación + Tiempo de espera agotado en la comunicación + Bomba inaccesible + Configuración inválida %1$d día %1$d días diff --git a/pump/pump-common/src/main/res/values-fr-rFR/strings.xml b/pump/pump-common/src/main/res/values-fr-rFR/strings.xml index 2083618893..deb828161f 100644 --- a/pump/pump-common/src/main/res/values-fr-rFR/strings.xml +++ b/pump/pump-common/src/main/res/values-fr-rFR/strings.xml @@ -64,6 +64,7 @@ Mauvais paramètre Max Basal sur la pompe (doit être %1$.2f). Type : + %1$d jour %1$d jours diff --git a/pump/pump-common/src/main/res/values-hr-rHR/strings.xml b/pump/pump-common/src/main/res/values-hr-rHR/strings.xml index 008f21f371..7908879c52 100644 --- a/pump/pump-common/src/main/res/values-hr-rHR/strings.xml +++ b/pump/pump-common/src/main/res/values-hr-rHR/strings.xml @@ -54,6 +54,7 @@ Pogrešno podešen maksimalni bazal na pumpi (mora biti %1$.2f). Tip: + %1$d dan %1$d dana diff --git a/pump/pump-common/src/main/res/values-hu-rHU/strings.xml b/pump/pump-common/src/main/res/values-hu-rHU/strings.xml index 1d747e7a9c..f984286dca 100644 --- a/pump/pump-common/src/main/res/values-hu-rHU/strings.xml +++ b/pump/pump-common/src/main/res/values-hu-rHU/strings.xml @@ -28,6 +28,7 @@ Hibás a pumpán beállított Max. Bólus (%1$.2f kell legyen). Hibás a pumpán beállított Max. Bázis (%1$.2f kell legyen). + %1$d nap %1$d nap diff --git a/pump/pump-common/src/main/res/values-it-rIT/strings.xml b/pump/pump-common/src/main/res/values-it-rIT/strings.xml index eeb8f34cc0..8a01db474d 100644 --- a/pump/pump-common/src/main/res/values-it-rIT/strings.xml +++ b/pump/pump-common/src/main/res/values-it-rIT/strings.xml @@ -64,6 +64,7 @@ La basale massima impostata sul micro è errata (deve essere %1$.2f). Tipo: + %1$d giorno %1$d giorni diff --git a/pump/pump-common/src/main/res/values-iw-rIL/strings.xml b/pump/pump-common/src/main/res/values-iw-rIL/strings.xml index 70e8a91b39..8e848eeaf3 100644 --- a/pump/pump-common/src/main/res/values-iw-rIL/strings.xml +++ b/pump/pump-common/src/main/res/values-iw-rIL/strings.xml @@ -64,6 +64,7 @@ המינון הבזאלי המרבי המוגדר במשאבה אינו נכון (חייב להיות %1$.2f). סוג: + יום %1$d יומיים diff --git a/pump/pump-common/src/main/res/values-ko-rKR/strings.xml b/pump/pump-common/src/main/res/values-ko-rKR/strings.xml index 62bcab2a78..131f6c56cf 100644 --- a/pump/pump-common/src/main/res/values-ko-rKR/strings.xml +++ b/pump/pump-common/src/main/res/values-ko-rKR/strings.xml @@ -64,6 +64,7 @@ 펌프에 잘못된 최대 Basal이 설정되었습니다 (%1$.2f 이어야 합니다). 종류: + %1$d 일 diff --git a/pump/pump-common/src/main/res/values-lt-rLT/strings.xml b/pump/pump-common/src/main/res/values-lt-rLT/strings.xml index 5ad947fbf0..16a9a0b322 100644 --- a/pump/pump-common/src/main/res/values-lt-rLT/strings.xml +++ b/pump/pump-common/src/main/res/values-lt-rLT/strings.xml @@ -64,6 +64,7 @@ Pompoje nustatyta neteisinga Maks val. bazė (turi būti %1$.2f). Tipas: + %1$d d. %1$d d. diff --git a/pump/pump-common/src/main/res/values-nl-rNL/strings.xml b/pump/pump-common/src/main/res/values-nl-rNL/strings.xml index 275df17d7c..3a2d78f80b 100644 --- a/pump/pump-common/src/main/res/values-nl-rNL/strings.xml +++ b/pump/pump-common/src/main/res/values-nl-rNL/strings.xml @@ -64,6 +64,7 @@ Verkeerde Max Basaal instelling op pomp (moet %1$.2f zijn). Type: + %1$d dag %1$d dagen diff --git a/pump/pump-common/src/main/res/values-no-rNO/strings.xml b/pump/pump-common/src/main/res/values-no-rNO/strings.xml index 9afaa22439..c2a4ef0588 100644 --- a/pump/pump-common/src/main/res/values-no-rNO/strings.xml +++ b/pump/pump-common/src/main/res/values-no-rNO/strings.xml @@ -64,6 +64,7 @@ Feil maks-basal er satt på pumpen (må være %1$.2f). Type: + %1$d dag %1$d dager diff --git a/pump/pump-common/src/main/res/values-pl-rPL/strings.xml b/pump/pump-common/src/main/res/values-pl-rPL/strings.xml index c3c9f0d0bd..f48b50d58d 100644 --- a/pump/pump-common/src/main/res/values-pl-rPL/strings.xml +++ b/pump/pump-common/src/main/res/values-pl-rPL/strings.xml @@ -64,6 +64,15 @@ Ustawiony na pompie typ Bolus Maksymalny jest niewłaściwy (musi być %1$.2f). Typ: + + Nigdy nie połączona + Uśpiona + Wybudza się + Aktywna + Błąd komunikacji + Przekroczony limit czasu połączenia + Pompa nieosiągalna + Nieprawidłowa konfiguracja %1$d dzień %1$d dni diff --git a/pump/pump-common/src/main/res/values-pt-rBR/strings.xml b/pump/pump-common/src/main/res/values-pt-rBR/strings.xml index d6023f2092..86e4eff8dc 100644 --- a/pump/pump-common/src/main/res/values-pt-rBR/strings.xml +++ b/pump/pump-common/src/main/res/values-pt-rBR/strings.xml @@ -64,6 +64,7 @@ Máx. Basal definido errado na Bomba (deve ser %1$.2f). Tipo: + %1$d dia %1$d dias diff --git a/pump/pump-common/src/main/res/values-pt-rPT/strings.xml b/pump/pump-common/src/main/res/values-pt-rPT/strings.xml index 3063be8d7e..f72987234f 100644 --- a/pump/pump-common/src/main/res/values-pt-rPT/strings.xml +++ b/pump/pump-common/src/main/res/values-pt-rPT/strings.xml @@ -40,6 +40,15 @@ Índice Basal máximo definido na Bomba está incorrecto (deve ser %1$.2f). Tipo: + + Nunca contactado + A dormir + A acordar + Activo + Erro com comunicação + Tempo limite para comunicação + Bomba inacessível + Configuração inválida %1$d dia %1$d dias diff --git a/pump/pump-common/src/main/res/values-ro-rRO/strings.xml b/pump/pump-common/src/main/res/values-ro-rRO/strings.xml index 8c81220c84..15bb5b0ff9 100644 --- a/pump/pump-common/src/main/res/values-ro-rRO/strings.xml +++ b/pump/pump-common/src/main/res/values-ro-rRO/strings.xml @@ -63,6 +63,7 @@ Bazala maximă setată incorect în pompă (trebuie să fie %1$.2f). Tip: + %1$d zi %1$d zile diff --git a/pump/pump-common/src/main/res/values-ru-rRU/strings.xml b/pump/pump-common/src/main/res/values-ru-rRU/strings.xml index ce8839d161..f7cf58363c 100644 --- a/pump/pump-common/src/main/res/values-ru-rRU/strings.xml +++ b/pump/pump-common/src/main/res/values-ru-rRU/strings.xml @@ -64,6 +64,7 @@ На помпе задан неверный макс базал (должен быть %1$.2f). Тип: + %1$d день %1$d дня diff --git a/pump/pump-common/src/main/res/values-sk-rSK/strings.xml b/pump/pump-common/src/main/res/values-sk-rSK/strings.xml index 5c7299e401..2b24393489 100644 --- a/pump/pump-common/src/main/res/values-sk-rSK/strings.xml +++ b/pump/pump-common/src/main/res/values-sk-rSK/strings.xml @@ -64,6 +64,7 @@ Chybný max. bazál na pumpe (musí byť %1$.2f). Typ: + %1$d deň %1$d dní diff --git a/pump/pump-common/src/main/res/values-sr-rCS/strings.xml b/pump/pump-common/src/main/res/values-sr-rCS/strings.xml index bc292aa08d..a507ceb9d9 100644 --- a/pump/pump-common/src/main/res/values-sr-rCS/strings.xml +++ b/pump/pump-common/src/main/res/values-sr-rCS/strings.xml @@ -9,4 +9,5 @@ + diff --git a/pump/pump-common/src/main/res/values-sv-rSE/strings.xml b/pump/pump-common/src/main/res/values-sv-rSE/strings.xml index 3a54548336..6ed67f2b67 100644 --- a/pump/pump-common/src/main/res/values-sv-rSE/strings.xml +++ b/pump/pump-common/src/main/res/values-sv-rSE/strings.xml @@ -64,6 +64,7 @@ Fel max basal i pumpen (måste vara %1$.2f). Typ: + %1$d dag %1$d dagar diff --git a/pump/pump-common/src/main/res/values-tr-rTR/strings.xml b/pump/pump-common/src/main/res/values-tr-rTR/strings.xml index ae47a3c117..3c306737ce 100644 --- a/pump/pump-common/src/main/res/values-tr-rTR/strings.xml +++ b/pump/pump-common/src/main/res/values-tr-rTR/strings.xml @@ -64,6 +64,15 @@ Pompada Yanlış Maksimum Bazal ayarlanmış (%1$.2f olmalıdır). Tip: + + Hiçbir bağlantı yok + Uyku Moduna Giriliyor + Uyanıyor + Aktif + İletişim hatası + İletişimde zaman aşımı + Pompa\'ya ulaşılamıyor + Geçersiz yapılandırma %1$d gün %1$d gün diff --git a/pump/pump-common/src/main/res/values-uk-rUA/strings.xml b/pump/pump-common/src/main/res/values-uk-rUA/strings.xml index 33c77af761..6ebad037cb 100644 --- a/pump/pump-common/src/main/res/values-uk-rUA/strings.xml +++ b/pump/pump-common/src/main/res/values-uk-rUA/strings.xml @@ -8,4 +8,5 @@ + diff --git a/pump/pump-common/src/main/res/values-zh-rCN/strings.xml b/pump/pump-common/src/main/res/values-zh-rCN/strings.xml index eaedcad0f5..b182709841 100644 --- a/pump/pump-common/src/main/res/values-zh-rCN/strings.xml +++ b/pump/pump-common/src/main/res/values-zh-rCN/strings.xml @@ -63,6 +63,7 @@ 泵上设置的最大基础率错误 (应当为 %1$.2f)。 类型: + %1$d 天 diff --git a/pump/virtual/src/main/res/values-da-rDK/strings.xml b/pump/virtual/src/main/res/values-da-rDK/strings.xml index 3ba5cdb52a..480db083bf 100644 --- a/pump/virtual/src/main/res/values-da-rDK/strings.xml +++ b/pump/virtual/src/main/res/values-da-rDK/strings.xml @@ -1,7 +1,13 @@ + Virtuel Pumpetype + Pumpe Definition + Bolus: Trin=%1$s\nForlænget Bolus: [Trin=%2$s, Varighed=%3$smin-%4$sh]\nBasal: Trin=%5$s\nTBR: %6$s (by %7$s), Varighed=%8$smin-%9$sh\n%10$s + VPUMPE Pumpeintegration til pumper, som endnu ikke har nogen driver (Åbent Loop) + VIRTUEL PUMPE Indstillinger for virtuel pumpe + * Kun diskrete værdier, ingen intervaller er understøttet som granularitet for basal/bolus i virtuel pumpe. diff --git a/pump/virtual/src/main/res/values-es-rES/strings.xml b/pump/virtual/src/main/res/values-es-rES/strings.xml index 5b8efa9269..15ac39bcce 100644 --- a/pump/virtual/src/main/res/values-es-rES/strings.xml +++ b/pump/virtual/src/main/res/values-es-rES/strings.xml @@ -9,4 +9,5 @@ BOMBA VIRTUAL Ajustes de bomba virtual + * Sólo se admiten valores discretos, no rangos, como granularidad para basal/bolos en la bomba virtual. diff --git a/pump/virtual/src/main/res/values-lt-rLT/strings.xml b/pump/virtual/src/main/res/values-lt-rLT/strings.xml index 4ccbaf82e1..7d896394d3 100644 --- a/pump/virtual/src/main/res/values-lt-rLT/strings.xml +++ b/pump/virtual/src/main/res/values-lt-rLT/strings.xml @@ -9,4 +9,5 @@ VIRTUALI POMPA Virtualios pompos nustatymai + * Virtualioje pompoje palaikomos tik atskiros vertės, o ne diapazonas detalumui užtikrinti. diff --git a/pump/virtual/src/main/res/values-pl-rPL/strings.xml b/pump/virtual/src/main/res/values-pl-rPL/strings.xml index d656e8a5de..ed74815d1a 100644 --- a/pump/virtual/src/main/res/values-pl-rPL/strings.xml +++ b/pump/virtual/src/main/res/values-pl-rPL/strings.xml @@ -9,4 +9,5 @@ POMPA WIRTUALNA Ustawienia pompy wirtualnej + *Tylko wartości dyskretne, a nie zakresy są wspierane jako dawki bazowe/bolusy w pompie wirtualnej. diff --git a/pump/virtual/src/main/res/values-sk-rSK/strings.xml b/pump/virtual/src/main/res/values-sk-rSK/strings.xml index 14961415da..3df61b5f2a 100644 --- a/pump/virtual/src/main/res/values-sk-rSK/strings.xml +++ b/pump/virtual/src/main/res/values-sk-rSK/strings.xml @@ -9,4 +9,5 @@ Virtuálna pumpa Nastavenie virtuálnej pumpy + * Iba diskrétne hodnoty a nie rozsahy, sú podporované pre bazál/bolus vo virtuálnej pumpe. diff --git a/wear/src/main/res/values-da-rDK/strings.xml b/wear/src/main/res/values-da-rDK/strings.xml index ebd5ce13a8..c813095672 100644 --- a/wear/src/main/res/values-da-rDK/strings.xml +++ b/wear/src/main/res/values-da-rDK/strings.xml @@ -206,5 +206,6 @@ %1$s %2$s %3$s gammel !gammel! + !fejl! Puls From fd82ef371b65ee0eb9db08078bd87f0226c6c168 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 19 Sep 2023 16:30:40 +0200 Subject: [PATCH 44/65] optimize mgdl/mmol constants --- .../java/info/nightscout/androidaps/RealPumpTest.kt | 2 +- .../info/nightscout/androidaps/SetupWizardActivityTest.kt | 2 +- .../src/main/java/info/nightscout/interfaces/Constants.kt | 2 -- .../interfaces/userEntry/ValueWithUnitMapper.kt | 8 +++----- .../implementation/profile/ProfileFunctionImpl.kt | 3 +-- .../automation/actions/ActionStartTempTarget.kt | 2 +- .../java/info/nightscout/automation/triggers/TriggerBg.kt | 3 +-- .../info/nightscout/automation/triggers/TriggerDelta.kt | 2 +- .../automation/triggers/TriggerTempTargetValue.kt | 2 +- .../general/wear/wearintegration/DataHandlerMobile.kt | 2 +- .../info/nightscout/plugins/profile/ProfileFragment.kt | 4 ++-- .../java/info/nightscout/plugins/profile/ProfilePlugin.kt | 4 ++-- .../src/main/java/info/nightscout/source/PoctechPlugin.kt | 3 ++- .../plugins/sync/nsShared/StoreDataForDbImpl.kt | 5 +++-- .../sync/nsclient/extensions/TemporaryTargetExtension.kt | 2 +- .../sync/nsclient/extensions/TherapyEventExtension.kt | 4 ++-- .../src/main/java/info/nightscout/pump/dana/DanaPump.kt | 5 +++-- .../pump/dana/activities/DanaUserOptionsActivity.kt | 3 ++- .../java/info/nightscout/pump/common/data/PumpStatus.kt | 2 +- .../main/java/info/nightscout/ui/dialogs/WizardDialog.kt | 2 +- 20 files changed, 30 insertions(+), 32 deletions(-) diff --git a/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt b/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt index c248fcbfb3..24135997a4 100644 --- a/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt +++ b/app/src/androidTest/java/info/nightscout/androidaps/RealPumpTest.kt @@ -52,7 +52,7 @@ class RealPumpTest { configBuilderPlugin.performPluginSwitch(randomBgPlugin,true, PluginType.BGSOURCE) // Profile configBuilderPlugin.performPluginSwitch(localProfilePlugin, true, PluginType.PROFILE) - val profile = Profile(JSONObject(validProfile), Constants.MGDL) + val profile = Profile(JSONObject(validProfile), GlucoseUnit.MGDL.asText) Assert.assertTrue(profile.isValid("Test")) localProfilePlugin.profiles.clear() localProfilePlugin.numOfProfiles = 0 diff --git a/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt b/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt index d5efa1841c..933c6c2936 100644 --- a/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt +++ b/app/src/androidTest/java/info/nightscout/androidaps/SetupWizardActivityTest.kt @@ -154,7 +154,7 @@ class SetupWizardActivityTest { onView(withId(R.id.finish_button)).waitAndPerform(click()) // Verify settings - Assert.assertEquals(Constants.MMOL, ProfileFunctions.getSystemUnits()) + Assert.assertEquals(GlucoseUnit.MMOL.asText, ProfileFunctions.getSystemUnits()) Assert.assertEquals(17.0, HardLimits.maxBolus(), 0.0001) // Adult Assert.assertTrue(RandomBgPlugin.isEnabled(PluginType.BGSOURCE)) Assert.assertTrue(LocalProfilePlugin.isEnabled(PluginType.PROFILE)) diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt index e0c3bacd59..bd006368ed 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/Constants.kt @@ -5,8 +5,6 @@ package info.nightscout.interfaces */ object Constants { - const val MGDL = "mg/dl" // This is Nightscout's representation - const val MMOL = "mmol" const val MMOLL_TO_MGDL = 18.0 // 18.0182; const val MGDL_TO_MMOLL = 1 / MMOLL_TO_MGDL const val defaultDIA = 5.0 diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/userEntry/ValueWithUnitMapper.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/userEntry/ValueWithUnitMapper.kt index 0261306094..964c59e550 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/userEntry/ValueWithUnitMapper.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/userEntry/ValueWithUnitMapper.kt @@ -4,6 +4,7 @@ import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.ValueWithUnit import info.nightscout.interfaces.Constants +import info.nightscout.interfaces.GlucoseUnit sealed class ValueWithUnitMapper { //I use a sealed class because of StringResource that contains a listOf as second parameter @@ -79,12 +80,9 @@ sealed class ValueWithUnitMapper { //I use a sealed class because of St companion object { - const val MGDL = Constants.MGDL - const val MMOL = Constants.MMOL - fun fromGlucoseUnit(value: Double, string: String): ValueWithUnitMapper? = when (string) { - MGDL, "mgdl" -> Mgdl(value) - MMOL, "mmol/l" -> Mmoll(value) + GlucoseUnit.MGDL.asText, "mgdl" -> Mgdl(value) + GlucoseUnit.MMOL.asText, "mmol/l" -> Mmoll(value) else -> null } } diff --git a/implementation/src/main/java/info/nightscout/implementation/profile/ProfileFunctionImpl.kt b/implementation/src/main/java/info/nightscout/implementation/profile/ProfileFunctionImpl.kt index 008fee161b..5614ccb986 100644 --- a/implementation/src/main/java/info/nightscout/implementation/profile/ProfileFunctionImpl.kt +++ b/implementation/src/main/java/info/nightscout/implementation/profile/ProfileFunctionImpl.kt @@ -8,7 +8,6 @@ import info.nightscout.database.entities.ProfileSwitch import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.transactions.InsertOrUpdateProfileSwitch import info.nightscout.interfaces.Config -import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData import info.nightscout.interfaces.plugin.ActivePlugin @@ -143,7 +142,7 @@ class ProfileFunctionImpl @Inject constructor( } override fun getUnits(): GlucoseUnit = - if (sp.getString(info.nightscout.core.utils.R.string.key_units, Constants.MGDL) == Constants.MGDL) GlucoseUnit.MGDL + if (sp.getString(info.nightscout.core.utils.R.string.key_units, GlucoseUnit.MGDL.asText) == GlucoseUnit.MGDL.asText) GlucoseUnit.MGDL else GlucoseUnit.MMOL override fun buildProfileSwitch(profileStore: ProfileStore, profileName: String, durationInMinutes: Int, percentage: Int, timeShiftInHours: Int, timestamp: Long): ProfileSwitch? { diff --git a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt index da2f074488..336fde4e47 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/actions/ActionStartTempTarget.kt @@ -101,7 +101,7 @@ class ActionStartTempTarget(injector: HasAndroidInjector) : Action(injector) { override fun fromJSON(data: String): Action { val o = JSONObject(data) - value.units = GlucoseUnit.fromText(JsonHelper.safeGetString(o, "units", Constants.MGDL)) + value.units = GlucoseUnit.fromText(JsonHelper.safeGetString(o, "units", GlucoseUnit.MGDL.asText)) value.value = safeGetDouble(o, "value") duration.setMinutes(JsonHelper.safeGetInt(o, "durationInMinutes")) return this diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt index 9076b3980e..d6aff68e4c 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerBg.kt @@ -10,7 +10,6 @@ import info.nightscout.automation.elements.LabelWithElement import info.nightscout.automation.elements.LayoutBuilder import info.nightscout.automation.elements.StaticLabel import info.nightscout.core.utils.JsonHelper -import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit import info.nightscout.rx.logging.LTag import org.json.JSONObject @@ -71,7 +70,7 @@ class TriggerBg(injector: HasAndroidInjector) : Trigger(injector) { override fun fromJSON(data: String): Trigger { val d = JSONObject(data) - bg.setUnits(GlucoseUnit.fromText(JsonHelper.safeGetString(d, "units", Constants.MGDL))) + bg.setUnits(GlucoseUnit.fromText(JsonHelper.safeGetString(d, "units", GlucoseUnit.MGDL.asText))) bg.value = JsonHelper.safeGetDouble(d, "bg") comparator.setValue(Comparator.Compare.valueOf(JsonHelper.safeGetString(d, "comparator")!!)) return this diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt index 6f0ed7966c..bbcfba28e8 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerDelta.kt @@ -94,7 +94,7 @@ class TriggerDelta(injector: HasAndroidInjector) : Trigger(injector) { override fun fromJSON(data: String): Trigger { val d = JSONObject(data) - units = GlucoseUnit.fromText(JsonHelper.safeGetString(d, "units", Constants.MGDL)) + units = GlucoseUnit.fromText(JsonHelper.safeGetString(d, "units", GlucoseUnit.MGDL.asText)) val type = DeltaType.valueOf(JsonHelper.safeGetString(d, "deltaType", "")) val value = JsonHelper.safeGetDouble(d, "value") delta = diff --git a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt index 763219fcb1..6942b5a870 100644 --- a/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt +++ b/plugins/automation/src/main/java/info/nightscout/automation/triggers/TriggerTempTargetValue.kt @@ -68,7 +68,7 @@ class TriggerTempTargetValue(injector: HasAndroidInjector) : Trigger(injector) { override fun fromJSON(data: String): Trigger { val d = JSONObject(data) - ttValue.setUnits(GlucoseUnit.fromText(JsonHelper.safeGetString(d, "units", Constants.MGDL))) + ttValue.setUnits(GlucoseUnit.fromText(JsonHelper.safeGetString(d, "units", GlucoseUnit.MGDL.asText))) ttValue.value = JsonHelper.safeGetDouble(d, "tt") comparator.setValue(Comparator.Compare.valueOf(JsonHelper.safeGetString(d, "comparator")!!)) return this diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt index 953b7c3f42..2cdfde27c6 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt @@ -884,7 +884,7 @@ class DataHandlerMobile @Inject constructor( predictions.add( EventData.SingleBg( timeStamp = bg.data.timestamp, - glucoseUnits = Constants.MGDL, + glucoseUnits = GlucoseUnit.MGDL.asText, sgv = bg.data.value, high = 0.0, low = 0.0, diff --git a/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfileFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfileFragment.kt index 1d2b6d4728..9c7f1862e0 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfileFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfileFragment.kt @@ -131,7 +131,7 @@ class ProfileFragment : DaggerFragment() { val pumpDescription = activePlugin.activePump.pumpDescription if (profilePlugin.numOfProfiles == 0) profilePlugin.addNewProfile() val currentProfile = profilePlugin.currentProfile() ?: return - val units = if (currentProfile.mgdl) Constants.MGDL else Constants.MMOL + val units = if (currentProfile.mgdl) GlucoseUnit.MGDL.asText else GlucoseUnit.MMOL.asText binding.name.removeTextChangedListener(textWatch) binding.name.setText(currentProfile.name) @@ -173,7 +173,7 @@ class ProfileFragment : DaggerFragment() { DecimalFormat("0.00"), save ) - if (units == Constants.MGDL) { + if (units == GlucoseUnit.MGDL.asText) { val isfRange = doubleArrayOf(HardLimits.MIN_ISF, HardLimits.MAX_ISF) TimeListEdit( requireContext(), diff --git a/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt b/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt index df21a75f78..4b2e7e8b3f 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/profile/ProfilePlugin.kt @@ -163,7 +163,7 @@ class ProfilePlugin @Inject constructor( profile.put("basal", basal) profile.put("target_low", targetLow) profile.put("target_high", targetHigh) - profile.put("units", if (mgdl) Constants.MGDL else Constants.MMOL) + profile.put("units", if (mgdl) GlucoseUnit.MGDL.asText else GlucoseUnit.MMOL.asText) profile.put("timezone", TimeZone.getDefault().id) } val defaultUnits = JsonHelper.safeGetStringAllowNull(profile, "units", null) @@ -400,7 +400,7 @@ class ProfilePlugin @Inject constructor( profile.put("basal", basal) profile.put("target_low", targetLow) profile.put("target_high", targetHigh) - profile.put("units", if (mgdl) Constants.MGDL else Constants.MMOL) + profile.put("units", if (mgdl) GlucoseUnit.MGDL.asText else GlucoseUnit.MMOL.asText) profile.put("timezone", TimeZone.getDefault().id) store.put(name, profile) } diff --git a/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt b/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt index ce62786154..24fe14f324 100644 --- a/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt +++ b/plugins/source/src/main/java/info/nightscout/source/PoctechPlugin.kt @@ -11,6 +11,7 @@ import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.transactions.CgmSourceTransaction import info.nightscout.database.transactions.TransactionGlucoseValue import info.nightscout.interfaces.Constants +import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType @@ -63,7 +64,7 @@ class PoctechPlugin @Inject constructor( val json = jsonArray.getJSONObject(i) glucoseValues += TransactionGlucoseValue( timestamp = json.getLong("date"), - value = if (safeGetString(json, "units", Constants.MGDL) == "mmol/L") json.getDouble("current") * Constants.MMOLL_TO_MGDL + value = if (safeGetString(json, "units", GlucoseUnit.MGDL.asText) == "mmol/L") json.getDouble("current") * Constants.MMOLL_TO_MGDL else json.getDouble("current"), raw = json.getDouble("raw"), noise = null, diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt index f7fa42799c..80ce4c938c 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt @@ -56,6 +56,7 @@ import info.nightscout.database.impl.transactions.UpdateNsIdTherapyEventTransact import info.nightscout.database.transactions.TransactionGlucoseValue import info.nightscout.interfaces.Config import info.nightscout.interfaces.Constants +import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.nsclient.StoreDataForDb @@ -314,8 +315,8 @@ class StoreDataForDbImpl @Inject constructor( note = "", values = listOf( ValueWithUnit.TherapyEventTTReason(tt.reason), - ValueWithUnit.fromGlucoseUnit(tt.lowTarget, Constants.MGDL), - ValueWithUnit.fromGlucoseUnit(tt.highTarget, Constants.MGDL).takeIf { tt.lowTarget != tt.highTarget }, + ValueWithUnit.fromGlucoseUnit(tt.lowTarget, GlucoseUnit.MGDL.asText), + ValueWithUnit.fromGlucoseUnit(tt.highTarget, GlucoseUnit.MGDL.asText).takeIf { tt.lowTarget != tt.highTarget }, ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(tt.duration).toInt()) ) ) diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt index 1fd84ce0b2..564b11cd97 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryTargetExtension.kt @@ -10,7 +10,7 @@ import info.nightscout.shared.utils.T import org.json.JSONObject fun TemporaryTarget.Companion.fromJson(jsonObject: JSONObject, profileUtil: ProfileUtil): TemporaryTarget? { - val units = GlucoseUnit.fromText(JsonHelper.safeGetString(jsonObject, "units", Constants.MGDL)) + val units = GlucoseUnit.fromText(JsonHelper.safeGetString(jsonObject, "units", GlucoseUnit.MGDL.asText)) val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null val duration = JsonHelper.safeGetLongAllowNull(jsonObject, "duration", null) ?: return null val durationInMilliseconds = JsonHelper.safeGetLongAllowNull(jsonObject, "durationInMilliseconds") diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt index 685b50b371..dbc63b6121 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TherapyEventExtension.kt @@ -22,7 +22,7 @@ fun therapyEventFromNsMbg(mbg: NSMbg) = ) fun TherapyEvent.Companion.fromJson(jsonObject: JSONObject): TherapyEvent? { - val glucoseUnit = if (JsonHelper.safeGetString(jsonObject, "units", Constants.MGDL) == Constants.MGDL) TherapyEvent.GlucoseUnit.MGDL else TherapyEvent.GlucoseUnit.MMOL + val glucoseUnit = if (JsonHelper.safeGetString(jsonObject, "units", GlucoseUnit.MGDL.asText) == GlucoseUnit.MGDL.asText) TherapyEvent.GlucoseUnit.MGDL else TherapyEvent.GlucoseUnit.MMOL val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null val type = TherapyEvent.Type.fromString(JsonHelper.safeGetString(jsonObject, "eventType", TherapyEvent.Type.NONE.text)) val duration = JsonHelper.safeGetLong(jsonObject, "duration") @@ -57,7 +57,7 @@ fun TherapyEvent.toJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = .put("isValid", isValid) .put("created_at", dateUtil.toISOString(timestamp)) .put("enteredBy", enteredBy) - .put("units", if (glucoseUnit == TherapyEvent.GlucoseUnit.MGDL) Constants.MGDL else Constants.MMOL) + .put("units", if (glucoseUnit == TherapyEvent.GlucoseUnit.MGDL) GlucoseUnit.MGDL.asText else GlucoseUnit.MMOL.asText) .also { if (duration != 0L) it.put("duration", T.msecs(duration).mins()) if (duration != 0L) it.put("durationInMilliseconds", duration) diff --git a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt index 64d438997f..43d5608f8c 100644 --- a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt +++ b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt @@ -1,6 +1,7 @@ package info.nightscout.pump.dana import info.nightscout.interfaces.Constants +import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileStore @@ -268,7 +269,7 @@ class DanaPump @Inject constructor( var bolusCalculationOption = 0 var missedBolusConfig = 0 fun getUnits(): String { - return if (units == UNITS_MGDL) Constants.MGDL else Constants.MMOL + return if (units == UNITS_MGDL) GlucoseUnit.MGDL.asText else GlucoseUnit.MMOL.asText } var bolusStartErrorCode: Int = 0 // last start bolus errorCode @@ -368,7 +369,7 @@ class DanaPump @Inject constructor( .put("value", currentTarget) ) ) - profile.put("units", if (units == UNITS_MGDL) Constants.MGDL else Constants.MMOL) + profile.put("units", if (units == UNITS_MGDL) GlucoseUnit.MGDL.asText else GlucoseUnit.MMOL.asText) store.put(PROFILE_PREFIX + (activeProfile + 1), profile) } catch (e: JSONException) { aapsLogger.error("Unhandled exception", e) diff --git a/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaUserOptionsActivity.kt b/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaUserOptionsActivity.kt index b410272c48..28320f54da 100644 --- a/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaUserOptionsActivity.kt +++ b/pump/dana/src/main/java/info/nightscout/pump/dana/activities/DanaUserOptionsActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import info.nightscout.core.ui.activities.TranslatedDaggerAppCompatActivity import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Constants +import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.interfaces.queue.Callback @@ -127,7 +128,7 @@ class DanaUserOptionsActivity : TranslatedDaggerAppCompatActivity() { binding.beep.isChecked = danaPump.beepAndAlarm > 4 binding.screenTimeout.value = danaPump.lcdOnTimeSec.toDouble() binding.backlight.value = danaPump.backlightOnTimeSec.toDouble() - binding.units.isChecked = danaPump.getUnits() == Constants.MMOL + binding.units.isChecked = danaPump.getUnits() == GlucoseUnit.MMOL.asText binding.shutdown.value = danaPump.shutdownHour.toDouble() binding.lowReservoir.value = danaPump.lowReservoirRate.toDouble() } diff --git a/pump/pump-common/src/main/java/info/nightscout/pump/common/data/PumpStatus.kt b/pump/pump-common/src/main/java/info/nightscout/pump/common/data/PumpStatus.kt index f2829bb298..311522e5db 100644 --- a/pump/pump-common/src/main/java/info/nightscout/pump/common/data/PumpStatus.kt +++ b/pump/pump-common/src/main/java/info/nightscout/pump/common/data/PumpStatus.kt @@ -32,7 +32,7 @@ abstract class PumpStatus(var pumpType: PumpType) { // TDD var dailyTotalUnits: Double? = null var maxDailyTotalUnits: String? = null - var units: String? = null // Constants.MGDL or Constants.MMOL + var units: String? = null // GlucoseUnit.MGDL.asText or GlucoseUnit.MMOL.asText var pumpRunningState = PumpRunningState.Running var basalsByHour: DoubleArray? = null var tempBasalStart: Long? = null diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt index 3b8dd042bf..31b4c03bd8 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt @@ -364,7 +364,7 @@ class WizardDialog : DaggerDialogFragment() { } private fun valueToUnitsToString(value: Double, units: String): String = - if (units == Constants.MGDL) decimalFormatter.to0Decimal(value) + if (units == GlucoseUnit.MGDL.asText) decimalFormatter.to0Decimal(value) else decimalFormatter.to1Decimal(value * Constants.MGDL_TO_MMOLL) private fun initDialog() { From a9259ed7a615b8a92ee01562c72a9d3cac8cb931 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 22:50:08 -0700 Subject: [PATCH 45/65] Rewrites PumpEnactResultTest with matchers Issue #2745 --- .../nightscout/pump/PumpEnactResultTest.kt | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/app/src/test/java/info/nightscout/pump/PumpEnactResultTest.kt b/app/src/test/java/info/nightscout/pump/PumpEnactResultTest.kt index cb6f88c370..11d61c0d0f 100644 --- a/app/src/test/java/info/nightscout/pump/PumpEnactResultTest.kt +++ b/app/src/test/java/info/nightscout/pump/PumpEnactResultTest.kt @@ -1,5 +1,6 @@ package info.nightscout.pump +import com.google.common.truth.Truth.assertThat import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.core.pump.toHtml @@ -8,7 +9,6 @@ import info.nightscout.plugins.aps.loop.extensions.json import info.nightscout.pump.virtual.extensions.toText import info.nightscout.sharedtests.TestBaseWithProfile import org.json.JSONObject -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mockito.`when` @@ -42,132 +42,132 @@ class PumpEnactResultTest : TestBaseWithProfile() { val per = PumpEnactResult(injector) per.success(true) - Assertions.assertEquals(true, per.success) + assertThat(per.success).isTrue() } @Test fun enactedTest() { val per = PumpEnactResult(injector) per.enacted(true) - Assertions.assertEquals(true, per.enacted) + assertThat(per.enacted).isTrue() } @Test fun commentTest() { val per = PumpEnactResult(injector) per.comment("SomeComment") - Assertions.assertEquals("SomeComment", per.comment) + assertThat(per.comment).isEqualTo("SomeComment") } @Test fun durationTest() { val per = PumpEnactResult(injector) per.duration(10) - Assertions.assertEquals(10, per.duration.toLong()) + assertThat(per.duration.toLong()).isEqualTo(10L) } @Test fun absoluteTest() { val per = PumpEnactResult(injector) per.absolute(11.0) - Assertions.assertEquals(11.0, per.absolute, 0.01) + assertThat(per.absolute).isWithin(0.01).of(11.0) } @Test fun percentTest() { val per = PumpEnactResult(injector) per.percent(10) - Assertions.assertEquals(10, per.percent) + assertThat(per.percent).isEqualTo(10) } @Test fun isPercentTest() { val per = PumpEnactResult(injector) per.isPercent(true) - Assertions.assertEquals(true, per.isPercent) + assertThat(per.isPercent).isTrue() } @Test fun isTempCancelTest() { val per = PumpEnactResult(injector) per.isTempCancel(true) - Assertions.assertEquals(true, per.isTempCancel) + assertThat(per.isTempCancel).isTrue() } @Test fun bolusDeliveredTest() { val per = PumpEnactResult(injector) per.bolusDelivered(11.0) - Assertions.assertEquals(11.0, per.bolusDelivered, 0.01) + assertThat(per.bolusDelivered).isWithin(0.01).of(11.0) } @Test fun queuedTest() { val per = PumpEnactResult(injector) per.queued(true) - Assertions.assertEquals(true, per.queued) + assertThat(per.queued).isTrue() } @Test fun toStringTest() { var per = PumpEnactResult(injector).enacted(true).bolusDelivered(10.0).comment("AAA") - Assertions.assertEquals( + assertThat(per.toText(rh)).isEqualTo( """ Success: false Enacted: true Comment: AAA Insulin: 10.0 U - """.trimIndent(), per.toText(rh) + """.trimIndent() ) per = PumpEnactResult(injector).enacted(true).isTempCancel(true).comment("AAA") - Assertions.assertEquals( + assertThat(per.toText(rh)).isEqualTo( """ Success: false Enacted: true Comment: AAA Cancel temp basal - """.trimIndent(), per.toText(rh) + """.trimIndent() ) per = PumpEnactResult(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") - Assertions.assertEquals( + assertThat(per.toText(rh)).isEqualTo( """ Success: false Enacted: true Comment: AAA Duration: 20 min Percent: 90% - """.trimIndent(), per.toText(rh) + """.trimIndent() ) per = PumpEnactResult(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") - Assertions.assertEquals( + assertThat(per.toText(rh)).isEqualTo( """ Success: false Enacted: true Comment: AAA Duration: 30 min Absolute: 1.0 U/h - """.trimIndent(), per.toText(rh) + """.trimIndent() ) per = PumpEnactResult(injector).enacted(false).comment("AAA") - Assertions.assertEquals( + assertThat(per.toText(rh)).isEqualTo( """ Success: false Comment: AAA - """.trimIndent(), per.toText(rh) + """.trimIndent() ) } @Test fun toHtmlTest() { var per: PumpEnactResult = PumpEnactResult(injector).enacted(true).bolusDelivered(10.0).comment("AAA") - Assertions.assertEquals("Success: false
Enacted: true
Comment: AAA
SMB: 10.0 U", per.toHtml(rh, decimalFormatter)) + assertThat(per.toHtml(rh, decimalFormatter)).isEqualTo("Success: false
Enacted: true
Comment: AAA
SMB: 10.0 U") per = PumpEnactResult(injector).enacted(true).isTempCancel(true).comment("AAA") - Assertions.assertEquals("Success: false
Enacted: true
Comment: AAA
Cancel temp basal", per.toHtml(rh, decimalFormatter)) + assertThat(per.toHtml(rh, decimalFormatter)).isEqualTo("Success: false
Enacted: true
Comment: AAA
Cancel temp basal") per = PumpEnactResult(injector).enacted(true).isPercent(true).percent(90).duration(20).comment("AAA") - Assertions.assertEquals("Success: false
Enacted: true
Comment: AAA
Duration: 20 min
Percent: 90%", per.toHtml(rh, decimalFormatter)) + assertThat(per.toHtml(rh, decimalFormatter)).isEqualTo("Success: false
Enacted: true
Comment: AAA
Duration: 20 min
Percent: 90%") per = PumpEnactResult(injector).enacted(true).isPercent(false).absolute(1.0).duration(30).comment("AAA") - Assertions.assertEquals("Success: false
Enacted: true
Comment: AAA
Duration: 30 min
Absolute: 1.00 U/h", per.toHtml(rh, decimalFormatter)) + assertThat(per.toHtml(rh, decimalFormatter)).isEqualTo("Success: false
Enacted: true
Comment: AAA
Duration: 30 min
Absolute: 1.00 U/h") per = PumpEnactResult(injector).enacted(false).comment("AAA") - Assertions.assertEquals("Success: false
Comment: AAA", per.toHtml(rh, decimalFormatter)) + assertThat(per.toHtml(rh, decimalFormatter)).isEqualTo("Success: false
Comment: AAA") } @Test fun jsonTest() { @@ -175,15 +175,15 @@ class PumpEnactResultTest : TestBaseWithProfile() { var per: PumpEnactResult = PumpEnactResult(injector).enacted(true).bolusDelivered(10.0).comment("AAA") o = per.json(validProfile.getBasal()) - JSONAssert.assertEquals("{\"smb\":10}", o, false) + JSONAssert.assertEquals("""{"smb":10}""", o, false) per = PumpEnactResult(injector).enacted(true).isTempCancel(true).comment("AAA") o = per.json(validProfile.getBasal()) - JSONAssert.assertEquals("{\"rate\":0,\"duration\":0}", o, false) + 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.getBasal()) - JSONAssert.assertEquals("{\"rate\":0.9,\"duration\":20}", o, false) + 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.getBasal()) - JSONAssert.assertEquals("{\"rate\":1,\"duration\":30}", o, false) + JSONAssert.assertEquals("""{"rate":1,"duration":30}""", o, false) } -} \ No newline at end of file +} From e7f1cb0be637084eab0ed5e547ff4af640e58006 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 22:56:29 -0700 Subject: [PATCH 46/65] Rewrites MaintenancePluginTest with matchers Issue #2745 --- .../maintenance/MaintenancePluginTest.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/test/java/info/nightscout/plugins/general/maintenance/MaintenancePluginTest.kt b/app/src/test/java/info/nightscout/plugins/general/maintenance/MaintenancePluginTest.kt index 473eddd5e3..380f8f167f 100644 --- a/app/src/test/java/info/nightscout/plugins/general/maintenance/MaintenancePluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/general/maintenance/MaintenancePluginTest.kt @@ -1,6 +1,7 @@ package info.nightscout.plugins.general.maintenance import android.content.Context +import com.google.common.truth.Truth.assertThat import dagger.android.HasAndroidInjector import info.nightscout.configuration.maintenance.MaintenancePlugin import info.nightscout.interfaces.Config @@ -10,7 +11,6 @@ import info.nightscout.interfaces.nsclient.NSSettingsStatus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -40,11 +40,12 @@ class MaintenancePluginTest : TestBase() { @Test fun logFilesTest() { var logs = sut.getLogFiles(2) - Assertions.assertEquals(2, logs.size) - Assertions.assertEquals("AndroidAPS.log", logs[0].name) - Assertions.assertEquals("AndroidAPS.2018-01-03_01-01-00.1.zip", logs[1].name) + assertThat(logs.map { it.name }).containsExactly( + "AndroidAPS.log", + "AndroidAPS.2018-01-03_01-01-00.1.zip", + ).inOrder() logs = sut.getLogFiles(10) - Assertions.assertEquals(4, logs.size) + assertThat(logs).hasSize(4) } @Test @@ -53,7 +54,7 @@ class MaintenancePluginTest : TestBase() { val name = "AndroidAPS.log.zip" var zipFile = File("build/$name") zipFile = sut.zipLogs(zipFile, logs) - Assertions.assertTrue(zipFile.exists()) - Assertions.assertTrue(zipFile.isFile) + assertThat(zipFile.exists()).isTrue() + assertThat(zipFile.isFile).isTrue() } -} \ No newline at end of file +} From c2dc844286ffae16d740b26f2b706b844f982130 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 23:02:48 -0700 Subject: [PATCH 47/65] Rewrites LoopPluginTest with matchers Issue #2745 --- .../plugins/aps/loop/LoopPluginTest.kt | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt index 7f74063515..be9f2417c5 100644 --- a/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt @@ -2,6 +2,7 @@ package info.nightscout.plugins.aps.loop import android.app.NotificationManager import android.content.Context +import com.google.common.truth.Truth.assertThat import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.core.utils.fabric.FabricPrivacy @@ -25,7 +26,6 @@ import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil import info.nightscout.sharedtests.TestBase -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -74,28 +74,28 @@ class LoopPluginTest : TestBase() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)).thenReturn(ApsMode.CLOSED.name) val pumpDescription = PumpDescription() `when`(virtualPumpPlugin.pumpDescription).thenReturn(pumpDescription) - Assertions.assertEquals(LoopFragment::class.java.name, loopPlugin.pluginDescription.fragmentClass) - Assertions.assertEquals(PluginType.LOOP, loopPlugin.getType()) - Assertions.assertEquals("Loop", loopPlugin.name) - Assertions.assertEquals("LOOP", loopPlugin.nameShort) - Assertions.assertEquals(true, loopPlugin.hasFragment()) - Assertions.assertEquals(true, loopPlugin.showInList(PluginType.LOOP)) - Assertions.assertEquals(info.nightscout.plugins.aps.R.xml.pref_loop.toLong(), loopPlugin.preferencesId.toLong()) + assertThat(loopPlugin.pluginDescription.fragmentClass).isEqualTo(LoopFragment::class.java.name) + assertThat(loopPlugin.getType()).isEqualTo(PluginType.LOOP) + assertThat(loopPlugin.name).isEqualTo("Loop") + assertThat(loopPlugin.nameShort).isEqualTo("LOOP") + assertThat(loopPlugin.hasFragment()).isTrue() + assertThat(loopPlugin.showInList(PluginType.LOOP)).isTrue() + assertThat(loopPlugin.preferencesId.toLong()).isEqualTo(info.nightscout.plugins.aps.R.xml.pref_loop.toLong()) // Plugin is disabled by default - Assertions.assertEquals(false, loopPlugin.isEnabled()) + assertThat(loopPlugin.isEnabled()).isFalse() loopPlugin.setPluginEnabled(PluginType.LOOP, true) - Assertions.assertEquals(true, loopPlugin.isEnabled()) + assertThat(loopPlugin.isEnabled()).isTrue() // No temp basal capable pump should disable plugin virtualPumpPlugin.pumpDescription.isTempBasalCapable = false - Assertions.assertEquals(false, loopPlugin.isEnabled()) + assertThat(loopPlugin.isEnabled()).isFalse() virtualPumpPlugin.pumpDescription.isTempBasalCapable = true // Fragment is hidden by default - Assertions.assertEquals(false, loopPlugin.isFragmentVisible()) + assertThat(loopPlugin.isFragmentVisible()).isFalse() loopPlugin.setFragmentVisible(PluginType.LOOP, true) - Assertions.assertEquals(true, loopPlugin.isFragmentVisible()) + assertThat(loopPlugin.isFragmentVisible()).isTrue() } /* *********** not working @@ -118,7 +118,7 @@ class LoopPluginTest : TestBase() { MockedLoopPlugin mockedLoopPlugin = new MockedLoopPlugin(); Treatment t = new Treatment(); bus.post(new EventTreatmentChange(t)); - Assertions.assertEquals(true, mockedLoopPlugin.invokeCalled); + assertThat(mockedLoopPlugin.invokeCalled).isTrue(); } */ -} \ No newline at end of file +} From 3f01585e1b96d27d740b67e9ffbe2121dcb37d6b Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Mon, 18 Sep 2023 23:08:47 -0700 Subject: [PATCH 48/65] Rewrites AbstractSensitivityPluginTest with matchers Issue #2745 --- .../sensitivity/AbstractSensitivityPluginTest.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/test/java/info/nightscout/plugins/sensitivity/AbstractSensitivityPluginTest.kt b/app/src/test/java/info/nightscout/plugins/sensitivity/AbstractSensitivityPluginTest.kt index 250d142408..eb94a9e2ca 100644 --- a/app/src/test/java/info/nightscout/plugins/sensitivity/AbstractSensitivityPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/sensitivity/AbstractSensitivityPluginTest.kt @@ -1,5 +1,6 @@ package info.nightscout.plugins.sensitivity +import com.google.common.truth.Truth.assertThat import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.interfaces.aps.AutosensDataStore @@ -12,7 +13,6 @@ import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase import org.json.JSONObject -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.mockito.Mock @@ -45,12 +45,12 @@ class AbstractSensitivityPluginTest : TestBase() { fun fillResultTest() { val sut = SensitivityTestClass(pluginDescription, aapsLogger, rh, sp) var ar = sut.fillResult(1.0, 1.0, "1", "1.2", "1", 12, 0.7, 1.2) - Assertions.assertEquals(1.0, ar.ratio, 0.01) + assertThat(ar.ratio).isWithin(0.01).of(1.0) ar = sut.fillResult(1.2, 1.0, "1", "1.2", "1", 40, 0.7, 1.2) - Assertions.assertEquals(1.16, ar.ratio, 0.01) + assertThat(ar.ratio).isWithin(0.01).of(1.16) ar = sut.fillResult(1.2, 1.0, "1", "1.2", "1", 50, 0.7, 1.2) - Assertions.assertEquals(1.2, ar.ratio, 0.01) + assertThat(ar.ratio).isWithin(0.01).of(1.2) ar = sut.fillResult(1.2, 1.0, "1", "1.2", "1", 50, 0.7, 1.1) - Assertions.assertEquals(1.1, ar.ratio, 0.01) + assertThat(ar.ratio).isWithin(0.01).of(1.1) } -} \ No newline at end of file +} From c0e8d4932b31452cce5552ec1e02059b21d6ebcc Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 21:20:18 -0700 Subject: [PATCH 49/65] Rewrites DefaultProfileTest with matchers Issue #2745 --- .../ui/defaultProfile/DefaultProfileTest.kt | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ui/src/test/java/info/nightscout/ui/defaultProfile/DefaultProfileTest.kt b/ui/src/test/java/info/nightscout/ui/defaultProfile/DefaultProfileTest.kt index 3d7a4e8de8..028f3c2f7b 100644 --- a/ui/src/test/java/info/nightscout/ui/defaultProfile/DefaultProfileTest.kt +++ b/ui/src/test/java/info/nightscout/ui/defaultProfile/DefaultProfileTest.kt @@ -1,9 +1,9 @@ package info.nightscout.ui.defaultProfile +import com.google.common.truth.Truth.assertThat import info.nightscout.core.profile.ProfileSealed import info.nightscout.interfaces.GlucoseUnit import info.nightscout.sharedtests.TestBaseWithProfile -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test class DefaultProfileTest : TestBaseWithProfile() { @@ -12,18 +12,18 @@ class DefaultProfileTest : TestBaseWithProfile() { fun profile() { val dp = DefaultProfile(dateUtil, profileUtil).profile(5, 5.1 / 0.3, 0.0, GlucoseUnit.MMOL) var p = ProfileSealed.Pure(dp!!) - Assertions.assertEquals(0.150, p.getBasalTimeFromMidnight(0), 0.001) - Assertions.assertEquals(15.0, p.getIcTimeFromMidnight(0), 0.001) - Assertions.assertEquals(11.8, p.getIsfTimeFromMidnight(0), 0.001) + assertThat(p.getBasalTimeFromMidnight(0)).isWithin(0.001).of(0.150) + assertThat(p.getIcTimeFromMidnight(0)).isWithin(0.001).of(15.0) + assertThat(p.getIsfTimeFromMidnight(0)).isWithin(0.001).of(11.8) p = ProfileSealed.Pure(DefaultProfile(dateUtil, profileUtil).profile(7, 10.0 / 0.4, 0.0, GlucoseUnit.MMOL)!!) - Assertions.assertEquals(0.350, p.getBasalTimeFromMidnight(0), 0.001) - Assertions.assertEquals(15.0, p.getIcTimeFromMidnight(0), 0.001) - Assertions.assertEquals(6.8, p.getIsfTimeFromMidnight(0), 0.001) + assertThat(p.getBasalTimeFromMidnight(0)).isWithin(0.001).of(0.350) + assertThat(p.getIcTimeFromMidnight(0)).isWithin(0.001).of(15.0) + assertThat(p.getIsfTimeFromMidnight(0)).isWithin(0.001).of(6.8) p = ProfileSealed.Pure(DefaultProfile(dateUtil, profileUtil).profile(12, 25.0 / 0.5, 0.0, GlucoseUnit.MMOL)!!) - Assertions.assertEquals(0.80, p.getBasalTimeFromMidnight(0), 0.001) - Assertions.assertEquals(10.0, p.getIcTimeFromMidnight(0), 0.001) - Assertions.assertEquals(2.2, p.getIsfTimeFromMidnight(0), 0.001) + assertThat(p.getBasalTimeFromMidnight(0)).isWithin(0.001).of(0.80) + assertThat(p.getIcTimeFromMidnight(0)).isWithin(0.001).of(10.0) + assertThat(p.getIsfTimeFromMidnight(0)).isWithin(0.001).of(2.2) } -} \ No newline at end of file +} From ff63b72707b0abc6d313455efb51502ccfae26e1 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 22:18:33 -0700 Subject: [PATCH 50/65] Rewrites GlucoseStatusTest with matchers Issue #2745 --- .../implementation/iob/GlucoseStatusTest.kt | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt b/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt index fb98cd1aaa..8d96814e6e 100644 --- a/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt @@ -1,5 +1,6 @@ package info.nightscout.implementation.iob +import com.google.common.truth.Truth.assertThat import info.nightscout.core.iob.asRounded import info.nightscout.core.iob.log import info.nightscout.database.entities.GlucoseValue @@ -9,7 +10,6 @@ import info.nightscout.interfaces.iob.InMemoryGlucoseValue import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.shared.utils.T import info.nightscout.sharedtests.TestBaseWithProfile -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -30,106 +30,106 @@ class GlucoseStatusTest : TestBaseWithProfile() { @Test fun toStringShouldBeOverloaded() { val glucoseStatus = GlucoseStatus(glucose = 0.0, noise = 0.0, delta = 0.0, shortAvgDelta = 0.0, longAvgDelta = 0.0, date = 0) - Assertions.assertEquals(true, glucoseStatus.log(decimalFormatter).contains("Delta")) + assertThat(glucoseStatus.log(decimalFormatter)).contains("Delta") } @Test fun roundTest() { val glucoseStatus = GlucoseStatus(glucose = 100.11111, noise = 0.0, delta = 0.0, shortAvgDelta = 0.0, longAvgDelta = 0.0, date = 0) - Assertions.assertEquals(100.1, glucoseStatus.asRounded().glucose, 0.0001) + assertThat(glucoseStatus.asRounded().glucose).isWithin(0.0001).of(100.1) } @Test fun calculateValidGlucoseStatus() { Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateValidBgData()) val glucoseStatus = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil, decimalFormatter).glucoseStatusData!! - Assertions.assertEquals(214.0, glucoseStatus.glucose, 0.001) - Assertions.assertEquals(-2.0, glucoseStatus.delta, 0.001) - Assertions.assertEquals(-2.5, glucoseStatus.shortAvgDelta, 0.001) // -2 -2.5 -3 deltas are relative to current value - Assertions.assertEquals(-2.0, glucoseStatus.longAvgDelta, 0.001) // -2 -2 -2 -2 - Assertions.assertEquals(1514766900000L, glucoseStatus.date) // latest date + assertThat(glucoseStatus.glucose).isWithin(0.001).of(214.0) + assertThat(glucoseStatus.delta).isWithin(0.001).of(-2.0) + assertThat(glucoseStatus.shortAvgDelta).isWithin(0.001).of(-2.5) // -2 -2.5 -3 deltas are relative to current value + assertThat(glucoseStatus.longAvgDelta).isWithin(0.001).of(-2.0) // -2 -2 -2 -2 + assertThat(glucoseStatus.date).isEqualTo(1514766900000L) // latest date } -/* - Not testing anymore, not valid for bucketed data + /* + Not testing anymore, not valid for bucketed data - @Test fun calculateMostRecentGlucoseStatus() { - Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateMostRecentBgData()) - val glucoseStatus: GlucoseStatus = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil).glucoseStatusData!! - Assertions.assertEquals(215.0, glucoseStatus.glucose, 0.001) // (214+216) / 2 - Assertions.assertEquals(-1.0, glucoseStatus.delta, 0.001) - Assertions.assertEquals(-1.0, glucoseStatus.shortAvgDelta, 0.001) - Assertions.assertEquals(0.0, glucoseStatus.longAvgDelta, 0.001) - Assertions.assertEquals(1514766900000L, glucoseStatus.date) // latest date, even when averaging - } + @Test fun calculateMostRecentGlucoseStatus() { + Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateMostRecentBgData()) + val glucoseStatus: GlucoseStatus = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil).glucoseStatusData!! + assertThat(glucoseStatus.glucose).isWithin(0.001).of(215.0) // (214+216) / 2 + assertThat(glucoseStatus.delta).isWithin(0.001).of(-1.0) + assertThat(glucoseStatus.shortAvgDelta).isWithin(0.001).of(-1.0) + assertThat( glucoseStatus.longAvgDelta).isWithin(0.001).of(0.0) + assertThat(glucoseStatus.date).isEqualTo(1514766900000L) // latest date, even when averaging + } - private fun generateMostRecentBgData(): MutableList { - val list: MutableList = ArrayList() - list.add(InMemoryGlucoseValue(value = 214.0, timestamp = 1514766900000, trendArrow = GlucoseValue.TrendArrow.FLAT)) - list.add(InMemoryGlucoseValue(value = 216.0, timestamp = 1514766800000, trendArrow = GlucoseValue.TrendArrow.FLAT)) - list.add(InMemoryGlucoseValue(value = 216.0, timestamp = 1514766600000, trendArrow = GlucoseValue.TrendArrow.FLAT)) - return list - } -*/ + private fun generateMostRecentBgData(): MutableList { + val list: MutableList = ArrayList() + list.add(InMemoryGlucoseValue(value = 214.0, timestamp = 1514766900000, trendArrow = GlucoseValue.TrendArrow.FLAT)) + list.add(InMemoryGlucoseValue(value = 216.0, timestamp = 1514766800000, trendArrow = GlucoseValue.TrendArrow.FLAT)) + list.add(InMemoryGlucoseValue(value = 216.0, timestamp = 1514766600000, trendArrow = GlucoseValue.TrendArrow.FLAT)) + return list + } + */ @Test fun oneRecordShouldProduceZeroDeltas() { Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateOneCurrentRecordBgData()) val glucoseStatus: GlucoseStatus = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil, decimalFormatter).glucoseStatusData!! - Assertions.assertEquals(214.0, glucoseStatus.glucose, 0.001) - Assertions.assertEquals(0.0, glucoseStatus.delta, 0.001) - Assertions.assertEquals(0.0, glucoseStatus.shortAvgDelta, 0.001) // -2 -2.5 -3 deltas are relative to current value - Assertions.assertEquals(0.0, glucoseStatus.longAvgDelta, 0.001) // -2 -2 -2 -2 - Assertions.assertEquals(1514766900000L, glucoseStatus.date) // latest date + assertThat(glucoseStatus.glucose).isWithin(0.001).of(214.0) + assertThat(glucoseStatus.delta).isWithin(0.001).of(0.0) + assertThat(glucoseStatus.shortAvgDelta).isWithin(0.001).of(0.0) // -2 -2.5 -3 deltas are relative to current value + assertThat(glucoseStatus.longAvgDelta).isWithin(0.001).of(0.0) // -2 -2 -2 -2 + assertThat(glucoseStatus.date).isEqualTo(1514766900000L) // latest date } @Test fun insufficientDataShouldReturnNull() { Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateInsufficientBgData()) val glucoseStatus: GlucoseStatus? = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil, decimalFormatter).glucoseStatusData - Assertions.assertEquals(null, glucoseStatus) + assertThat(glucoseStatus).isNull() } @Test fun oldDataShouldReturnNull() { Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateOldBgData()) val glucoseStatus: GlucoseStatus? = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil, decimalFormatter).glucoseStatusData - Assertions.assertEquals(null, glucoseStatus) + assertThat(glucoseStatus).isNull() } @Test fun returnOldDataIfAllowed() { Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateOldBgData()) val glucoseStatus: GlucoseStatus? = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil, decimalFormatter).getGlucoseStatusData(true) - Assertions.assertNotEquals(null, glucoseStatus) + assertThat(glucoseStatus).isNull() } @Test fun averageShouldNotFailOnEmptyArray() { - Assertions.assertEquals(0.0, GlucoseStatusProviderImpl.average(ArrayList()), 0.001) + assertThat(GlucoseStatusProviderImpl.average(ArrayList())).isWithin(0.001).of(0.0) } -/* - Not testing anymore, not valid for bucketed data + /* + Not testing anymore, not valid for bucketed data - @Test fun calculateGlucoseStatusForLibreTestBgData() { - Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateLibreTestData()) - val glucoseStatus: GlucoseStatus = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil).glucoseStatusData!! - Assertions.assertEquals(100.0, glucoseStatus.glucose, 0.001) // - Assertions.assertEquals(-10.0, glucoseStatus.delta, 0.001) - Assertions.assertEquals(-10.0, glucoseStatus.shortAvgDelta, 0.001) - Assertions.assertEquals(-10.0, glucoseStatus.longAvgDelta, 0.001) - Assertions.assertEquals(1514766900000L, glucoseStatus.date) // latest date - } + @Test fun calculateGlucoseStatusForLibreTestBgData() { + Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateLibreTestData()) + val glucoseStatus: GlucoseStatus = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil).glucoseStatusData!! + assertThat(glucoseStatus.glucose).isWithin(0.001).of(100.0) + assertThat(glucoseStatus.delta).isWithin(0.001).of(-10.0) + assertThat(glucoseStatus.shortAvgDelta).isWithin(0.001).of(-10.0) + assertThat(glucoseStatus.longAvgDelta).isWithin(0.001).of(-10.0) + assertThat(glucoseStatus.date).isEqualTo(1514766900000L) // latest date + } - private fun generateLibreTestData(): MutableList { - val list: MutableList = ArrayList() - val endTime = 1514766900000L - val latestReading = 100.0 - // Now - list.add(InMemoryGlucoseValue(value = latestReading, timestamp = endTime, trendArrow = GlucoseValue.TrendArrow.FLAT)) - // One minute ago - list.add(InMemoryGlucoseValue(value = latestReading, timestamp = endTime - 1000 * 60 * 1, trendArrow = GlucoseValue.TrendArrow.FLAT)) - // Two minutes ago - list.add(InMemoryGlucoseValue(value = latestReading, timestamp = endTime - 1000 * 60 * 2, trendArrow = GlucoseValue.TrendArrow.FLAT)) - // Three minutes and beyond at constant rate - for (i in 3..49) - list.add(InMemoryGlucoseValue(value = latestReading + i * 2, timestamp = endTime - 1000 * 60 * i, trendArrow = GlucoseValue.TrendArrow.FLAT)) - return list - } -*/ + private fun generateLibreTestData(): MutableList { + val list: MutableList = ArrayList() + val endTime = 1514766900000L + val latestReading = 100.0 + // Now + list.add(InMemoryGlucoseValue(value = latestReading, timestamp = endTime, trendArrow = GlucoseValue.TrendArrow.FLAT)) + // One minute ago + list.add(InMemoryGlucoseValue(value = latestReading, timestamp = endTime - 1000 * 60 * 1, trendArrow = GlucoseValue.TrendArrow.FLAT)) + // Two minutes ago + list.add(InMemoryGlucoseValue(value = latestReading, timestamp = endTime - 1000 * 60 * 2, trendArrow = GlucoseValue.TrendArrow.FLAT)) + // Three minutes and beyond at constant rate + for (i in 3..49) + list.add(InMemoryGlucoseValue(value = latestReading + i * 2, timestamp = endTime - 1000 * 60 * i, trendArrow = GlucoseValue.TrendArrow.FLAT)) + return list + } + */ @BeforeEach fun initMocking() { @@ -166,4 +166,4 @@ class GlucoseStatusTest : TestBaseWithProfile() { list.add(InMemoryGlucoseValue(value = 214.0, timestamp = 1514766900000, trendArrow = GlucoseValue.TrendArrow.FLAT, sourceSensor = GlucoseValue.SourceSensor.UNKNOWN)) return list } -} \ No newline at end of file +} From 7f1ba7e763b0d7663552ad8233b96f4c32a59388 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 22:22:52 -0700 Subject: [PATCH 51/65] Rewrites OverviewDataImplTest with matchers Issue #2745 --- .../overview/OverviewDataImplTest.kt | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/overview/OverviewDataImplTest.kt b/implementation/src/test/java/info/nightscout/implementation/overview/OverviewDataImplTest.kt index d0f483f2c9..4fce738688 100644 --- a/implementation/src/test/java/info/nightscout/implementation/overview/OverviewDataImplTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/overview/OverviewDataImplTest.kt @@ -1,5 +1,6 @@ package info.nightscout.implementation.overview +import com.google.common.truth.Truth.assertThat import info.nightscout.database.ValueWrapper import info.nightscout.database.entities.GlucoseValue import info.nightscout.database.impl.AppRepository @@ -10,7 +11,6 @@ import info.nightscout.interfaces.profile.DefaultValueHelper import info.nightscout.shared.utils.T import info.nightscout.sharedtests.TestBaseWithProfile import io.reactivex.rxjava3.core.Single -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -43,23 +43,23 @@ class OverviewDataImplTest : TestBaseWithProfile() { // no data Mockito.`when`(autosensDataStore.bucketedData).thenReturn(null) Mockito.`when`(repository.getLastGlucoseValueWrapped()).thenReturn(Single.just(ValueWrapper.Absent())) - Assertions.assertNull(sut.lastBg(autosensDataStore)) - Assertions.assertFalse(sut.isLow(autosensDataStore)) - Assertions.assertFalse(sut.isHigh(autosensDataStore)) + assertThat(sut.lastBg(autosensDataStore)).isNull() + assertThat(sut.isLow(autosensDataStore)).isFalse() + assertThat(sut.isHigh(autosensDataStore)).isFalse() // no bucketed but in db Mockito.`when`(autosensDataStore.bucketedData).thenReturn(null) Mockito.`when`(repository.getLastGlucoseValueWrapped()).thenReturn(Single.just(ValueWrapper.Existing(glucoseValue))) - Assertions.assertEquals(200.0, sut.lastBg(autosensDataStore)?.value) - Assertions.assertFalse(sut.isLow(autosensDataStore)) - Assertions.assertTrue(sut.isHigh(autosensDataStore)) + assertThat(sut.lastBg(autosensDataStore)?.value).isEqualTo(200.0) + assertThat(sut.isLow(autosensDataStore)).isFalse() + assertThat(sut.isHigh(autosensDataStore)).isTrue() // in bucketed Mockito.`when`(autosensDataStore.bucketedData).thenReturn(bucketedData) Mockito.`when`(repository.getLastGlucoseValueWrapped()).thenReturn(Single.just(ValueWrapper.Existing(glucoseValue))) - Assertions.assertEquals(70.0, sut.lastBg(autosensDataStore)?.value) - Assertions.assertTrue(sut.isLow(autosensDataStore)) - Assertions.assertFalse(sut.isHigh(autosensDataStore)) + assertThat(sut.lastBg(autosensDataStore)?.value).isEqualTo(70.0) + assertThat(sut.isLow(autosensDataStore)).isTrue() + assertThat(sut.isHigh(autosensDataStore)).isFalse() } @Test @@ -68,13 +68,13 @@ class OverviewDataImplTest : TestBaseWithProfile() { Mockito.`when`(autosensDataStore.bucketedData).thenReturn(null) Mockito.`when`(repository.getLastGlucoseValueWrapped()).thenReturn(Single.just(ValueWrapper.Existing(glucoseValue))) Mockito.`when`(dateUtil.now()).thenReturn(time + T.mins(1).msecs()) - Assertions.assertTrue(sut.isActualBg(autosensDataStore)) + assertThat(sut.isActualBg(autosensDataStore)).isTrue() Mockito.`when`(dateUtil.now()).thenReturn(time + T.mins(9).msecs() + 1) - Assertions.assertFalse(sut.isActualBg(autosensDataStore)) + assertThat(sut.isActualBg(autosensDataStore)).isFalse() // no data Mockito.`when`(autosensDataStore.bucketedData).thenReturn(null) Mockito.`when`(repository.getLastGlucoseValueWrapped()).thenReturn(Single.just(ValueWrapper.Absent())) - Assertions.assertFalse(sut.isActualBg(autosensDataStore)) + assertThat(sut.isActualBg(autosensDataStore)).isFalse() } -} \ No newline at end of file +} From d90db860f00455e0939d01dc61af3197a7d461ef Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 22:28:55 -0700 Subject: [PATCH 52/65] Rewrites ProfileStoreTest with matchers Issue #2745 --- .../profile/ProfileStoreTest.kt | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/profile/ProfileStoreTest.kt b/implementation/src/test/java/info/nightscout/implementation/profile/ProfileStoreTest.kt index 0f7eee5b5f..0c142e8ba7 100644 --- a/implementation/src/test/java/info/nightscout/implementation/profile/ProfileStoreTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/profile/ProfileStoreTest.kt @@ -1,47 +1,47 @@ package info.nightscout.implementation.profile +import com.google.common.truth.Truth.assertThat import info.nightscout.interfaces.profile.PureProfile import info.nightscout.sharedtests.TestBaseWithProfile -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test internal class ProfileStoreTest : TestBaseWithProfile() { @Test fun getStartDateTest() { - Assertions.assertEquals(0, getValidProfileStore().getStartDate()) + assertThat(getValidProfileStore().getStartDate()).isEqualTo(0) } @Test fun getDefaultProfileTest() { - Assertions.assertTrue(getValidProfileStore().getDefaultProfile() is PureProfile) + assertThat(getValidProfileStore().getDefaultProfile()).isInstanceOf(PureProfile::class.java) } @Test fun getDefaultProfileJsonTest() { - Assertions.assertTrue(getValidProfileStore().getDefaultProfileJson()?.has("dia") ?: false) - Assertions.assertEquals(null, getInvalidProfileStore2().getDefaultProfileJson()) + assertThat(getValidProfileStore().getDefaultProfileJson()?.has("dia")).isTrue() + assertThat(getInvalidProfileStore2().getDefaultProfileJson()).isNull() } @Test fun getDefaultProfileNameTest() { - Assertions.assertEquals(TESTPROFILENAME, getValidProfileStore().getDefaultProfileName()) + assertThat(getValidProfileStore().getDefaultProfileName()).isEqualTo(TESTPROFILENAME) } @Test fun getProfileListTest() { - Assertions.assertEquals(1, getValidProfileStore().getProfileList().size) + assertThat(getValidProfileStore().getProfileList()).hasSize(1) } @Test fun getSpecificProfileTest() { - Assertions.assertTrue(getValidProfileStore().getSpecificProfile(TESTPROFILENAME) is PureProfile) + assertThat(getValidProfileStore().getSpecificProfile(TESTPROFILENAME)).isInstanceOf(PureProfile::class.java) } @Test fun allProfilesValidTest() { - Assertions.assertTrue(getValidProfileStore().allProfilesValid) - Assertions.assertFalse(getInvalidProfileStore1().allProfilesValid) - Assertions.assertFalse(getInvalidProfileStore2().allProfilesValid) + assertThat(getValidProfileStore().allProfilesValid).isTrue() + assertThat(getInvalidProfileStore1().allProfilesValid).isFalse() + assertThat(getInvalidProfileStore2().allProfilesValid).isFalse() } -} \ No newline at end of file +} From 822dc0361bc3c7c114763d97b3b0dfbc982c3145 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 22:31:21 -0700 Subject: [PATCH 53/65] Rewrites ProfileUtilImplTest with matchers Issue #2745 --- .../profile/ProfileUtilImplTest.kt | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/profile/ProfileUtilImplTest.kt b/implementation/src/test/java/info/nightscout/implementation/profile/ProfileUtilImplTest.kt index b90f62884a..b9b02c1847 100644 --- a/implementation/src/test/java/info/nightscout/implementation/profile/ProfileUtilImplTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/profile/ProfileUtilImplTest.kt @@ -1,12 +1,12 @@ package info.nightscout.implementation.profile +import com.google.common.truth.Truth.assertThat import info.nightscout.database.entities.GlucoseValue import info.nightscout.implementation.utils.DecimalFormatterImpl import info.nightscout.interfaces.GlucoseUnit import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -29,19 +29,19 @@ class ProfileUtilImplTest : TestBase() { @Test fun toUnitsString() { - Assertions.assertEquals("100", sut.fromMgdlToStringInUnits(glucoseValue.value, GlucoseUnit.MGDL)) - Assertions.assertEquals("5.6", sut.fromMgdlToStringInUnits(glucoseValue.value, GlucoseUnit.MMOL)) - Assertions.assertEquals(0.1, sut.convertToMgdl(0.1, GlucoseUnit.MGDL), 0.01) - Assertions.assertEquals(18.0, sut.convertToMgdl(1.0, GlucoseUnit.MMOL), 0.01) - Assertions.assertEquals(1.0, sut.convertToMmol(18.0, GlucoseUnit.MGDL), 0.01) - Assertions.assertEquals(18.0, sut.convertToMmol(18.0, GlucoseUnit.MMOL), 0.01) - Assertions.assertEquals(18.0, sut.fromMgdlToUnits(18.0, GlucoseUnit.MGDL), 0.01) - Assertions.assertEquals(1.0, sut.fromMgdlToUnits(18.0, GlucoseUnit.MMOL), 0.01) - Assertions.assertEquals(18.0, sut.fromMgdlToUnits(18.0, GlucoseUnit.MGDL), 0.01) - Assertions.assertEquals(1.0, sut.fromMgdlToUnits(18.0, GlucoseUnit.MMOL), 0.01) - Assertions.assertEquals("18", sut.fromMgdlToStringInUnits(18.0, GlucoseUnit.MGDL)) - Assertions.assertEquals("1.0", sut.fromMgdlToStringInUnits(18.0, GlucoseUnit.MMOL).replace(",", ".")) - Assertions.assertEquals("5 - 6", sut.toTargetRangeString(5.0, 6.0, GlucoseUnit.MGDL, GlucoseUnit.MGDL)) - Assertions.assertEquals("4", sut.toTargetRangeString(4.0, 4.0, GlucoseUnit.MGDL, GlucoseUnit.MGDL)) + assertThat(sut.fromMgdlToStringInUnits(glucoseValue.value, GlucoseUnit.MGDL)).isEqualTo("100") + assertThat(sut.fromMgdlToStringInUnits(glucoseValue.value, GlucoseUnit.MMOL)).isEqualTo("5.6") + assertThat(sut.convertToMgdl(0.1, GlucoseUnit.MGDL)).isWithin(0.01).of(0.1) + assertThat(sut.convertToMgdl(1.0, GlucoseUnit.MMOL)).isWithin(0.01).of(18.0) + assertThat(sut.convertToMmol(18.0, GlucoseUnit.MGDL)).isWithin(0.01).of(1.0) + assertThat(sut.convertToMmol(18.0, GlucoseUnit.MMOL)).isWithin(0.01).of(18.0) + assertThat(sut.fromMgdlToUnits(18.0, GlucoseUnit.MGDL)).isWithin(0.01).of(18.0) + assertThat(sut.fromMgdlToUnits(18.0, GlucoseUnit.MMOL)).isWithin(0.01).of(1.0) + assertThat(sut.fromMgdlToUnits(18.0, GlucoseUnit.MGDL)).isWithin(0.01).of(18.0) + assertThat(sut.fromMgdlToUnits(18.0, GlucoseUnit.MMOL)).isWithin(0.01).of(1.0) + assertThat(sut.fromMgdlToStringInUnits(18.0, GlucoseUnit.MGDL)).isEqualTo("18") + assertThat(sut.fromMgdlToStringInUnits(18.0, GlucoseUnit.MMOL).replace(",", ".")).isEqualTo("1.0") + assertThat(sut.toTargetRangeString(5.0, 6.0, GlucoseUnit.MGDL, GlucoseUnit.MGDL)).isEqualTo("5 - 6") + assertThat(sut.toTargetRangeString(4.0, 4.0, GlucoseUnit.MGDL, GlucoseUnit.MGDL)).isEqualTo("4") } -} \ No newline at end of file +} From fea4d39ca7e9ceaba319db7a0e120c0608f32408 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 22:35:36 -0700 Subject: [PATCH 54/65] Rewrites DetailedBolusInfoStorageTest with matchers Issue #2745 --- .../pump/DetailedBolusInfoStorageTest.kt | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/pump/DetailedBolusInfoStorageTest.kt b/implementation/src/test/java/info/nightscout/implementation/pump/DetailedBolusInfoStorageTest.kt index 5f1e23593b..3de4e26a24 100644 --- a/implementation/src/test/java/info/nightscout/implementation/pump/DetailedBolusInfoStorageTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/pump/DetailedBolusInfoStorageTest.kt @@ -1,11 +1,11 @@ package info.nightscout.implementation.pump +import com.google.common.truth.Truth.assertThat import info.nightscout.implementation.R import info.nightscout.interfaces.pump.DetailedBolusInfo import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.sharedtests.TestBase -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -47,9 +47,9 @@ class DetailedBolusInfoStorageTest : TestBase() { @Test fun add() { detailedBolusInfoStorage.store.clear() - Assertions.assertEquals(0, detailedBolusInfoStorage.store.size) + assertThat(detailedBolusInfoStorage.store).isEmpty() detailedBolusInfoStorage.add(info1) - Assertions.assertEquals(1, detailedBolusInfoStorage.store.size) + assertThat(detailedBolusInfoStorage.store).hasSize(1) } @Test @@ -58,38 +58,38 @@ class DetailedBolusInfoStorageTest : TestBase() { // Look for exact bolus setUp() var d: DetailedBolusInfo? = detailedBolusInfoStorage.findDetailedBolusInfo(1000000, 4.0) - Assertions.assertEquals(4.0, d!!.insulin, 0.01) - Assertions.assertEquals(2, detailedBolusInfoStorage.store.size) + assertThat(d!!.insulin).isWithin(0.01).of(4.0) + assertThat(detailedBolusInfoStorage.store).hasSize(2) // Look for exact bolus setUp() d = detailedBolusInfoStorage.findDetailedBolusInfo(1000000, 3.0) - Assertions.assertEquals(3.0, d!!.insulin, 0.01) - Assertions.assertEquals(2, detailedBolusInfoStorage.store.size) + assertThat(d!!.insulin).isWithin(0.01).of(3.0) + assertThat(detailedBolusInfoStorage.store).hasSize(2) // With less insulin (bolus not delivered completely). Should return first one matching date setUp() d = detailedBolusInfoStorage.findDetailedBolusInfo(1000500, 2.0) - Assertions.assertEquals(3.0, d!!.insulin, 0.01) - Assertions.assertEquals(2, detailedBolusInfoStorage.store.size) + assertThat(d!!.insulin).isWithin(0.01).of(3.0) + assertThat(detailedBolusInfoStorage.store).hasSize(2) // With less insulin (bolus not delivered completely). Should return first one matching date setUp() d = detailedBolusInfoStorage.findDetailedBolusInfo(1000500, 3.5) - Assertions.assertEquals(4.0, d!!.insulin, 0.01) - Assertions.assertEquals(2, detailedBolusInfoStorage.store.size) + assertThat(d!!.insulin).isWithin(0.01).of(4.0) + assertThat(detailedBolusInfoStorage.store).hasSize(2) // With more insulin should return null setUp() d = detailedBolusInfoStorage.findDetailedBolusInfo(1000500, 4.5) - Assertions.assertNull(d) - Assertions.assertEquals(3, detailedBolusInfoStorage.store.size) + assertThat(d).isNull() + assertThat(detailedBolusInfoStorage.store).hasSize(3) // With more than one minute off should return null setUp() d = detailedBolusInfoStorage.findDetailedBolusInfo(1070000, 4.0) - Assertions.assertNull(d) - Assertions.assertEquals(3, detailedBolusInfoStorage.store.size) + assertThat(d).isNull() + assertThat(detailedBolusInfoStorage.store).hasSize(3) // Use last, if bolus size is the same // setUp() // d = detailedBolusInfoStorage.findDetailedBolusInfo(1070000, 5.0) -// assertEquals(5.0, d!!.insulin, 0.01) -// assertEquals(2, detailedBolusInfoStorage.store.size) +// assertThat( d!!.insulin).isWithin(0.01).of(5.0) +// assertThat(detailedBolusInfoStorage.store).hasSize(2) } -} \ No newline at end of file +} From 7a0635b6a8cac5249abe491e6ff17b3162ff658f Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 22:39:36 -0700 Subject: [PATCH 55/65] Rewrites TemporaryBasalStorageTest with matchers Issue #2745 --- .../pump/TemporaryBasalStorageTest.kt | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/pump/TemporaryBasalStorageTest.kt b/implementation/src/test/java/info/nightscout/implementation/pump/TemporaryBasalStorageTest.kt index 14465bf0f4..881bd46aa9 100644 --- a/implementation/src/test/java/info/nightscout/implementation/pump/TemporaryBasalStorageTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/pump/TemporaryBasalStorageTest.kt @@ -1,8 +1,8 @@ package info.nightscout.implementation.pump +import com.google.common.truth.Truth.assertThat import info.nightscout.interfaces.pump.PumpSync import info.nightscout.sharedtests.TestBase -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -29,9 +29,9 @@ class TemporaryBasalStorageTest : TestBase() { @Test fun add() { temporaryBasalStorage.store.clear() - Assertions.assertEquals(0, temporaryBasalStorage.store.size) + assertThat(temporaryBasalStorage.store).isEmpty() temporaryBasalStorage.add(info1) - Assertions.assertEquals(1, temporaryBasalStorage.store.size) + assertThat(temporaryBasalStorage.store).hasSize(1) } @Test @@ -40,38 +40,38 @@ class TemporaryBasalStorageTest : TestBase() { // Look for exact bolus setUp() var d = temporaryBasalStorage.findTemporaryBasal(1000000, 4.0) - Assertions.assertEquals(4.0, d!!.rate, 0.01) - Assertions.assertEquals(2, temporaryBasalStorage.store.size) + assertThat(d!!.rate).isWithin(0.01).of(4.0) + assertThat(temporaryBasalStorage.store).hasSize(2) // Look for exact bolus setUp() d = temporaryBasalStorage.findTemporaryBasal(1000000, 3.0) - Assertions.assertEquals(3.0, d!!.rate, 0.01) - Assertions.assertEquals(2, temporaryBasalStorage.store.size) + assertThat(d!!.rate).isWithin(0.01).of(3.0) + assertThat(temporaryBasalStorage.store).hasSize(2) // With less rate (bolus not delivered completely). Should return first one matching date setUp() d = temporaryBasalStorage.findTemporaryBasal(1000500, 2.0) - Assertions.assertEquals(3.0, d!!.rate, 0.01) - Assertions.assertEquals(2, temporaryBasalStorage.store.size) + assertThat(d!!.rate).isWithin(0.01).of(3.0) + assertThat(temporaryBasalStorage.store).hasSize(2) // With less rate (bolus not delivered completely). Should return first one matching date setUp() d = temporaryBasalStorage.findTemporaryBasal(1000500, 3.5) - Assertions.assertEquals(4.0, d!!.rate, 0.01) - Assertions.assertEquals(2, temporaryBasalStorage.store.size) + assertThat(d!!.rate).isWithin(0.01).of(4.0) + assertThat(temporaryBasalStorage.store).hasSize(2) // With more rate should return null setUp() d = temporaryBasalStorage.findTemporaryBasal(1000500, 4.5) - Assertions.assertNull(d) - Assertions.assertEquals(3, temporaryBasalStorage.store.size) + assertThat(d).isNull() + assertThat(temporaryBasalStorage.store).hasSize(3) // With more than one minute off should return null setUp() d = temporaryBasalStorage.findTemporaryBasal(1070000, 4.0) - Assertions.assertNull(d) - Assertions.assertEquals(3, temporaryBasalStorage.store.size) + assertThat(d).isNull() + assertThat(temporaryBasalStorage.store).hasSize(3) // Use last, if bolus size is the same setUp() d = temporaryBasalStorage.findTemporaryBasal(1070000, 5.0) - Assertions.assertEquals(5.0, d!!.rate, 0.01) - Assertions.assertEquals(2, temporaryBasalStorage.store.size) + assertThat(d!!.rate).isWithin(0.01).of(5.0) + assertThat(temporaryBasalStorage.store).hasSize(2) } -} \ No newline at end of file +} From 8b3e39420e9ddc79d0e4aae6bfa4694d20d25e49 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 22:41:56 -0700 Subject: [PATCH 56/65] Rewrites DecimalFormatterTest with matchers Issue #2745 --- .../utils/DecimalFormatterTest.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/utils/DecimalFormatterTest.kt b/implementation/src/test/java/info/nightscout/implementation/utils/DecimalFormatterTest.kt index 9ab168ff5b..2b5938656c 100644 --- a/implementation/src/test/java/info/nightscout/implementation/utils/DecimalFormatterTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/utils/DecimalFormatterTest.kt @@ -1,9 +1,9 @@ package info.nightscout.implementation.utils +import com.google.common.truth.Truth.assertThat import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.sharedtests.TestBase -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -20,22 +20,22 @@ class DecimalFormatterTest : TestBase() { } @Test fun to0DecimalTest() { - Assertions.assertEquals("1", sut.to0Decimal(1.33).replace(",", ".")) - Assertions.assertEquals("1U", sut.to0Decimal(1.33, "U").replace(",", ".")) + assertThat(sut.to0Decimal(1.33).replace(",", ".")).isEqualTo("1") + assertThat(sut.to0Decimal(1.33, "U").replace(",", ".")).isEqualTo("1U") } @Test fun to1DecimalTest() { - Assertions.assertEquals("1.3", sut.to1Decimal(1.33).replace(",", ".")) - Assertions.assertEquals("1.3U", sut.to1Decimal(1.33, "U").replace(",", ".")) + assertThat(sut.to1Decimal(1.33).replace(",", ".")).isEqualTo("1.3") + assertThat(sut.to1Decimal(1.33, "U").replace(",", ".")).isEqualTo("1.3U") } @Test fun to2DecimalTest() { - Assertions.assertEquals("1.33", sut.to2Decimal(1.3333).replace(",", ".")) - Assertions.assertEquals("1.33U", sut.to2Decimal(1.3333, "U").replace(",", ".")) + assertThat(sut.to2Decimal(1.3333).replace(",", ".")).isEqualTo("1.33") + assertThat(sut.to2Decimal(1.3333, "U").replace(",", ".")).isEqualTo("1.33U") } @Test fun to3DecimalTest() { - Assertions.assertEquals("1.333", sut.to3Decimal(1.3333).replace(",", ".")) - Assertions.assertEquals("1.333U", sut.to3Decimal(1.3333, "U").replace(",", ".")) + assertThat(sut.to3Decimal(1.3333).replace(",", ".")).isEqualTo("1.333") + assertThat(sut.to3Decimal(1.3333, "U").replace(",", ".")).isEqualTo("1.333U") } -} \ No newline at end of file +} From 8c8b492ebae070c3a1c8d31eedb0def16cce6591 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 23:05:38 -0700 Subject: [PATCH 57/65] Rewrites CommandQueueImplementationTest with matchers Issue #2745 --- .../queue/CommandQueueImplementationTest.kt | 204 +++++++++--------- 1 file changed, 102 insertions(+), 102 deletions(-) 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 f77ea1b704..1d5f831bfe 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt @@ -1,5 +1,6 @@ package info.nightscout.implementation.queue +import com.google.common.truth.Truth.assertThat import android.content.Context import android.os.Handler import android.os.PowerManager @@ -38,7 +39,6 @@ import info.nightscout.shared.utils.DateUtil import info.nightscout.sharedtests.TestBaseWithProfile import info.nightscout.sharedtests.TestPumpPlugin import io.reactivex.rxjava3.core.Single -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -169,121 +169,121 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { commandQueue.handler = handler // start with empty queue - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // add bolus command commandQueue.bolus(DetailedBolusInfo(), null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) commandQueue.waitForFinishedThread() Thread.sleep(1000) - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) } @Test fun doTests() { // start with empty queue - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // add bolus command commandQueue.bolus(DetailedBolusInfo(), null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) // add READSTATUS commandQueue.readStatus("anyString", null) - Assertions.assertEquals(2, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(2) // adding another bolus should remove the first one (size still == 2) commandQueue.bolus(DetailedBolusInfo(), null) - Assertions.assertEquals(2, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(2) // clear the queue should reset size commandQueue.clear() - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // add tempbasal commandQueue.tempBasalAbsolute(0.0, 30, true, validProfile, PumpSync.TemporaryBasalType.NORMAL, null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) // add tempbasal percent. it should replace previous TEMPBASAL commandQueue.tempBasalPercent(0, 30, true, validProfile, PumpSync.TemporaryBasalType.NORMAL, null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) // cancel tempbasal it should replace previous TEMPBASAL commandQueue.cancelTempBasal(false, null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) // add extended bolus commandQueue.extendedBolus(1.0, 30, null) - Assertions.assertEquals(2, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(2) // add extended should remove previous extended setting commandQueue.extendedBolus(1.0, 30, null) - Assertions.assertEquals(2, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(2) // cancel extended bolus should replace previous extended commandQueue.cancelExtended(null) - Assertions.assertEquals(2, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(2) // add setProfile // TODO: this crash the test // commandQueue.setProfile(validProfile, null) - // Assertions.assertEquals(3, commandQueue.size()) + // assertThat(commandQueue.size()).isEqualTo(3) // add loadHistory commandQueue.loadHistory(0.toByte(), null) - Assertions.assertEquals(3, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(3) // add loadEvents commandQueue.loadEvents(null) - Assertions.assertEquals(4, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(4) // add clearAlarms commandQueue.clearAlarms(null) - Assertions.assertEquals(5, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(5) // add deactivate commandQueue.deactivate(null) - Assertions.assertEquals(6, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(6) // add updateTime commandQueue.updateTime(null) - Assertions.assertEquals(7, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(7) commandQueue.clear() commandQueue.tempBasalAbsolute(0.0, 30, true, validProfile, PumpSync.TemporaryBasalType.NORMAL, null) commandQueue.pickup() - Assertions.assertEquals(0, commandQueue.size()) - Assertions.assertNotNull(commandQueue.performing) - Assertions.assertEquals(Command.CommandType.TEMPBASAL, commandQueue.performing?.commandType) + assertThat(commandQueue.size()).isEqualTo(0) + assertThat(commandQueue.performing).isNotNull() + assertThat(commandQueue.performing?.commandType).isEqualTo(Command.CommandType.TEMPBASAL) commandQueue.resetPerforming() - Assertions.assertNull(commandQueue.performing) + assertThat(commandQueue.performing).isNull() } @Test fun callingCancelAllBolusesClearsQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) val smb = DetailedBolusInfo() smb.lastKnownBolusTime = System.currentTimeMillis() smb.bolusType = DetailedBolusInfo.BolusType.SMB commandQueue.bolus(smb, null) commandQueue.bolus(DetailedBolusInfo(), null) - Assertions.assertEquals(2, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(2) // when commandQueue.cancelAllBoluses(null) // then - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) } @Test fun smbIsRejectedIfABolusIsQueued() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.bolus(DetailedBolusInfo(), null) @@ -292,14 +292,14 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { val queued: Boolean = commandQueue.bolus(smb, null) // then - Assertions.assertFalse(queued) - Assertions.assertEquals(commandQueue.size(), 1) + assertThat(queued).isFalse() + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun smbIsRejectedIfLastKnownBolusIsOutdated() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when val bolus = DetailedBolusInfo() @@ -308,14 +308,14 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { val queued: Boolean = commandQueue.bolus(bolus, null) // then - Assertions.assertFalse(queued) - Assertions.assertEquals(commandQueue.size(), 0) + assertThat(queued).isFalse() + assertThat(commandQueue.size()).isEqualTo(0) } @Test fun isCustomCommandRunning() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when val queued1 = commandQueue.customCommand(CustomCommand1(), null) @@ -323,249 +323,249 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { commandQueue.pickup() // then - Assertions.assertTrue(queued1) - Assertions.assertTrue(queued2) - Assertions.assertTrue(commandQueue.isCustomCommandInQueue(CustomCommand1::class.java)) - Assertions.assertTrue(commandQueue.isCustomCommandInQueue(CustomCommand2::class.java)) - Assertions.assertFalse(commandQueue.isCustomCommandInQueue(CustomCommand3::class.java)) + assertThat(queued1).isTrue() + assertThat(queued2).isTrue() + assertThat(commandQueue.isCustomCommandInQueue(CustomCommand1::class.java)).isTrue() + assertThat(commandQueue.isCustomCommandInQueue(CustomCommand2::class.java)).isTrue() + assertThat(commandQueue.isCustomCommandInQueue(CustomCommand3::class.java)).isFalse() - Assertions.assertTrue(commandQueue.isCustomCommandRunning(CustomCommand1::class.java)) - Assertions.assertFalse(commandQueue.isCustomCommandRunning(CustomCommand2::class.java)) - Assertions.assertFalse(commandQueue.isCustomCommandRunning(CustomCommand3::class.java)) + assertThat(commandQueue.isCustomCommandRunning(CustomCommand1::class.java)).isTrue() + assertThat(commandQueue.isCustomCommandRunning(CustomCommand2::class.java)).isFalse() + assertThat(commandQueue.isCustomCommandRunning(CustomCommand3::class.java)).isFalse() - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isSetUserOptionsCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.setUserOptions(null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.SET_USER_SETTINGS)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.SET_USER_SETTINGS)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.setUserOptions(null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isLoadEventsCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.loadEvents(null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.LOAD_EVENTS)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.LOAD_EVENTS)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.loadEvents(null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isClearAlarmsCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.clearAlarms(null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.CLEAR_ALARMS)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.CLEAR_ALARMS)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.clearAlarms(null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isDeactivateCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.deactivate(null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.DEACTIVATE)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.DEACTIVATE)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.deactivate(null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isUpdateTimeCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.updateTime(null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.UPDATE_TIME)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.UPDATE_TIME)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.updateTime(null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isLoadTDDsCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.loadTDDs(null) // then - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.loadTDDs(null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isLoadHistoryCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.loadHistory(0, null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.LOAD_HISTORY)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.LOAD_HISTORY)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.loadHistory(0, null) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isProfileSetCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when testPumpPlugin.isProfileSet = true commandQueue.setProfile(validProfile, false, object : Callback() { override fun run() { - Assertions.assertTrue(result.success) - Assertions.assertFalse(result.enacted) + assertThat(result.success).isTrue() + assertThat(result.enacted).isFalse() } }) // then // the same profile -> ignore - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // different should be added testPumpPlugin.isProfileSet = false commandQueue.setProfile(validProfile, false, object : Callback() { override fun run() { - Assertions.assertTrue(result.success) - Assertions.assertTrue(result.enacted) + assertThat(result.success).isTrue() + assertThat(result.enacted).isTrue() } }) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) // next should be ignored commandQueue.setProfile(validProfile, false, object : Callback() { override fun run() { - Assertions.assertTrue(result.success) + assertThat(result.success).isTrue() } }) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(1) testPumpPlugin.isProfileSet = true } @Test fun isStopCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.stopPump(null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.STOP_PUMP)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.STOP_PUMP)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isStarCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.startPump(null) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.START_PUMP)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.START_PUMP)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun isSetTbrNotificationCommandInQueue() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when commandQueue.setTBROverNotification(null, true) // then - Assertions.assertTrue(commandQueue.isLastScheduled(Command.CommandType.INSIGHT_SET_TBR_OVER_ALARM)) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(commandQueue.isLastScheduled(Command.CommandType.INSIGHT_SET_TBR_OVER_ALARM)).isTrue() + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun differentCustomCommandsAllowed() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when val queued1 = commandQueue.customCommand(CustomCommand1(), null) val queued2 = commandQueue.customCommand(CustomCommand2(), null) // then - Assertions.assertTrue(queued1) - Assertions.assertTrue(queued2) - Assertions.assertEquals(2, commandQueue.size()) + assertThat(queued1).isTrue() + assertThat(queued2).isTrue() + assertThat(commandQueue.size()).isEqualTo(2) } @Test fun sameCustomCommandNotAllowed() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when val queued1 = commandQueue.customCommand(CustomCommand1(), null) val queued2 = commandQueue.customCommand(CustomCommand1(), null) // then - Assertions.assertTrue(queued1) - Assertions.assertFalse(queued2) - Assertions.assertEquals(1, commandQueue.size()) + assertThat(queued1).isTrue() + assertThat(queued2).isFalse() + assertThat(commandQueue.size()).isEqualTo(1) } @Test fun readStatusTwiceIsNotAllowed() { // given - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) // when val queued1 = commandQueue.readStatus("1", null) val queued2 = commandQueue.readStatus("2", null) // then - Assertions.assertTrue(queued1) - Assertions.assertFalse(queued2) - Assertions.assertEquals(1, commandQueue.size()) - Assertions.assertTrue(commandQueue.statusInQueue()) + assertThat(queued1).isTrue() + assertThat(queued2).isFalse() + assertThat(commandQueue.size()).isEqualTo(1) + assertThat(commandQueue.statusInQueue()).isTrue() } private class CustomCommand1 : CustomCommand { From 61c41b42fa105fbef450030a9494997c6ae03ff5 Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Tue, 19 Sep 2023 23:07:57 -0700 Subject: [PATCH 58/65] Rewrites QueueThreadTest with matchers Issue #2745 --- .../info/nightscout/implementation/queue/QueueThreadTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt b/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt index f8e3494ac5..d0d131d27f 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt @@ -1,5 +1,6 @@ package info.nightscout.implementation.queue +import com.google.common.truth.Truth.assertThat import android.content.Context import android.os.PowerManager import dagger.android.AndroidInjector @@ -16,7 +17,6 @@ import info.nightscout.interfaces.queue.Command import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.sharedtests.TestBaseWithProfile import info.nightscout.sharedtests.TestPumpPlugin -import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.ArgumentMatchers @@ -84,6 +84,6 @@ class QueueThreadTest : TestBaseWithProfile() { commandQueue.tempBasalAbsolute(2.0, 60, true, validProfile, PumpSync.TemporaryBasalType.NORMAL, null) @Suppress("CallToThreadRun") sut.run() - Assertions.assertEquals(0, commandQueue.size()) + assertThat(commandQueue.size()).isEqualTo(0) } -} \ No newline at end of file +} From cf6f2d4efd0d9d9282e0aed78f71cbe95e49b4e3 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 20 Sep 2023 13:26:32 +0200 Subject: [PATCH 59/65] New Crowdin updates (#2804) * New translations strings.xml (Slovak) * New translations strings.xml (French) * New translations strings.xml (Dutch) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (Dutch) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations exam.xml (Spanish) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) --- .../src/main/res/values-es-rES/strings.xml | 6 ++-- .../src/main/res/values-fr-rFR/strings.xml | 2 ++ .../src/main/res/values-fr-rFR/strings.xml | 4 ++- .../ui/src/main/res/values-es-rES/strings.xml | 34 +++++++++---------- .../ui/src/main/res/values-fr-rFR/strings.xml | 16 +++++++++ .../ui/src/main/res/values-nl-rNL/strings.xml | 16 +++++++++ .../ui/src/main/res/values-no-rNO/strings.xml | 16 +++++++++ .../src/main/res/values-fr-rFR/strings.xml | 1 + .../src/main/res/values-es-rES/strings.xml | 4 +-- .../src/main/res/values-fr-rFR/strings.xml | 10 ++++++ .../src/main/res/values-nl-rNL/strings.xml | 10 ++++++ .../src/main/res/values-no-rNO/strings.xml | 10 ++++++ .../src/main/res/values-es-rES/exam.xml | 2 +- .../src/main/res/values-es-rES/strings.xml | 2 +- .../src/main/res/values-fr-rFR/strings.xml | 8 +++++ .../src/main/res/values-nl-rNL/strings.xml | 8 +++++ .../src/main/res/values-no-rNO/strings.xml | 8 +++++ .../src/main/res/values-sk-rSK/strings.xml | 8 +++++ .../src/main/res/values-fr-rFR/strings.xml | 1 + .../src/main/res/values-nl-rNL/strings.xml | 1 + .../src/main/res/values-no-rNO/strings.xml | 1 + 21 files changed, 143 insertions(+), 25 deletions(-) diff --git a/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml b/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml index 026bf80160..612aa4de1c 100644 --- a/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-es-rES/strings.xml @@ -48,9 +48,9 @@ Mostrar delta detallado Mostrar delta promedio Mostrar batería del teléfono - Mostrar batería global del lazo + Mostrar batería global del bucle Mostrar la tasa basal - Mostrar estado del lazo + Mostrar estado del bucle Mostrar glucosa Mostrar BGI (Índice de glucosa en sangre) Mostrar flecha de dirección @@ -72,7 +72,7 @@ Delta corto de glucosa Delta promedio de glucosa (15min) Batería del teléfono (%) - Batería global de lazo (%) + Batería global de bucle(%) Tasa Basal Valor BGI Tiempo (HH:MM o HH:MM:SS) diff --git a/app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml b/app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml index d5b3b0ac07..d5f9159194 100644 --- a/app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml +++ b/app-wear-shared/shared/src/main/res/values-fr-rFR/strings.xml @@ -55,6 +55,7 @@ Afficher IGly Afficher Flèche Afficher Min Passées + Afficher numéro semaine Cadran par défaut, vous pouvez cliquer sur le bouton EXPORTER WATCHFACE pour générer un modèle Cadran par défaut Image d\'arrière-plan @@ -81,6 +82,7 @@ AM ou PM Nom du jour de la semaine Jour (JJ) + Numéro de semaine (ww) Nom du mois (court) État de la boucle et délais Flèche de direction diff --git a/core/main/src/main/res/values-fr-rFR/strings.xml b/core/main/src/main/res/values-fr-rFR/strings.xml index 3ea04e700d..ddc4b0eb74 100644 --- a/core/main/src/main/res/values-fr-rFR/strings.xml +++ b/core/main/src/main/res/values-fr-rFR/strings.xml @@ -1,2 +1,4 @@ - + + %1$d g + diff --git a/core/ui/src/main/res/values-es-rES/strings.xml b/core/ui/src/main/res/values-es-rES/strings.xml index 5804d89e91..741d18f0a8 100644 --- a/core/ui/src/main/res/values-es-rES/strings.xml +++ b/core/ui/src/main/res/values-es-rES/strings.xml @@ -17,7 +17,7 @@ Bolo %1$.2fU entregado correctamente Tasa basal no válida leída en la bomba Limitando IOB a %1$.1f U debido a %2$s - LAZO DESACTIVADO POR RESTRICCIONES + BUCLE DESACTIVADO POR RESTRICCIONES Tipo de evento Recargar mg/dl @@ -86,11 +86,11 @@ Hora actualizada en la bomba Salir Eliminar registro - Lazo desactivado + Bucle desactivado Alarma - Desactivar lazo - Activar lazo - Reanudar el lazo + Desactivar bucle + Activar bucle + Reanudar el bucle Suspender lazo Duración [min] Notificación @@ -118,7 +118,7 @@ g Bomba parada Sin configurar - Lazo suspendido + Bucle suspendido Flecha de tendencia Auto sens req @@ -156,8 +156,8 @@ Cebar/Llenar Insulina Detener objetivo temporal - Lazo cerrado - Lazo abierto + Bucle cerrado + Bucle abierto Suspensión por glucosa baja (LGS) DIA IC @@ -165,7 +165,7 @@ Error cancelando la basal temporal Error cancelando el bolo extendido Subir estado de la bomba a NS o Tidepool - Desactiva/suspende el lazo + Desactiva/suspende el bucle Insulina a bordo (IOB) Contraseña incorrecta @@ -234,7 +234,7 @@ Reloj Automatización Personalizado - Lazo + Bucle NS Registro @@ -278,11 +278,11 @@ GUARDAR PERFIL CAMBIO DE PERFIL CAMBIO DE PERFIL CLONADO - MODO LAZO CERRADO - MODO LAZO LGS - MODO LAZO ABIERTO - LAZO DESACTIVADO - LAZO ACTIVADO + MODO BUCLE CERRADO + MODO BUCLE LGS + MODO BUCLE ABIERTO + BUCLE DESACTIVADO + BUCLE ACTIVADO RECONECTAR DESCONECTAR REANUDAR @@ -353,8 +353,8 @@ Acción Fecha y hora Sin Unidad - LAZO CAMBIADO - LAZO ELIMINADO + BUCLE CAMBIADO + BUCLE ELIMINADO OTROS Perfil de objetivo bajo diff --git a/core/ui/src/main/res/values-fr-rFR/strings.xml b/core/ui/src/main/res/values-fr-rFR/strings.xml index 723f667f4e..cf47d1c752 100644 --- a/core/ui/src/main/res/values-fr-rFR/strings.xml +++ b/core/ui/src/main/res/values-fr-rFR/strings.xml @@ -581,6 +581,22 @@ Voulez-vous nettoyer la base de données ?\nCela supprimera les modifications suivies et les données historiques de plus de 3 mois.\nCela accélérera la synchronisation complète de manière spectaculaire. Entrées effacées + Dim + Sam + Ven + Jeu + Mer + Mar + Lun + L + M + M + J + V + S + D + %1$.1f U + %1$.2f U diff --git a/core/ui/src/main/res/values-nl-rNL/strings.xml b/core/ui/src/main/res/values-nl-rNL/strings.xml index 4a7e9ffa8f..33d11dab33 100644 --- a/core/ui/src/main/res/values-nl-rNL/strings.xml +++ b/core/ui/src/main/res/values-nl-rNL/strings.xml @@ -581,6 +581,22 @@ Wil je de database opschonen?\nHet zal bijgehouden wijzigingen en historische gegevens ouder dan 3 maanden verwijderen.\nDit zal de volledige synchronisatie drastisch versnellen. Invoer gewist + Zo + Za + Vr + Do + Wo + Di + Ma + M + D + W + D + V + Z + Z + %1$.1f E + %1$.2f E diff --git a/core/ui/src/main/res/values-no-rNO/strings.xml b/core/ui/src/main/res/values-no-rNO/strings.xml index 62b2a77fe3..f3e1ef9956 100644 --- a/core/ui/src/main/res/values-no-rNO/strings.xml +++ b/core/ui/src/main/res/values-no-rNO/strings.xml @@ -581,6 +581,22 @@ Vil du rydde opp i databasen?\nDet vil fjerne sporede endringer og historiske data eldre enn 3 måneder.\nÅ gjøre dette vil øke hastigheten på synkronisering betydelig. Fjernet oppføringer + Søn + Lør + Fre + Tor + Ons + Tir + Man + M + Ti + O + To + F + L + S + %1$.1f E + %1$.2f E diff --git a/plugins/aps/src/main/res/values-fr-rFR/strings.xml b/plugins/aps/src/main/res/values-fr-rFR/strings.xml index 14ee2eb279..ee7aa8d99d 100644 --- a/plugins/aps/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/aps/src/main/res/values-fr-rFR/strings.xml @@ -114,4 +114,5 @@ SMB défini par la pompe Changement minimum [%] Le fonctionnement de la Boucle demandera une confirmation uniquement si le changement est supérieur à cette valeur en %. Par défaut, la valeur est 20% + Revenir à SMB. Pas assez de données DTQ. diff --git a/plugins/configuration/src/main/res/values-es-rES/strings.xml b/plugins/configuration/src/main/res/values-es-rES/strings.xml index e0b4bc3fe2..50085130c9 100644 --- a/plugins/configuration/src/main/res/values-es-rES/strings.xml +++ b/plugins/configuration/src/main/res/values-es-rES/strings.xml @@ -68,8 +68,8 @@ Sincronización Subida de datos y sincronización de plugins ¿Qué restricciones se aplican? - Lazo - Usa esto para habilitar la integración de lazo de AAPS + Bucle + Usa esto para habilitar la integración de bucle de AAPS. ¿Qué tipo de insulina estás utilizando? Origen de Glucosa ¿Desde dónde debería obtener AAPS los datos? diff --git a/plugins/configuration/src/main/res/values-fr-rFR/strings.xml b/plugins/configuration/src/main/res/values-fr-rFR/strings.xml index a8a9347e91..bc44096eba 100644 --- a/plugins/configuration/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/configuration/src/main/res/values-fr-rFR/strings.xml @@ -158,4 +158,14 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Veuillez redémarrer votre téléphone ou redémarrer AAPS à partir des Paramètres du système\nsinon AAPS ne sera pas connecté aux journaux (important pour suivre et vérifier que les algorithmes fonctionnent correctement)! + Format de fichier + Créé le + Version d\'AAPS + Version de construction + Export du nom du patient de l\'appareil + Export du modèle de l\'appareil + Cryptage du fichier + Nouveau format chiffré + Nouveau format de débogage (non crypté) + Format d\'export inconnu diff --git a/plugins/configuration/src/main/res/values-nl-rNL/strings.xml b/plugins/configuration/src/main/res/values-nl-rNL/strings.xml index 18069e6dbd..6ec2b6d60b 100644 --- a/plugins/configuration/src/main/res/values-nl-rNL/strings.xml +++ b/plugins/configuration/src/main/res/values-nl-rNL/strings.xml @@ -157,4 +157,14 @@ Herstart je telefoon of herstart AndroidAPS vanuit de systeem instellingen a. u. b. \nanders zal AndroidAPS geen log mogelijkheid hebben (Dit is belangrijk om te controleren of de algoritmes correct werken)! + Bestandsformaat + Gemaakt op + AAPS versie + Build variant + Patiëntnaam van exporterend apparaat + Modelnaam/nr van exporterend apparaat + Bestandsversleuteling + Nieuwe versleutelde indeling + Nieuwe debug indeling (onversleuteld) + Onbekende export indeling diff --git a/plugins/configuration/src/main/res/values-no-rNO/strings.xml b/plugins/configuration/src/main/res/values-no-rNO/strings.xml index cd97d79a15..c99a9a9e89 100644 --- a/plugins/configuration/src/main/res/values-no-rNO/strings.xml +++ b/plugins/configuration/src/main/res/values-no-rNO/strings.xml @@ -157,4 +157,14 @@ Vennligst start mobilen på nytt eller restart AAPS fra Innstillinger \nellers vil ikke AAPS ha aktivert loggføring (viktig for å spore og kontrollere at algoritmene fungerer riktig)! + Filformat + Opprettet den + AAPS versjon + Byggvariant + Exporterer enhetens pasientnavn + Eksporterer enhetsmodell + Filkryptering + Nytt krypteringsformat + Nytt feilsøkingsformat (ukryptert) + Ukjent eksportformat diff --git a/plugins/constraints/src/main/res/values-es-rES/exam.xml b/plugins/constraints/src/main/res/values-es-rES/exam.xml index f952d8d050..175feca353 100644 --- a/plugins/constraints/src/main/res/values-es-rES/exam.xml +++ b/plugins/constraints/src/main/res/values-es-rES/exam.xml @@ -5,7 +5,7 @@ Debes establecer el valor de DAI en tu perfil. El valor mínimo permitido es de 5 horas. https://wiki.aaps.app/en/latest/Configuration/Config-Builder.html#insulin - Si usted está satisfecho de que el valor para DIA que utilizó en su bomba antes de que AAPS funcionara bien, no hay necesidad de cambiar esto cuando comience a hacer bucle. + Si usted está satisfecho de que el valor para DIA que utilizó en su bomba antes de que AAPS funcionara bien, no hay necesidad de cambiar esto cuando comience usar el bucle cerrado. Deberás determinar por ti mismo el valor apropiado para DAI. Objetivo temporal ante Hipoglucemia ¿Cuál es la razón principal para establecer un objetivo temporal por hipoglucemia? diff --git a/pump/pump-common/src/main/res/values-es-rES/strings.xml b/pump/pump-common/src/main/res/values-es-rES/strings.xml index 48e4165e88..80098f60a9 100644 --- a/pump/pump-common/src/main/res/values-es-rES/strings.xml +++ b/pump/pump-common/src/main/res/values-es-rES/strings.xml @@ -65,7 +65,7 @@ Tipo: - Nunca contactado + Nunca conectado En reposo Iniciando Activo diff --git a/pump/pump-common/src/main/res/values-fr-rFR/strings.xml b/pump/pump-common/src/main/res/values-fr-rFR/strings.xml index deb828161f..5d642a102c 100644 --- a/pump/pump-common/src/main/res/values-fr-rFR/strings.xml +++ b/pump/pump-common/src/main/res/values-fr-rFR/strings.xml @@ -65,6 +65,14 @@ Type : + Jamais contacté + En veille + Réveil en cours + Actif + Erreur de communication + Délai de communication dépassé + Pompe hors de portée + Configuration invalide %1$d jour %1$d jours diff --git a/pump/pump-common/src/main/res/values-nl-rNL/strings.xml b/pump/pump-common/src/main/res/values-nl-rNL/strings.xml index 3a2d78f80b..9de4e465b0 100644 --- a/pump/pump-common/src/main/res/values-nl-rNL/strings.xml +++ b/pump/pump-common/src/main/res/values-nl-rNL/strings.xml @@ -65,6 +65,14 @@ Type: + Nooit verbonden + Slapend + Actief worden + Actief + Communicatiefout + Time-out bij communicatie + Pomp niet bereikbaar + Ongeldige configuratie %1$d dag %1$d dagen diff --git a/pump/pump-common/src/main/res/values-no-rNO/strings.xml b/pump/pump-common/src/main/res/values-no-rNO/strings.xml index c2a4ef0588..8d2febd014 100644 --- a/pump/pump-common/src/main/res/values-no-rNO/strings.xml +++ b/pump/pump-common/src/main/res/values-no-rNO/strings.xml @@ -65,6 +65,14 @@ Type: + Aldri tilkoblet + Hvilemodus + Våkner opp + Aktiv + Feil med kommunikasjon + Tidsavbrudd ved kommunikasjon + Pumpe er utilgjengelig + Ugyldig konfigurasjon %1$d dag %1$d dager diff --git a/pump/pump-common/src/main/res/values-sk-rSK/strings.xml b/pump/pump-common/src/main/res/values-sk-rSK/strings.xml index 2b24393489..0049960a42 100644 --- a/pump/pump-common/src/main/res/values-sk-rSK/strings.xml +++ b/pump/pump-common/src/main/res/values-sk-rSK/strings.xml @@ -65,6 +65,14 @@ Typ: + Nikdy nepripojené + Spiaca + Prebúdzanie + Aktívna + Chyba komunikácie + Uplynul časový limit komunikácie + Pumpa nedostupná + Neplatná konfigurácia %1$d deň %1$d dní diff --git a/pump/virtual/src/main/res/values-fr-rFR/strings.xml b/pump/virtual/src/main/res/values-fr-rFR/strings.xml index 5aea7cdfd9..f1df244f2f 100644 --- a/pump/virtual/src/main/res/values-fr-rFR/strings.xml +++ b/pump/virtual/src/main/res/values-fr-rFR/strings.xml @@ -9,4 +9,5 @@ POMPE VIRTUELLE Paramètres pompe virtuelle + * Uniquement les valeurs unitaires sont acceptées. Les plages pour les basal/bolus ne sont pas supportées par les pompes virtuelles. diff --git a/pump/virtual/src/main/res/values-nl-rNL/strings.xml b/pump/virtual/src/main/res/values-nl-rNL/strings.xml index 14b441280d..15440c7b38 100644 --- a/pump/virtual/src/main/res/values-nl-rNL/strings.xml +++ b/pump/virtual/src/main/res/values-nl-rNL/strings.xml @@ -9,4 +9,5 @@ VIRTUELE POMP Virtuele pomp instellingen + * Alleen absolute waardes (geen van-tot bereik) worden ondersteund voor basaal / bolus in virtuele pomp. diff --git a/pump/virtual/src/main/res/values-no-rNO/strings.xml b/pump/virtual/src/main/res/values-no-rNO/strings.xml index 5b349041ed..2f54e3efc2 100644 --- a/pump/virtual/src/main/res/values-no-rNO/strings.xml +++ b/pump/virtual/src/main/res/values-no-rNO/strings.xml @@ -9,4 +9,5 @@ VIRTUELL PUMPE Innstillinger for virtuell pumpe + * Bare konkrete verdier støttes som granularitet for basal/bolus i virtuell pumpe, ingen verdiområder. From 12a15b3ad101499c126b603649fc1290b7ce0111 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 20 Sep 2023 14:06:52 +0200 Subject: [PATCH 60/65] fix tests --- .../info/nightscout/implementation/iob/GlucoseStatusTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt b/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt index 8d96814e6e..fa0cbfbcf4 100644 --- a/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/iob/GlucoseStatusTest.kt @@ -94,7 +94,7 @@ class GlucoseStatusTest : TestBaseWithProfile() { @Test fun returnOldDataIfAllowed() { Mockito.`when`(autosensDataStore.getBucketedDataTableCopy()).thenReturn(generateOldBgData()) val glucoseStatus: GlucoseStatus? = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculatorPlugin, dateUtil, decimalFormatter).getGlucoseStatusData(true) - assertThat(glucoseStatus).isNull() + assertThat(glucoseStatus).isNotNull() } @Test fun averageShouldNotFailOnEmptyArray() { From 7cb27fced0a6260bc9486f005b7ab779dade38c8 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 20 Sep 2023 15:06:20 +0200 Subject: [PATCH 61/65] fix delayed EffectiveProfileSwitch rendering --- .../nightscout/plugins/general/overview/OverviewFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt index 1157f7ee2a..10844c7306 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt @@ -311,7 +311,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList disposable += rxBus .toObservable(EventEffectiveProfileSwitchChanged::class.java) .observeOn(aapsSchedulers.io) - .subscribe({ updateProfile() }, fabricPrivacy::logException) + .subscribe({ scheduleUpdateGUI() }, fabricPrivacy::logException) disposable += rxBus .toObservable(EventTempTargetChange::class.java) .observeOn(aapsSchedulers.io) From 26a07f2477628d46cafb929c1d863510578f49cb Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 20 Sep 2023 16:05:48 +0200 Subject: [PATCH 62/65] fix injection crash --- .../core/constraints/ConstraintObject.kt | 7 +--- .../nightscout/core/wizard/BolusWizard.kt | 2 +- .../nightscout/core/data/ConstraintTest.kt | 12 ++----- .../queue/CommandQueueImplementation.kt | 10 +++--- .../queue/CommandQueueImplementationTest.kt | 11 +++--- .../implementation/queue/QueueThreadTest.kt | 11 +++--- .../plugins/aps/loop/LoopFragment.kt | 2 +- .../nightscout/plugins/aps/loop/LoopPlugin.kt | 6 ++-- .../aps/openAPSAMA/OpenAPSAMAPlugin.kt | 2 +- .../aps/openAPSSMB/OpenAPSSMBPlugin.kt | 16 ++++----- .../plugins/aps/loop/APSResultTest.kt | 10 ++---- .../automation/actions/ActionsTestBase.kt | 5 +-- .../constraints/ConstraintsCheckerImpl.kt | 36 +++++++++---------- .../objectives/objectives/Objective4.kt | 4 ++- .../objectives/objectives/Objective5.kt | 4 ++- .../constraints/safety/SafetyPlugin.kt | 2 +- .../BgQualityCheckPluginTest.kt | 16 +++------ .../storage/StorageConstraintPluginTest.kt | 11 ++---- .../general/overview/OverviewFragment.kt | 2 +- .../smsCommunicator/SmsCommunicatorPlugin.kt | 10 +++--- .../wear/wearintegration/DataHandlerMobile.kt | 16 ++++----- .../SmsCommunicatorPluginTest.kt | 4 +-- .../nightscout/pump/combo/ComboPluginTest.kt | 5 +-- .../nightscout/pump/combov2/ComboV2Plugin.kt | 2 +- .../danaRKorean/DanaRKoreanPlugin.kt | 6 ++-- .../androidaps/danaRv2/DanaRv2Plugin.java | 8 ++--- .../androidaps/danar/AbstractDanaRPlugin.java | 4 +-- .../androidaps/danar/DanaRPlugin.java | 6 ++-- .../androidaps/danar/comm/MsgBolusStart.kt | 2 +- .../danar/comm/MsgBolusStartWithSpeed.kt | 2 +- .../danar/comm/MsgSetExtendedBolusStart.kt | 2 +- .../nightscout/pump/danaR/DanaRPluginTest.kt | 12 ++----- .../pump/danaR/comm/MessageHashTableRTest.kt | 2 +- .../pump/danaR/comm/MsgBolusStartTest.kt | 2 +- .../danaR/comm/MsgBolusStartWithSpeedTest.kt | 2 +- .../comm/MsgSetExtendedBolusStartTest.kt | 2 +- .../pump/danaRKorean/DanaRKoreanPluginTest.kt | 12 ++----- .../comm/MessageHashTableRKoreanTest.kt | 2 +- .../pump/danaRv2/DanaRv2PluginTest.kt | 12 ++----- .../danaRv2/comm/MessageHashTableRv2Test.kt | 2 +- .../nightscout/pump/danars/DanaRSPlugin.kt | 8 ++--- .../DanaRSPacketBolusSetStepBolusStart.kt | 2 +- .../pump/danars/DanaRSPluginTest.kt | 4 +-- .../danars/comm/DanaRsMessageHashTableTest.kt | 2 +- .../DanaRsPacketBolusSetStepBolusStartTest.kt | 2 +- .../pump/diaconn/DiaconnG8Plugin.kt | 6 ++-- .../nightscout/pump/medtrum/MedtrumPlugin.kt | 4 +-- .../info/nightscout/ui/dialogs/CarbsDialog.kt | 2 +- .../ui/dialogs/ExtendedBolusDialog.kt | 2 +- .../info/nightscout/ui/dialogs/FillDialog.kt | 2 +- .../nightscout/ui/dialogs/InsulinDialog.kt | 2 +- .../info/nightscout/ui/dialogs/LoopDialog.kt | 4 +-- .../nightscout/ui/dialogs/TempBasalDialog.kt | 4 +-- .../nightscout/ui/dialogs/TreatmentDialog.kt | 4 +-- .../nightscout/ui/dialogs/WizardDialog.kt | 2 +- 55 files changed, 139 insertions(+), 195 deletions(-) diff --git a/core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt b/core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt index afda3ffa62..d7918e74e4 100644 --- a/core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt +++ b/core/main/src/main/java/info/nightscout/core/constraints/ConstraintObject.kt @@ -1,14 +1,10 @@ package info.nightscout.core.constraints -import dagger.android.HasAndroidInjector import info.nightscout.interfaces.constraints.Constraint import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag -import javax.inject.Inject -class ConstraintObject>(private var value: T, injector: HasAndroidInjector) : Constraint { - - @Inject lateinit var aapsLogger: AAPSLogger +class ConstraintObject>(private var value: T, private val aapsLogger: AAPSLogger) : Constraint { private var originalValue: T private val reasons: MutableList = ArrayList() @@ -115,7 +111,6 @@ class ConstraintObject>(private var value: T, injector: HasAnd } init { - injector.androidInjector().inject(this) originalValue = value } } \ No newline at end of file diff --git a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt index 4bba468c45..03cb49cc62 100644 --- a/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt +++ b/core/main/src/main/java/info/nightscout/core/wizard/BolusWizard.kt @@ -272,7 +272,7 @@ class BolusWizard @Inject constructor( val bolusStep = activePlugin.activePump.pumpDescription.bolusStep calculatedTotalInsulin = Round.roundTo(calculatedTotalInsulin, bolusStep) - insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(calculatedTotalInsulin, injector)).value() + insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(calculatedTotalInsulin, aapsLogger)).value() aapsLogger.debug(this.toString()) return this diff --git a/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt b/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt index e961021203..0382107051 100644 --- a/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt +++ b/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt @@ -13,16 +13,10 @@ import org.junit.jupiter.api.Test */ class ConstraintTest : TestBase() { - private val injector = HasAndroidInjector { - AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } - } - } + private val injector = HasAndroidInjector { AndroidInjector { } } @Test fun doTests() { - val b = ConstraintObject(true, injector) + val b = ConstraintObject(false, aapsLogger) Assertions.assertEquals(true, b.value()) Assertions.assertEquals("", b.getReasons()) Assertions.assertEquals("", b.getMostLimitedReasons()) @@ -38,7 +32,7 @@ class ConstraintTest : TestBase() { Assertions.assertEquals(false, b.value()) Assertions.assertEquals("ConstraintTest: Set true\nConstraintTest: Set false", b.getReasons()) Assertions.assertEquals("ConstraintTest: Set true\nConstraintTest: Set false", b.getMostLimitedReasons()) - val d = ConstraintObject(10.0, injector) + val d = ConstraintObject(10.0, aapsLogger) d.set(5.0, "Set 5d", this) Assertions.assertEquals(5.0, d.value(), 0.01) Assertions.assertEquals("ConstraintTest: Set 5d", d.getReasons()) 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 0a5fedafdd..be0d1cd620 100644 --- a/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt +++ b/implementation/src/main/java/info/nightscout/implementation/queue/CommandQueueImplementation.kt @@ -310,8 +310,8 @@ class CommandQueueImplementation @Inject constructor( removeAll(type) } // apply constraints - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() - detailedBolusInfo.carbs = constraintChecker.applyCarbsConstraints(ConstraintObject(detailedBolusInfo.carbs.toInt(), injector)).value().toDouble() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, aapsLogger)).value() + detailedBolusInfo.carbs = constraintChecker.applyCarbsConstraints(ConstraintObject(detailedBolusInfo.carbs.toInt(), aapsLogger)).value().toDouble() // add new command to queue if (detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) { add(CommandSMBBolus(injector, detailedBolusInfo, callback)) @@ -368,7 +368,7 @@ class CommandQueueImplementation @Inject constructor( } // remove all unfinished removeAll(CommandType.TEMPBASAL) - val rateAfterConstraints = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() + val rateAfterConstraints = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, aapsLogger), profile).value() // add new command to queue add(CommandTempBasalAbsolute(injector, rateAfterConstraints, durationInMinutes, enforceNew, profile, tbrType, callback)) notifyAboutNewCommand() @@ -383,7 +383,7 @@ class CommandQueueImplementation @Inject constructor( } // remove all unfinished removeAll(CommandType.TEMPBASAL) - val percentAfterConstraints = constraintChecker.applyBasalPercentConstraints(ConstraintObject(percent, injector), profile).value() + val percentAfterConstraints = constraintChecker.applyBasalPercentConstraints(ConstraintObject(percent, aapsLogger), profile).value() // add new command to queue add(CommandTempBasalPercent(injector, percentAfterConstraints, durationInMinutes, enforceNew, profile, tbrType, callback)) notifyAboutNewCommand() @@ -396,7 +396,7 @@ class CommandQueueImplementation @Inject constructor( callback?.result(executingNowError())?.run() return false } - val rateAfterConstraints = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() + val rateAfterConstraints = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, aapsLogger)).value() // remove all unfinished removeAll(CommandType.EXTENDEDBOLUS) // add new command to queue 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 dd3aff2fdc..b1654c2b1c 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/CommandQueueImplementationTest.kt @@ -88,9 +88,6 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { private val injector = HasAndroidInjector { AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } if (it is Command) { it.aapsLogger = aapsLogger it.rh = rh @@ -143,14 +140,14 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { ) `when`(profileFunction.getProfile()).thenReturn(validProfile) - val bolusConstraint = ConstraintObject(0.0, injector) + val bolusConstraint = ConstraintObject(0.0, aapsLogger) `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(bolusConstraint) `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(bolusConstraint) - val carbsConstraint = ConstraintObject(0, injector) + val carbsConstraint = ConstraintObject(0, aapsLogger) `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(carbsConstraint) - val rateConstraint = ConstraintObject(0.0, injector) + val rateConstraint = ConstraintObject(0.0, aapsLogger) `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(rateConstraint) - val percentageConstraint = ConstraintObject(0, injector) + val percentageConstraint = ConstraintObject(0, aapsLogger) `when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(percentageConstraint) `when`(rh.gs(info.nightscout.core.ui.R.string.connectiontimedout)).thenReturn("Connection timed out") `when`(rh.gs(info.nightscout.core.ui.R.string.format_insulin_units)).thenReturn("%1\$.2f U") diff --git a/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt b/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt index f765930172..ca01e108a2 100644 --- a/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt +++ b/implementation/src/test/java/info/nightscout/implementation/queue/QueueThreadTest.kt @@ -34,9 +34,6 @@ class QueueThreadTest : TestBaseWithProfile() { private val injector = HasAndroidInjector { AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } if (it is Command) { it.aapsLogger = aapsLogger it.rh = rh @@ -67,14 +64,14 @@ class QueueThreadTest : TestBaseWithProfile() { Mockito.`when`(context.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager) Mockito.`when`(profileFunction.getProfile()).thenReturn(validProfile) - val bolusConstraint = ConstraintObject(0.0, injector) + val bolusConstraint = ConstraintObject(0.0, aapsLogger) Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(bolusConstraint) Mockito.`when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(bolusConstraint) - val carbsConstraint = ConstraintObject(0, injector) + val carbsConstraint = ConstraintObject(0, aapsLogger) Mockito.`when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(carbsConstraint) - val rateConstraint = ConstraintObject(0.0, injector) + val rateConstraint = ConstraintObject(0.0, aapsLogger) Mockito.`when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(rateConstraint) - val percentageConstraint = ConstraintObject(0, injector) + val percentageConstraint = ConstraintObject(0, aapsLogger) Mockito.`when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())) .thenReturn(percentageConstraint) Mockito.`when`(rh.gs(ArgumentMatchers.eq(info.nightscout.core.ui.R.string.temp_basal_absolute), anyObject(), anyObject())).thenReturn("TEMP BASAL %1\$.2f U/h %2\$d min") diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt index 1cd172046e..46221bad0d 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopFragment.kt @@ -152,7 +152,7 @@ class LoopFragment : DaggerFragment(), MenuProvider { var constraints = it.constraintsProcessed?.let { constraintsProcessed -> - val allConstraints = ConstraintObject(0.0, injector) + val allConstraints = ConstraintObject(0.0, aapsLogger) constraintsProcessed.rateConstraint?.let { rateConstraint -> allConstraints.copyReasons(rateConstraint) } constraintsProcessed.smbConstraint?.let { smbConstraint -> allConstraints.copyReasons(smbConstraint) } allConstraints.getMostLimitedReasons() diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt index 787938d90a..7b5eeec332 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/loop/LoopPlugin.kt @@ -275,11 +275,11 @@ class LoopPlugin @Inject constructor( // check rate for constraints val resultAfterConstraints = apsResult.newAndClone(injector) - resultAfterConstraints.rateConstraint = ConstraintObject(resultAfterConstraints.rate, injector) + resultAfterConstraints.rateConstraint = ConstraintObject(resultAfterConstraints.rate, aapsLogger) resultAfterConstraints.rate = constraintChecker.applyBasalConstraints(resultAfterConstraints.rateConstraint!!, profile).value() - resultAfterConstraints.percentConstraint = ConstraintObject(resultAfterConstraints.percent, injector) + resultAfterConstraints.percentConstraint = ConstraintObject(resultAfterConstraints.percent, aapsLogger) resultAfterConstraints.percent = constraintChecker.applyBasalPercentConstraints(resultAfterConstraints.percentConstraint!!, profile).value() - resultAfterConstraints.smbConstraint = ConstraintObject(resultAfterConstraints.smb, injector) + resultAfterConstraints.smbConstraint = ConstraintObject(resultAfterConstraints.smb, aapsLogger) resultAfterConstraints.smb = constraintChecker.applyBolusConstraints(resultAfterConstraints.smbConstraint!!).value() // safety check for multiple SMBs diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt index ae7e8192c3..04948aa6da 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSAMA/OpenAPSAMAPlugin.kt @@ -116,7 +116,7 @@ class OpenAPSAMAPlugin @Inject constructor( aapsLogger.debug(LTag.APS, rh.gs(R.string.openapsma_no_glucose_data)) return } - val inputConstraints = ConstraintObject(0.0, injector) // fake. only for collecting all results + val inputConstraints = ConstraintObject(0.0, aapsLogger) // fake. only for collecting all results val maxBasal = constraintChecker.getMaxBasalAllowed(profile).also { inputConstraints.copyReasons(it) }.value() diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt index 8c93012f07..7c48962884 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/aps/openAPSSMB/OpenAPSSMBPlugin.kt @@ -79,7 +79,7 @@ open class OpenAPSSMBPlugin @Inject constructor( var tddLast24H: Double? = null var tddLast4H: Double? = null var tddLast8to4H: Double? = null - var dynIsfEnabled: Constraint = ConstraintObject(false, injector) + var dynIsfEnabled: Constraint = ConstraintObject(false, aapsLogger) // last values override var lastAPSRun: Long = 0 @@ -131,7 +131,7 @@ open class OpenAPSSMBPlugin @Inject constructor( return } - val inputConstraints = ConstraintObject(0.0, injector) // fake. only for collecting all results + val inputConstraints = ConstraintObject(0.0, aapsLogger) // fake. only for collecting all results val maxBasal = constraintChecker.getMaxBasalAllowed(profile).also { inputConstraints.copyReasons(it) }.value() @@ -209,19 +209,19 @@ open class OpenAPSSMBPlugin @Inject constructor( val iobArray = iobCobCalculator.calculateIobArrayForSMB(lastAutosensResult, SMBDefaults.exercise_mode, SMBDefaults.half_basal_exercise_target, isTempTarget) profiler.log(LTag.APS, "calculateIobArrayInDia()", startPart) startPart = System.currentTimeMillis() - val smbAllowed = ConstraintObject(!tempBasalFallback, injector).also { + val smbAllowed = ConstraintObject(!tempBasalFallback, aapsLogger).also { constraintChecker.isSMBModeEnabled(it) inputConstraints.copyReasons(it) } - val advancedFiltering = ConstraintObject(!tempBasalFallback, injector).also { + val advancedFiltering = ConstraintObject(!tempBasalFallback, aapsLogger).also { constraintChecker.isAdvancedFilteringEnabled(it) inputConstraints.copyReasons(it) } - val uam = ConstraintObject(true, injector).also { + val uam = ConstraintObject(false, aapsLogger).also { constraintChecker.isUAMEnabled(it) inputConstraints.copyReasons(it) } - dynIsfEnabled = ConstraintObject(true, injector).also { + dynIsfEnabled = ConstraintObject(false, aapsLogger).also { constraintChecker.isDynIsfModeEnabled(it) inputConstraints.copyReasons(it) } @@ -241,12 +241,12 @@ open class OpenAPSSMBPlugin @Inject constructor( if (tdd1D == null || tdd7D == null || tddLast4H == null || tddLast8to4H == null || tddLast24H == null) { inputConstraints.copyReasons( - ConstraintObject(false, injector).also { + ConstraintObject(false, aapsLogger).also { it.set(false, rh.gs(R.string.fallback_smb_no_tdd), this) } ) inputConstraints.copyReasons( - ConstraintObject(false, injector).apply { set(true, "tdd1D=$tdd1D tdd7D=$tdd7D tddLast4H=$tddLast4H tddLast8to4H=$tddLast8to4H tddLast24H=$tddLast24H", this) } + ConstraintObject(false, aapsLogger).apply { set(true, "tdd1D=$tdd1D tdd7D=$tdd7D tddLast4H=$tddLast4H tddLast8to4H=$tddLast8to4H tddLast24H=$tddLast24H", this) } ) } diff --git a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt index 43e34c3038..939e85f1c7 100644 --- a/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt +++ b/plugins/aps/src/test/java/info/nightscout/plugins/aps/loop/APSResultTest.kt @@ -22,13 +22,7 @@ class APSResultTest : TestBaseWithProfile() { @Mock lateinit var constraintsChecker: ConstraintsChecker - private val injector = HasAndroidInjector { - AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } - } - } + private val injector = HasAndroidInjector { AndroidInjector { } } private lateinit var closedLoopEnabled: Constraint @@ -336,7 +330,7 @@ class APSResultTest : TestBaseWithProfile() { @BeforeEach fun prepare() { - closedLoopEnabled = ConstraintObject(false, injector) + closedLoopEnabled = ConstraintObject(false, aapsLogger) `when`(constraintsChecker.isClosedLoopAllowed()).thenReturn(closedLoopEnabled) `when`(sp.getDouble(ArgumentMatchers.anyInt(), ArgumentMatchers.anyDouble())).thenReturn(30.0) `when`(profileFunction.getProfile()).thenReturn(validProfile) diff --git a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt index 0976da4cc7..086d57b44f 100644 --- a/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt +++ b/plugins/automation/src/test/java/info/nightscout/automation/actions/ActionsTestBase.kt @@ -40,7 +40,7 @@ ActionsTestBase : TestBaseWithProfile() { private var suspended = false override var lastRun: Loop.LastRun? = Loop.LastRun() - override var closedLoopEnabled: Constraint? = ConstraintObject(true, injector) + override var closedLoopEnabled: Constraint? = ConstraintObject(false, aapsLogger) override val isSuspended: Boolean = suspended override val isLGS: Boolean = false override val isSuperBolus: Boolean = false @@ -169,9 +169,6 @@ ActionsTestBase : TestBaseWithProfile() { it.rh = rh it.aapsLogger = aapsLogger } - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } } } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsCheckerImpl.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsCheckerImpl.kt index 09b1688ec8..527e9051b2 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsCheckerImpl.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/ConstraintsCheckerImpl.kt @@ -1,22 +1,22 @@ package info.nightscout.plugins.constraints -import dagger.android.HasAndroidInjector import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.Profile +import info.nightscout.rx.logging.AAPSLogger import javax.inject.Inject import javax.inject.Singleton @Singleton class ConstraintsCheckerImpl @Inject constructor( private val activePlugin: ActivePlugin, - val injector: HasAndroidInjector + private val aapsLogger: AAPSLogger ) : ConstraintsChecker { - override fun isLoopInvocationAllowed(): Constraint = isLoopInvocationAllowed(ConstraintObject(true, injector)) + override fun isLoopInvocationAllowed(): Constraint = isLoopInvocationAllowed(ConstraintObject(true, aapsLogger)) override fun isLoopInvocationAllowed(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -28,7 +28,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isClosedLoopAllowed(): Constraint = isClosedLoopAllowed(ConstraintObject(true, injector)) + override fun isClosedLoopAllowed(): Constraint = isClosedLoopAllowed(ConstraintObject(true, aapsLogger)) override fun isClosedLoopAllowed(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -40,7 +40,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isLgsAllowed(): Constraint = isLgsAllowed(ConstraintObject(true, injector)) + override fun isLgsAllowed(): Constraint = isLgsAllowed(ConstraintObject(true, aapsLogger)) override fun isLgsAllowed(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -52,7 +52,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isAutosensModeEnabled(): Constraint = isAutosensModeEnabled(ConstraintObject(true, injector)) + override fun isAutosensModeEnabled(): Constraint = isAutosensModeEnabled(ConstraintObject(true, aapsLogger)) override fun isAutosensModeEnabled(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -64,7 +64,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isSMBModeEnabled(): Constraint = isSMBModeEnabled(ConstraintObject(true, injector)) + override fun isSMBModeEnabled(): Constraint = isSMBModeEnabled(ConstraintObject(true, aapsLogger)) override fun isSMBModeEnabled(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -76,7 +76,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isDynIsfModeEnabled(): Constraint = isDynIsfModeEnabled(ConstraintObject(true, injector)) + override fun isDynIsfModeEnabled(): Constraint = isDynIsfModeEnabled(ConstraintObject(true, aapsLogger)) override fun isDynIsfModeEnabled(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -88,7 +88,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isUAMEnabled(): Constraint = isUAMEnabled(ConstraintObject(true, injector)) + override fun isUAMEnabled(): Constraint = isUAMEnabled(ConstraintObject(true, aapsLogger)) override fun isUAMEnabled(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -100,7 +100,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isAdvancedFilteringEnabled(): Constraint = isAdvancedFilteringEnabled(ConstraintObject(true, injector)) + override fun isAdvancedFilteringEnabled(): Constraint = isAdvancedFilteringEnabled(ConstraintObject(true, aapsLogger)) override fun isAdvancedFilteringEnabled(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -112,7 +112,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isSuperBolusEnabled(): Constraint = isSuperBolusEnabled(ConstraintObject(true, injector)) + override fun isSuperBolusEnabled(): Constraint = isSuperBolusEnabled(ConstraintObject(true, aapsLogger)) override fun isSuperBolusEnabled(value: Constraint): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -124,7 +124,7 @@ class ConstraintsCheckerImpl @Inject constructor( return value } - override fun isAutomationEnabled(): Constraint = isAutomationEnabled(ConstraintObject(true, injector)) + override fun isAutomationEnabled(): Constraint = isAutomationEnabled(ConstraintObject(true, aapsLogger)) override fun applyBasalConstraints(absoluteRate: Constraint, profile: Profile): Constraint { val constraintsPlugins = activePlugin.getSpecificPluginsListByInterface(PluginConstraints::class.java) @@ -201,20 +201,20 @@ class ConstraintsCheckerImpl @Inject constructor( */ override fun getMaxBasalAllowed(profile: Profile): Constraint = - applyBasalConstraints(ConstraintObject(Double.MAX_VALUE, injector), profile) + applyBasalConstraints(ConstraintObject(Double.MAX_VALUE, aapsLogger), profile) override fun getMaxBasalPercentAllowed(profile: Profile): Constraint = - applyBasalPercentConstraints(ConstraintObject(Int.MAX_VALUE, injector), profile) + applyBasalPercentConstraints(ConstraintObject(Int.MAX_VALUE, aapsLogger), profile) override fun getMaxBolusAllowed(): Constraint = - applyBolusConstraints(ConstraintObject(Double.MAX_VALUE, injector)) + applyBolusConstraints(ConstraintObject(Double.MAX_VALUE, aapsLogger)) override fun getMaxExtendedBolusAllowed(): Constraint = - applyExtendedBolusConstraints(ConstraintObject(Double.MAX_VALUE, injector)) + applyExtendedBolusConstraints(ConstraintObject(Double.MAX_VALUE, aapsLogger)) override fun getMaxCarbsAllowed(): Constraint = - applyCarbsConstraints(ConstraintObject(Int.MAX_VALUE, injector)) + applyCarbsConstraints(ConstraintObject(Int.MAX_VALUE, aapsLogger)) override fun getMaxIOBAllowed(): Constraint = - applyMaxIOBConstraints(ConstraintObject(Double.MAX_VALUE, injector)) + applyMaxIOBConstraints(ConstraintObject(Double.MAX_VALUE, aapsLogger)) } \ No newline at end of file diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt index 49c035bb2f..5081cbfbef 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective4.kt @@ -6,6 +6,7 @@ import info.nightscout.interfaces.constraints.PluginConstraints import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.plugins.constraints.R +import info.nightscout.rx.logging.AAPSLogger import javax.inject.Inject @Suppress("SpellCheckingInspection") @@ -13,13 +14,14 @@ class Objective4(injector: HasAndroidInjector) : Objective(injector, "maxbasal", @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var activePlugin: ActivePlugin + @Inject lateinit var aapsLogger: AAPSLogger init { tasks.add( object : Task(this, R.string.objectives_maxbasal_gate) { override fun isCompleted(): Boolean { val profile = profileFunction.getProfile() ?: return false - val maxBasalSet = (activePlugin.activeAPS as PluginConstraints).applyBasalConstraints(ConstraintObject(Double.MAX_VALUE, injector), profile) + val maxBasalSet = (activePlugin.activeAPS as PluginConstraints).applyBasalConstraints(ConstraintObject(Double.MAX_VALUE, aapsLogger), profile) val maxDailyBasal = profile.getMaxDailyBasal() return maxBasalSet.value() > 2.8 * maxDailyBasal } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt index 65dbe484e8..a540cc659a 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/objectives/objectives/Objective5.kt @@ -4,6 +4,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.core.constraints.ConstraintObject import info.nightscout.plugins.constraints.R import info.nightscout.plugins.constraints.safety.SafetyPlugin +import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.utils.T import javax.inject.Inject @@ -11,13 +12,14 @@ import javax.inject.Inject class Objective5(injector: HasAndroidInjector) : Objective(injector, "maxiobzero", R.string.objectives_maxiobzero_objective, R.string.objectives_maxiobzero_gate) { @Inject lateinit var safetyPlugin: SafetyPlugin + @Inject lateinit var aapsLogger: AAPSLogger init { tasks.add(MinimumDurationTask(this, T.days(5).msecs())) tasks.add( object : Task(this, R.string.closedmodeenabled) { override fun isCompleted(): Boolean { - val closedLoopEnabled = ConstraintObject(true, injector) + val closedLoopEnabled = ConstraintObject(false, aapsLogger) safetyPlugin.isClosedLoopAllowed(closedLoopEnabled) return closedLoopEnabled.value() } diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt index 1ce7e85d93..802110d7be 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt @@ -121,7 +121,7 @@ class SafetyPlugin @Inject constructor( currentBasal ) + " U/h", this ) - val absoluteConstraint = ConstraintObject(absoluteRate, injector) + val absoluteConstraint = ConstraintObject(absoluteRate, aapsLogger) applyBasalConstraints(absoluteConstraint, profile) percentRate.copyReasons(absoluteConstraint) val pump = activePlugin.activePump diff --git a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt index 09e07728a2..a77eebc91c 100644 --- a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt +++ b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/bgQualityCheck/BgQualityCheckPluginTest.kt @@ -34,13 +34,7 @@ class BgQualityCheckPluginTest : TestBase() { private lateinit var plugin: BgQualityCheckPlugin - private val injector = HasAndroidInjector { - AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } - } - } + private val injector = HasAndroidInjector { AndroidInjector { } } private val now = 100000000L //private val autosensDataStore = AutosensDataStoreObject() @@ -565,13 +559,13 @@ class BgQualityCheckPluginTest : TestBase() { @Test fun applyMaxIOBConstraintsTest() { plugin.state = BgQualityCheck.State.UNKNOWN - Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) + Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, aapsLogger)).value(), 0.001) plugin.state = BgQualityCheck.State.FIVE_MIN_DATA - Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) + Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, aapsLogger)).value(), 0.001) plugin.state = BgQualityCheck.State.RECALCULATED - Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) + Assertions.assertEquals(10.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, aapsLogger)).value(), 0.001) plugin.state = BgQualityCheck.State.DOUBLED - Assertions.assertEquals(0.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, injector)).value(), 0.001) + Assertions.assertEquals(0.0, plugin.applyMaxIOBConstraints(ConstraintObject(10.0, aapsLogger)).value(), 0.001) } } \ No newline at end of file diff --git a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt index 51c8a130c9..5d092d95da 100644 --- a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt +++ b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/storage/StorageConstraintPluginTest.kt @@ -20,13 +20,6 @@ class StorageConstraintPluginTest : TestBase() { @Mock lateinit var rh: ResourceHelper @Mock lateinit var uiInteraction: UiInteraction - private val injector = HasAndroidInjector { - AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } - } - } private lateinit var storageConstraintPlugin: StorageConstraintPlugin @BeforeEach fun prepareMock() { @@ -49,9 +42,9 @@ class StorageConstraintPluginTest : TestBase() { val mocked = MockedStorageConstraintPlugin({ AndroidInjector { } }, aapsLogger, rh, uiInteraction) // Set free space under 200(Mb) to disable loop mocked.memSize = 150L - Assertions.assertEquals(false, mocked.isClosedLoopAllowed(ConstraintObject(true, injector)).value()) + Assertions.assertEquals(false, mocked.isClosedLoopAllowed(ConstraintObject(true, aapsLogger)).value()) // Set free space over 200(Mb) to enable loop mocked.memSize = 300L - Assertions.assertEquals(true, mocked.isClosedLoopAllowed(ConstraintObject(true, injector)).value()) + Assertions.assertEquals(true, mocked.isClosedLoopAllowed(ConstraintObject(true, aapsLogger)).value()) } } \ No newline at end of file diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt index 10844c7306..ad9b39f4b7 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewFragment.kt @@ -516,7 +516,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList binding.buttonsLayout.quickWizardButton.visibility = View.VISIBLE val wizard = quickWizardEntry.doCalc(profile, profileName, actualBg) if (wizard.calculatedTotalInsulin > 0.0 && quickWizardEntry.carbs() > 0.0) { - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(quickWizardEntry.carbs(), injector)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(quickWizardEntry.carbs(), aapsLogger)).value() activity?.let { if (abs(wizard.insulinAfterConstraints - wizard.calculatedTotalInsulin) >= pump.pumpDescription.pumpType.determineCorrectBolusStepSize(wizard.insulinAfterConstraints) || carbsAfterConstraints != quickWizardEntry.carbs()) { OKDialog.show(it, rh.gs(info.nightscout.core.ui.R.string.treatmentdeliveryerror), rh.gs(R.string.constraints_violation) + "\n" + rh.gs(R.string.change_your_input)) diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt index ea6a505ea8..8d5ebf2b4d 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt @@ -732,7 +732,7 @@ class SmsCommunicatorPlugin @Inject constructor( else if (tempBasalPct == 0 && divided[1] != "0%") sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.sms_wrong_tbr_duration, durationStep))) else { - tempBasalPct = constraintChecker.applyBasalPercentConstraints(ConstraintObject(tempBasalPct, injector), profile).value() + tempBasalPct = constraintChecker.applyBasalPercentConstraints(ConstraintObject(tempBasalPct, aapsLogger), profile).value() val passCode = generatePassCode() val reply = rh.gs(R.string.smscommunicator_basal_pct_reply_with_code, tempBasalPct, duration, passCode) receivedSms.processed = true @@ -787,7 +787,7 @@ class SmsCommunicatorPlugin @Inject constructor( else if (tempBasal == 0.0 && divided[1] != "0") sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.sms_wrong_tbr_duration, durationStep))) else { - tempBasal = constraintChecker.applyBasalConstraints(ConstraintObject(tempBasal, injector), profile).value() + tempBasal = constraintChecker.applyBasalConstraints(ConstraintObject(tempBasal, aapsLogger), profile).value() val passCode = generatePassCode() val reply = rh.gs(R.string.smscommunicator_basal_reply_with_code, tempBasal, duration, passCode) receivedSms.processed = true @@ -864,7 +864,7 @@ class SmsCommunicatorPlugin @Inject constructor( } else { var extended = SafeParse.stringToDouble(divided[1]) val duration = SafeParse.stringToInt(divided[2]) - extended = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(extended, injector)).value() + extended = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(extended, aapsLogger)).value() if (extended == 0.0 || duration == 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else { val passCode = generatePassCode() @@ -918,7 +918,7 @@ class SmsCommunicatorPlugin @Inject constructor( private fun processBOLUS(divided: Array, receivedSms: Sms) { var bolus = SafeParse.stringToDouble(divided[1]) val isMeal = divided.size > 2 && divided[2].equals("MEAL", ignoreCase = true) - bolus = constraintChecker.applyBolusConstraints(ConstraintObject(bolus, injector)).value() + bolus = constraintChecker.applyBolusConstraints(ConstraintObject(bolus, aapsLogger)).value() if (divided.size == 3 && !isMeal) { sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) } else if (bolus > 0.0) { @@ -1031,7 +1031,7 @@ class SmsCommunicatorPlugin @Inject constructor( return } } - grams = constraintChecker.applyCarbsConstraints(ConstraintObject(grams, injector)).value() + grams = constraintChecker.applyCarbsConstraints(ConstraintObject(grams, aapsLogger)).value() if (grams == 0) sendSMS(Sms(receivedSms.phoneNumber, rh.gs(R.string.wrong_format))) else { val passCode = generatePassCode() diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt index 2cdfde27c6..5c96274d28 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataHandlerMobile.kt @@ -269,7 +269,7 @@ class DataHandlerMobile @Inject constructor( .observeOn(aapsSchedulers.io) .subscribe({ aapsLogger.debug(LTag.WEAR, "ActionFillConfirmed received $it from ${it.sourceNodeId}") - if (constraintChecker.applyBolusConstraints(ConstraintObject(it.insulin, injector)).value() - it.insulin != 0.0) { + if (constraintChecker.applyBolusConstraints(ConstraintObject(it.insulin, aapsLogger)).value() - it.insulin != 0.0) { ToastUtils.showToastInUiThread(context, "aborting: previously applied constraint changed") sendError("aborting: previously applied constraint changed") } else @@ -383,7 +383,7 @@ class DataHandlerMobile @Inject constructor( return } val carbsBeforeConstraints = command.carbs - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbsBeforeConstraints, injector)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbsBeforeConstraints, aapsLogger)).value() if (carbsAfterConstraints - carbsBeforeConstraints != 0) { sendError(rh.gs(info.nightscout.core.ui.R.string.wizard_carbs_constraint)) return @@ -480,7 +480,7 @@ class DataHandlerMobile @Inject constructor( val wizard = quickWizardEntry.doCalc(profile, profileName, actualBg) - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(quickWizardEntry.carbs(), injector)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(quickWizardEntry.carbs(), aapsLogger)).value() if (carbsAfterConstraints != quickWizardEntry.carbs()) { sendError(rh.gs(info.nightscout.core.ui.R.string.wizard_carbs_constraint)) return @@ -506,8 +506,8 @@ class DataHandlerMobile @Inject constructor( } private fun handleBolusPreCheck(command: EventData.ActionBolusPreCheck) { - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(command.insulin, injector)).value() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(command.carbs, injector)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(command.insulin, aapsLogger)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(command.carbs, aapsLogger)).value() val pump = activePlugin.activePump if (insulinAfterConstraints > 0 && (!pump.isInitialized() || pump.isSuspended() || loop.isDisconnected)) { sendError(rh.gs(info.nightscout.core.ui.R.string.wizard_pump_not_available)) @@ -530,7 +530,7 @@ class DataHandlerMobile @Inject constructor( private fun handleECarbsPreCheck(command: EventData.ActionECarbsPreCheck) { val startTimeStamp = System.currentTimeMillis() + T.mins(command.carbsTimeShift.toLong()).msecs() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(command.carbs, injector)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(command.carbs, aapsLogger)).value() var message = rh.gs(info.nightscout.core.ui.R.string.carbs) + ": " + carbsAfterConstraints + rh.gs(R.string.grams_short) + "\n" + rh.gs(info.nightscout.core.ui.R.string.time) + ": " + dateUtil.timeString(startTimeStamp) + "\n" + rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + command.duration + rh.gs(R.string.hour_short) @@ -558,7 +558,7 @@ class DataHandlerMobile @Inject constructor( 3 -> sp.getDouble("fill_button3", 0.0) else -> return } - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(amount, aapsLogger)).value() var message = rh.gs(info.nightscout.core.ui.R.string.prime_fill) + ": " + insulinAfterConstraints + rh.gs(R.string.units_short) if (insulinAfterConstraints - amount != 0.0) message += "\n" + rh.gs(info.nightscout.core.ui.R.string.constraint_applied) rxBus.send( @@ -572,7 +572,7 @@ class DataHandlerMobile @Inject constructor( } private fun handleFillPreCheck(command: EventData.ActionFillPreCheck) { - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(command.insulin, injector)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(command.insulin, aapsLogger)).value() var message = rh.gs(info.nightscout.core.ui.R.string.prime_fill) + ": " + insulinAfterConstraints + rh.gs(R.string.units_short) if (insulinAfterConstraints - command.insulin != 0.0) message += "\n" + rh.gs(info.nightscout.core.ui.R.string.constraint_applied) rxBus.send( diff --git a/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt b/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt index 825555b7c8..c997917c7d 100644 --- a/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt +++ b/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt @@ -839,7 +839,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BASAL 20% 20") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("TBR duration must be a multiple of 30 minutes and greater than 0.") - `when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(20, injector)) + `when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(20, aapsLogger)) //BASAL 20% 30 smsCommunicatorPlugin.messages = ArrayList() @@ -865,7 +865,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BASAL 1 0") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("TBR duration must be a multiple of 30 minutes and greater than 0.") - `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(1.0, injector)) + `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(1.0, aapsLogger)) //BASAL 1 20 smsCommunicatorPlugin.messages = ArrayList() diff --git a/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt b/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt index dee5d1eb5b..bd74be68e6 100644 --- a/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt +++ b/pump/combo/src/test/java/info/nightscout/pump/combo/ComboPluginTest.kt @@ -36,9 +36,6 @@ class ComboPluginTest : TestBase() { private val injector = HasAndroidInjector { AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } if (it is PumpEnactResult) { it.context = context } @@ -58,7 +55,7 @@ class ComboPluginTest : TestBase() { fun invalidBasalRateOnComboPumpShouldLimitLoopInvocation() { comboPlugin.setPluginEnabled(PluginType.PUMP, true) comboPlugin.setValidBasalRateProfileSelectedOnPump(false) - val c = comboPlugin.isLoopInvocationAllowed(ConstraintObject(true, injector)) + val c = comboPlugin.isLoopInvocationAllowed(ConstraintObject(true, aapsLogger)) Assertions.assertEquals("Combo: No valid basal rate read from pump", c.getReasons()) Assertions.assertEquals(false, c.value()) comboPlugin.setPluginEnabled(PluginType.PUMP, false) diff --git a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt index b4029a24fd..7025448262 100644 --- a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt +++ b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/ComboV2Plugin.kt @@ -1014,7 +1014,7 @@ class ComboV2Plugin @Inject constructor( override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { val oldInsulinAmount = detailedBolusInfo.insulin detailedBolusInfo.insulin = constraintChecker - .applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)) + .applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, aapsLogger)) .value() aapsLogger.debug( LTag.PUMP, 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 f6936bc825..c7dd9fd764 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 @@ -147,7 +147,7 @@ class DanaRKoreanPlugin @Inject constructor( } override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, aapsLogger)).value() require(detailedBolusInfo.carbs > 0) return if (detailedBolusInfo.insulin > 0) { val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) @@ -192,7 +192,7 @@ 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 - val absoluteRateAfterConstraint = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() + val absoluteRateAfterConstraint = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, aapsLogger), profile).value() var doTempOff = baseBasalRate - absoluteRateAfterConstraint == 0.0 && absoluteRateAfterConstraint >= 0.10 val doLowTemp = absoluteRateAfterConstraint < baseBasalRate || absoluteRateAfterConstraint < 0.10 val doHighTemp = absoluteRateAfterConstraint > baseBasalRate && !useExtendedBoluses @@ -266,7 +266,7 @@ class DanaRKoreanPlugin @Inject constructor( val durationInHalfHours = max(durationInMinutes / 30, 1) // We keep current basal running so need to sub current basal var extendedRateToSet: Double = absoluteRateAfterConstraint - baseBasalRate - extendedRateToSet = constraintChecker.applyBasalConstraints(ConstraintObject(extendedRateToSet, injector), profile).value() + extendedRateToSet = constraintChecker.applyBasalConstraints(ConstraintObject(extendedRateToSet, aapsLogger), profile).value() // needs to be rounded to 0.1 extendedRateToSet = Round.roundTo(extendedRateToSet, pumpDescription.extendedBolusStep * 2) // *2 because of half hours 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 77b6cc0aa7..aa68441d5e 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 @@ -159,7 +159,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { // Pump interface @NonNull @Override public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new ConstraintObject<>(detailedBolusInfo.insulin, getInjector())).value(); + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new ConstraintObject<>(detailedBolusInfo.insulin, getAapsLogger())).value(); if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { // v2 stores end time for bolus, we need to adjust time // default delivery speed is 12 sec/U @@ -224,7 +224,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { PumpEnactResult result = new PumpEnactResult(getInjector()); - absoluteRate = constraintChecker.applyBasalConstraints(new ConstraintObject<>(absoluteRate, getInjector()), profile).value(); + absoluteRate = constraintChecker.applyBasalConstraints(new ConstraintObject<>(absoluteRate, getAapsLogger()), profile).value(); boolean doTempOff = getBaseBasalRate() - absoluteRate == 0d && absoluteRate >= 0.10d; final boolean doLowTemp = absoluteRate < getBaseBasalRate() || absoluteRate < 0.10d; @@ -290,7 +290,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { public PumpEnactResult setTempBasalPercent(int percent, int durationInMinutes, @NonNull Profile profile, boolean enforceNew, @NonNull PumpSync.TemporaryBasalType tbrType) { DanaPump pump = danaPump; PumpEnactResult result = new PumpEnactResult(getInjector()); - percent = constraintChecker.applyBasalPercentConstraints(new ConstraintObject<>(percent, getInjector()), profile).value(); + percent = constraintChecker.applyBasalPercentConstraints(new ConstraintObject<>(percent, getAapsLogger()), profile).value(); if (percent < 0) { result.isTempCancel(false).enacted(false).success(false).comment(info.nightscout.core.ui.R.string.invalid_input); aapsLogger.error("setTempBasalPercent: Invalid input"); @@ -351,7 +351,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult setExtendedBolus(double insulin, int durationInMinutes) { DanaPump pump = danaPump; - insulin = constraintChecker.applyExtendedBolusConstraints(new ConstraintObject<>(insulin, getInjector())).value(); + insulin = constraintChecker.applyExtendedBolusConstraints(new ConstraintObject<>(insulin, getAapsLogger())).value(); // needs to be rounded int durationInHalfHours = Math.max(durationInMinutes / 30, 1); insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); 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 1304e70ca5..a5fd72ca69 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 @@ -226,7 +226,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()); - percent = constraintChecker.applyBasalPercentConstraints(new ConstraintObject<>(percent, getInjector()), profile).value(); + percent = constraintChecker.applyBasalPercentConstraints(new ConstraintObject<>(percent, getAapsLogger()), profile).value(); if (percent < 0) { result.isTempCancel(false).enacted(false).success(false).comment(info.nightscout.core.ui.R.string.invalid_input); getAapsLogger().error("setTempBasalPercent: Invalid input"); @@ -273,7 +273,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump @NonNull @Override public PumpEnactResult setExtendedBolus(double insulin, int durationInMinutes) { - insulin = constraintChecker.applyExtendedBolusConstraints(new ConstraintObject<>(insulin, getInjector())).value(); + insulin = constraintChecker.applyExtendedBolusConstraints(new ConstraintObject<>(insulin, getAapsLogger())).value(); // needs to be rounded int durationInHalfHours = Math.max(durationInMinutes / 30, 1); insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); 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 ff4d9873be..b240120c0a 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 @@ -160,7 +160,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { @NonNull @Override public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new ConstraintObject<>(detailedBolusInfo.insulin, getInjector())).value(); + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new ConstraintObject<>(detailedBolusInfo.insulin, getAapsLogger())).value(); if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId()); boolean connectionOK = false; @@ -207,7 +207,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { //This should not be needed while using queue because connection should be done before calling this PumpEnactResult result = new PumpEnactResult(getInjector()); - absoluteRate = constraintChecker.applyBasalConstraints(new ConstraintObject<>(absoluteRate, getInjector()), profile).value(); + absoluteRate = constraintChecker.applyBasalConstraints(new ConstraintObject<>(absoluteRate, getAapsLogger()), profile).value(); boolean doTempOff = getBaseBasalRate() - absoluteRate == 0d && absoluteRate >= 0.10d; final boolean doLowTemp = absoluteRate < getBaseBasalRate() || absoluteRate < 0.10d; @@ -286,7 +286,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { int durationInHalfHours = Math.max(durationInMinutes / 30, 1); // We keep current basal running so need to sub current basal double extendedRateToSet = absoluteRate - getBaseBasalRate(); - extendedRateToSet = constraintChecker.applyBasalConstraints(new ConstraintObject<>(extendedRateToSet, getInjector()), profile).value(); + extendedRateToSet = constraintChecker.applyBasalConstraints(new ConstraintObject<>(extendedRateToSet, getAapsLogger()), profile).value(); // needs to be rounded to 0.1 extendedRateToSet = Round.INSTANCE.roundTo(extendedRateToSet, pumpDescription.getExtendedBolusStep() * 2); // *2 because of half hours diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt index 0049f5b93e..9bbf49311a 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStart.kt @@ -12,7 +12,7 @@ class MsgBolusStart( init { setCommand(0x0102) // HARDCODED LIMIT - amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, aapsLogger)).value() addParamInt((amount * 100).toInt()) aapsLogger.debug(LTag.PUMPBTCOMM, "Bolus start : $amount") } diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt index 3a0c72d41a..fd91ea5cec 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgBolusStartWithSpeed.kt @@ -13,7 +13,7 @@ class MsgBolusStartWithSpeed( init { setCommand(0x0104) // HARDCODED LIMIT - amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, aapsLogger)).value() addParamInt((amount * 100).toInt()) addParamByte(speed.toByte()) aapsLogger.debug(LTag.PUMPBTCOMM, "Bolus start : $amount speed: $speed") diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt index 9c1f1ed0bc..e91d4a1d8b 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgSetExtendedBolusStart.kt @@ -17,7 +17,7 @@ class MsgSetExtendedBolusStart( // HARDCODED LIMITS if (halfHours < 1) halfHours = 1 if (halfHours > 16) halfHours = 16 - amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, aapsLogger)).value() addParamInt((amount * 100).toInt()) addParamByte(halfHours) aapsLogger.debug(LTag.PUMPBTCOMM, "Set extended bolus start: " + (amount * 100).toInt() / 100.0 + "U halfHours: " + halfHours.toInt()) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt index 9f3585447a..d481c6797b 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/DanaRPluginTest.kt @@ -32,13 +32,7 @@ class DanaRPluginTest : TestBaseWithProfile() { private lateinit var danaRPlugin: DanaRPlugin - val injector = HasAndroidInjector { - AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } - } - } + val injector = HasAndroidInjector { AndroidInjector { } } @BeforeEach fun prepareMocks() { @@ -60,7 +54,7 @@ class DanaRPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Double.MAX_VALUE, injector) + val c = ConstraintObject(Double.MAX_VALUE, aapsLogger) danaRPlugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(0.8, c.value(), 0.01) Assertions.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons()) @@ -72,7 +66,7 @@ class DanaRPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Int.MAX_VALUE, injector) + val c = ConstraintObject(Int.MAX_VALUE, aapsLogger) danaRPlugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) Assertions.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getReasons()) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt index 83ac7c65e1..7b40464bec 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MessageHashTableRTest.kt @@ -9,7 +9,7 @@ import org.mockito.Mockito class MessageHashTableRTest : DanaRTestBase() { @Test fun runTest() { - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) val messageHashTable = MessageHashTableR(injector) val testMessage = messageHashTable.findMessage(0x41f2) Assertions.assertEquals("CMD_HISTORY_ALL", testMessage.messageName) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt index daa4a0fb5a..2369557048 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartTest.kt @@ -9,7 +9,7 @@ import org.mockito.Mockito.`when` class MsgBolusStartTest : DanaRTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) val packet = MsgBolusStart(injector, 1.0) // test message decoding diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt index 0493dc8b1e..6bbba7a377 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgBolusStartWithSpeedTest.kt @@ -9,7 +9,7 @@ import org.mockito.Mockito class MsgBolusStartWithSpeedTest : DanaRTestBase() { @Test fun runTest() { - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) val packet = MsgBolusStartWithSpeed(injector, 0.0, 0) // test message decoding diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt index d881bd911e..ae76035dd2 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/MsgSetExtendedBolusStartTest.kt @@ -9,7 +9,7 @@ import org.mockito.Mockito.`when` class MsgSetExtendedBolusStartTest : DanaRTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) val packet = MsgSetExtendedBolusStart(injector, 2.0, 2.toByte()) // test message decoding diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt index d843b7e67c..e32940b390 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/DanaRKoreanPluginTest.kt @@ -32,13 +32,7 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() { private lateinit var danaRPlugin: DanaRKoreanPlugin - val injector = HasAndroidInjector { - AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } - } - } + val injector = HasAndroidInjector { AndroidInjector { } } @BeforeEach fun prepareMocks() { @@ -60,7 +54,7 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Double.MAX_VALUE, injector) + val c = ConstraintObject(Double.MAX_VALUE, aapsLogger) danaRPlugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(0.8, c.value(), 0.01) Assertions.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons()) @@ -72,7 +66,7 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() { danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaRPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Int.MAX_VALUE, injector) + val c = ConstraintObject(Int.MAX_VALUE, aapsLogger) danaRPlugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) Assertions.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getReasons()) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt index 8b43ed6677..1e0b6c756b 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRKorean/comm/MessageHashTableRKoreanTest.kt @@ -10,7 +10,7 @@ import org.mockito.Mockito class MessageHashTableRKoreanTest : DanaRTestBase() { @Test fun runTest() { - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) val messageHashTable = MessageHashTableRKorean(injector) val testMessage = messageHashTable.findMessage(0x41f2) Assertions.assertEquals("CMD_HISTORY_ALL", testMessage.messageName) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt index a95b45eef0..6f97ea681a 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/DanaRv2PluginTest.kt @@ -36,13 +36,7 @@ class DanaRv2PluginTest : TestBaseWithProfile() { private lateinit var danaRv2Plugin: DanaRv2Plugin - val injector = HasAndroidInjector { - AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } - } - } + val injector = HasAndroidInjector { AndroidInjector { } } @BeforeEach fun prepareMocks() { @@ -64,7 +58,7 @@ class DanaRv2PluginTest : TestBaseWithProfile() { danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Double.MAX_VALUE, injector) + val c = ConstraintObject(Double.MAX_VALUE, aapsLogger) danaRv2Plugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(0.8, c.value(), 0.01) Assertions.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons()) @@ -76,7 +70,7 @@ class DanaRv2PluginTest : TestBaseWithProfile() { danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaRv2Plugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Int.MAX_VALUE, injector) + val c = ConstraintObject(Int.MAX_VALUE, aapsLogger) danaRv2Plugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) Assertions.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getReasons()) diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt index 94bfe539a4..2ac52af714 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaRv2/comm/MessageHashTableRv2Test.kt @@ -13,7 +13,7 @@ class MessageHashTableRv2Test : DanaRTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) val messageHashTableRv2 = MessageHashTableRv2(injector) val forTesting: MessageBase = MsgStatusAPS_v2(injector) val testPacket: MessageBase = messageHashTableRv2.findMessage(forTesting.command) diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt index 89ce1b2430..04fb4c4012 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/DanaRSPlugin.kt @@ -288,7 +288,7 @@ class DanaRSPlugin @Inject constructor( @Synchronized override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, aapsLogger)).value() return if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { val preferencesSpeed = sp.getInt(info.nightscout.pump.dana.R.string.key_danars_bolusspeed, 0) var speed = 12 @@ -343,7 +343,7 @@ 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 { - val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() + val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, aapsLogger), profile).value() var doTempOff = baseBasalRate - absoluteAfterConstrain == 0.0 val doLowTemp = absoluteAfterConstrain < baseBasalRate val doHighTemp = absoluteAfterConstrain > baseBasalRate @@ -419,7 +419,7 @@ class DanaRSPlugin @Inject constructor( @Synchronized override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { val result = PumpEnactResult(injector) - var percentAfterConstraint = constraintChecker.applyBasalPercentConstraints(ConstraintObject(percent, injector), profile).value() + var percentAfterConstraint = constraintChecker.applyBasalPercentConstraints(ConstraintObject(percent, aapsLogger), profile).value() if (percentAfterConstraint < 0) { result.isTempCancel = false result.enacted = false @@ -489,7 +489,7 @@ class DanaRSPlugin @Inject constructor( @Synchronized override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult { - var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() + var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, aapsLogger)).value() // needs to be rounded val durationInHalfHours = max(durationInMinutes / 30, 1) insulinAfterConstraint = Round.roundTo(insulinAfterConstraint, pumpDescription.extendedBolusStep) diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt index 7ded74eea2..dc9874df49 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/comm/DanaRSPacketBolusSetStepBolusStart.kt @@ -21,7 +21,7 @@ class DanaRSPacketBolusSetStepBolusStart( opCode = BleEncryption.DANAR_PACKET__OPCODE_BOLUS__SET_STEP_BOLUS_START // Speed 0 => 12 sec/U, 1 => 30 sec/U, 2 => 60 sec/U // HARDCODED LIMIT - if there is one that could be created - amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, injector)).value() + amount = constraintChecker.applyBolusConstraints(ConstraintObject(amount, aapsLogger)).value() aapsLogger.debug(LTag.PUMPCOMM, "Bolus start : $amount speed: $speed") } diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt index c2a9d6cc36..96a348c830 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSPluginTest.kt @@ -33,7 +33,7 @@ class DanaRSPluginTest : DanaRSTestBase() { danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Double.MAX_VALUE, injector) + val c = ConstraintObject(Double.MAX_VALUE, aapsLogger) danaRSPlugin.applyBasalConstraints(c, validProfile) Assertions.assertEquals(java.lang.Double.valueOf(0.8), c.value(), 0.0001) Assertions.assertEquals("DanaRS: limitingbasalratio", c.getReasons()) @@ -45,7 +45,7 @@ class DanaRSPluginTest : DanaRSTestBase() { danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaRSPlugin.setPluginEnabled(PluginType.PUMP, true) danaPump.maxBasal = 0.8 - val c = ConstraintObject(Int.MAX_VALUE, injector) + val c = ConstraintObject(Int.MAX_VALUE, aapsLogger) danaRSPlugin.applyBasalPercentConstraints(c, validProfile) Assertions.assertEquals(200, c.value()) Assertions.assertEquals("DanaRS: limitingpercentrate", c.getReasons()) diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt index 97a189240c..14a7f30e10 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsMessageHashTableTest.kt @@ -36,7 +36,7 @@ class DanaRsMessageHashTableTest : DanaRSTestBase() { @Test fun runTest() { - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) val danaRSMessageHashTable = DanaRSMessageHashTable(packetInjector) val forTesting: DanaRSPacket = DanaRSPacketAPSSetEventHistory(packetInjector, DanaPump.HistoryEntry.CARBS.value, 0, 0, 0) diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt index 27a8dcd7cd..af4ac3f1a1 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/comm/DanaRsPacketBolusSetStepBolusStartTest.kt @@ -75,6 +75,6 @@ class DanaRsPacketBolusSetStepBolusStartTest : DanaRSTestBase() { danaHistoryDatabase, decimalFormatter ) - Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) } } \ No newline at end of file diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt index 0ed3187bbb..b0e3937466 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/DiaconnG8Plugin.kt @@ -271,7 +271,7 @@ class DiaconnG8Plugin @Inject constructor( @Synchronized override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, aapsLogger)).value() return if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { val carbs = detailedBolusInfo.carbs detailedBolusInfo.carbs = 0.0 @@ -310,7 +310,7 @@ class DiaconnG8Plugin @Inject constructor( @Synchronized override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult { val result = PumpEnactResult(injector) - val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() + val absoluteAfterConstrain = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, aapsLogger), profile).value() val doTempOff = baseBasalRate - absoluteAfterConstrain == 0.0 val doLowTemp = absoluteAfterConstrain < baseBasalRate val doHighTemp = absoluteAfterConstrain > baseBasalRate @@ -397,7 +397,7 @@ class DiaconnG8Plugin @Inject constructor( @Synchronized override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult { - var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() + var insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, aapsLogger)).value() // needs to be rounded insulinAfterConstraint = Round.roundTo(insulinAfterConstraint, pumpDescription.extendedBolusStep) val result = PumpEnactResult(injector) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt index d4f41f9e74..7d8e090bc9 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt @@ -348,7 +348,7 @@ import kotlin.math.abs override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult { aapsLogger.debug(LTag.PUMP, "deliverTreatment: " + detailedBolusInfo.insulin + "U") if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false) - detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, injector)).value() + detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(ConstraintObject(detailedBolusInfo.insulin, aapsLogger)).value() return if (detailedBolusInfo.insulin > 0 && detailedBolusInfo.carbs == 0.0) { aapsLogger.debug(LTag.PUMP, "deliverTreatment: Delivering bolus: " + detailedBolusInfo.insulin + "U") val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) @@ -388,7 +388,7 @@ import kotlin.math.abs aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - absoluteRate: $absoluteRate, durationInMinutes: $durationInMinutes, enforceNew: $enforceNew") // round rate to pump rate - val pumpRate = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, injector), profile).value() + val pumpRate = constraintChecker.applyBasalConstraints(ConstraintObject(absoluteRate, aapsLogger), profile).value() temporaryBasalStorage.add(PumpSync.PumpState.TemporaryBasal(dateUtil.now(), T.mins(durationInMinutes.toLong()).msecs(), pumpRate, true, tbrType, 0L, 0L)) val connectionOK = medtrumService?.setTempBasal(pumpRate, durationInMinutes) ?: false return if (connectionOK diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt index 8095e08415..40aa9ce9a8 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/CarbsDialog.kt @@ -227,7 +227,7 @@ class CarbsDialog : DialogFragmentWithDate() { override fun submit(): Boolean { if (_binding == null) return false val carbs = binding.carbs.value.toInt() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, injector)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, aapsLogger)).value() val units = profileUtil.units val activityTTDuration = defaultValueHelper.determineActivityTTDuration() val activityTT = defaultValueHelper.determineActivityTT() diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt index 49ecf11135..a946bae2b8 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/ExtendedBolusDialog.kt @@ -96,7 +96,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { val insulin = SafeParse.stringToDouble(binding.insulin.text) val durationInMinutes = binding.duration.value.toInt() val actions: LinkedList = LinkedList() - val insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, injector)).value() + val insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(ConstraintObject(insulin, aapsLogger)).value() actions.add(rh.gs(info.nightscout.core.ui.R.string.format_insulin_units, insulinAfterConstraint)) actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_mins, durationInMinutes)) if (abs(insulinAfterConstraint - insulin) > 0.01) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt index 7f149d45d6..7affb9e620 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/FillDialog.kt @@ -118,7 +118,7 @@ class FillDialog : DialogFragmentWithDate() { val insulin = SafeParse.stringToDouble(binding.fillInsulinAmount.text) val actions: LinkedList = LinkedList() - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, injector)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, aapsLogger)).value() if (insulinAfterConstraints > 0) { actions.add(rh.gs(R.string.fill_warning)) actions.add("") diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt index 9602f779c1..07a9890e27 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/InsulinDialog.kt @@ -191,7 +191,7 @@ class InsulinDialog : DialogFragmentWithDate() { if (_binding == null) return false val pumpDescription = activePlugin.activePump.pumpDescription val insulin = SafeParse.stringToDouble(binding.amount.text) - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, injector)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, aapsLogger)).value() val actions: LinkedList = LinkedList() val units = profileFunction.getUnits() val unitLabel = if (units == GlucoseUnit.MMOL) rh.gs(info.nightscout.core.ui.R.string.mmol) else rh.gs(info.nightscout.core.ui.R.string.mgdl) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt index 00577a4b11..43559c127e 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/LoopDialog.kt @@ -159,9 +159,9 @@ class LoopDialog : DaggerDialogFragment() { if (_binding == null) return aapsLogger.debug("UpdateGUI from $from") val pumpDescription: PumpDescription = activePlugin.activePump.pumpDescription - val closedLoopAllowed = constraintChecker.isClosedLoopAllowed(ConstraintObject(true, injector)) + val closedLoopAllowed = constraintChecker.isClosedLoopAllowed(ConstraintObject(true, aapsLogger)) val closedLoopAllowed2 = activePlugin.activeObjectives?.isAccomplished(Objectives.MAXIOB_OBJECTIVE) ?: false - val lgsEnabled = constraintChecker.isLgsAllowed(ConstraintObject(true, injector)) + val lgsEnabled = constraintChecker.isLgsAllowed(ConstraintObject(true, aapsLogger)) val apsMode = ApsMode.fromString(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)) val pump = activePlugin.activePump diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt index 4cf3cf85d8..072cacdbe1 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TempBasalDialog.kt @@ -120,13 +120,13 @@ class TempBasalDialog : DialogFragmentWithDate() { val actions: LinkedList = LinkedList() if (isPercentPump) { val basalPercentInput = SafeParse.stringToInt(binding.basalPercentInput.text) - percent = constraintChecker.applyBasalPercentConstraints(ConstraintObject(basalPercentInput, injector), profile).value() + percent = constraintChecker.applyBasalPercentConstraints(ConstraintObject(basalPercentInput, aapsLogger), profile).value() actions.add(rh.gs(info.nightscout.core.ui.R.string.tempbasal_label) + ": $percent%") actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_mins, durationInMinutes)) if (percent != basalPercentInput) actions.add(rh.gs(info.nightscout.core.ui.R.string.constraint_applied)) } else { val basalAbsoluteInput = SafeParse.stringToDouble(binding.basalAbsoluteInput.text) - absolute = constraintChecker.applyBasalConstraints(ConstraintObject(basalAbsoluteInput, injector), profile).value() + absolute = constraintChecker.applyBasalConstraints(ConstraintObject(basalAbsoluteInput, aapsLogger), profile).value() actions.add(rh.gs(info.nightscout.core.ui.R.string.tempbasal_label) + ": " + rh.gs(info.nightscout.core.ui.R.string.pump_base_basal_rate, absolute)) actions.add(rh.gs(info.nightscout.core.ui.R.string.duration) + ": " + rh.gs(info.nightscout.core.ui.R.string.format_mins, durationInMinutes)) if (abs(absolute - basalAbsoluteInput) > 0.01) diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt index 02099655ce..147ead7fd7 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/TreatmentDialog.kt @@ -138,8 +138,8 @@ class TreatmentDialog : DialogFragmentWithDate() { val carbs = SafeParse.stringToInt(binding.carbs.text) val recordOnlyChecked = binding.recordOnly.isChecked val actions: LinkedList = LinkedList() - val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, injector)).value() - val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, injector)).value() + val insulinAfterConstraints = constraintChecker.applyBolusConstraints(ConstraintObject(insulin, aapsLogger)).value() + val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, aapsLogger)).value() if (insulinAfterConstraints > 0) { actions.add( diff --git a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt index 31b4c03bd8..b8347e7807 100644 --- a/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt +++ b/ui/src/main/java/info/nightscout/ui/dialogs/WizardDialog.kt @@ -444,7 +444,7 @@ class WizardDialog : DaggerDialogFragment() { SafeParse.stringToDouble(binding.correctionInput.text) } else sp.getInt(info.nightscout.core.utils.R.string.key_boluswizard_percentage, 100).toDouble() - val carbsAfterConstraint = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, injector)).value() + val carbsAfterConstraint = constraintChecker.applyCarbsConstraints(ConstraintObject(carbs, aapsLogger)).value() if (abs(carbs - carbsAfterConstraint) > 0.01) { binding.carbsInput.value = 0.0 ToastUtils.warnToast(ctx, R.string.carbs_constraint_applied) From 355361ed6d2fd1684d30c868b87795eccaed1be9 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 20 Sep 2023 16:39:28 +0200 Subject: [PATCH 63/65] fix tests --- .../constraints/ConstraintsCheckerTest.kt | 6 +-- .../plugins/safety/SafetyPluginTest.kt | 43 +++++++++---------- .../nightscout/core/data/ConstraintTest.kt | 6 +-- .../objectives/ObjectivesPluginTest.kt | 11 ++--- .../SmsCommunicatorPluginTest.kt | 19 ++++---- .../pump/danaR/comm/DanaRTestBase.kt | 4 -- .../nightscout/pump/danars/DanaRSTestBase.kt | 4 -- 7 files changed, 34 insertions(+), 59 deletions(-) diff --git a/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt b/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt index 627ff00b5e..4f8f66662a 100644 --- a/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt +++ b/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt @@ -9,7 +9,6 @@ import info.nightscout.androidaps.insight.database.InsightDatabase import info.nightscout.androidaps.insight.database.InsightDatabaseDao import info.nightscout.androidaps.insight.database.InsightDbHelper import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin -import info.nightscout.core.constraints.ConstraintObject import info.nightscout.database.impl.AppRepository import info.nightscout.implementation.iob.GlucoseStatusProviderImpl import info.nightscout.interfaces.ApsMode @@ -95,9 +94,6 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { if (it is PumpEnactResult) { it.context = context } - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } } } @@ -138,7 +134,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { `when`(sp.getString(R.string.key_danar_bt_name, "")).thenReturn("") //SafetyPlugin - constraintChecker = ConstraintsCheckerImpl(activePlugin, injector) + constraintChecker = ConstraintsCheckerImpl(activePlugin, aapsLogger) val glucoseStatusProvider = GlucoseStatusProviderImpl(aapsLogger, iobCobCalculator, dateUtil, decimalFormatter) diff --git a/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt b/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt index d473e1c789..95500cb348 100644 --- a/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt @@ -45,9 +45,6 @@ class SafetyPluginTest : TestBaseWithProfile() { private val injector = HasAndroidInjector { AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } } } private val pumpDescription = PumpDescription() @@ -92,7 +89,7 @@ class SafetyPluginTest : TestBaseWithProfile() { @Test fun pumpDescriptionShouldLimitLoopInvocation() { pumpDescription.isTempBasalCapable = false - val c = safetyPlugin.isLoopInvocationAllowed(ConstraintObject(true, injector)) + val c = safetyPlugin.isLoopInvocationAllowed(ConstraintObject(true, aapsLogger)) assertThat(c.getReasons()).isEqualTo("Safety: Pump is not temp basal capable") assertThat(c.value()).isFalse() } @@ -101,7 +98,7 @@ class SafetyPluginTest : TestBaseWithProfile() { fun disabledEngineeringModeShouldLimitClosedLoop() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)).thenReturn(ApsMode.CLOSED.name) `when`(config.isEngineeringModeOrRelease()).thenReturn(false) - val c = safetyPlugin.isClosedLoopAllowed(ConstraintObject(true, injector)) + val c = safetyPlugin.isClosedLoopAllowed(ConstraintObject(true, aapsLogger)) assertThat(c.getReasons()).contains("Running dev version. Closed loop is disabled.") assertThat(c.value()).isFalse() } @@ -109,7 +106,7 @@ class SafetyPluginTest : TestBaseWithProfile() { @Test fun setOpenLoopInPreferencesShouldLimitClosedLoop() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)).thenReturn(ApsMode.OPEN.name) - val c = safetyPlugin.isClosedLoopAllowed(ConstraintObject(true, injector)) + val c = safetyPlugin.isClosedLoopAllowed(ConstraintObject(true, aapsLogger)) assertThat(c.getReasons()).contains("Closed loop mode disabled in preferences") assertThat(c.value()).isFalse() } @@ -117,8 +114,8 @@ class SafetyPluginTest : TestBaseWithProfile() { @Test fun notEnabledSMBInPreferencesDisablesSMB() { `when`(sp.getBoolean(info.nightscout.plugins.aps.R.string.key_use_smb, false)).thenReturn(false) - `when`(constraintChecker.isClosedLoopAllowed(anyObject())).thenReturn(ConstraintObject(true, injector)) - val c = openAPSSMBPlugin.isSMBModeEnabled(ConstraintObject(true, injector)) + `when`(constraintChecker.isClosedLoopAllowed(anyObject())).thenReturn(ConstraintObject(true, aapsLogger)) + val c = openAPSSMBPlugin.isSMBModeEnabled(ConstraintObject(true, aapsLogger)) assertThat(c.getReasons()).contains("SMB disabled in preferences") assertThat(c.value()).isFalse() } @@ -126,8 +123,8 @@ class SafetyPluginTest : TestBaseWithProfile() { @Test fun openLoopPreventsSMB() { `when`(sp.getBoolean(info.nightscout.plugins.aps.R.string.key_use_smb, false)).thenReturn(true) - `when`(constraintChecker.isClosedLoopAllowed()).thenReturn(ConstraintObject(false, injector)) - val c = safetyPlugin.isSMBModeEnabled(ConstraintObject(true, injector)) + `when`(constraintChecker.isClosedLoopAllowed()).thenReturn(ConstraintObject(false, aapsLogger)) + val c = safetyPlugin.isSMBModeEnabled(ConstraintObject(true, aapsLogger)) assertThat(c.getReasons()).contains("SMB not allowed in open loop mode") assertThat(c.value()).isFalse() } @@ -135,7 +132,7 @@ class SafetyPluginTest : TestBaseWithProfile() { @Test fun bgSourceShouldPreventSMBAlways() { `when`(activePlugin.activeBgSource).thenReturn(glimpPlugin) - val c = safetyPlugin.isAdvancedFilteringEnabled(ConstraintObject(true, injector)) + val c = safetyPlugin.isAdvancedFilteringEnabled(ConstraintObject(true, aapsLogger)) assertThat(c.getReasons()).isEqualTo("Safety: SMB always and after carbs disabled because active BG source doesn\\'t support advanced filtering") assertThat(c.value()).isFalse() } @@ -146,7 +143,7 @@ class SafetyPluginTest : TestBaseWithProfile() { `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_current_basal_safety_multiplier, 4.0)).thenReturn(4.0) `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_max_daily_safety_multiplier, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val c = ConstraintObject(Double.MAX_VALUE, injector) + val c = ConstraintObject(Double.MAX_VALUE, aapsLogger) safetyPlugin.applyBasalConstraints(c, validProfile) assertThat(c.value()).isWithin(0.01).of(2.0) assertThat(c.getReasons()).isEqualTo( @@ -160,7 +157,7 @@ class SafetyPluginTest : TestBaseWithProfile() { @Test fun doNotAllowNegativeBasalRate() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val d = ConstraintObject(-0.5, injector) + val d = ConstraintObject(-0.5, aapsLogger) safetyPlugin.applyBasalConstraints(d, validProfile) assertThat(d.value()).isWithin(0.01).of(0.0) assertThat(d.getReasons()).isEqualTo( @@ -175,7 +172,7 @@ class SafetyPluginTest : TestBaseWithProfile() { `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_current_basal_safety_multiplier, 4.0)).thenReturn(4.0) `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_max_daily_safety_multiplier, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val i = ConstraintObject(Int.MAX_VALUE, injector) + val i = ConstraintObject(Int.MAX_VALUE, aapsLogger) safetyPlugin.applyBasalPercentConstraints(i, validProfile) assertThat(i.value()).isEqualTo(200) assertThat(i.getReasons()).isEqualTo( @@ -199,7 +196,7 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit `when`(sp.getDouble(info.nightscout.plugins.aps.R.string.key_openapsama_max_daily_safety_multiplier, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") openAPSSMBPlugin.setPluginEnabled(PluginType.APS, true) - val i = ConstraintObject(Double.MAX_VALUE, injector) + val i = ConstraintObject(Double.MAX_VALUE, aapsLogger) openAPSSMBPlugin.applyBasalConstraints(i, validProfile) assertThat(i.value()).isWithin(0.01).of(1.0) assertThat(i.getReasons()).isEqualTo( @@ -215,7 +212,7 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit @Test fun doNotAllowNegativePercentBasalRate() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val i = ConstraintObject(-22, injector) + val i = ConstraintObject(-22, aapsLogger) safetyPlugin.applyBasalPercentConstraints(i, validProfile) assertThat(i.value()).isEqualTo(0) assertThat(i.getReasons()).isEqualTo( @@ -232,7 +229,7 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit fun bolusAmountShouldBeLimited() { `when`(sp.getDouble(info.nightscout.core.utils.R.string.key_treatmentssafety_maxbolus, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val d = safetyPlugin.applyBolusConstraints(ConstraintObject(Double.MAX_VALUE, injector)) + val d = safetyPlugin.applyBolusConstraints(ConstraintObject(Double.MAX_VALUE, aapsLogger)) assertThat(d.value()).isWithin(0.01).of(3.0) assertThat(d.getReasons()).isEqualTo( """ @@ -247,7 +244,7 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit fun doNotAllowNegativeBolusAmount() { `when`(sp.getDouble(info.nightscout.core.utils.R.string.key_treatmentssafety_maxbolus, 3.0)).thenReturn(3.0) `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("child") - val d = safetyPlugin.applyBolusConstraints(ConstraintObject(-22.0, injector)) + val d = safetyPlugin.applyBolusConstraints(ConstraintObject(-22.0, aapsLogger)) assertThat(d.value()).isWithin(0.01).of(0.0) assertThat(d.getReasons()).isEqualTo("Safety: Limiting bolus to 0.0 U because of it must be positive value") assertThat(d.getMostLimitedReasons()).isEqualTo("Safety: Limiting bolus to 0.0 U because of it must be positive value") @@ -259,13 +256,13 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit `when`(sp.getInt(info.nightscout.core.utils.R.string.key_treatmentssafety_maxcarbs, 48)).thenReturn(48) // Negative carbs not allowed - var i: Constraint = ConstraintObject(-22, injector) + var i: Constraint = ConstraintObject(-22, aapsLogger) safetyPlugin.applyCarbsConstraints(i) assertThat(i.value()).isEqualTo(0) assertThat(i.getReasons()).isEqualTo("Safety: Limiting carbs to 0 g because of it must be positive value") // Apply all limits - i = safetyPlugin.applyCarbsConstraints(ConstraintObject(Int.MAX_VALUE, injector)) + i = safetyPlugin.applyCarbsConstraints(ConstraintObject(Int.MAX_VALUE, aapsLogger)) assertThat(i.value()).isEqualTo(48) assertThat(i.getReasons()).isEqualTo("Safety: Limiting carbs to 48 g because of max value in preferences") } @@ -282,21 +279,21 @@ Safety: Limiting max basal rate to 500.00 U/h because of pump limit `when`(sp.getString(info.nightscout.core.utils.R.string.key_age, "")).thenReturn("teenage") // Apply all limits - var d: Constraint = ConstraintObject(Double.MAX_VALUE, injector) + var d: Constraint = ConstraintObject(Double.MAX_VALUE, aapsLogger) d = safetyPlugin.applyMaxIOBConstraints(d) assertThat(d.value()).isWithin(0.01).of(HardLimits.MAX_IOB_LGS) assertThat(d.getReasons()).isEqualTo("Safety: Limiting IOB to 0.0 U because of Low Glucose Suspend") assertThat(d.getMostLimitedReasons()).isEqualTo("Safety: Limiting IOB to 0.0 U because of Low Glucose Suspend") // Apply all limits - d = ConstraintObject(Double.MAX_VALUE, injector) + d = ConstraintObject(Double.MAX_VALUE, aapsLogger) val a = openAPSAMAPlugin.applyMaxIOBConstraints(d) assertThat(a.value()).isWithin(0.01).of(1.5) assertThat(d.getReasons()).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences\nOpenAPSAMA: Limiting IOB to 7.0 U because of hard limit") assertThat(d.getMostLimitedReasons()).isEqualTo("OpenAPSAMA: Limiting IOB to 1.5 U because of max value in preferences") // Apply all limits - d = ConstraintObject(Double.MAX_VALUE, injector) + d = ConstraintObject(Double.MAX_VALUE, aapsLogger) val s = openAPSSMBPlugin.applyMaxIOBConstraints(d) assertThat(s.value()).isWithin(0.01).of(3.0) assertThat(d.getReasons()).isEqualTo("OpenAPSSMB: Limiting IOB to 3.0 U because of max value in preferences\nOpenAPSSMB: Limiting IOB to 22.0 U because of hard limit") diff --git a/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt b/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt index 0382107051..e23021118f 100644 --- a/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt +++ b/core/main/src/test/java/info/nightscout/core/data/ConstraintTest.kt @@ -1,7 +1,5 @@ package info.nightscout.core.data -import dagger.android.AndroidInjector -import dagger.android.HasAndroidInjector import info.nightscout.core.constraints.ConstraintObject import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.Assertions @@ -13,10 +11,8 @@ import org.junit.jupiter.api.Test */ class ConstraintTest : TestBase() { - private val injector = HasAndroidInjector { AndroidInjector { } } - @Test fun doTests() { - val b = ConstraintObject(false, aapsLogger) + val b = ConstraintObject(true, aapsLogger) Assertions.assertEquals(true, b.value()) Assertions.assertEquals("", b.getReasons()) Assertions.assertEquals("", b.getMostLimitedReasons()) diff --git a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt index e668b07c09..1c2578dd00 100644 --- a/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt +++ b/plugins/constraints/src/test/java/info/nightscout/plugins/constraints/objectives/ObjectivesPluginTest.kt @@ -35,9 +35,6 @@ class ObjectivesPluginTest : TestBase() { it.rh = rh it.dateUtil = dateUtil } - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } } } @@ -52,7 +49,7 @@ class ObjectivesPluginTest : TestBase() { @Test fun notStartedObjectivesShouldLimitLoopInvocation() { objectivesPlugin.objectives[Objectives.FIRST_OBJECTIVE].startedOn = 0 - val c = objectivesPlugin.isLoopInvocationAllowed(ConstraintObject(true, injector)) + val c = objectivesPlugin.isLoopInvocationAllowed(ConstraintObject(true, aapsLogger)) Assertions.assertEquals("Objectives: Objective 1 not started", c.getReasons()) Assertions.assertEquals(false, c.value()) objectivesPlugin.objectives[Objectives.FIRST_OBJECTIVE].startedOn = dateUtil.now() @@ -60,21 +57,21 @@ class ObjectivesPluginTest : TestBase() { @Test fun notStartedObjective6ShouldLimitClosedLoop() { objectivesPlugin.objectives[Objectives.MAXIOB_ZERO_CL_OBJECTIVE].startedOn = 0 - val c = objectivesPlugin.isClosedLoopAllowed(ConstraintObject(true, injector)) + val c = objectivesPlugin.isClosedLoopAllowed(ConstraintObject(true, aapsLogger)) Assertions.assertEquals(true, c.getReasons().contains("Objective 6 not started")) Assertions.assertEquals(false, c.value()) } @Test fun notStartedObjective8ShouldLimitAutosensMode() { objectivesPlugin.objectives[Objectives.AUTOSENS_OBJECTIVE].startedOn = 0 - val c = objectivesPlugin.isAutosensModeEnabled(ConstraintObject(true, injector)) + val c = objectivesPlugin.isAutosensModeEnabled(ConstraintObject(true, aapsLogger)) Assertions.assertEquals(true, c.getReasons().contains("Objective 8 not started")) Assertions.assertEquals(false, c.value()) } @Test fun notStartedObjective10ShouldLimitSMBMode() { objectivesPlugin.objectives[Objectives.SMB_OBJECTIVE].startedOn = 0 - val c = objectivesPlugin.isSMBModeEnabled(ConstraintObject(true, injector)) + val c = objectivesPlugin.isSMBModeEnabled(ConstraintObject(true, aapsLogger)) Assertions.assertEquals(true, c.getReasons().contains("Objective 9 not started")) Assertions.assertEquals(false, c.value()) } diff --git a/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt b/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt index c997917c7d..5b70b36fb1 100644 --- a/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt +++ b/plugins/main/src/test/java/info/nightscout/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt @@ -62,9 +62,6 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { private var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } if (it is PumpEnactResult) { it.context = context } @@ -873,7 +870,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BASAL 1 20") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("TBR duration must be a multiple of 30 minutes and greater than 0.") - `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(1.0, injector)) + `when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(ConstraintObject(1.0, aapsLogger)) //BASAL 1 30 smsCommunicatorPlugin.messages = ArrayList() @@ -921,7 +918,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("EXTENDED a%") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) + `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, aapsLogger)) //EXTENDED 1 0 smsCommunicatorPlugin.messages = ArrayList() @@ -958,7 +955,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BOLUS") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, aapsLogger)) `when`(dateUtilMocked.now()).thenReturn(1000L) `when`(sp.getLong(R.string.key_smscommunicator_remote_bolus_min_distance, T.msecs(Constants.remoteBolusMinDistance).mins())).thenReturn(15L) //BOLUS 1 @@ -967,7 +964,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BOLUS 1") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Remote bolus not available. Try again later.") - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, injector)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(0.0, aapsLogger)) `when`(dateUtilMocked.now()).thenReturn(Constants.remoteBolusMinDistance + 1002L) //BOLUS 0 @@ -983,8 +980,8 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("BOLUS a") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) - `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, injector)) + `when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, aapsLogger)) + `when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(ConstraintObject(1.0, aapsLogger)) //BOLUS 1 smsCommunicatorPlugin.messages = ArrayList() @@ -1081,7 +1078,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("CARBS") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(ConstraintObject(0, injector)) + `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(ConstraintObject(0, aapsLogger)) //CARBS 0 smsCommunicatorPlugin.messages = ArrayList() @@ -1089,7 +1086,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { smsCommunicatorPlugin.processSms(sms) assertThat(smsCommunicatorPlugin.messages[0].text).isEqualTo("CARBS 0") assertThat(smsCommunicatorPlugin.messages[1].text).isEqualTo("Wrong format") - `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(ConstraintObject(1, injector)) + `when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(ConstraintObject(1, aapsLogger)) //CARBS 1 smsCommunicatorPlugin.messages = ArrayList() diff --git a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt index 6f294d210b..964bd8341d 100644 --- a/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt +++ b/pump/danar/src/test/java/info/nightscout/pump/danaR/comm/DanaRTestBase.kt @@ -6,7 +6,6 @@ import info.nightscout.androidaps.danaRKorean.DanaRKoreanPlugin import info.nightscout.androidaps.danaRv2.DanaRv2Plugin import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.danar.comm.MessageBase -import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.constraints.ConstraintsChecker import info.nightscout.interfaces.profile.Instantiator @@ -50,9 +49,6 @@ open class DanaRTestBase : TestBaseWithProfile() { val injector = HasAndroidInjector { AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } if (it is MessageBase) { it.aapsLogger = aapsLogger it.dateUtil = dateUtil diff --git a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt index 7c56fb2d9c..6fd3667c95 100644 --- a/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt +++ b/pump/danars/src/test/java/info/nightscout/pump/danars/DanaRSTestBase.kt @@ -2,7 +2,6 @@ package info.nightscout.pump.danars import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.core.constraints.ConstraintObject import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.pump.dana.DanaPump @@ -22,9 +21,6 @@ open class DanaRSTestBase : TestBaseWithProfile() { val injector = HasAndroidInjector { AndroidInjector { - if (it is ConstraintObject<*>) { - it.aapsLogger = aapsLogger - } } } From a38622f8482e39e1851918bfe2e45609d23069c7 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 20 Sep 2023 17:28:49 +0200 Subject: [PATCH 64/65] fix reloading data --- .../androidaps/workflow/CalculationWorkflowImpl.kt | 6 +++--- .../info/nightscout/implementation/db/CompatDBHelper.kt | 2 +- .../plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt | 2 +- .../main/java/info/nightscout/workflow/InvokeLoopWorker.kt | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/workflow/CalculationWorkflowImpl.kt b/app/src/main/java/info/nightscout/androidaps/workflow/CalculationWorkflowImpl.kt index 6d1a364a53..ccca089833 100644 --- a/app/src/main/java/info/nightscout/androidaps/workflow/CalculationWorkflowImpl.kt +++ b/app/src/main/java/info/nightscout/androidaps/workflow/CalculationWorkflowImpl.kt @@ -121,12 +121,12 @@ class CalculationWorkflowImpl @Inject constructor( } override fun stopCalculation(job: String, from: String) { - aapsLogger.debug(LTag.AUTOSENS, "Stopping calculation thread: $from") + aapsLogger.debug(LTag.WORKER, "Stopping calculation thread: $from") WorkManager.getInstance(context).cancelUniqueWork(job) val workStatus = WorkManager.getInstance(context).getWorkInfosForUniqueWork(job).get() while (workStatus.size >= 1 && workStatus[0].state == WorkInfo.State.RUNNING) SystemClock.sleep(100) - aapsLogger.debug(LTag.AUTOSENS, "Calculation thread stopped: $from") + aapsLogger.debug(LTag.WORKER, "Calculation thread stopped: $from") } override fun runCalculation( @@ -138,7 +138,7 @@ class CalculationWorkflowImpl @Inject constructor( bgDataReload: Boolean, cause: Event? ) { - aapsLogger.debug(LTag.AUTOSENS, "Starting calculation worker: $reason to ${dateUtil.dateAndTimeAndSecondsString(end)}") + aapsLogger.debug(LTag.WORKER, "Starting calculation worker: $reason to ${dateUtil.dateAndTimeAndSecondsString(end)}") WorkManager.getInstance(context) .beginUniqueWork( diff --git a/implementation/src/main/java/info/nightscout/implementation/db/CompatDBHelper.kt b/implementation/src/main/java/info/nightscout/implementation/db/CompatDBHelper.kt index 22751eca68..bad9684b28 100644 --- a/implementation/src/main/java/info/nightscout/implementation/db/CompatDBHelper.kt +++ b/implementation/src/main/java/info/nightscout/implementation/db/CompatDBHelper.kt @@ -58,7 +58,7 @@ class CompatDBHelper @Inject constructor( */ var newestGlucoseValue: GlucoseValue? = null it.filterIsInstance().maxByOrNull { gv -> gv.timestamp }?.let { gv -> - aapsLogger.debug(LTag.DATABASE, "Firing EventNewBg $gv") + aapsLogger.debug(LTag.DATABASE, "Firing EventNewBG $gv") rxBus.send(EventNewBG(gv.timestamp)) newestGlucoseValue = gv } diff --git a/plugins/main/src/main/java/info/nightscout/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt b/plugins/main/src/main/java/info/nightscout/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt index 84df87bdd7..ac0dad3e24 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt @@ -390,7 +390,7 @@ class IobCobCalculatorPlugin @Inject constructor( // prepare task for execution in 1 sec scheduledEvent?.let { // set reload bg data if was not set - if (!event.reloadBgData) event.reloadBgData = it.reloadBgData + event.reloadBgData = event.reloadBgData || it.reloadBgData } scheduledEvent = event scheduledHistoryPost = historyWorker.schedule( diff --git a/workflow/src/main/java/info/nightscout/workflow/InvokeLoopWorker.kt b/workflow/src/main/java/info/nightscout/workflow/InvokeLoopWorker.kt index 742a6f8c08..23fe97a16f 100644 --- a/workflow/src/main/java/info/nightscout/workflow/InvokeLoopWorker.kt +++ b/workflow/src/main/java/info/nightscout/workflow/InvokeLoopWorker.kt @@ -29,7 +29,7 @@ class InvokeLoopWorker( This method is triggered once autosens calculation has completed, so the LoopPlugin has current data to work with. However, autosens calculation can be triggered by multiple sources and currently only a new BG should trigger a loop run. Hence we return early if - the event causing the calculation is not EventNewBg. + the event causing the calculation is not EventNewBG.

*/ override suspend fun doWorkAndLog(): Result { From c52c0e1125828722b924a28d610ddfe728f1532a Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 20 Sep 2023 17:30:00 +0200 Subject: [PATCH 65/65] New Crowdin updates (#2808) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Russian) * New translations strings.xml (Swedish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Swedish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Russian) * New translations strings.xml (Swedish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations protection.xml (Hungarian) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Swedish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Croatian) * New translations strings.xml (Croatian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * New translations strings.xml (Ukrainian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Croatian) * New translations strings.xml (Serbian (Latin)) * Update source file strings.xml * Update source file strings.xml --- .../src/main/res/values-af-rZA/strings.xml | 22 +++++ .../src/main/res/values-bg-rBG/strings.xml | 89 ++++++++++++++++++ .../src/main/res/values-ca-rES/strings.xml | 36 ++++++++ .../src/main/res/values-cs-rCZ/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-da-rDK/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-de-rDE/strings.xml | 89 ++++++++++++++++++ .../src/main/res/values-el-rGR/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-es-rES/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-fr-rFR/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-hr-rHR/strings.xml | 57 ++++++++++++ .../src/main/res/values-hu-rHU/strings.xml | 76 +++++++++++++++ .../src/main/res/values-it-rIT/strings.xml | 90 ++++++++++++++++++ .../src/main/res/values-iw-rIL/strings.xml | 88 ++++++++++++++++++ .../src/main/res/values-ko-rKR/strings.xml | 89 ++++++++++++++++++ .../src/main/res/values-lt-rLT/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-nl-rNL/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-no-rNO/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-pl-rPL/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-pt-rBR/strings.xml | 56 +++++++++++ .../src/main/res/values-pt-rPT/strings.xml | 88 ++++++++++++++++++ .../src/main/res/values-ro-rRO/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-ru-rRU/strings.xml | 91 ++++++++++++++++++ .../src/main/res/values-sk-rSK/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-sr-rCS/strings.xml | 17 ++++ .../src/main/res/values-sv-rSE/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-tr-rTR/strings.xml | 92 +++++++++++++++++++ .../src/main/res/values-uk-rUA/strings.xml | 88 ++++++++++++++++++ .../src/main/res/values-zh-rCN/strings.xml | 69 ++++++++++++++ .../src/main/res/values-bg-rBG/strings.xml | 5 + .../src/main/res/values-ca-rES/strings.xml | 4 +- .../src/main/res/values-cs-rCZ/strings.xml | 5 + .../src/main/res/values-da-rDK/strings.xml | 5 + .../src/main/res/values-de-rDE/strings.xml | 9 +- .../src/main/res/values-el-rGR/strings.xml | 5 + .../src/main/res/values-es-rES/strings.xml | 5 + .../src/main/res/values-fr-rFR/strings.xml | 5 + .../src/main/res/values-hr-rHR/strings.xml | 6 +- .../src/main/res/values-hu-rHU/strings.xml | 9 +- .../src/main/res/values-it-rIT/strings.xml | 9 +- .../src/main/res/values-iw-rIL/strings.xml | 5 + .../src/main/res/values-ko-rKR/strings.xml | 9 +- .../src/main/res/values-lt-rLT/strings.xml | 5 + .../src/main/res/values-nl-rNL/strings.xml | 5 + .../src/main/res/values-no-rNO/strings.xml | 5 + .../src/main/res/values-pl-rPL/strings.xml | 5 + .../src/main/res/values-pt-rBR/strings.xml | 9 +- .../src/main/res/values-pt-rPT/strings.xml | 9 +- .../src/main/res/values-ro-rRO/strings.xml | 8 +- .../src/main/res/values-ru-rRU/strings.xml | 5 + .../src/main/res/values-sk-rSK/strings.xml | 5 + .../src/main/res/values-sr-rCS/strings.xml | 5 +- .../src/main/res/values-sv-rSE/strings.xml | 5 + .../src/main/res/values-tr-rTR/strings.xml | 5 + .../src/main/res/values-uk-rUA/strings.xml | 8 +- .../src/main/res/values-zh-rCN/strings.xml | 5 + .../ui/src/main/res/values-af-rZA/strings.xml | 7 ++ .../ui/src/main/res/values-bg-rBG/strings.xml | 14 +++ .../ui/src/main/res/values-ca-rES/strings.xml | 15 +++ .../ui/src/main/res/values-de-rDE/strings.xml | 14 +++ .../ui/src/main/res/values-hr-rHR/strings.xml | 9 ++ .../src/main/res/values-hu-rHU/protection.xml | 7 +- .../ui/src/main/res/values-hu-rHU/strings.xml | 8 ++ .../ui/src/main/res/values-it-rIT/strings.xml | 13 +++ .../ui/src/main/res/values-iw-rIL/strings.xml | 2 + .../ui/src/main/res/values-ko-rKR/strings.xml | 13 +++ .../ui/src/main/res/values-pt-rBR/strings.xml | 13 +++ .../ui/src/main/res/values-pt-rPT/strings.xml | 15 +++ .../ui/src/main/res/values-ru-rRU/strings.xml | 14 +++ .../ui/src/main/res/values-sr-rCS/strings.xml | 3 + .../ui/src/main/res/values-sv-rSE/strings.xml | 1 + .../ui/src/main/res/values-uk-rUA/strings.xml | 1 + .../ui/src/main/res/values-zh-rCN/strings.xml | 13 +++ .../src/main/res/values-bg-rBG/strings.xml | 10 ++ .../src/main/res/values-ca-rES/strings.xml | 10 ++ .../src/main/res/values-de-rDE/strings.xml | 10 ++ .../src/main/res/values-el-rGR/strings.xml | 10 ++ .../src/main/res/values-hu-rHU/strings.xml | 14 +++ .../src/main/res/values-it-rIT/strings.xml | 10 ++ .../src/main/res/values-ko-rKR/strings.xml | 10 ++ .../src/main/res/values-lt-rLT/strings.xml | 10 ++ .../src/main/res/values-pt-rBR/strings.xml | 10 ++ .../src/main/res/values-ru-rRU/strings.xml | 10 ++ .../src/main/res/values-sv-rSE/strings.xml | 10 ++ .../src/main/res/values-uk-rUA/strings.xml | 11 +++ .../src/main/res/values-zh-rCN/strings.xml | 9 ++ .../src/main/res/values-af-rZA/strings.xml | 7 ++ .../src/main/res/values-bg-rBG/strings.xml | 8 ++ .../src/main/res/values-ca-rES/strings.xml | 7 ++ .../src/main/res/values-de-rDE/strings.xml | 8 ++ .../src/main/res/values-el-rGR/strings.xml | 8 ++ .../src/main/res/values-hr-rHR/strings.xml | 1 + .../src/main/res/values-hu-rHU/strings.xml | 8 ++ .../src/main/res/values-it-rIT/strings.xml | 8 ++ .../src/main/res/values-iw-rIL/strings.xml | 2 + .../src/main/res/values-ko-rKR/strings.xml | 8 ++ .../src/main/res/values-lt-rLT/strings.xml | 8 ++ .../src/main/res/values-pt-rBR/strings.xml | 8 ++ .../src/main/res/values-ru-rRU/strings.xml | 8 ++ .../src/main/res/values-sv-rSE/strings.xml | 8 ++ .../src/main/res/values-zh-rCN/strings.xml | 4 + .../src/main/res/values-af-rZA/strings.xml | 1 + .../src/main/res/values-bg-rBG/strings.xml | 1 + .../src/main/res/values-ca-rES/strings.xml | 1 + .../src/main/res/values-de-rDE/strings.xml | 1 + .../src/main/res/values-hu-rHU/strings.xml | 1 + .../src/main/res/values-it-rIT/strings.xml | 1 + .../src/main/res/values-iw-rIL/strings.xml | 1 + .../src/main/res/values-ko-rKR/strings.xml | 1 + .../src/main/res/values-pt-rBR/strings.xml | 1 + .../src/main/res/values-pt-rPT/strings.xml | 1 + .../src/main/res/values-ru-rRU/strings.xml | 1 + .../src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values-uk-rUA/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 1 + 114 files changed, 2805 insertions(+), 12 deletions(-) diff --git a/core/interfaces/src/main/res/values-af-rZA/strings.xml b/core/interfaces/src/main/res/values-af-rZA/strings.xml index 7cf1037ec1..287559a98b 100644 --- a/core/interfaces/src/main/res/values-af-rZA/strings.xml +++ b/core/interfaces/src/main/res/values-af-rZA/strings.xml @@ -1,4 +1,26 @@ + + h + dae + ure + sekonde + minuut + uur + dag + week + sekondes + minute + ure + dae + weke + m + d + + Koppel vir %1$d s + Handskudding + Gekoppel + Ontkoppel + diff --git a/core/interfaces/src/main/res/values-bg-rBG/strings.xml b/core/interfaces/src/main/res/values-bg-rBG/strings.xml index d67e7da2fb..ca2c3e1237 100644 --- a/core/interfaces/src/main/res/values-bg-rBG/strings.xml +++ b/core/interfaces/src/main/res/values-bg-rBG/strings.xml @@ -2,4 +2,93 @@ Драйверът на помпата е променен. + + преди %1$d мин + Преди %1$d минути + преди %1$.1f ч + преди %1$.1f дни + преди %1$.0f дни + за %1$.0f дни + за %1$.0f дни + ч + дни + часа + секунда + минута + час + ден + седмица + секунди + минути + часове + дни + седмици + м + д + По-късно днес + Утре + Днес + Вчера + + Свързване %1$d сек + Сдвояване + Свързана + Разкачане + Изчакване за разкачане + + Създадено: %1$s + Автор: %1$s + Име: %1$s + Име на файла: %1$s + Plugin версия: %1$s + Име: %1$s (%2$s) + Покажи IOB + Покажи подробен IOB + Покажи COB + Покажи Делта + Показвай подробна делта + Покажи средна делта + Покажи батерия на телефон + Покажи батерия на устройство + Покажи базал + Покажи Loop Статус + Покажи КЗ + Покажи BGI + Покажи делта стрелка + Покажи \"преди\" + Watchface по подразбиране, можете да изберете бутон ЕКСПОРТИРАНЕ НА WATCHFACE за създаване на шаблон + Watchface по подразбиране + Фоново изображение + Графики (КЗ, базал, прогнозни криви...) + Изображение над графика и под текстови полета + Свободен текст 1 + Свободен текст 2 + Свободен текст 3 + Свободен текст 4 + IOB надпис или IOB Общо (при подробен IOB) + IOB Общо или (Bolus_IOB|Basal_IOB) при подробен IOB + COB надпис + COB стойност + Краткоср. Δ + Средна делта (15мин) + Батерия на телефона (%) + Global loop батерия (%) + Базал + BGI стойност + Време (ЧЧ:MM или ЧЧ:MM:СС) + Час (ЧЧ) + Минути (MM) + Секунди (СС) + AM или PM + Ден от седмицата + Ден (ДД) + Месец (кратко) + Loop статус и \"преди\" + Делта стрелка + Последно получена КЗ преди минути + КЗ стойност + Изображение над текст (циферблат...) + Изображение на стрелка за часове (Аналогов часовник) + Изображение на стрелка за минути (Аналогов часовник) + Изображение на стрелка за секунди (Аналогов часовник) diff --git a/core/interfaces/src/main/res/values-ca-rES/strings.xml b/core/interfaces/src/main/res/values-ca-rES/strings.xml index 7cf1037ec1..3b64ee8c5e 100644 --- a/core/interfaces/src/main/res/values-ca-rES/strings.xml +++ b/core/interfaces/src/main/res/values-ca-rES/strings.xml @@ -1,4 +1,40 @@ + + Fa %1$d m + Fa %1$.1f h + h + dies + hores + segon + minut + hora + dia + setmana + segons + minuts + hores + dies + setmanes + m + d + + Connectant %1$d s + Establint comunicació + Connectat + Desconnectant + S\'està esperant la desconnexió + + Mostrar IOB + Mostrar COB + Mostrar delta + Mostrar delta promig + Mostrar bateria telèfon + Mostrar bateria rig + Mostrar basal + Mostrar estat llaç + Mostrar glucèmia + Mostrar fletxa direcció + Mostrar històric diff --git a/core/interfaces/src/main/res/values-cs-rCZ/strings.xml b/core/interfaces/src/main/res/values-cs-rCZ/strings.xml index e8b585edd8..319ab6e24f 100644 --- a/core/interfaces/src/main/res/values-cs-rCZ/strings.xml +++ b/core/interfaces/src/main/res/values-cs-rCZ/strings.xml @@ -2,4 +2,96 @@ Změněn ovladač pumpy. + + před %1$d min + před %1$d minutamí + před %1$.1f h + Před %1$.1f dny + Před %1$.0f dny + za %1$.0f dní + za %1$.0f dní + h + dnů + hodin + sekund + minut + hodina + den + týden + sekund + minut + hodin + dní + týdnů + m + d + Později během dneška + Zítra + Dnes + Včera + + Připojování %1$d sec + Navazování spojení + Připojeno + Odpojuji + Čekám na odpojení + + Vytvořeno: %1$s + Autor: %1$s + Jméno %1$s + Název souboru: %1$s + Verze pluginu: %1$s + Jméno: %1$s (%2$s) + Informace: %1$s + Zobrazit IOB + Zobrazit detailní IOB + Zobrazit COB + Zobrazit deltu + Zobrazit detailní deltu + Zobrazit průměrnou deltu + Zobrazit stav baterie telefonu + Zobrazit stav baterie dalších zařízení + Zobrazit bazál + Zobrazit stav smyčky + Zobrazit glykémii + Zobrazit BGI + Zobrazit trendovou šipku + Zobrazit aktualizováno před + Zobrazit číslo týdne + Výchozí ciferník. Můžete kliknout na tlačítko EXPORTOVAT CIFERNÍK pro vygenerování šablony + Výchozí ciferník + Tapeta + Grafy (glykémie, bazály, křivky předpovědí...) + Obrázek před grafem a za textovými poli + Volný text 1 + Volný text 2 + Volný text 3 + Volný text 4 + Štítek IOB nebo suma IOB při zapnutých detailech + Suma IOB nebo (Bolus_IOB|Basal_IOB) při zapnutých detailech + Štítek COB + Hodnota COB + Krátkodobý průměr + Průměrný rozdíl glykémií (15min) + Baterie telefonu (%) + Baterie smyčky (%) + Bazální dávka + Hodnota BGI + Čas (HH:MM nebo HH:MM:SS) + Hodiny (HH) + Minuty (MM) + Sekundy (SS) + AM nebo PM + Jméno dne v týdnu + Den (DD) + Číslo týdne (ww) + Název měsíce (krátký) + Stav smyčky a čas + Trendová šipka + Před minutami pro poslední přijaté glykémie + Hodnota glykémie + Úvodní obrázek před textem (vytáčení...) + Obrázek hodinové ručičky (Analogové hodinky) + Obrázek minutové ručičky (Analogové hodinky) + Obrázek druhé ručičky (Analogové hodinky) diff --git a/core/interfaces/src/main/res/values-da-rDK/strings.xml b/core/interfaces/src/main/res/values-da-rDK/strings.xml index 849acfb10a..aa7ce81f05 100644 --- a/core/interfaces/src/main/res/values-da-rDK/strings.xml +++ b/core/interfaces/src/main/res/values-da-rDK/strings.xml @@ -2,4 +2,96 @@ Pumpe driver ændret. + + %1$d min. siden + %1$d minutter siden + %1$.1f t siden + %1$.1f dage siden + %1$.0f dage siden + om %1$.0f dage + om %1$.0f dage + t + dage + timer + sekund + minut + time + dag + uge + sekunder + minutter + timer + dage + uger + min + d + Senere i dag + I morgen + I dag + I går + + Opretter forbindelse i %1$d s + Forbindelse verificeres + Tilsuttet + Afbryder + Venter på afbrydelse + + Oprettet den: %1$s + Forfatter: %1$s + Navn: %1$s + Filnavn: %1$s + Plugin version: %1$s + Navn: %1$s (%2$s) + Oplysning: %1$s + Vis IOB + Vis detaljeret IOB + Vis COB + Vis Delta + Vis detaljeret Delta + Show GnsDelta + Vis Telefonbatteri + Vis Rig-batteri + Vis Basalrate + Vis Loop-status + Vis BS + Vis BSI + Vis Retningspil + Vis alder + Vis ugenummer + Standard urskive, du kan klikke på EKSPORTÉR URSKIVE-knappen for at generere en skabelon + Standard Urskive + Baggrundsbillede + Grafer (BS, basal, prognoselinjer...) + Billede foran graf og bag tekstfelter + Fritekst 1 + Fri tekst 2 + Fri tekst 3 + Fri tekst 4 + IOB-etiket eller IOB-sum, hvis givet + IOB-sum eller (Bolus_IOB|Basal_IOB) hvis givet + COB-etiket + COB-værdi + Kort BG-delta + Gennemsnitlig BG-delta (15min) + Telefonbatteri (%) + Globalt loop batteri (%) + Basalrate + BGI-værdi + Tid (TT:MM eller TT:MM:SS) + Time (TT) + Minut (MM) + Sekund (SS) + AM eller PM + Navn på ugedag + Dag (DD) + Ugenummer (uu) + Måned navn (kort) + Loop status og tid + Retningspil + Minutter siden sidst modtaget BS + BS-værdi + Dækbillede foran tekst (opkald...) + Billede af timeviser (Analogur) + Billede af minutviser (Analogur) + Billede af sekundviser (Analogur) diff --git a/core/interfaces/src/main/res/values-de-rDE/strings.xml b/core/interfaces/src/main/res/values-de-rDE/strings.xml index ef2e06257e..182bac5de9 100644 --- a/core/interfaces/src/main/res/values-de-rDE/strings.xml +++ b/core/interfaces/src/main/res/values-de-rDE/strings.xml @@ -2,4 +2,93 @@ Pumpentreiber geändert. + + vor %1$d Min. + vor %1$d Minuten + vor %1$.1f Stunde + vor %1$.1f Tagen + vor %1$.0f Tagen + in %1$.0f Tagen + in %1$.0f Tagen + s + Tage + Stunden + Sekunde + Minute + Stunde + Tag + Woche + Sekunden + Minuten + Stunden + Tage + Wochen + m + d + Später heute + Morgen + Heute + Gestern + + Verbindungsaufbau seit %1$d s + Handshaking + Verbunden + Verbindung wird getrennt + Warte auf Trennung der Verbindung + + Erstellt am: %1$s + Autor: %1$s + Name: %1$s + Dateiname: %1$s + Plugin-Version: %1$s + Name: %1$s (%2$s) + IOB anzeigen + Zeige detailliertes IOB + COB anzeigen + Abweichung anzeigen + Zeige detailliertes Delta + Durchschnittl. Abweichung anzeigen + Akkustand Smartphone + Akkustand Rig + Basalrate anzeigen + Loop Status anzeigen + BZ anzeigen + Zeige BGI + Trendpfeil anzeigen + Min. seit letztem Wert + Standard-Watchface, Du kannst auf den Knopf WATCHFACE exportieren drücken, um eine Vorlage zu generieren + Standard-Watchface + Hintergrundbild + Diagramme (BG, Basal, Vorhersage...) + Bild vor Graph und hinter Textfeldern + Freitextfeld 1 + Freitextfeld 2 + Freitextfeld 3 + Freitextfeld 4 + IOB Bezeichnung oder IOB Sum wenn detailliert + IOB-Summe oder (Bolus_IOB|Basal_IOB) wenn detailliert + COB-Bezeichnung + COB-Wert + Kurzes BG Delta + Durchschnittliches BG-Delta (15min) + Telefon-Akku (%) + Globale Loop Akku (%) + Basalrate + BGI-Wert + Uhrzeit (HH:MM oder HH:MM:SS) + Stunde (HH) + Minuten (MM) + Sekunde (SS) + AM oder PM + Wochentagname + Tag (DD) + Monatsname (kurz) + Loop-Status und Historie + Richtungspfeil + Minuten vor dem letzten erhaltenen BG + Blutzuckerwert + Titelbild vor dem Text (wählen...) + Bild des Stundenzeiger (Analog Uhr) + Bild des Minutenzeiger (Analog Uhr) + Bild des Sekundenzeigers (Analog Uhr) diff --git a/core/interfaces/src/main/res/values-el-rGR/strings.xml b/core/interfaces/src/main/res/values-el-rGR/strings.xml index f5467546f1..92031c9dfd 100644 --- a/core/interfaces/src/main/res/values-el-rGR/strings.xml +++ b/core/interfaces/src/main/res/values-el-rGR/strings.xml @@ -2,4 +2,96 @@ Ο οδηγός της αντλίας άλλαξε. + + %1$d λ πριν + %1$d λεπτά πριν + %1$.1f ω πριν + %1$.1f ημέρες πριν + %1$.0f ημέρες πριν + σε %1$.0f ημέρες + σε %1$.0f ημέρες + h + ημέρες + ώρες + δευτερόλεπτο + λεπτό + ώρα + ημέρα + εβδομάδα + δευτερόλεπτα + λεπτά + ώρες + ημέρες + εβδομάδες + m + ημ + Αργότερα σήμερα + Αύριο + Σήμερα + Χθες + + Σύνδεση για %1$d δευτερόλεπτα + Δημιουργία σύνδεσης + Συνδέθηκε + Αποσυνδέεται + Αναμονή για αποσύνδεση + + Δημιουργήθηκε: %1$s + Συντάκτης: %1$s + Όνομα: %1$s + Όνομα αρχείου: %1$s + Έκδοση πρόσθετου: %1$s + Όνομα: %1$s (%2$s) + Πληροφορίες: %1$s + Εμφάνιση IOB + Εμφάνιση λεπτομερούς IOB + Εμφάνιση COB + Εμφάνιση Διαφοράς + Εμφάνιση λεπτομερούς Διαφοράς + Εμφάνιση Μέσης Διαφοράς + Εμφάνιση Μπαταρίας Τηλεφώνου + Εμφάνιση Μπαταρίας Rig + Εμφάνιση Βασικού Ρυθμού + Εμφάνιση Κατάστασης Κυκλώματος + Εμφάνιση γλυκόζης αίματος + Εμφάνιση BGI + Εμφάνιση Βέλους Κατεύθυνσης + Εμφάνιση Πριν + Εμφάνιση αριθμού Εβδομάδας + Προεπιλεγμένη πρόσοψη ρολογιού, μπορείτε να κάνετε κλικ στο κουμπί ΕΞΑΓΩΓΗ ΠΡΟΣΟΨΗΣ για να δημιουργήσετε ένα πρότυπο + Προεπιλεγμένη πρόσοψη ρολογιού + Εικόνα φόντου + Γραφήματα (BG, βασικός, γραμμές πρόβλεψης...) + Εικόνα μπροστά από το γράφημα και πίσω από τα πεδία κειμένου + Ελεύθερο κείμενο 1 + Ελεύθερο κείμενο 2 + Ελεύθερο κείμενο 3 + Ελεύθερο κείμενο 4 + Ετικέτα IOB ή Άθροισμα IOB εάν είναι λεπτομερές + Άθροισμα IOB ή (Bolus_IOB|Basal_IOB) εάν είναι λεπτομερές + Ετικέτα COB + Τιμή COB + Βραχυπρόθεσμη διαφορά BG + Μέση διαφορά BG (15λεπτά) + Μπαταρία τηλεφώνου (%) + Μπαταρία συνολικού κυκλώματος (%) + Βασικός Ρυθμός + Τιμή BGI + Ώρα (ΩΩ:ΛΛ ή ΩΩ:ΜΜ:ΣΣ) + Ώρα (HH) + Λεπτό (MM) + Δευτερόλεπτο (SS) + ΠΜ ή ΜΜ + Όνομα της ημέρας της εβδομάδας + Ημέρα (DD) + Αριθμός Εβδομάδας (ww) + Όνομα μήνα (σύντομο) + Κατάσταση κυκλώματος και πριν + Βέλος κατεύθυνσης + Λεπτά πριν από την τελευταία λήψη BG + Τιμή γλυκόζης αίματος + Εικόνα εξωφύλλου μπροστά από το κείμενο (κλήσεις...) + Εικόνα ώρας χεριού (Αναλογικό ρολόι) + Εικόνα λεπτού χεριού (Αναλογικό ρολόι) + Εικόνα δευτερολέπτου χεριού (Αναλογικό ρολόι) diff --git a/core/interfaces/src/main/res/values-es-rES/strings.xml b/core/interfaces/src/main/res/values-es-rES/strings.xml index 291b09fa68..ae10c6672e 100644 --- a/core/interfaces/src/main/res/values-es-rES/strings.xml +++ b/core/interfaces/src/main/res/values-es-rES/strings.xml @@ -2,4 +2,96 @@ Controlador de bomba cambiado + + hace %1$d m + Hace %1$d minutos + hace %1$.1f h + Hace %1$.1f día + Hace %1$.0f días + en %1$.0f días + en %1$.0f días + h + días + horas + segundo + minuto + hora + día + semana + segundos + minutos + horas + días + semanas + m + d + Más tarde hoy + Mañana + Hoy + Ayer + + Conectando durante %1$d s + Estableciendo comunicación + Conectado + Desconectando + Esperando para desconectarse + + Creada: %1$s + Autor: %1$s + Nombre: %1$s + Nombre del archivo: %1$s + Versión del plugin: %1$s + Nombre: %1$s (%2$s) + Info: %1$s + Mostrar IOB + Mostrar IOB detallada + Mostrar COB + Mostrar delta + Mostrar delta detallado + Mostrar delta promedio + Mostrar batería del teléfono + Mostrar batería global del bucle + Mostrar la tasa basal + Mostrar estado del bucle + Mostrar glucosa + Mostrar BGI (Índice de glucosa en sangre) + Mostrar flecha de dirección + Mostrar \"hace\" + Mostrar número de semana + Esfera predeterminada, puedes hacer clic en el botón EXPORTAR ESFERA para generar una plantilla + Esfera por defecto + Imagen de fondo + Gráficos (glucosa, basal, líneas de predicción...) + Imagen frente al gráfico y detrás de campos de texto + Texto libre 1 + Texto libre 2 + Texto libre 3 + Texto libre 4 + Etiqueta IOB o Suma IOB si es detallada + Suma de IOB o (Bolos_IOB|Basal_IOB) si se detalla + Etiqueta COB + Valor COB + Delta corto de glucosa + Delta promedio de glucosa (15min) + Batería del teléfono (%) + Batería global de bucle(%) + Tasa Basal + Valor BGI + Tiempo (HH:MM o HH:MM:SS) + Hora (HH) + Minuto (MM) + Segundo (SS) + AM o PM + Nombre del día de la semana + Día (DD) + Número de semana (ww) + Nombre del mes (corto) + Estado del bucle y hace + Flecha de dirección + Minutos atrás del último valor de glucosa recibido + Valor de glucosa + Imagen de portada delante del texto (diales...) + Imagen de la aguja horaria (reloj analógico) + Imagen del minutero (reloj analógico) + Imagen del segundero (reloj analógico) diff --git a/core/interfaces/src/main/res/values-fr-rFR/strings.xml b/core/interfaces/src/main/res/values-fr-rFR/strings.xml index 0b4b8c7d04..f7aab2d49b 100644 --- a/core/interfaces/src/main/res/values-fr-rFR/strings.xml +++ b/core/interfaces/src/main/res/values-fr-rFR/strings.xml @@ -2,4 +2,96 @@ Pilote pompe changé. + + il y a %1$d m + Il y a %1$d minutes + il y a %1$.1f h + Il y a %1$.1f jours + Il y a %1$.0f jours + en %1$.0f jours + en %1$.0f jours + h + jours + heures + seconde + minute + heure + jour + semaine + secondes + minutes + heures + jours + semaines + m + j + Plus tard aujourd\'hui + Demain + Aujourd’hui + Hier + + Connexion en cours %1$ds + Connexion + Connectée + Déconnexion en cours + Attente de déconnexion + + Créé le : %1$s + Auteur : %1$s + Nom : %1$s + Nom du fichier : %1$s + Version du plugin : %1$s + Nom : %1$s (%2$s) + Infos : %1$s + Afficher IA + Afficher IA détaillée + Afficher GA + Montrer le delta + Afficher Delta Détaillé + Afficher le delta moyen + Afficher la batterie du téléphone + Afficher la batterie de la plateforme + Afficher Basale + Afficher l\'état de la boucle + Afficher la glycémie + Afficher IGly + Afficher Flèche + Afficher Min Passées + Afficher numéro semaine + Cadran par défaut, vous pouvez cliquer sur le bouton EXPORTER WATCHFACE pour générer un modèle + Cadran par défaut + Image d\'arrière-plan + Graphiques (Gly, basal, lignes de prédiction...) + Image devant le graphique et derrière les champs de texte + Texte libre 1 + Texte libre 2 + Texte libre 3 + Texte libre 4 + Libellé \"IA\" ou valeur IA globale si détaillé Ok + Valeur IA globale ou (IA_Bolus|IA_Basal) si détaillé Ok + Libellé \"GA\" + Valeur de GA + Delta Glycémie (5min) + Delta glycémie moyen (15min) + Batterie du téléphone (%) + Batterie de la boucle globale (%) + Débit Basal + Valeur de IGly + Heure (HH:MM ou HH:MM:SS) + Heure (HH) + Minute (MM) + Seconde (SS) + AM ou PM + Nom du jour de la semaine + Jour (JJ) + Numéro de semaine (ww) + Nom du mois (court) + État de la boucle et délais + Flèche de direction + Minutes depuis la dernière Glycémie reçue + Valeur de Ia Gly + Image de couverture devant le texte (cadrans...) + Image de l\'aiģuille de l\'heure (Montre Analogique) + Image de l\'aiguille des minutes (Montre Analogique) + Image de l\'aiguille des secondes (Montre Analogique) diff --git a/core/interfaces/src/main/res/values-hr-rHR/strings.xml b/core/interfaces/src/main/res/values-hr-rHR/strings.xml index 7cf1037ec1..bc2eb2358c 100644 --- a/core/interfaces/src/main/res/values-hr-rHR/strings.xml +++ b/core/interfaces/src/main/res/values-hr-rHR/strings.xml @@ -1,4 +1,61 @@ + + Prije %1$.1f dana + Prije %1$.0f dana + Danas + + Povezivanje %1$d s + Povezivanje + Povezano + Odspajanje + Čeka se prekid veze + + Prikaži aktivni inzulin + Prikaži detaljan aktivni inzulin + Prikaži aktivne ugljikohidrate + Prikaži Deltu + Prikaži detaljnu Deltu + Prikaži prosječnu Deltu + Prikaži bateriju telefona + Prikaži bateriju Rig-a + Prikaži bazalnu dozu + Prikaži status Loopa + Prikaži glukozu u krvi + Prikaži utjecaj glukoze u krvi + Prikaži strelicu smjera + Prikaži prije + Pozadinska slika + Grafikoni (BG, bazal, linije predviđanja...) + Slika ispred grafikona i iza tekstualnih polja + Slobodan tekst 1 + Slobodan tekst 2 + Slobodan tekst 3 + Slobodan tekst 4 + IOB oznaka ili IOB zbroj ako je detaljno + IOB Sum ili (Bolus_IOB|Basal_IOB) ako je detaljno navedeno + Oznaka COB + Vrijednost COB + Kratka BG delta + Prosječna BG delta (15 min) + Baterija telefona (%) + Globalna petlja baterija (%) + Bazalna stopa + BGI vrijednost + Vrijeme (HH:MM ili HH:MM:SS) + Sat (HH) + Minuta (MM) + Sekunda (SS) + AM or PM + Naziv dana u tjednu + Dan (DD) + Ime mjeseca (kratko) + Status petlje i vrijeme + Strelica smjera + Prije nekoliko minuta za zadnji primljeni BG + BG vrijednost + Slika satne kazaljke (analogni sat) + Slika kazaljke za minute (analogni sat) + Slika druge kazaljke (analogni sat) diff --git a/core/interfaces/src/main/res/values-hu-rHU/strings.xml b/core/interfaces/src/main/res/values-hu-rHU/strings.xml index 7cf1037ec1..11eea447dc 100644 --- a/core/interfaces/src/main/res/values-hu-rHU/strings.xml +++ b/core/interfaces/src/main/res/values-hu-rHU/strings.xml @@ -1,4 +1,80 @@ + + %1$d perce + %1$d perccel ezelőtt + %1$.1f órája + %1$.1f napja + %1$.0f napja + %1$.0f napon belül + %1$.0f napon belül + ó + nap + óra + másodperc + perc + óra + nap + hét + másodperc + perc + óra + nap + hét + p + n + Később még ma + Holnap + Ma + Tegnap + + Csatlakozás %1$d másodpercig + Összekapcsolódás + Kapcsolódva + Kapcsolat bontása + Várakozás a kapcsolat bontására + + Létrehozva ekkor: %1$s + Szerző: %1$s + Név: %1$s + Fájl név: %1$s + Plugin verzió: %1$s + Név: %1$s (%2$s) + IOB megjelenítése + Részletes IOB mutatása + COB megjelenítése + Különbség megjelenítése + Részletes különbség megjelenítése + Átlagos különbség megjelenítése + Telefon akkumulátor állapot megjelenítése + Rig akkumulátor állapot megjelenítése + Bázisütem megjelenítése + Loop állapot megjelenítése + VC megjelenítése + BGI megjelenítése + Trend nyíl megjelenítése + Háttérkép + Szabad szöveg 1 + Szabad szöveg 2 + Szabad szöveg 3 + Szabad szöveg 4 + COB érték + Telefon akkumulátor (%) + Globális loop akkumulátor (%) + Bázisütem + BGI érték + Idő (HH:MM vagy HH:MM:SS) + Óra (HH) + Perc (MM) + Másodperc (SS) + AM vagy PM + A hét napjának a neve + Nap (DD) + Hónap neve (rövid) + Trend nyíl + VC érték + Óramutató képe (Analóg Óra) + Percmutató képe (Analóg Óra) + Pásodperc mutató képe (Analóg Óra) diff --git a/core/interfaces/src/main/res/values-it-rIT/strings.xml b/core/interfaces/src/main/res/values-it-rIT/strings.xml index deddc4ce22..2033fbf949 100644 --- a/core/interfaces/src/main/res/values-it-rIT/strings.xml +++ b/core/interfaces/src/main/res/values-it-rIT/strings.xml @@ -2,4 +2,94 @@ Driver micro cambiato. + + %1$d m fa + %1$d minuti fa + %1$.1f h fa + %1$.1f giorni fa + %1$.0f giorni fa + in %1$.0f giorni + in %1$.0f giorni + h + giorni + ore + secondi + minuti + ora + giorno + settimana + secondi + minuti + ore + giorni + settimane + m + d + Più tardì oggi + Domani + Oggi + Ieri + + In connessione per %1$d s + Connessione + Connesso + Disconnessione + In attesa della disconnessione + + Creato: %1$s + Autore: %1$s + Nome: %1$s + Nome file: %1$s + Versione plugin: %1$s + Nome: %1$s (%2$s) + Info: %1$s + Mostra IOB + Mostra IOB dettagliato + Mostra COB + Mostra delta + Mostra delta dettagliato + Mostra delta medio + Mostra batteria telefono + Mostra batteria rig + Mostra velocità basale + Mostra stato loop + Mostra BG + Mostra BGI + Mostra frecce direzionali + Mostra Indietro + Watchface predefinita, puoi fare click sul tasto ESPORTA WATCHFACE per generare un template + Watchface predefinita + Immagine sfondo + Grafici (BG, basale, linee di previsione...) + Immagine davanti al grafico e dietro i campi di testo + Testo libero 1 + Testo libero 2 + Testo libero 3 + Testo libero 4 + Etichetta IOB o somma IOB se in dettaglio + Somma IOB o (Bolo_IOB|Basale_IOB) se in dettaglio + Etichetta COB + Valore COB + Delta BG breve + Delta BG medio (15min) + Batteria telefono (%) + Batteria globale loop (%) + Velocità basale + Valore BGI + Tempo (HH:MM o HH:MM:SS) + Ora (HH) + Minuto (MM) + Secondo (SS) + AM o PM + Nome del giorno della settimana + Giorno (DD) + Nome del mese (breve) + Stato loop e indietro + Freccia direzionale + Minuti addietro per l\'ultimo valore BG ricevuto + Valore BG + Immagine di copertina davanti al testo (quadranti...) + Immagine lancetta ore (orologio analogico) + Immagine lancetta minuti (orologio analogico) + Immagine lancetta secondi (orologio analogico) diff --git a/core/interfaces/src/main/res/values-iw-rIL/strings.xml b/core/interfaces/src/main/res/values-iw-rIL/strings.xml index bb142473df..93ccb4096c 100644 --- a/core/interfaces/src/main/res/values-iw-rIL/strings.xml +++ b/core/interfaces/src/main/res/values-iw-rIL/strings.xml @@ -2,4 +2,92 @@ מנהל התקן המשאבה שונה. + + לפני %1$d דקות + לפני %1$d דקות + לפני %1$.1f שעות + לפני %1$.1f ימים + לפני %1$.0f ימים + בעוד %1$.0f ימים + בעוד %1$.0f ימים + ש\' + ימים + שעות + שניה + דקה + שעה + יום + שבוע + שניות + דקות + שעות + ימים + שבועות + דק\' + י\' + מאוחר יותר היום + מחר + היום + אתמול + + חיבור אל %1$s + לוחץ יד + מחובר + מתנתק + ממתין לניתוק + + נוצר ב: %1$s + יוצר/ת: %1$s + שם: %1$s + שם קובץ: %1$s + גרסת פלאגין: %1$s + שם: %1$s (%2$s) + הצג אינסולין פעיל + הצגת אינס\' פעיל מפורט + הצג פח\' פעילות + הצג דלתא + הצג דלתא מפורטת + הצג דלתא ממוצעת + הצג את סוללת הטלפון + הצג סוללת ריג + הצג מינון בזאלי + הצג סטטוס לולאה + הצג רמת סוכר + הצג השפעת רמת הסוכר + הצג חץ מגמה + הצג עבר + הצג מספר שבוע + ברירת המחדל של פני השעון, ניתן ללחוץ על כפתור ייצוא פני שעון כדי ליצור תבנית + ברירת מחדל פני שעון + תמונת רקע + גרפים (רמת הסוכר בדם, בזאלי, קווי תחזיות...) + תמונה בחזית הגרף ומאחורי שדות הטקסט + טקסט חופשי 1 + טקסט חופשי 2 + טקסט חופשי 3 + טקסט חופשי 4 + תווית האינסולין הפעיל או סכום האינסולין הפעיל אם מפורט + סכום אינסולין פעיל או (בולוס פעיל|באזל פעיל) אם מפורט + תווית הפחמימות הפעילות + ערך הפחמימות הפעילות + הדלתא (שינוי) של רמת הסוכר בדם, טווח קצר + הדלתא (שינוי) הממוצע בטווח של 15 דק של רמת הסוכר בדם + סוללת הטלפון (%) + בטריית לופ גלובאלי (%) + קצב בזלי + השפעת רמת הסוכר בדם + זמן (שעות:דקות או שעות:דקות:שניות) + שעה (HH) + דקה (MM) + שניה (SS) + AM או PM + היום בשבוע (שם) + יום (DD) + שם החודש (קצר) + חץ מגמה + הדקות שעברו מאז התקבל הערך האחרון של רמת הסוכר בדם + רמת הסוכר בדם + תמונה של חוגת השעות (שעון אנולוגי) + תמונה של חוגת הדקות (שעון אנולוגי) + תמונה של חוגת השניות (שעון אנולוגי) diff --git a/core/interfaces/src/main/res/values-ko-rKR/strings.xml b/core/interfaces/src/main/res/values-ko-rKR/strings.xml index 328d8edf38..4a9f9cc4ba 100644 --- a/core/interfaces/src/main/res/values-ko-rKR/strings.xml +++ b/core/interfaces/src/main/res/values-ko-rKR/strings.xml @@ -2,4 +2,93 @@ 펌프 드라이버가 변경되었습니다. + + %1$d 분 전 + %1$d분 전 + %1$.1f 시간 전 + %1$.1f일 전 + %1$.0f 일 전 + %1$.0f 일 이내에 + %1$.0f 일 이내에 + 시간 + + 시간 + + + + + + + + + + + + + 오늘 늦게 + 내일 + 오늘 + 어제 + + %1$d 초 동안 연결중 + 통신 확인 + 연결됨 + 연결끊기중 + 연결 해제 대기 중 + + 생성 시간: %1$s + 작성자: %1$s + 이름: %1$s + 파일 이름: %1$s + 플러그인 버전: %1$s + 이름: %1$s (%2$s) + IOB 표시 + IOB 자세히 표시하기 + COB 표시 + 델타 표시하기 + Delta 자세히 표시하기 + 평균 델타 표시하기 + 핸드폰 배터리 표시하기 + 리그 베터리 표시하기 + Basal 값 표시하기 + 루프 상태 표시하기 + BG 표시하기 + BGI 표시하기 + 화살표 표시하기 + 이전 표시하기 + 기본 시계, 워치페이스 내보내기 버튼을 클릭하여 템플릿을 생성할 수 있습니다. + 기본 워치페이스 + 배경화면 이미지 + 그래픽 (혈당, basal, 예측 선...) + 그래프 앞 그리고 문자 필드 뒤 이미지 + 무료 문자 1 + 무료 문자 2 + 무료 문자 3 + 무료 문자 4 + 자세한 경우 IOB 레이블 또는 IOB 합계 + 자세한 경우 IOB 합계 또는 (Bolus_IOB|Basal_IOB) + COB 레이블 + COB 값 + 단기 BG 델타 + 평균 BG 델타 (15분) + 핸드폰 베터리 (%) + 글로벌 루프 베터리 (%) + Basal양 + BGI 값 + 시간 (HH:MM 또는 HH:MM:SS) + 시간 (HH) + 분 (MM) + 초 (SS) + 오전 또는 오후 + 요일 + 일 (DD) + 월명 (짧게) + 루프 상태 및 이전 + 방향 화살표 + 몇 분 전에 마지막으로 받은 BG + BG 값 + 문자 앞의 표지 이미지 (다이얼...) + 시침 이미지 (아날로그 시계) + 분침 이미지 (아날로그 시계) + 초침 이미지 (아날로그 시계) diff --git a/core/interfaces/src/main/res/values-lt-rLT/strings.xml b/core/interfaces/src/main/res/values-lt-rLT/strings.xml index b612dac835..ea9d7b79e4 100644 --- a/core/interfaces/src/main/res/values-lt-rLT/strings.xml +++ b/core/interfaces/src/main/res/values-lt-rLT/strings.xml @@ -2,4 +2,96 @@ Pompos valdik. pakeistas. + + prieš %1$d min. + Prieš %1$d min. + Prieš %1$.1f val. + Prieš %1$s d. + Prieš %1$.0f d. + Po %1$.0f d. + Po %1$.0f d. + val. + d. + val. + sek. + min. + val. + d. + sav. + sekundės + min. + val. + d. + savaičių + m + d + Šiandien vėliau + Rytoj + Šiandien + Vakar + + Jungiamasi %1$d s + Ryšio užmezgimas + Prisijungta + Atsijungiama + Laukiama atsijungimo + + Sukurta: %1$s + Autorius: %1$s + Vardas: %1$s + Failo pavadinimas: %1$s + Įskiepio versija: %1$s + Pavadinimas: %1$s (%2$s) + Info: %1$s + Rodyti AIO + Rodyti detalų AIO + Rodyti AAO + Rodyti pokytį + Rodyti glikemijos pokyčius detaliai + Rodyti vidutinį pokytį + Rodyti telefono bateriją + Rodyti įrenginio bateriją + Rodyti valandinę bazę + Rodyti Ciklo statusą + Rodyti KG + Rodyti GĮ + Rodyti krypties rodyklę + Laikas nuo pask. vertės + Rodyti savaitės numerį + Numatytasis ekranas. Paspaudus EKSPORTUOTI, bus sukurtas ruošinys + Numatytasis ekranas + Fono paveiksliukas + Grafikai (glikemija, bazė, prognozės...) + Paveiksliukas už teksto ir prieš grafiką + Laisvas tekstas 1 + Laisvas tekstas 2 + Laisvas tekstas 3 + Laisvas tekstas 4 + Sudėtinis arba detalus AIO + Sudėtinis arba detalus (Boluso_AIO|Bazės_AIO) AIO + AAO žyma + AAO vertė + Trumpo laikotarpio pokytis + Vidutinis pokytis (15 min) + Telefono baterija (%) + Baterija (%) + Bazė + KGI vertė + Laikas (val:min arba val:min:sek) + Val. + Min. + Sek. + AM ar PM + Savaitės diena + Diena (d.) + Savaitės numeris + Mėnuo (sutrump.) + Ciklo būsena + Tendencijos rodyklė + Prieš kiek minučių nuskaityta glikemija + Glikemija + Paveiksliukas prieš tekstą (skambučius...) + Analoginio laikrodžio valandinė rodyklė + Analoginio laikrodžio minutinė rodyklė + Analoginio laikrodžio sekundinė rodyklė diff --git a/core/interfaces/src/main/res/values-nl-rNL/strings.xml b/core/interfaces/src/main/res/values-nl-rNL/strings.xml index 80e2ff9cff..a060a810ee 100644 --- a/core/interfaces/src/main/res/values-nl-rNL/strings.xml +++ b/core/interfaces/src/main/res/values-nl-rNL/strings.xml @@ -2,4 +2,96 @@ Pomp stuurprogramma gewijzigd. + + %1$d m geleden + %1$d minuten geleden + %1$.1f uur geleden + %1$.1f dagen geleden + %1$.0f dagen geleden + over %1$.0f dagen + binnen %1$.0f dagen + u + dagen + uren + seconde + minuut + uur + dag + week + seconden + minuten + uren + dagen + weken + m + d + Later vandaag + Morgen + Vandaag + Gisteren + + Verbonden gedurende %1$d s + Handshaking + Verbonden + Verbinding aan het verbreken + Wachten op het loskoppelen + + Gemaakt op: %1$s + Auteur: %1$s + Naam: %1$s + Bestandsnaam: %1$s + Plugin versie: %1$s + Naam: %1$s (%2$s) + Info: %1$s + Toon IOB + Toon gedetailleerde IOB + Toon COB + Toon Delta + Toon gedetailleerde Delta + Toon gemiddelde delta + Toon Telefoon Batterij + Toon Rig batterij + Toon basaalstand + Toon Loop Status + Toon BG + Toon BGI + Toon richtingspijl + Toon tijd geleden + Weeknummer weergeven + Standaard watchface, u kunt op de EXPORT WATCHFACE knop klikken om een sjabloon te genereren + Standaard watchface + Achtergrondafbeelding + Grafieken (BG, basaal, voorspellingslijnen...) + Afbeelding voor de grafiek en achter tekstvelden + Vrije tekst 1 + Vrije tekst 2 + Vrije tekst 3 + Vrije tekst 4 + IOB label of IOB totaal indien gedetailleerd + IOB totaal of (Bolus_IOB|Basal_IOB) indien gedetailleerd + COB label + COB waarde + Korte BG delta + Gemiddelde BG delta (15min) + Batterij Telefoon (%) + Globale loop batterij (%) + Basaal stand + BGI waarde + Tijd (UU:MM of UU:MM:SS) + Uur (UU) + Minuut (MM) + Seconde (SS) + AM of PM + Naam van de dag van de week + Dag (DD) + Weeknummer (ww) + Maand (kort) + Loop status en tijd geleden + Richtingspijl + Minuten geleden voor laatst ontvangen BG + BG waarde + Masker afbeelding over tekst (bijv. uren indicators) + Afbeelding van uren wijzer (analoog horloge) + Afbeelding van minuut wijzer (analoog horloge) + Afbeelding van seconde wijzer (analoog horloge) diff --git a/core/interfaces/src/main/res/values-no-rNO/strings.xml b/core/interfaces/src/main/res/values-no-rNO/strings.xml index 26f3dee7a2..47694ea69b 100644 --- a/core/interfaces/src/main/res/values-no-rNO/strings.xml +++ b/core/interfaces/src/main/res/values-no-rNO/strings.xml @@ -2,4 +2,96 @@ Pumpedriver er endret. + + %1$d min siden + %1$d minutter siden + %1$.1f timer siden + %1$.1f dager siden + %1$.0f dager siden + om %1$.0f dager + om %1$.0f dager + t + dager + timer + sekund + minutt + time + dag + uke + sekunder + minutter + timer + dager + uker + m + d + Senere i dag + I morgen + Idag + I går + + Tilkobler i %1$d sek + Tilkobling verifiseres + Tilkoblet + Frakobler + Venter på frakobling + + Opprettet: %1$s + Laget av: %1$s + Navn: %1$s + Filnavn: %1$s + Plugin-versjon: %1$s + Navn: %1$s (%2$s) + Info: %1$s + Vis IOB + Vis detaljert IOB + Vis COB + Vis Delta + Vis detaljert Delta + Vis Gj. snitt Delta + Vis telefonbatteri + Vis riggens batteri + Vis basalrate + Vis loop status + Vis BS + Vis BS + Vis retningspil + Vis tid siden + Vis ukenummer + Standard klokkebakgrunn, du kan klikke på EKSPORTER KLOKKEBAKGRUNN for å lage en mal + Standard klokkebakgrunn + Bakgrunnsbilde + Grafer (BS, basal, prediksjonslinjer...) + Bilde foran grafer og bak tekstfelter + Fritekst 1 + Fritekst 2 + Fritekst 3 + Fritekst 4 + IOB-merkelapp eller IOB-sum hvis angitt + IOB-sum eller (Bolus_IOB|Basal_IOB) hvis angitt + COB etikett + COB verdi + Kort BS-endring + Gj.snitt BS-endring (15min) + Telefonbatteri (%) + Rig-batteri (%) + Basalrate + BGI verdi + Tid (TT:MM eller TT:MM:SS) + Time (TT) + Minutt (MM) + Sekund (SS) + AM eller PM + Navn på ukedag + Dag (DD) + Ukenummer (ww) + Navn på måned (kort) + Loop-status og tid siden + Retningspil + Minutter siden BS sist ble mottatt + BS-verdi + Bilde foran tekst (urvisere...) + Bilde av timeviser (analog klokke) + Bilde av minuttviser (analog klokke) + Bilde av sekundviser (analog klokke) diff --git a/core/interfaces/src/main/res/values-pl-rPL/strings.xml b/core/interfaces/src/main/res/values-pl-rPL/strings.xml index a560c753ef..43aea9c6e6 100644 --- a/core/interfaces/src/main/res/values-pl-rPL/strings.xml +++ b/core/interfaces/src/main/res/values-pl-rPL/strings.xml @@ -2,4 +2,96 @@ Zmieniono ster. pompy. + + %1$d min temu + %1$d minut temu + %1$.1f godz. temu + %1$.1f dni temu + %1$.0f dni temu + za %1$.0f dni + za %1$.0f dni + h + dni + godzin + sekunda + minuta + godzina + dzień + tydzień + sekund + minut + godzin + dni + tygodni + m + d + Dzisiaj, później + Jutro + Dziś + Wczoraj + + Łączenie przez %1$d s + Nawiązywanie połączenia + Połączono + Rozłączanie + Oczekiwanie na rozłączenie + + Utworzono: %1$s + Autor: %1$s + Nazwa: %1$s + Nazwa pliku: %1$s + Wersja wtyczki: %1$s + Nazwa: %1$s (%2$s) + Info: %1$s + Pokaż IOB + Pokaż szczegółowe IOB + Pokaż COB + Pokaż Deltę + Pokaż szczegółowo Deltę + Pokaż Śr. Deltę + Pokaż Baterię Telefonu + Pokaż Baterię Zestawu + Pokaż Dawkę Bazową + Pokaż Status Pętli + Pokaż glikemię + Pokaż BGI + Pokaż Strzałkę Trendu + Pokaż Aktualność + Pokaż numer tygodnia + Domyślna tarcza, możesz kliknąć na EXPORTUJ TARCZĘ aby wygenerować szablon + Domyślna Tarcza + Obraz w tle + Wykresy (glikemia, baza, prognozy...) + Obraz przed wykresem i za polami tekstowymi + Wolne pole tekstowe 1 + Wolne pole tekstowe 2 + Wolne pole tekstowe 3 + Wolne pole tekstowe 4 + Etykieta IOB lub suma IOB przy szczegółowym IOB + Suma IOB lub (Bolus_IOB|Basal_IOB) jeśli szczegółowo + Etykieta COB + Wartość COB + Krótka delta glikemii + Średnia delta glikemii (15min) + Bateria telefonu (%) + Globalna bateria pętli (%) + Wartości bazy + Wartość BGI + Czas (HH:MM or HH:MM:SS) + Godzina (HH) + Minuta (MM) + Sekunda (SS) + AM lub PM + Nazwa dnia tygodnia + Dzień (DD) + Numer tygodnia (ww) + Nazwa miesiąca (krótka) + Status pętli i aktualność + Strzałka trendu + Minut od ostatniego otrzymania glikemii + Wartość glikemii + Obraz nakładki przed tekstem (tarcze...) + Obraz lub wskazówka godzinowa (Tarcza Analogowa) + Obraz lub wskazówka minutowa (Tarcza Analogowa) + Obraz lub wskazówka sekundowa (Tarcza Analogowa) diff --git a/core/interfaces/src/main/res/values-pt-rBR/strings.xml b/core/interfaces/src/main/res/values-pt-rBR/strings.xml index bd8f1972cc..93a314e4ca 100644 --- a/core/interfaces/src/main/res/values-pt-rBR/strings.xml +++ b/core/interfaces/src/main/res/values-pt-rBR/strings.xml @@ -2,4 +2,60 @@ Driver da bomba alterado. + + %1$d min atrás + %1$d minutos atrás + %1$.1fh atrás + %1$d dias atrás + %1$.0f dias atrás + em %1$.0f dias + em %1$.0f dias + h + dias + horas + segundo + minuto + hora + dia + semana + segundos + minutos + horas + dias + semanas + m + Hoje, Mais tarde + Amanhã + Hoje + Ontem + + Conectando para %1$d + Cumprimento + Conectado + A desligar + Aguardando a desconexão + + Criado por %1$s + Autor: %1$s + Nome: %1$s + Nome do arquivo: %1$s + Versão do plugin: %1$s + Nome: %1$s (%2$s) + Informações: %1$s + Mostrar IA + Mostrar detalhes da IA + Mostrar CA + Mostrar Delta + Mostrar Delta detalho + Mostrar média de delta + Mostrar bateria do telefone + Mostrar bateria de rig + Mostrar Taxa Basal + Mostrar Status do Loop + Mostrar glicemia + Mostrar BGI + Mostrar seta de tendência + Exibir atrás + Watchface padrão, você pode clicar no botão EXPORTAR WATCHFACE para gerar um modelo + Watchface padrão diff --git a/core/interfaces/src/main/res/values-pt-rPT/strings.xml b/core/interfaces/src/main/res/values-pt-rPT/strings.xml index 4686fb8799..33035b1b20 100644 --- a/core/interfaces/src/main/res/values-pt-rPT/strings.xml +++ b/core/interfaces/src/main/res/values-pt-rPT/strings.xml @@ -2,4 +2,92 @@ Driver da bomba trocado. + + %1$d m atrás + %%1$d minutos atrás + %1$.1f h atrás + %1$.1f dias atrás + %1$.0f dias atrás + em %1$.0f dias + em %1$.0f dias + h + dias + horas + segundo + minuto + hora + dia + semana + segundos + minutos + horas + dias + semanas + m + d + Hoje mais tarde + Amanhã + Hoje + Ontem + + A ligar durante %1$d s + Cumprimento + Ligado + A desconectar + A aguardar a desconexão + + Criado em: %1$s + Autor: %1$s + Nome: %1$s + Nome do ficheiro: %1$s + Versão do plugin: %1$s + Nome: %1$s (%2$s) + Mostrar IA + Mostrar IA detalhada + Mostrar HCA + Mostrar Delta + Mostrar Delta detalhado + Mostrar Delta Médio + Mostrar Bateria Telefone + Mostrar Bateria Equipamento + Mostrar Taxa Basal + Mostrar Estado Loop + Mostrar glicemia + Mostrar IG + Mostrar Seta Direcção + Mostrar Atrás + Watchface padrão, pode clicar no botão EXPORTAR WATCHFACE para gerar um modelo + Watchface padrão + Imagem de fundo + Gráficos (GLIC, basal, linhas de previsão...) + Imagem na frente do gráfico e atrás dos campos de texto + Texto livre 1 + Texto livre 2 + Texto livre 3 + Texto livre 4 + Etiqueta de IA ou Soma IA se detalhada + Soma IA ou (Bolus_IA|Basal_IA) se detalhada + Etiqueta HCA + valor HCA + Delta curto da glicemia + Delta da glicemia média (15min) + Bateria do telefone (%) + Bateria do loop (%) + Taxa Basal + Valor de IG + Horário (HH:MM ou HH:MM:SS) + Hora (HH) + Minuto (MM) + Segundo (SS) + AM ou PM + Nome do Dia da Semana + Dia (DD) + Nome do Mês (curto) + Seta de direção + Minutos desde a recepção do último valor de GLIC + Valor de GLIC + Imagem da capa na frente do texto + Imagem do ponteiro das horas (Relógio Analógico) + Imagem do ponteiro dos minutos (Relógio Analógico) + Imagem do ponteiro dos segundos (Relógio Analógico) diff --git a/core/interfaces/src/main/res/values-ro-rRO/strings.xml b/core/interfaces/src/main/res/values-ro-rRO/strings.xml index b8f0d8ac4b..11cc2ea792 100644 --- a/core/interfaces/src/main/res/values-ro-rRO/strings.xml +++ b/core/interfaces/src/main/res/values-ro-rRO/strings.xml @@ -2,4 +2,96 @@ Driver-ul pompei a fost schimbat. + + %1$d min în urmă + %1$d minute în urmă + %1$.1f ore în urmă + %1$.1f zile în urmă + %1$.0f zile în urmă + în %1$.0f zile + în %1$.0f zile + h + zile + ore + secundă + minut + oră + zi + săptămână + secunde + minute + ore + zile + săptămâni + m + z + Mai târziu astăzi + Mâine + Astăzi + Ieri + + Conectat de %1$d s + Împerechere + Conectat + Se deconectează + Se așteaptă deconectarea + + Creat la: %1$s + Autor: %1$s + Nume: %1$s + Nume fișier: %1$s + Versiune plugin: %1$s + Nume: %1$s (%2$s) + Info: %1$s + Arată IOB + Arată IOB detaliat + Arată COB + Arată Delta + Arată variație detaliată + Arată Delta medie + Arată baterie telefon + Arată Baterie Rig + Arată rata bazală + Arată stare buclă + Arată glicemia + Arată BGI + Arată săgeată tendință + Afişare în urmă + Arată numărul săptămânii + Fațetă implicită. Poți apăsa pe butonul EXPORT pentru a genera un șablon + Fațetă implicită + Imagine de fundal + Grafice (glicemie, bazală, predicții...) + Imagine în fața graficului și în spatele câmpurilor de text + Text liber 1 + Text liber 2 + Text liber 3 + Text liber 4 + Eticheta IOB sau Total IOB când detaliile sunt activate + Total IOB sau (Bolus_IOB|Basal_IOB) dacă detaliile sunt activate + Etichetă COB + Valoare COB + Delta scurtă - glicemie + Delta medie - glicemie (15min) + Baterie telefon (%) + Baterie globală a buclei (%) + Rată bazală + Valoare BGI + Ora (HH:MM sau HH:MM:SS) + Oră (HH) + Minut (MM) + Secunde (SS) + AM sau PM + Denumirea zilei săptămânii + Zi (ZZ) + Numărul săptămânii (ww) + Nume lună (scurt) + Starea buclei și în urmă + Săgeată tendință + Minute în urmă pt ultima glicemie + Valoare glicemie + Imaginea de copertă în fața textului (butoane) + Imagine oră (ceas analogic) + Imagine minut (ceas analogic) + Imagine secunde (ceas analogic) diff --git a/core/interfaces/src/main/res/values-ru-rRU/strings.xml b/core/interfaces/src/main/res/values-ru-rRU/strings.xml index 01aeb37521..206b9e15d9 100644 --- a/core/interfaces/src/main/res/values-ru-rRU/strings.xml +++ b/core/interfaces/src/main/res/values-ru-rRU/strings.xml @@ -2,4 +2,95 @@ Драйвер помпы изменен. + + %1$d мин. назад + %1$d минут назад + %1$.1fч. назад + %1$s дн назад + %1$s дн назад + через %1$.0f дн + через %1$.0f дн + ч + дн + час + сек + мин + час + дн + нед + сек + мин + час + дн + нед + м + д + Позднее сегодня + Завтра + Сегодня + Вчера + + Связь установлена за %1$d сек + Подтверждение связи + соединение установлено + разъединение + Ожидание разъединения + + Создано: %1$s + Автор: %1$s + Название: %1$s + Имя файла: %1$s + Версия плагина: %1$s + Имя: %1$s (%2$s) + Информация: %1$s + Отображать IOB + Отображать IOB подробно + Отображать COB + Отображать дельту + Отображать дельту подробно + Отображать усредненную дельту + Отображать заряд телефона + Отображать заряд батареи системы + Отображать базал + Отображать состояние цикла + Отображать ГК + Отображать BGI (ГКИ) + Отображать стрелку тренда + Отображать историю + Показывать номер недели + Циферблат по умолчанию, вы можете нажать на EXPORT WATCHFACE чтобы создать шаблон + Циферблат по умолчанию + Фоновое изображение + Графики (ГК, базал, линии прогнозов...) + Изображение перед графиком и за текстовыми полями + Свободный текст 1 + Свободный текст 2 + Свободный текст 3 + Свободный текст 4 + Метка IOB, или общего IOB для подробного отображения + Общий IOB, или (IOB_болюса|IOB_базы) для подробного отображения + Метка COB + Значение COB + Краткая дельта ГК + Средняя дельта ГК (15 мин) + Заряд телефона (%) + Заряд системы ИПЖ (%) + Базальная скорость + Значение ГКИ + Время (ЧЧ:ММ или ЧЧ:ММ:СС) + Часы (ЧЧ) + Минуты (ММ) + Секунды (СС) + AM или PM + Название дня недели + Число (ДД) + Номер недели (нн) + Название месяца (краткое) + Статус цикла и история + Стрелка тренда + Минут с последнего чтения ГК + Значение ГК + Изображение для часовой стрелки (Аналоговые часы) + Изображение для минутной стрелки (Аналоговые часы) + Изображение для секундной стрелки (Аналоговые часы) diff --git a/core/interfaces/src/main/res/values-sk-rSK/strings.xml b/core/interfaces/src/main/res/values-sk-rSK/strings.xml index 52b4bac2d3..02d512c361 100644 --- a/core/interfaces/src/main/res/values-sk-rSK/strings.xml +++ b/core/interfaces/src/main/res/values-sk-rSK/strings.xml @@ -2,4 +2,96 @@ Ovládač pumpy zmenený. + + pred %1$d min + pred %1$d minútami + pred %1$.1f h + Pred %1$.1f dňami + Pred %1$.0f dňami + za %1$.0f dní + za %1$.0f dní + h + dní + hodín + sekunda + minúta + hodina + deň + týždeň + sekúnd + minút + hodín + dní + týždňov + m + d + Neskôr počas dňa + Zajtra + Dnes + včera + + Pripájanie %1$d sek + Overovanie + Pripojené + Odpájanie + Čakám na odpojenie + + Vytvorené: %1$s + Autor: %1$s + Meno: %1$s + Názov súboru: %1$s + Verzia pluginu: %1$s + Meno: %1$s (%2$s) + Informácie: %1$s + Zobraziť IOB + Zobraziť detailný IOB + Zobraziť COB + Zobraziť odchýlku + Zobraziť detailnú odchylku + Zobraziť priemernú odchýlku + Zobraziť stav batérie telefónu + Zobrazovať stav batérie ďalších zariadení + Zobraziť bazál + Zobraziť stav uzavretého okruhu + Zobraziť glykémiu + Zobraziť BGI + Zobraziť trendovú šípku + Zobraziť aktualizované pred + Zobraziť číslo týždňa + Predvolený ciferník. Môžete kliknúť na tlačítko EXPORTOVAŤ CIFERNÍK pre vygenerovanie šablóny + Predvolený ciferník + Obrázok pozadia + Grafy (glykémie, bazály, krivky predpovedí...) + Obrázok pred grafom a za textovými poliami + Voľný text 1 + Voľný text 2 + Voľný text 3 + Voľný text 4 + Štítok IOB alebo suma IOB pri zapnutých detailoch + Suma IOB alebo (Bolus_IOB|Basal_IOB) pri zapnutých detailoch + Štítok COB + Hodnota COB + Krátkodobý priemer + Priemerný rozdiel glykémií (15min) + Batéria telefónu (%) + Batéria uzavretého okruhu (%) + Bazálna dávka + Hodnota BGI + Čas (HH:MM alebo HH:MM:SS) + Hodiny (HH) + Minúty (MM) + Sekundy (SS) + AM alebo PM + Meno dňa v týždni + Deň (DD) + Číslo týždňa (ww) + Názov mesiaca (krátky) + Stav uzavretého okruhu a čas + Trendová šípka + Pred minútami pre poslednú prijatú glykémiu + Hodnota glykémie + Úvodný obrázok pred textom (číselníky...) + Obrázok hodinovej ručičky (Analógové hodinky) + Obrázok minútovej ručičky (Analógové hodinky) + Obrázok sekundovej ručičky (Analógové hodinky) diff --git a/core/interfaces/src/main/res/values-sr-rCS/strings.xml b/core/interfaces/src/main/res/values-sr-rCS/strings.xml index 7cf1037ec1..9773865f6e 100644 --- a/core/interfaces/src/main/res/values-sr-rCS/strings.xml +++ b/core/interfaces/src/main/res/values-sr-rCS/strings.xml @@ -1,4 +1,21 @@ + + + + Prikaži aktivni insulin + Prikaži detaljan aktivni insulin + Prikaži aktivne ugljene hidrate + Prikaži Delta + Prikaži detaljni Delta + Prikaži AvgDelta + Prikaži bateriju telefona + Prikaži bateriju Rig-a + Prikaži bazalnu dozu + Prikaži status petlje + Prikaži glukozu u krvi + Prikaži indeks glukoze u krvi + Prikaži strelicu za pravac + Prikaži pre diff --git a/core/interfaces/src/main/res/values-sv-rSE/strings.xml b/core/interfaces/src/main/res/values-sv-rSE/strings.xml index cdcec5de88..e98aac4d9b 100644 --- a/core/interfaces/src/main/res/values-sv-rSE/strings.xml +++ b/core/interfaces/src/main/res/values-sv-rSE/strings.xml @@ -2,4 +2,96 @@ Pumpdrivr. byttes. + + %1$dm sedan + %1$d minuter sedan + %1$.1f tim sedan + %1$.1f dagar sedan + %1$.0f dagar sedan + om %1$.0f dagar + om %1$.0f dagar + h + dagar + timmar + sekund + minut + timme + dag + vecka + sekunder + minuter + timmar + dagar + veckor + m + d + Senare idag + Imorgon + Idag + Igår + + Ansluter (%1$d s) + Anslutningen verifieras + Ansluten + Kopplar från + Väntar på frånkoppling + + Skapad den: %1$s + Skapad av: %1$s + Namn: %1$s + Filnamn: %1$s + Plugin-version: %1$s + Namn: %1$s (%2$s) + Information: %1$s + Visa IOB + Visa detaljerad IOB + Visa COB + Visa delta + Visa detaljerad delta + Visa genomsnittlig delta + Visa telefonens batterinivå + Visa riggens batterinivå + Visa basaldos + Visa loop-status + Visa BG + Visa BGI + Visa riktningspil + Visa tid sedan + Visa veckonummer + Standard-urtavla - du kan klicka på EXPORTERA URTAVLA för att generera en mall + Standard-urtavla + Bakgrundsbild + Grafer (BG, basal, prognoslinjer...) + Bild framför graf och bakom textfält + Fritext 1 + Fritext 2 + Fritext 3 + Fritext 4 + IOB-etikett. Total IOB om detaljerad + Total IOB. (Bolus_IOB|Basal_IOB) om detaljerad + COB-etikett + COB-värde + Kort BG-delta + Genomsnittligt BG-delta (15min) + Telefonens batterinivå (%) + Globalt loop-batteri (%) + Basaldos + BGI-värde + Tid (HH:MM eller HH:MM:SS) + Timme (HH) + Minut (MM) + Sekund (SS) + AM eller PM + Namn på veckodagen + Dag (DD) + Veckonummer (ww) + Månadens namn (kort) + Loop status och tid + Visa riktningspil + Minuter sedan senast mottaget BG + BG-värde + Omslagsbild framför text (visare...) + Bild för timvisare (analog klocka) + Bild för minutvisare (analog klocka) + Bild för sekundvisare (analog klocka) diff --git a/core/interfaces/src/main/res/values-tr-rTR/strings.xml b/core/interfaces/src/main/res/values-tr-rTR/strings.xml index b124c1d9f3..4ccc935828 100644 --- a/core/interfaces/src/main/res/values-tr-rTR/strings.xml +++ b/core/interfaces/src/main/res/values-tr-rTR/strings.xml @@ -2,4 +2,96 @@ Pompa sürücüsü değişti. + + %1$d dak önce + %1$d dakika önce + %1$.1f s önce + %1$.1f gün önce + %1$.0f gün önce + %1$.0f gün içinde + %1$.0f gün içinde + s + gün + saat + saniye + dakika + saat + gün + hafta + saniye + dakika + saat + gün + hafta + d + g + Bugünden sonra + Yarın + Bugün + Dün + + %1$d bağlanıyor + Bağlandı + Bağlandı + Bağlantı kesiliyor + Bağlantının kesilmesi bekleniyor + + Oluşturuldu: %1$s + Yetki: %1$s + İsim: %1$s + Dosya adı: %1$s + Eklenti sürümü: %1$s + İsim: %1$s (%2$s) + Bilgi: %1$s + AİNS Göster + Detalı AİNS göster + AKRB göster + Deltayı göster + Detaylı Delta göster + OrtDelta\'yı Göster + Telefon Pilini Göster + Teçhizat Pilini Göster + Bazal Oranı Göster + Döngü Durumunu Göster + KŞ\'ni göster + KŞ Etkisi Göster + Ok yönünü Göster + Önce Göster + Hafta sayısını göster + Varsayılan saat arayüzü; bir şablon oluşturmak için SAAT ARAYÜZÜNÜ DIŞA AKTAR butonuna tıklayabilirsiniz + Varsayılan saat arayüzü + Arka plan görüntüsü + Grafik (KŞ, bazal, tahmin çizgileri...) + Grafiğin önündeki ve metin alanlarının arkasındaki resim + Serbest metin 1 + Serbest metin 2 + Serbest metin 3 + Serbest metin 4 + Ayrıntılıysa AİNS etiketi veya AİNS Toplamı + AİNS Toplamı veya ayrıntılıysa (Bolus_AİNS|Basal_AİNS) + AKRB etiketi + AKRB değeri + Kısa KŞ delta + Ortalama KŞ delta (15dk) + Telefon pili (%) + Global döngü pili (%) + Bazal Oranı + KŞ etkisi değeri + Saat (SS:DD veya SS:DD:SS) + Saat (SS) + Dakika (DD) + Saniye (SS) + AM veya PM + Haftanın gününün adı + Gün (GG) + Hafta sayısı + Ay adı (kısa) + Döngü durumu ve öncesi + Yön Okları + Birkaç dakika önce son alınan KŞ + KŞ değeri + Metnin önündeki kapak resmi (kadranlar...) + Akrep şekli (Analog Saat) + Yelkovan şekli (Analog Saat) + Saniye şekli (Analog Saat) diff --git a/core/interfaces/src/main/res/values-uk-rUA/strings.xml b/core/interfaces/src/main/res/values-uk-rUA/strings.xml index 7cf1037ec1..1f422a3baf 100644 --- a/core/interfaces/src/main/res/values-uk-rUA/strings.xml +++ b/core/interfaces/src/main/res/values-uk-rUA/strings.xml @@ -1,4 +1,92 @@ + + %1$d хв тому + %1$d хвилин тому + %1$.1f год. тому + %1$.1f днів тому + %1$.0f днів тому + через %1$.0f днів + через %1$.0f днів + год + днів + годин + секунд + хвилина + година + день + тиждень + секунд + хвилин + годин + днів + тижнів + хв + дн + Пізніше сьогодні + Завтра + Сьогодні + Вчора + + Підключаюся %1$d сек + Підключено + Відключаюся + Чекаю на відключення + + Створено о: %1$s + Автор: %1$s + Ім\'я: %1$s + Назва файлу: %1$s + Версія плагіну: %1$s + Ім\'я: %1$s (%2$s) + Інфо: %1$s + Показати IOB + Показати детальний IOB + Показати COB + Показати дельту + Показати детальну дельту + Показати середню дельту + Показати заряд телефона + Показати заряд пристрою + Показати базову швидкість + Показати статус петлі + Показати ГК + Показати BGI + Показати стрілку тренду + Показати Ago + Вікно за замовчуванням, ви можете натиснути на кнопку EXPORT WATCHFACE, щоб створити шаблон + Циферблат за замовчуванням + Фонове зображення + Графіки (глюкоза, база, лінії прогнозу...) + Зображення перед графіком та позаду текстових полів + Вільний текст 1 + Вільний текст 2 + Вільний текст 3 + Вільний текст 4 + IOB надпис або IOB Сума (якщо детально IOB) + Сума IOB або (Bolus_IOB|Basal_IOB) якщо детально + COB надпис + COB значення + Коротка BG дельта + Середня BG дельта (15 хв) + Показати заряд телефона (%) + Глобальний акумулятор циклу (%) + Базальна швидкість + BGI значення + Час (ГГГ:ММ або ГГ:ХХ:С) + Година (ГГ) + Хвилина (ХХ) + Секунда (СС) + AM/PM + Ім\'я дня тижня + День (ДД) + Назва місяця (коротка) + Статус циклу і тому + Стрілка тренду + Хвилин тому для останнього отриманого BG + BG значення + Зображення годинної стрілки (аналоговий годинник) + Зображення хвилинної руки (Аналоговий годинник) + Зображення секундної стрілки(Аналоговий годинник) diff --git a/core/interfaces/src/main/res/values-zh-rCN/strings.xml b/core/interfaces/src/main/res/values-zh-rCN/strings.xml index a0d1e444a6..b27c618371 100644 --- a/core/interfaces/src/main/res/values-zh-rCN/strings.xml +++ b/core/interfaces/src/main/res/values-zh-rCN/strings.xml @@ -2,4 +2,73 @@ 泵驱动程序已变更 + + %1$d 分钟前 + %1$d 分钟前 + %1$.1f 小时前 + %1$.1f 天前 + %1$.0f 天前 + 在 %1$.0f 天内 + 在 %1$.0f 天内 + h + + 小时 + + 分钟 + 小时 + + + + 分钟 + 小时 + + + m + d + 今天稍后 + 明天 + 今天 + 昨天 + + 正在连接 %1$d s + 握手 + 已连接 + 正在断开连接 + 正在等待连接 + + 创建于:%1$s + 作者: %1$s + 姓名: %1$s + 文件名: %1$s + 插件版本: %1$s + 姓名: %1$s (%2$s) + 显示 IOB + 显示IOB详细信息 + 显示COB + 显示差异 + 显示详细信息 + 显示平均增量 + 显示手机电量 + 显示设备电量 + 显示基础率 + 显示闭环状态 + 显示血糖 + 显示方向箭头 + 显示Ago信息 + 背景图片 + 图表(血糖, 基础率, 预测线...) + 短期血糖增量 + 平均BG 增量(15分钟) + 手机电量(%) + 基础率 + 时间 (HH:MM 或 HH:MM:SS) + 小时 (HH) + 分钟(MM) + 秒 (SS) + 上午/下午 + 星期 + 日 (DD) + 月(短) + 方向箭头 + 血糖值 diff --git a/core/main/src/main/res/values-bg-rBG/strings.xml b/core/main/src/main/res/values-bg-rBG/strings.xml index 7ef4eceaae..6e63bc85c8 100644 --- a/core/main/src/main/res/values-bg-rBG/strings.xml +++ b/core/main/src/main/res/values-bg-rBG/strings.xml @@ -1,4 +1,9 @@ %1$d гр + %1$d избрани + Премахни артикули + Подреди артикули + Премахнете избраните елементи + Сортирай diff --git a/core/main/src/main/res/values-ca-rES/strings.xml b/core/main/src/main/res/values-ca-rES/strings.xml index 3ea04e700d..ddc4b0eb74 100644 --- a/core/main/src/main/res/values-ca-rES/strings.xml +++ b/core/main/src/main/res/values-ca-rES/strings.xml @@ -1,2 +1,4 @@ - + + %1$d g + diff --git a/core/main/src/main/res/values-cs-rCZ/strings.xml b/core/main/src/main/res/values-cs-rCZ/strings.xml index ddc4b0eb74..bc0fb4e7ab 100644 --- a/core/main/src/main/res/values-cs-rCZ/strings.xml +++ b/core/main/src/main/res/values-cs-rCZ/strings.xml @@ -1,4 +1,9 @@ %1$d g + Vybráno: %1$d + Odebrat položky + Seřadit položky + Odebrat vybrané položky + Seřadit diff --git a/core/main/src/main/res/values-da-rDK/strings.xml b/core/main/src/main/res/values-da-rDK/strings.xml index ddc4b0eb74..3500dc8701 100644 --- a/core/main/src/main/res/values-da-rDK/strings.xml +++ b/core/main/src/main/res/values-da-rDK/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d valgt + Fjern Emner + Sortér Emner + Fjern valgte emner + Sortér diff --git a/core/main/src/main/res/values-de-rDE/strings.xml b/core/main/src/main/res/values-de-rDE/strings.xml index 3ea04e700d..eacb100609 100644 --- a/core/main/src/main/res/values-de-rDE/strings.xml +++ b/core/main/src/main/res/values-de-rDE/strings.xml @@ -1,2 +1,9 @@ - + + %1$d g + %1$d ausgewählt + Entferne Elemente + Sortiere Elemente + lösche ausgewählte Elemente + Sortieren + diff --git a/core/main/src/main/res/values-el-rGR/strings.xml b/core/main/src/main/res/values-el-rGR/strings.xml index ddc4b0eb74..a7855f04aa 100644 --- a/core/main/src/main/res/values-el-rGR/strings.xml +++ b/core/main/src/main/res/values-el-rGR/strings.xml @@ -1,4 +1,9 @@ %1$d g + Επιλέχθηκαν %1$d + Αφαίρεση Στοιχείων + Ταξινόμηση Στοιχείων + Αφαίρεση Επιλεγμένων Στοιχείων + Ταξινόμηση diff --git a/core/main/src/main/res/values-es-rES/strings.xml b/core/main/src/main/res/values-es-rES/strings.xml index ddc4b0eb74..fc8adf0dc9 100644 --- a/core/main/src/main/res/values-es-rES/strings.xml +++ b/core/main/src/main/res/values-es-rES/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d seleccionado + Eliminar elementos + Ordenar elementos + Eliminar elementos seleccionados + Ordenar diff --git a/core/main/src/main/res/values-fr-rFR/strings.xml b/core/main/src/main/res/values-fr-rFR/strings.xml index ddc4b0eb74..0e9d4ce108 100644 --- a/core/main/src/main/res/values-fr-rFR/strings.xml +++ b/core/main/src/main/res/values-fr-rFR/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d séléctionné(s) + Supprimer les éléments + Trier les éléments + Supprimer les éléments sélectionnés + Trier diff --git a/core/main/src/main/res/values-hr-rHR/strings.xml b/core/main/src/main/res/values-hr-rHR/strings.xml index 3ea04e700d..6820ca2852 100644 --- a/core/main/src/main/res/values-hr-rHR/strings.xml +++ b/core/main/src/main/res/values-hr-rHR/strings.xml @@ -1,2 +1,6 @@ - + + %1$d g + %1$d odabrano + Razvrstaj + diff --git a/core/main/src/main/res/values-hu-rHU/strings.xml b/core/main/src/main/res/values-hu-rHU/strings.xml index 3ea04e700d..cb703b9513 100644 --- a/core/main/src/main/res/values-hu-rHU/strings.xml +++ b/core/main/src/main/res/values-hu-rHU/strings.xml @@ -1,2 +1,9 @@ - + + %1$d g + %1$d kiválasztva + Elem eltávolítása + Elemek rendezése + Kiválasztott elemek törlése + Rendezés + diff --git a/core/main/src/main/res/values-it-rIT/strings.xml b/core/main/src/main/res/values-it-rIT/strings.xml index 3ea04e700d..c68e421b1f 100644 --- a/core/main/src/main/res/values-it-rIT/strings.xml +++ b/core/main/src/main/res/values-it-rIT/strings.xml @@ -1,2 +1,9 @@ - + + %1$d g + %1$d selezionati + Rimuovi elementi + Ordina elementi + Rimuovi elementi selezionati + Ordina + diff --git a/core/main/src/main/res/values-iw-rIL/strings.xml b/core/main/src/main/res/values-iw-rIL/strings.xml index b41bafc652..38cdcfbc6b 100644 --- a/core/main/src/main/res/values-iw-rIL/strings.xml +++ b/core/main/src/main/res/values-iw-rIL/strings.xml @@ -1,4 +1,9 @@ %1$d גר\' + %1$d נבחרו + פריטים שהוסרו + מיין פריטים + הסר פריטים נבחרים + מיין diff --git a/core/main/src/main/res/values-ko-rKR/strings.xml b/core/main/src/main/res/values-ko-rKR/strings.xml index 3ea04e700d..8a4ab8a2f5 100644 --- a/core/main/src/main/res/values-ko-rKR/strings.xml +++ b/core/main/src/main/res/values-ko-rKR/strings.xml @@ -1,2 +1,9 @@ - + + %1$d g + %1$d 선택됨 + 항목 제거하기 + 항목 분류하기 + 선택된 항목 제거하기 + 분류 + diff --git a/core/main/src/main/res/values-lt-rLT/strings.xml b/core/main/src/main/res/values-lt-rLT/strings.xml index ddc4b0eb74..4919d65a6d 100644 --- a/core/main/src/main/res/values-lt-rLT/strings.xml +++ b/core/main/src/main/res/values-lt-rLT/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d pasirinkta + Pašalinti elementus + Rūšiuoti elementus + Pašalinti pasirinktus elementus + Rūšiuoti diff --git a/core/main/src/main/res/values-nl-rNL/strings.xml b/core/main/src/main/res/values-nl-rNL/strings.xml index ddc4b0eb74..67b1da3890 100644 --- a/core/main/src/main/res/values-nl-rNL/strings.xml +++ b/core/main/src/main/res/values-nl-rNL/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d geselecteerd + Items verwijderen + Sorteer items + Verwijder geselecteerde items + Sorteren diff --git a/core/main/src/main/res/values-no-rNO/strings.xml b/core/main/src/main/res/values-no-rNO/strings.xml index ddc4b0eb74..281452e844 100644 --- a/core/main/src/main/res/values-no-rNO/strings.xml +++ b/core/main/src/main/res/values-no-rNO/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d valgt + Slett elementer + Sorter elementer + Slett valgte elementer + Sorter diff --git a/core/main/src/main/res/values-pl-rPL/strings.xml b/core/main/src/main/res/values-pl-rPL/strings.xml index ddc4b0eb74..a2ef31685a 100644 --- a/core/main/src/main/res/values-pl-rPL/strings.xml +++ b/core/main/src/main/res/values-pl-rPL/strings.xml @@ -1,4 +1,9 @@ %1$d g + Wybrany %1$d + Usuń pozycje + Sortuj pozycje + Usuń zaznaczone pozycje + Sortuj diff --git a/core/main/src/main/res/values-pt-rBR/strings.xml b/core/main/src/main/res/values-pt-rBR/strings.xml index 3ea04e700d..99d1ff0091 100644 --- a/core/main/src/main/res/values-pt-rBR/strings.xml +++ b/core/main/src/main/res/values-pt-rBR/strings.xml @@ -1,2 +1,9 @@ - + + %1$d g + Selecionado %1$d + Remover itens + Ordenar Itens + Remover itens selecionados + Ordenar + diff --git a/core/main/src/main/res/values-pt-rPT/strings.xml b/core/main/src/main/res/values-pt-rPT/strings.xml index 3ea04e700d..509667eede 100644 --- a/core/main/src/main/res/values-pt-rPT/strings.xml +++ b/core/main/src/main/res/values-pt-rPT/strings.xml @@ -1,2 +1,9 @@ - + + %1$d g + %1$d selecionados + Remover itens + Ordenar itens + Remover itens selecionados + Ordenar + diff --git a/core/main/src/main/res/values-ro-rRO/strings.xml b/core/main/src/main/res/values-ro-rRO/strings.xml index 3ea04e700d..2b1977cb91 100644 --- a/core/main/src/main/res/values-ro-rRO/strings.xml +++ b/core/main/src/main/res/values-ro-rRO/strings.xml @@ -1,2 +1,8 @@ - + + %1$d selectat(e) + Elimină elemente + Sortați elementele + Eliminați elementele selectate + Sortează + diff --git a/core/main/src/main/res/values-ru-rRU/strings.xml b/core/main/src/main/res/values-ru-rRU/strings.xml index 7ef4eceaae..20a431df41 100644 --- a/core/main/src/main/res/values-ru-rRU/strings.xml +++ b/core/main/src/main/res/values-ru-rRU/strings.xml @@ -1,4 +1,9 @@ %1$d гр + Выбрано: %1$d + Удалить элементы + Сортировать элементы + Удалить выбранные элементы + Сортировать diff --git a/core/main/src/main/res/values-sk-rSK/strings.xml b/core/main/src/main/res/values-sk-rSK/strings.xml index ddc4b0eb74..456cae6d7b 100644 --- a/core/main/src/main/res/values-sk-rSK/strings.xml +++ b/core/main/src/main/res/values-sk-rSK/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d vybraných + Odstrániť položky + Zoradiť položky + Odstrániť vybrané položky + Zoradiť diff --git a/core/main/src/main/res/values-sr-rCS/strings.xml b/core/main/src/main/res/values-sr-rCS/strings.xml index 3ea04e700d..ce7fdb5197 100644 --- a/core/main/src/main/res/values-sr-rCS/strings.xml +++ b/core/main/src/main/res/values-sr-rCS/strings.xml @@ -1,2 +1,5 @@ - + + %1$d izabrano + Sortiraj + diff --git a/core/main/src/main/res/values-sv-rSE/strings.xml b/core/main/src/main/res/values-sv-rSE/strings.xml index 48a3996111..75e58786de 100644 --- a/core/main/src/main/res/values-sv-rSE/strings.xml +++ b/core/main/src/main/res/values-sv-rSE/strings.xml @@ -1,4 +1,9 @@ %1$dg + %1$d valt + Ta bort objekt + Sortera objekt + Ta bort valda objekt + Sortera diff --git a/core/main/src/main/res/values-tr-rTR/strings.xml b/core/main/src/main/res/values-tr-rTR/strings.xml index ddc4b0eb74..77d7c15f83 100644 --- a/core/main/src/main/res/values-tr-rTR/strings.xml +++ b/core/main/src/main/res/values-tr-rTR/strings.xml @@ -1,4 +1,9 @@ %1$d g + %1$d seçildi + Öğeleri kaldır + Öğeleri Sırala + Seçilen öğeleri kaldır + Sırala diff --git a/core/main/src/main/res/values-uk-rUA/strings.xml b/core/main/src/main/res/values-uk-rUA/strings.xml index 3ea04e700d..a3dd5c03c4 100644 --- a/core/main/src/main/res/values-uk-rUA/strings.xml +++ b/core/main/src/main/res/values-uk-rUA/strings.xml @@ -1,2 +1,8 @@ - + + %1$d обрано + Вилучити елементи + Сортувати елементи + Видалити вибрані елементи + Сортувати + diff --git a/core/main/src/main/res/values-zh-rCN/strings.xml b/core/main/src/main/res/values-zh-rCN/strings.xml index c253c5ab86..64655d680a 100644 --- a/core/main/src/main/res/values-zh-rCN/strings.xml +++ b/core/main/src/main/res/values-zh-rCN/strings.xml @@ -1,4 +1,9 @@ %1$d 克 + 已选中 %1$d 项 + 删除项目 + 项目排序 + 删除选中项 + 排序 diff --git a/core/ui/src/main/res/values-af-rZA/strings.xml b/core/ui/src/main/res/values-af-rZA/strings.xml index 78f03d98cf..4295ac521a 100644 --- a/core/ui/src/main/res/values-af-rZA/strings.xml +++ b/core/ui/src/main/res/values-af-rZA/strings.xml @@ -200,6 +200,7 @@ INFO Geen aksie gekies, niks sal gebeur + SlimNutsman Tiener Volwassene @@ -271,6 +272,12 @@ + Sat + Vry + Don + Woens + Dins + Maan diff --git a/core/ui/src/main/res/values-bg-rBG/strings.xml b/core/ui/src/main/res/values-bg-rBG/strings.xml index d231dc2498..e9a70f6ab4 100644 --- a/core/ui/src/main/res/values-bg-rBG/strings.xml +++ b/core/ui/src/main/res/values-bg-rBG/strings.xml @@ -581,6 +581,20 @@ Искате ли да изтриете базата данни?\nТова ще премахне проследените промени и историята на данните, по-стари от 3 месеца.\nИзвършването му ще ускори драстично пълната синхронизация. Изчистени записи + Съб + Пет + Чет + Ср + Вт + Пон + П + Вт + Ср + Ч + П + С + Н + %1$.2fЕ diff --git a/core/ui/src/main/res/values-ca-rES/strings.xml b/core/ui/src/main/res/values-ca-rES/strings.xml index e0c229c4d5..a83142cd14 100644 --- a/core/ui/src/main/res/values-ca-rES/strings.xml +++ b/core/ui/src/main/res/values-ca-rES/strings.xml @@ -355,6 +355,7 @@ Lliurar aquesta part del resultat del càlcul [%] Executar alarma quan sigui hora de menjar Cap acció sel·leccionada, no passarà res + Assistent Adolescent Adult @@ -420,6 +421,7 @@ Falta permís SMS + Enviament de logs d\'error desactivat! %1$d dia %1$d dies @@ -434,6 +436,19 @@ + Ds + Dv + Dj + Dc + Dt + Dl + Dl + Dt + Dc + Dj + Dv + Ds + Dg diff --git a/core/ui/src/main/res/values-de-rDE/strings.xml b/core/ui/src/main/res/values-de-rDE/strings.xml index be2e1cb1d4..0922bb2be8 100644 --- a/core/ui/src/main/res/values-de-rDE/strings.xml +++ b/core/ui/src/main/res/values-de-rDE/strings.xml @@ -581,6 +581,20 @@ Möchten Sie die Datenbank bereinigen?\nEs werden gespeicherte Änderungen und historische Daten gelöscht, die älter als 3 Monate sind.\nDies beschleunigt die vollständige Synchronisierung dramatisch. Gelöschte Einträge + Sa + Fr + Do + Mi + Di + Mo + Mo + Di + Mi + Do + Fr + Sa + So + %1$.2f IE diff --git a/core/ui/src/main/res/values-hr-rHR/strings.xml b/core/ui/src/main/res/values-hr-rHR/strings.xml index a8245ea4e2..59fc6c2084 100644 --- a/core/ui/src/main/res/values-hr-rHR/strings.xml +++ b/core/ui/src/main/res/values-hr-rHR/strings.xml @@ -59,6 +59,7 @@ Bazalna stopa Ciljana razina glukoze u krvi g + Vrijeme pumpe ažurirano Izlaz Aktivni inzulin Aktivni UGH @@ -132,6 +133,7 @@ Zamjena profila Senzor + Wear Postotak @@ -320,5 +322,12 @@ + Po + Ut + Sr + Če + Pe + Su + Ne diff --git a/core/ui/src/main/res/values-hu-rHU/protection.xml b/core/ui/src/main/res/values-hu-rHU/protection.xml index 3ea04e700d..e53a81f994 100644 --- a/core/ui/src/main/res/values-hu-rHU/protection.xml +++ b/core/ui/src/main/res/values-hu-rHU/protection.xml @@ -1,2 +1,7 @@ - + + Jelszó és PIN megőrzése [mp] + Jelszó vagy a PIN-kód megadása előtti idő + Nem biztonságos visszalépés + A hatályba lépéshez a biometrikus védelemhez tartalék jelszót kell beállítani.\n\nKérjük, állítson be egy fő jelszót! + diff --git a/core/ui/src/main/res/values-hu-rHU/strings.xml b/core/ui/src/main/res/values-hu-rHU/strings.xml index 95973ae98c..5b9634292c 100644 --- a/core/ui/src/main/res/values-hu-rHU/strings.xml +++ b/core/ui/src/main/res/values-hu-rHU/strings.xml @@ -125,6 +125,7 @@ Mégse Igen Nem + Bezár @@ -144,6 +145,13 @@ + Szo + + Csü + Sze + Ke + + %1$.2f E diff --git a/core/ui/src/main/res/values-it-rIT/strings.xml b/core/ui/src/main/res/values-it-rIT/strings.xml index 357b7aebb5..d831408e00 100644 --- a/core/ui/src/main/res/values-it-rIT/strings.xml +++ b/core/ui/src/main/res/values-it-rIT/strings.xml @@ -581,6 +581,19 @@ Vuoi pulire il database?\nIl processo rimuoverà i cambiamenti tracciati e i dati dello storico più vecchi di 3 mesi.\nFarlo velocizzerà considerevolmente la sincronizzazione completa. Elementi cancellati + Sab + Ven + Gio + Mer + Mar + Lun + L + M + M + G + V + S + D diff --git a/core/ui/src/main/res/values-iw-rIL/strings.xml b/core/ui/src/main/res/values-iw-rIL/strings.xml index 7453cb2a1d..62949f3c37 100644 --- a/core/ui/src/main/res/values-iw-rIL/strings.xml +++ b/core/ui/src/main/res/values-iw-rIL/strings.xml @@ -372,6 +372,7 @@ »הערך %1$s« %2$.2f מחוץ לתחום הקשיח ערך בזאלי + בולוס %1$.2f יח\' פחמימות %1$d גרם בולוס מושהה %1$.2f יח\' %2$d דק\' טען אירועים @@ -587,4 +588,5 @@ + %1$.2f יח\' diff --git a/core/ui/src/main/res/values-ko-rKR/strings.xml b/core/ui/src/main/res/values-ko-rKR/strings.xml index 5e3cd90a8e..c8ac03bc06 100644 --- a/core/ui/src/main/res/values-ko-rKR/strings.xml +++ b/core/ui/src/main/res/values-ko-rKR/strings.xml @@ -578,6 +578,19 @@ 데이터베이스를 정리하시겠습니까?\n3개월 이상 경과한 추적된 변경 내용 및 기록 데이터가 제거됩니다.\n이 작업을 수행하면 전체 동기화 속도가 크게 향상됩니다. 입력된 내용 제거됨 + + + + + + + + + + + + + diff --git a/core/ui/src/main/res/values-pt-rBR/strings.xml b/core/ui/src/main/res/values-pt-rBR/strings.xml index af29782018..e9f880552b 100644 --- a/core/ui/src/main/res/values-pt-rBR/strings.xml +++ b/core/ui/src/main/res/values-pt-rBR/strings.xml @@ -581,6 +581,19 @@ Você deseja limpar a base de dados?\nIrá remover alterações rastreadas e dados históricos com mais de 3 meses.\nFazer isso irá acelerar a sincronização completa drasticamente. Entradas apagadas + Sáb + Sex + Qui + Qua + Ter + Seg + 2a + 3a + 4a + 5a + 6a + Sáb + Dom diff --git a/core/ui/src/main/res/values-pt-rPT/strings.xml b/core/ui/src/main/res/values-pt-rPT/strings.xml index 953249c98c..01bc3e74a7 100644 --- a/core/ui/src/main/res/values-pt-rPT/strings.xml +++ b/core/ui/src/main/res/values-pt-rPT/strings.xml @@ -406,6 +406,7 @@ Executar alarme quando for tempo de comer Nenhuma ação seleccionada, nada irá acontecer IOB: %1$.2fU + Assistente Rápido Adolescente Adulto @@ -476,6 +477,7 @@ Falta de permissão SMS + Envio de registos de erro desativado! %1$d dia %1$d dias @@ -490,7 +492,20 @@ + Sáb + Sex + Qui + Qua + Ter + Seg + S + T + Qa + Qi + Se + Sa + D %1$.1f U %1$.2f U diff --git a/core/ui/src/main/res/values-ru-rRU/strings.xml b/core/ui/src/main/res/values-ru-rRU/strings.xml index 6979c613bb..be5640c292 100644 --- a/core/ui/src/main/res/values-ru-rRU/strings.xml +++ b/core/ui/src/main/res/values-ru-rRU/strings.xml @@ -586,6 +586,20 @@ Вы хотите очистить базу данных?\nЭто удалит отслеживаемые изменения и данные старше 3 месяцев.\nчто позволит значительно ускорить полную синхронизацию. Удалённые записи + Сб + Пт + Чт + Ср + Вт + Пн + Пн + Вт + Ср + Чт + Пт + Сб + Вс + %1$.2f ед diff --git a/core/ui/src/main/res/values-sr-rCS/strings.xml b/core/ui/src/main/res/values-sr-rCS/strings.xml index c87e06216d..3437f14873 100644 --- a/core/ui/src/main/res/values-sr-rCS/strings.xml +++ b/core/ui/src/main/res/values-sr-rCS/strings.xml @@ -23,6 +23,7 @@ Tretman Bolus IOB Basalni IOB + NEVAŽEĆE Closed Loop Open Loop Niska Glukoza Obustavi @@ -35,6 +36,7 @@ Senzor + Sat Loop @@ -53,6 +55,7 @@ Rezultat: %1$s + Brzi Čarobnjak diff --git a/core/ui/src/main/res/values-sv-rSE/strings.xml b/core/ui/src/main/res/values-sv-rSE/strings.xml index 3a12b637f7..5adf2c41f3 100644 --- a/core/ui/src/main/res/values-sv-rSE/strings.xml +++ b/core/ui/src/main/res/values-sv-rSE/strings.xml @@ -583,4 +583,5 @@ + %1$.2fU diff --git a/core/ui/src/main/res/values-uk-rUA/strings.xml b/core/ui/src/main/res/values-uk-rUA/strings.xml index ab8e4e6e5a..cdcaecd9dc 100644 --- a/core/ui/src/main/res/values-uk-rUA/strings.xml +++ b/core/ui/src/main/res/values-uk-rUA/strings.xml @@ -38,4 +38,5 @@ + %1$.2f од diff --git a/core/ui/src/main/res/values-zh-rCN/strings.xml b/core/ui/src/main/res/values-zh-rCN/strings.xml index 919f7292e1..bb286eb202 100644 --- a/core/ui/src/main/res/values-zh-rCN/strings.xml +++ b/core/ui/src/main/res/values-zh-rCN/strings.xml @@ -529,6 +529,19 @@ + 星期六 + 星期五 + 星期四 + 星期三 + 星期二 + 星期一 + 周一 + 周二 + 周三 + 周四 + 周五 + 周六 + 周日 diff --git a/plugins/configuration/src/main/res/values-bg-rBG/strings.xml b/plugins/configuration/src/main/res/values-bg-rBG/strings.xml index 431fd6b295..11aa40e66a 100644 --- a/plugins/configuration/src/main/res/values-bg-rBG/strings.xml +++ b/plugins/configuration/src/main/res/values-bg-rBG/strings.xml @@ -157,4 +157,14 @@ Моля рестартирайте телефона си или AAPS от Системни настройки, иначе AAPS няма да има логове (това е важно за да се проследява и верифицира, че алгоритъма работи правилно)! + Формат на файла + Създаден на + Версия на AAPS + вариант + Име на пациента + Модел на телефона: + Криптиране + Нов формат + Нов формат (незащитен) + Непознат формат diff --git a/plugins/configuration/src/main/res/values-ca-rES/strings.xml b/plugins/configuration/src/main/res/values-ca-rES/strings.xml index ef555b1f54..8c76278131 100644 --- a/plugins/configuration/src/main/res/values-ca-rES/strings.xml +++ b/plugins/configuration/src/main/res/values-ca-rES/strings.xml @@ -134,4 +134,14 @@ + Format del fitxer + Creat: + Versió d\'AAPS + Variant de compilació + Exportant nom del pacient del dispositiu + Exportant model del dispositiu + Encriptació d\'arxius + Format nou d\'encriptació + Nou format de debug (no encriptat) + Format d\'exportació desconegut diff --git a/plugins/configuration/src/main/res/values-de-rDE/strings.xml b/plugins/configuration/src/main/res/values-de-rDE/strings.xml index 77cc5dbcb5..fdf86485f3 100644 --- a/plugins/configuration/src/main/res/values-de-rDE/strings.xml +++ b/plugins/configuration/src/main/res/values-de-rDE/strings.xml @@ -157,4 +157,14 @@ Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu.\nAndernfalls wird AndroidAPS nichts protokollieren (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert)! + Dateiformat + Erstellt am + AAPS-Version + Build-Variante + Patientenname des exportierenden Geräts + Modell des exportierenden Geräts + Dateiverschlüsselung + Neues verschlüsseltes Format + Neues Debugformat (unverschlüsselt) + Unbekanntes Export-Format diff --git a/plugins/configuration/src/main/res/values-el-rGR/strings.xml b/plugins/configuration/src/main/res/values-el-rGR/strings.xml index aa605fbe65..12c61fba86 100644 --- a/plugins/configuration/src/main/res/values-el-rGR/strings.xml +++ b/plugins/configuration/src/main/res/values-el-rGR/strings.xml @@ -157,4 +157,14 @@ Παρακαλώ κάντε επανεκίνηση στο τηλέφώνο ή restart στο AndroidAPS από τις Ρυθμίσεις Συστήματος, \nδιαφορετικά το AndroidAPS δεν θα έχει καταγραφή (επαληθεύστε ότι οι αλγόριθμοι δουλεύουν σωστά)! + Μορφή αρχείου + Δημιουργήθηκε στις + Έκδοση AAPS + Δημιουργία Παραλλαγής + Εξαγωγή ονόματος συσκευής ασθενούς + Εξαγωγή μοντέλου συσκευής + Κρυπτογράφηση αρχείων + Νέα κρυπτογραφημένη μορφή + Νέα μορφή εντοπισμού σφαλμάτων (μη κρυπτογραφημένη) + Άγνωστη μορφή εξαγωγής diff --git a/plugins/configuration/src/main/res/values-hu-rHU/strings.xml b/plugins/configuration/src/main/res/values-hu-rHU/strings.xml index 0186370c60..6be85915d7 100644 --- a/plugins/configuration/src/main/res/values-hu-rHU/strings.xml +++ b/plugins/configuration/src/main/res/values-hu-rHU/strings.xml @@ -4,6 +4,10 @@ Vissza BEFEJEZ Megjelenítési beállítások + Engedély + Az applikációnak helymeghatázozási engedélyre van szüksége a BT keresés és WiFi azonosítás használatához + Az applikációnak tárhely hozzáférési engedélyre van szüksége, hogy napló fájlokat tárolhasson és hogy a beállításokat exportálni tudja + %1$s igényli a megfelelő működéshez, hogy az akkumulátor optimalizálás ne vonatkozzon rá Jelenlegi mesterjelszó Állapot: Beteg neve @@ -26,4 +30,14 @@ + Fájlformátum + Létrehozva + AAPS verzió + Build variant + Eszköz páciensnevének exportálása + Készülékmodell exportálása + Fájltitkosítás + Új titkosított formátom + Új hibakeresési formátum (nem titkosított) + Ismeretlen export formátum diff --git a/plugins/configuration/src/main/res/values-it-rIT/strings.xml b/plugins/configuration/src/main/res/values-it-rIT/strings.xml index 0dd614c556..eeaa0dadcc 100644 --- a/plugins/configuration/src/main/res/values-it-rIT/strings.xml +++ b/plugins/configuration/src/main/res/values-it-rIT/strings.xml @@ -157,4 +157,14 @@ Riavvia il tuo telefono oppure fai ripartire AndroidAPS dalle impostazioni di sistema \naltrimenti Android APS non farà il log (è importante monitorare e verificare che gli algoritmi stiano funzionando correttamente)! + Formato file + Creato: + Versione AAPS + Variante build + Esportazione nome dispositivo paziente + Esportazione modello dispositivo + Crittografia file + Nuovo formato crittografato + Nuovo formato di debug (non crittografato) + Formato esportazione sconosciuto diff --git a/plugins/configuration/src/main/res/values-ko-rKR/strings.xml b/plugins/configuration/src/main/res/values-ko-rKR/strings.xml index 26dde3ea46..658852c82c 100644 --- a/plugins/configuration/src/main/res/values-ko-rKR/strings.xml +++ b/plugins/configuration/src/main/res/values-ko-rKR/strings.xml @@ -157,4 +157,14 @@ 폰을 다시시작하거나 시스템 설정에서 AAPS를 다시 시작하십시오 \n그렇지 않으면 Android APS에 로그 기록이 남지 않습니다 (알고리즘이 올바르게 작동하는지 확인하기 위해 로그가 중요합니다)! + 파일 형식 + 생성 일자 + AAPS 버전 + 다른 형식 빌드 + 장치의 환자 이름 내보내기 + 장치 모델 내보내기 + 파일 암호화 + 암호화된 새로운 형식 + 오류가 제거된 새로운 형식 (암호화되지 않음) + 알려지지 않은 내보내기 형식 diff --git a/plugins/configuration/src/main/res/values-lt-rLT/strings.xml b/plugins/configuration/src/main/res/values-lt-rLT/strings.xml index 807d9e1ff8..625eaf023f 100644 --- a/plugins/configuration/src/main/res/values-lt-rLT/strings.xml +++ b/plugins/configuration/src/main/res/values-lt-rLT/strings.xml @@ -157,4 +157,14 @@ Prašome perkrauti telefoną arba sistemos nustatymuose iš naujo paleisti AAPS \nkitaip AndroidAPS negalės registruoti prisijungimų (svarbu stebėti ir tikrinti, ar algoritmai veikia tinkamai)! + Failo formatas + Sukurta + AAPS versija + Versijos variantas + Eksportuojamas paciento vardas + Eksportuojamas prietaiso modelis + Failo šifravimas + Naujas šifruotas formatas + Naujas derinimo formatas (nešifruotas) + Nežinomas eksporto formatas diff --git a/plugins/configuration/src/main/res/values-pt-rBR/strings.xml b/plugins/configuration/src/main/res/values-pt-rBR/strings.xml index dd93594e82..787b7ae990 100644 --- a/plugins/configuration/src/main/res/values-pt-rBR/strings.xml +++ b/plugins/configuration/src/main/res/values-pt-rBR/strings.xml @@ -157,4 +157,14 @@ Por favor, reinicie seu telefone ou reinicie o AndroidAPS nas Configurações do Sistema \nCaso contrário o Android APS não terá registro (importante para rastrear e verificar se os algoritmos estão funcionando corretamente)! + Formato do arquivo + Criado em + Versão AAPS + Variante de Compilação + Exportando nome do paciente do dispositivo + Exportando modelo do dispositivo + Criptografia do arquivo + Novo formato de encriptação + Novo formato de depuração (não encriptado) + Formato de exportação desconhecido diff --git a/plugins/configuration/src/main/res/values-ru-rRU/strings.xml b/plugins/configuration/src/main/res/values-ru-rRU/strings.xml index 735ccdf57d..e27f2817c2 100644 --- a/plugins/configuration/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/configuration/src/main/res/values-ru-rRU/strings.xml @@ -157,4 +157,14 @@ Перезагрузите телефон или перезапустите AAPS из системных настроек \n иначе AAPS не будет вести лог (важно для отслеживания и проверки алгоритмов)! + Формат файла + Дата создания + Версия AAPS + Версия сборки + Имя пациента экспортируемого устройства + Модель экспортируемого устройства + Шифрование файла + Новый зашифрованный формат + Новый формат отладки (незашифрованный) + Неизвестный формат экспорта diff --git a/plugins/configuration/src/main/res/values-sv-rSE/strings.xml b/plugins/configuration/src/main/res/values-sv-rSE/strings.xml index 29f26b4253..b75839629f 100644 --- a/plugins/configuration/src/main/res/values-sv-rSE/strings.xml +++ b/plugins/configuration/src/main/res/values-sv-rSE/strings.xml @@ -157,4 +157,14 @@ Vänligen starta om telefonen eller starta om AAPS från systeminställningar \nannars kommer Android APS inte att ha loggning aktiverat (viktigt för att spåra och kontrollera att algoritmerna fungerar korrekt)! + Filformat + Skapad + AAPS-version + Build-variant + Exporterar patientens namn + Exporterar enhetsmodell + · Filkryptering + Nytt krypterat format + Nytt debug-format (okrypterat) + Okänt exportformat diff --git a/plugins/configuration/src/main/res/values-uk-rUA/strings.xml b/plugins/configuration/src/main/res/values-uk-rUA/strings.xml index b38f1e913e..ca1bc698d3 100644 --- a/plugins/configuration/src/main/res/values-uk-rUA/strings.xml +++ b/plugins/configuration/src/main/res/values-uk-rUA/strings.xml @@ -1,5 +1,6 @@ + Профіль @@ -7,4 +8,14 @@ + Формат файлу + Дата створення + Версія AAPS + Створити варіант + Ім\'я пацієнта пристрою, що експортується + Модель пристрою, що експортується + Шифрування файлу + Новий метод шифрування + Новий формат відлагодження (без шифрування) + Невідомий формат експорту diff --git a/plugins/configuration/src/main/res/values-zh-rCN/strings.xml b/plugins/configuration/src/main/res/values-zh-rCN/strings.xml index 13470b7066..5893b99889 100644 --- a/plugins/configuration/src/main/res/values-zh-rCN/strings.xml +++ b/plugins/configuration/src/main/res/values-zh-rCN/strings.xml @@ -136,4 +136,13 @@ + 文件格式 + 创建于 + 构建变体 + 导出设备的患者姓名 + 导出设备型号 + 文件加密密钥。 + 新的加密格式 + 新调试格式 (未加密) + 未知的导出格式 diff --git a/pump/pump-common/src/main/res/values-af-rZA/strings.xml b/pump/pump-common/src/main/res/values-af-rZA/strings.xml index 748348fff9..bd2651a3b3 100644 --- a/pump/pump-common/src/main/res/values-af-rZA/strings.xml +++ b/pump/pump-common/src/main/res/values-af-rZA/strings.xml @@ -37,6 +37,13 @@ Verkeerde Maks Basale op Pomp (moet %1$.2f %1$.2f wees),. + Slaap + Besig om te wek + Aktief + Fout met kommunikasie + Te lank op kommunikasie gewag + Pomp onbereikbaar + Ongeldige konfigirasie %1$d dae %1$d dae diff --git a/pump/pump-common/src/main/res/values-bg-rBG/strings.xml b/pump/pump-common/src/main/res/values-bg-rBG/strings.xml index 1abb751307..554df92424 100644 --- a/pump/pump-common/src/main/res/values-bg-rBG/strings.xml +++ b/pump/pump-common/src/main/res/values-bg-rBG/strings.xml @@ -65,6 +65,14 @@ Тип: + Никога не е свързвана + Спинка си + Събуждане + Активна + Грешка в комуникацията + Изтече времето за връзка + Помпата е недостъпна + Грешна конфигурация %1$d ден %1$d дни diff --git a/pump/pump-common/src/main/res/values-ca-rES/strings.xml b/pump/pump-common/src/main/res/values-ca-rES/strings.xml index b305ecc279..bafe60cc4d 100644 --- a/pump/pump-common/src/main/res/values-ca-rES/strings.xml +++ b/pump/pump-common/src/main/res/values-ca-rES/strings.xml @@ -40,6 +40,13 @@ Tipus: + En suspens + Iniciant + Activa + Error de comunicació + Temps d\'espera excedit en la comunicació + Bomba no accessible + Configuració no vàlida %1$d dia %1$d dies diff --git a/pump/pump-common/src/main/res/values-de-rDE/strings.xml b/pump/pump-common/src/main/res/values-de-rDE/strings.xml index 7f1ba4da63..2f20d6866f 100644 --- a/pump/pump-common/src/main/res/values-de-rDE/strings.xml +++ b/pump/pump-common/src/main/res/values-de-rDE/strings.xml @@ -65,6 +65,14 @@ Typ: + Noch nie verbunden + Schlafen + Aufwecken + Aktiv + Fehler bei der Kommunikation + Zeitüberschreitung bei Kommunikation + Pumpe nicht erreichbar + Ungültige Einstellung %1$d Tag %1$d Tage diff --git a/pump/pump-common/src/main/res/values-el-rGR/strings.xml b/pump/pump-common/src/main/res/values-el-rGR/strings.xml index 33a84bfd9e..146631166c 100644 --- a/pump/pump-common/src/main/res/values-el-rGR/strings.xml +++ b/pump/pump-common/src/main/res/values-el-rGR/strings.xml @@ -65,6 +65,14 @@ Τύπος: + Δεν επικοινωνήθηκε ποτέ + Sleeping + Ξύπνημα + Ενεργή + Σφάλμα με επικοινωνία + Λήξη χρόνου επικοινωνίας + Η αντλία δεν είναι διαθέσιμη + Μη έγκυρη παραμετροποίηση %1$d ημέρες %1$d ημέρες diff --git a/pump/pump-common/src/main/res/values-hr-rHR/strings.xml b/pump/pump-common/src/main/res/values-hr-rHR/strings.xml index 7908879c52..bd96c3f679 100644 --- a/pump/pump-common/src/main/res/values-hr-rHR/strings.xml +++ b/pump/pump-common/src/main/res/values-hr-rHR/strings.xml @@ -55,6 +55,7 @@ Tip: + Pumpa nedostupna %1$d dan %1$d dana diff --git a/pump/pump-common/src/main/res/values-hu-rHU/strings.xml b/pump/pump-common/src/main/res/values-hu-rHU/strings.xml index f984286dca..8ef16dcb3f 100644 --- a/pump/pump-common/src/main/res/values-hu-rHU/strings.xml +++ b/pump/pump-common/src/main/res/values-hu-rHU/strings.xml @@ -29,6 +29,14 @@ Hibás a pumpán beállított Max. Bázis (%1$.2f kell legyen). + Soha nem kapcsolódott + Alszik + Felébred + Aktív + Kapcsolati hiba + Kapcsolati időtúllépés + Pumpa nem elérhető + Érvénytelen konfiguráció %1$d nap %1$d nap diff --git a/pump/pump-common/src/main/res/values-it-rIT/strings.xml b/pump/pump-common/src/main/res/values-it-rIT/strings.xml index 8a01db474d..664d65dfdd 100644 --- a/pump/pump-common/src/main/res/values-it-rIT/strings.xml +++ b/pump/pump-common/src/main/res/values-it-rIT/strings.xml @@ -65,6 +65,14 @@ Tipo: + Mai contattato + In sospensione + Risveglio + Attivo + Errore nella comunicazione + Timeout della comunicazione + Micro irraggiungibile + Configurazione non valida %1$d giorno %1$d giorni diff --git a/pump/pump-common/src/main/res/values-iw-rIL/strings.xml b/pump/pump-common/src/main/res/values-iw-rIL/strings.xml index 8e848eeaf3..4568f36d6f 100644 --- a/pump/pump-common/src/main/res/values-iw-rIL/strings.xml +++ b/pump/pump-common/src/main/res/values-iw-rIL/strings.xml @@ -65,6 +65,8 @@ סוג: + מעולם לא נוצר קשר + חריגה ממגבלת הזמן לתקשורת יום %1$d יומיים diff --git a/pump/pump-common/src/main/res/values-ko-rKR/strings.xml b/pump/pump-common/src/main/res/values-ko-rKR/strings.xml index 131f6c56cf..ec93623189 100644 --- a/pump/pump-common/src/main/res/values-ko-rKR/strings.xml +++ b/pump/pump-common/src/main/res/values-ko-rKR/strings.xml @@ -65,6 +65,14 @@ 종류: + 연결되지 않음 + 수면 + 시작중 + 활성 + 연결오류 + 연결시간초과 + 펌프에 연결할 수 없습니다. + 유효하지 않은 설정 %1$d 일 diff --git a/pump/pump-common/src/main/res/values-lt-rLT/strings.xml b/pump/pump-common/src/main/res/values-lt-rLT/strings.xml index 16a9a0b322..775cec330b 100644 --- a/pump/pump-common/src/main/res/values-lt-rLT/strings.xml +++ b/pump/pump-common/src/main/res/values-lt-rLT/strings.xml @@ -65,6 +65,14 @@ Tipas: + Niekada nebuvo sujungta + Miego režime + Pažadinimas + Aktyvi + Ryšio klaida + Ryšiui skirtas laikas baigėsi + Pompa nepasiekiama + Neteisinga konfigūracija %1$d d. %1$d d. diff --git a/pump/pump-common/src/main/res/values-pt-rBR/strings.xml b/pump/pump-common/src/main/res/values-pt-rBR/strings.xml index 86e4eff8dc..a576e400f1 100644 --- a/pump/pump-common/src/main/res/values-pt-rBR/strings.xml +++ b/pump/pump-common/src/main/res/values-pt-rBR/strings.xml @@ -65,6 +65,14 @@ Tipo: + Nunca contatado + Dormindo + Acordar + Ativo + Erro com comunicação + Tempo limite para comunicação + Bomba inacessível + Configuração inválida %1$d dia %1$d dias diff --git a/pump/pump-common/src/main/res/values-ru-rRU/strings.xml b/pump/pump-common/src/main/res/values-ru-rRU/strings.xml index f7cf58363c..5a8240c1cf 100644 --- a/pump/pump-common/src/main/res/values-ru-rRU/strings.xml +++ b/pump/pump-common/src/main/res/values-ru-rRU/strings.xml @@ -65,6 +65,14 @@ Тип: + Никогда не подключалась + Спящий режим + Пробуждение + Работает + Ошибка связи + Таймаут связи + Помпа недоступна + Недопустимая конфигурация %1$d день %1$d дня diff --git a/pump/pump-common/src/main/res/values-sv-rSE/strings.xml b/pump/pump-common/src/main/res/values-sv-rSE/strings.xml index 6ed67f2b67..c594354aa3 100644 --- a/pump/pump-common/src/main/res/values-sv-rSE/strings.xml +++ b/pump/pump-common/src/main/res/values-sv-rSE/strings.xml @@ -65,6 +65,14 @@ Typ: + Aldrig ansluten + Sover + Väcker + Aktiv + Kommunikationsfel + Kommunikationstimeout + Pumpen kan inte nås + Felaktig konfiguration %1$d dag %1$d dagar diff --git a/pump/pump-common/src/main/res/values-zh-rCN/strings.xml b/pump/pump-common/src/main/res/values-zh-rCN/strings.xml index b182709841..eef90a0639 100644 --- a/pump/pump-common/src/main/res/values-zh-rCN/strings.xml +++ b/pump/pump-common/src/main/res/values-zh-rCN/strings.xml @@ -64,6 +64,10 @@ 类型: + 从未连接 + 休眠 + 唤醒中 + 启用 %1$d 天 diff --git a/pump/virtual/src/main/res/values-af-rZA/strings.xml b/pump/virtual/src/main/res/values-af-rZA/strings.xml index aee8423793..92c6f05599 100644 --- a/pump/virtual/src/main/res/values-af-rZA/strings.xml +++ b/pump/virtual/src/main/res/values-af-rZA/strings.xml @@ -4,4 +4,5 @@ Pomp integrasie vir pompe wat nog nie enige drywer het nie (oop lus) Virtuele pomp instellings + * Slegs diskrete waardes geen reekse word ondersteun as granulariteit vir basale/bolus in virtuele pomp. diff --git a/pump/virtual/src/main/res/values-bg-rBG/strings.xml b/pump/virtual/src/main/res/values-bg-rBG/strings.xml index eabc5f5d84..e554626b30 100644 --- a/pump/virtual/src/main/res/values-bg-rBG/strings.xml +++ b/pump/virtual/src/main/res/values-bg-rBG/strings.xml @@ -9,4 +9,5 @@ ВИРТУАЛНА ПОМПА Настойки Виртуална Помпа + * Само конкретни стойности! Диапазони не се поддържат за базал/болус при виртуална помпа. diff --git a/pump/virtual/src/main/res/values-ca-rES/strings.xml b/pump/virtual/src/main/res/values-ca-rES/strings.xml index b540962cca..1e98d0735b 100644 --- a/pump/virtual/src/main/res/values-ca-rES/strings.xml +++ b/pump/virtual/src/main/res/values-ca-rES/strings.xml @@ -4,4 +4,5 @@ Integració de bombes d\'insulina per les quals encara no existeix driver/controlador (Llaç obert) Configuració bomba virtual + * Només son acceptats valors discrets, no rangs, com a granularitat pels bolus/basals a la bomba virtual. diff --git a/pump/virtual/src/main/res/values-de-rDE/strings.xml b/pump/virtual/src/main/res/values-de-rDE/strings.xml index e6afb946f9..40f1ed0541 100644 --- a/pump/virtual/src/main/res/values-de-rDE/strings.xml +++ b/pump/virtual/src/main/res/values-de-rDE/strings.xml @@ -9,4 +9,5 @@ VIRTUELLE PUMPE Einstellungen der virtuellen Pumpe + * Bei der virtuellen Pumpe können nur einzelne Werte und keine Bereiche zur Festlegung der Basal/Bolus-Granularität gewählt werden. diff --git a/pump/virtual/src/main/res/values-hu-rHU/strings.xml b/pump/virtual/src/main/res/values-hu-rHU/strings.xml index d950e08e37..c873061c26 100644 --- a/pump/virtual/src/main/res/values-hu-rHU/strings.xml +++ b/pump/virtual/src/main/res/values-hu-rHU/strings.xml @@ -2,4 +2,5 @@ + * Csak diszkrét értékek, tartományok nem támogatottak a virtuális pumpa bázis/bólus felbontásaként. diff --git a/pump/virtual/src/main/res/values-it-rIT/strings.xml b/pump/virtual/src/main/res/values-it-rIT/strings.xml index 8c9ea4e00f..37e2f488b0 100644 --- a/pump/virtual/src/main/res/values-it-rIT/strings.xml +++ b/pump/virtual/src/main/res/values-it-rIT/strings.xml @@ -9,4 +9,5 @@ MICRO VIRTUALE Impostazioni micro virtuale + * Sono supportati solo valori discreti, non intervalli di valori, come incrementi per basale/bolo nel micro virtuale. diff --git a/pump/virtual/src/main/res/values-iw-rIL/strings.xml b/pump/virtual/src/main/res/values-iw-rIL/strings.xml index eed8acfe4e..9cb0cc5bfa 100644 --- a/pump/virtual/src/main/res/values-iw-rIL/strings.xml +++ b/pump/virtual/src/main/res/values-iw-rIL/strings.xml @@ -9,4 +9,5 @@ משאבה וירטואלית הגדרות משאבה וירטואלית + * רק ערכים בדידים, טווחים אינם נתמכים עבור ערכי בזאלי ובולוס במשאבה וירטואלית. diff --git a/pump/virtual/src/main/res/values-ko-rKR/strings.xml b/pump/virtual/src/main/res/values-ko-rKR/strings.xml index 2ed7db85ab..4cbc32e85b 100644 --- a/pump/virtual/src/main/res/values-ko-rKR/strings.xml +++ b/pump/virtual/src/main/res/values-ko-rKR/strings.xml @@ -9,4 +9,5 @@ 가상 펌프 가상펌프 설정 + * 가상 펌프에서는 Basal/Bolus에 대해 범위로 지정이 될 수 없고, 이산값(discrete values)만 지원 됩니다. diff --git a/pump/virtual/src/main/res/values-pt-rBR/strings.xml b/pump/virtual/src/main/res/values-pt-rBR/strings.xml index 0839dd984d..914c1ae022 100644 --- a/pump/virtual/src/main/res/values-pt-rBR/strings.xml +++ b/pump/virtual/src/main/res/values-pt-rBR/strings.xml @@ -9,4 +9,5 @@ BOMBA VIRTUAL Definições da bomba virtual + * Somente valores discretos nos intervalos são suportados como granularidade para basal/bolus na bomba virtual. diff --git a/pump/virtual/src/main/res/values-pt-rPT/strings.xml b/pump/virtual/src/main/res/values-pt-rPT/strings.xml index 80f66c9cbe..8f0674fe07 100644 --- a/pump/virtual/src/main/res/values-pt-rPT/strings.xml +++ b/pump/virtual/src/main/res/values-pt-rPT/strings.xml @@ -9,4 +9,5 @@ VIRTUAL PUMP Definições da bomba virtual + * Somente valores discretos nos intervalos são suportados como granularidade para basal/bolus na bomba virtual. diff --git a/pump/virtual/src/main/res/values-ru-rRU/strings.xml b/pump/virtual/src/main/res/values-ru-rRU/strings.xml index 829a5c843b..bdb42e4f57 100644 --- a/pump/virtual/src/main/res/values-ru-rRU/strings.xml +++ b/pump/virtual/src/main/res/values-ru-rRU/strings.xml @@ -9,4 +9,5 @@ ВИРТУАЛЬНАЯ ПОМПА настройки вирт помпы + * В виртуальной помпе поддерживаются только дискретные величины для обработки базала/болюса. diff --git a/pump/virtual/src/main/res/values-sv-rSE/strings.xml b/pump/virtual/src/main/res/values-sv-rSE/strings.xml index 64780b50e7..f53c0269a2 100644 --- a/pump/virtual/src/main/res/values-sv-rSE/strings.xml +++ b/pump/virtual/src/main/res/values-sv-rSE/strings.xml @@ -9,4 +9,5 @@ VIRTUELL PUMP Inställningar för Virtuell pump + * Inga spann stöds som granularitet för basal/bolus i den virtuella pumpen. Endast enkla värden. diff --git a/pump/virtual/src/main/res/values-uk-rUA/strings.xml b/pump/virtual/src/main/res/values-uk-rUA/strings.xml index d950e08e37..5e7fd07da6 100644 --- a/pump/virtual/src/main/res/values-uk-rUA/strings.xml +++ b/pump/virtual/src/main/res/values-uk-rUA/strings.xml @@ -2,4 +2,5 @@ + В віртуальній помпі тільки дискретні значення підтримуються для налаштування базала/болюса. diff --git a/pump/virtual/src/main/res/values-zh-rCN/strings.xml b/pump/virtual/src/main/res/values-zh-rCN/strings.xml index 0edd9cbd18..b3113ee861 100644 --- a/pump/virtual/src/main/res/values-zh-rCN/strings.xml +++ b/pump/virtual/src/main/res/values-zh-rCN/strings.xml @@ -4,4 +4,5 @@ 与我们还没有其驱动的泵集成(开环) 虚拟泵设置 + *在虚拟泵中,基础率/大剂量仅支持离散值,不支持范围值。