diff --git a/_docs/icons/ic_blueowl.svg b/_docs/icons/ic_blueowl.svg new file mode 100644 index 0000000000..56d970fa1a --- /dev/null +++ b/_docs/icons/ic_blueowl.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_docs/icons/ic_yellowowl.svg b/_docs/icons/ic_yellowowl.svg new file mode 100644 index 0000000000..8b739a831c --- /dev/null +++ b/_docs/icons/ic_yellowowl.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + 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 index 12e3c4bf90..6f9ad74f9e 100644 --- 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 @@ -21,4 +21,5 @@ 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 index 803b3124e9..413b2b31d4 100644 --- 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 @@ -33,4 +33,5 @@ Свързана Разкачане Изчакване за разкачане + 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 index 7dd443a35b..e2a9ff86bd 100644 --- 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 @@ -24,4 +24,5 @@ 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 index a4439c2e52..ccd535e84b 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 @@ -33,4 +33,11 @@ Připojeno Odpojuji Čekám na odpojení + + Vytvořeno: %1$s + Autor: %1$s + Jméno %1$s + Název souboru: %1$s + Verze ciferníku: %1$s + Výchozí ciferník 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 4ebcf8b79a..3dae764b93 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 @@ -33,4 +33,5 @@ Tilsuttet Afbryder Venter på afbrydelse + 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 index 77215fd049..6bd82feff6 100644 --- 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 @@ -33,4 +33,5 @@ Verbunden Verbindung wird getrennt Warte auf Trennung der Verbindung + 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 6f38c7e4d4..6e2511fd08 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 @@ -20,4 +20,5 @@ Δημιουργία σύνδεσης Συνδέθηκε Αποσυνδέεται + 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 3671d7b82d..bfd2113f9f 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 @@ -33,4 +33,5 @@ Conectado Desconectando Esperando la desconexión + 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 eb4c2d8302..81daf56453 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 @@ -33,4 +33,5 @@ Connectée Déconnexion en cours Attente de déconnexion + 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 index 59e1334555..7f4c422d88 100644 --- 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 @@ -22,4 +22,5 @@ Ag nascadh le %1$d s Nasctha Dícheangal + 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 index 4bfb445290..a30f9e054a 100644 --- 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 @@ -5,4 +5,5 @@ 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 index 41060994d2..1a2b166652 100644 --- 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 @@ -33,4 +33,5 @@ Connesso Disconnessione In attesa della disconnessione + 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 index b11eb3c440..7df3b8d5cb 100644 --- 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 @@ -33,4 +33,5 @@ מחובר מתנתק ממתין לניתוק + 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 index a72c1ec577..d78b6c6230 100644 --- 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 @@ -33,4 +33,5 @@ 接続されました 切断中 切断待ち + 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 index f196eb74d0..10ce7af4ed 100644 --- 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 @@ -24,4 +24,5 @@ Conectat Se deconectează Se așteaptă deconectarea + diff --git a/app/build.gradle b/app/build.gradle index f93cd70c50..57bf122073 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,7 +148,7 @@ android { versionName version + "-aapsclient" manifestPlaceholders = [ appIcon : "@mipmap/ic_yellowowl", - appIconRound: "@null" + appIconRound: "@mipmap/ic_yellowowl" ] } aapsclient2 { @@ -157,8 +157,8 @@ android { resValue "string", "app_name", "AAPSClient2" versionName version + "-aapsclient" manifestPlaceholders = [ - appIcon : "@mipmap/ic_yellowowl", - appIconRound: "@null" + appIcon : "@mipmap/ic_blueowl", + appIconRound: "@mipmap/ic_blueowl" ] } } diff --git a/app/src/main/java/info/nightscout/androidaps/MainActivity.kt b/app/src/main/java/info/nightscout/androidaps/MainActivity.kt index 2079a9a865..4d3cfc9ca6 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/MainActivity.kt @@ -21,6 +21,7 @@ import android.view.inputmethod.InputMethodManager import android.widget.EditText import android.widget.LinearLayout import android.widget.TextView +import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.widget.Toolbar import androidx.core.view.GravityCompat @@ -151,7 +152,7 @@ class MainActivity : DaggerAppCompatActivityWithResult() { .subscribe({ processPreferenceChange(it) }, fabricPrivacy::logException) if (startWizard() && !isRunningRealPumpTest()) { protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, { - startActivity(Intent(this, SetupWizardActivity::class.java)) + startActivity(Intent(this, SetupWizardActivity::class.java).setAction("info.nightscout.androidaps.MainActivity")) }) } androidPermission.notifyForStoragePermission(this) @@ -163,6 +164,17 @@ class MainActivity : DaggerAppCompatActivityWithResult() { androidPermission.notifyForBtConnectPermission(this) } passwordResetCheck(this) + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (binding.mainDrawerLayout.isDrawerOpen(GravityCompat.START)) + binding.mainDrawerLayout.closeDrawers() + else if (menuOpen) + menu?.close() + else if (binding.mainPager.currentItem != 0) + binding.mainPager.currentItem = 0 + else finish() + } + }) } private fun checkPluginPreferences(viewPager: ViewPager2) { @@ -219,9 +231,11 @@ class MainActivity : DaggerAppCompatActivityWithResult() { menuItem.setIcon(info.nightscout.core.ui.R.drawable.ic_settings) } menuItem.setOnMenuItemClickListener { - val intent = Intent(this, SingleFragmentActivity::class.java) - intent.putExtra("plugin", activePlugin.getPluginsList().indexOf(p)) - startActivity(intent) + startActivity( + Intent(this, SingleFragmentActivity::class.java) + .setAction("info.nightscout.androidaps.MainActivity") + .putExtra("plugin", activePlugin.getPluginsList().indexOf(p)) + ) binding.mainDrawerLayout.closeDrawers() true } @@ -318,26 +332,28 @@ class MainActivity : DaggerAppCompatActivityWithResult() { when (item.itemId) { R.id.nav_preferences -> { protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, { - val i = Intent(this, PreferencesActivity::class.java) - i.putExtra("id", -1) - startActivity(i) + startActivity( + Intent(this, PreferencesActivity::class.java) + .setAction("info.nightscout.androidaps.MainActivity") + .putExtra("id", -1) + ) }) return true } R.id.nav_historybrowser -> { - startActivity(Intent(this, HistoryBrowseActivity::class.java)) + startActivity(Intent(this, HistoryBrowseActivity::class.java).setAction("info.nightscout.androidaps.MainActivity")) return true } R.id.nav_treatments -> { - startActivity(Intent(this, TreatmentsActivity::class.java)) + startActivity(Intent(this, TreatmentsActivity::class.java).setAction("info.nightscout.androidaps.MainActivity")) return true } R.id.nav_setupwizard -> { protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, { - startActivity(Intent(this, SetupWizardActivity::class.java)) + startActivity(Intent(this, SetupWizardActivity::class.java).setAction("info.nightscout.androidaps.MainActivity")) }) return true } @@ -384,9 +400,11 @@ class MainActivity : DaggerAppCompatActivityWithResult() { R.id.nav_plugin_preferences -> { val plugin = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(binding.mainPager.currentItem) protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, { - val i = Intent(this, PreferencesActivity::class.java) - i.putExtra("id", plugin.preferencesId) - startActivity(i) + startActivity( + Intent(this, PreferencesActivity::class.java) + .setAction("info.nightscout.androidaps.MainActivity") + .putExtra("id", plugin.preferencesId) + ) }) return true } @@ -397,35 +415,18 @@ class MainActivity : DaggerAppCompatActivityWithResult() { } */ R.id.nav_defaultprofile -> { - startActivity(Intent(this, ProfileHelperActivity::class.java)) + startActivity(Intent(this, ProfileHelperActivity::class.java).setAction("info.nightscout.androidaps.MainActivity")) return true } R.id.nav_stats -> { - startActivity(Intent(this, StatsActivity::class.java)) + startActivity(Intent(this, StatsActivity::class.java).setAction("info.nightscout.androidaps.MainActivity")) return true } } return actionBarDrawerToggle.onOptionsItemSelected(item) } - override fun onBackPressed() { - if (binding.mainDrawerLayout.isDrawerOpen(GravityCompat.START)) { - binding.mainDrawerLayout.closeDrawers() - return - } - if (menuOpen) { - this.menu?.close() - return - } - if (binding.mainPager.currentItem != 0) { - binding.mainPager.currentItem = 0 - return - } - @Suppress("DEPRECATION") - super.onBackPressed() - } - // Correct place for calling setUserStats() would be probably MainApp // but we need to have it called at least once a day. Thus this location diff --git a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt index 7ea1d46f61..a6493ef61a 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt @@ -2,8 +2,10 @@ package info.nightscout.androidaps.activities import android.os.Bundle import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import androidx.appcompat.widget.SearchView +import androidx.core.view.MenuProvider import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceScreen import info.nightscout.androidaps.R @@ -33,25 +35,37 @@ class PreferencesActivity : DaggerAppCompatActivityWithResult(), PreferenceFragm it.putInt("id", preferenceId) } if (savedInstanceState == null) + @Suppress("CommitTransaction") supportFragmentManager.beginTransaction().replace(R.id.frame_layout, myPreferenceFragment!!).commit() - } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_preferences, menu) - val searchItem = menu.findItem(R.id.menu_search) - searchView = searchItem.actionView as SearchView - searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + // Add menu items without overriding methods in the Activity + addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { + // Add menu items here + menuInflater.inflate(R.menu.menu_preferences, menu) + val searchItem = menu.findItem(R.id.menu_search) + searchView = searchItem.actionView as SearchView + searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextChange(newText: String): Boolean { - myPreferenceFragment?.setFilter(newText) - return false + override fun onQueryTextChange(newText: String): Boolean { + myPreferenceFragment?.setFilter(newText) + return false + } + + override fun onQueryTextSubmit(query: String): Boolean = false + }) } - override fun onQueryTextSubmit(query: String): Boolean { - return false - } + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = + when (menuItem.itemId) { + android.R.id.home -> { + onBackPressedDispatcher.onBackPressed() + true + } + + else -> false + } }) - return super.onCreateOptionsMenu(menu) } override fun onPreferenceStartScreen(caller: PreferenceFragmentCompat, pref: PreferenceScreen): Boolean { @@ -60,18 +74,8 @@ class PreferencesActivity : DaggerAppCompatActivityWithResult(), PreferenceFragm it.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, pref.key) it.putInt("id", preferenceId) } + @Suppress("CommitTransaction") supportFragmentManager.beginTransaction().replace(R.id.frame_layout, fragment, pref.key).addToBackStack(pref.key).commit() return true } - - override fun onOptionsItemSelected(item: MenuItem): Boolean = - when (item.itemId) { - android.R.id.home -> { - @Suppress("DEPRECATION") - onBackPressed() - true - } - - else -> super.onOptionsItemSelected(item) - } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/implementations/ConfigImpl.kt b/app/src/main/java/info/nightscout/androidaps/implementations/ConfigImpl.kt index 445b2bfe55..4d536a54aa 100644 --- a/app/src/main/java/info/nightscout/androidaps/implementations/ConfigImpl.kt +++ b/app/src/main/java/info/nightscout/androidaps/implementations/ConfigImpl.kt @@ -18,6 +18,8 @@ class ConfigImpl @Inject constructor( override val SUPPORTED_NS_VERSION = 150000 // 15.0.0 override val APS = BuildConfig.FLAVOR == "full" override val NSCLIENT = BuildConfig.FLAVOR == "aapsclient" || BuildConfig.FLAVOR == "aapsclient2" + override val NSCLIENT1 = BuildConfig.FLAVOR == "aapsclient" + override val NSCLIENT2 = BuildConfig.FLAVOR == "aapsclient2" override val PUMPCONTROL = BuildConfig.FLAVOR == "pumpcontrol" override val PUMPDRIVERS = BuildConfig.FLAVOR == "full" || BuildConfig.FLAVOR == "pumpcontrol" override val FLAVOR = BuildConfig.FLAVOR diff --git a/build.gradle b/build.gradle index ecbc499da0..9fca843e97 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ buildscript { material_version = '1.9.0' gridlayout_version = '1.0.0' constraintlayout_version = '2.1.4' - preferencektx_version = '1.2.0' + preferencektx_version = '1.2.1' commonslang3_version = '3.13.0' commonscodec_version = '1.16.0' guava_version = '32.1.2-jre' diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/Config.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/Config.kt index 0bfee9e610..a5c4b9c01c 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/Config.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/Config.kt @@ -4,7 +4,9 @@ package info.nightscout.interfaces interface Config { val SUPPORTED_NS_VERSION: Int val APS: Boolean - val NSCLIENT: Boolean + val NSCLIENT: Boolean // aapsclient || aapsclient2 + val NSCLIENT1: Boolean // aapsclient + val NSCLIENT2: Boolean // aapsclient2 val PUMPCONTROL: Boolean val PUMPDRIVERS: Boolean val FLAVOR: String diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/Notification.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/Notification.kt index b15459c9b0..6509fb7f61 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/Notification.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/notifications/Notification.kt @@ -137,6 +137,7 @@ open class Notification { const val PATCH_NOT_ACTIVE = 83 const val PUMP_SETTINGS_FAILED = 84 const val PUMP_TIMEZONE_UPDATE_FAILED = 85 + const val BLUETOOTH_NOT_SUPPORTED = 86 const val USER_MESSAGE = 1000 diff --git a/core/ui/src/main/res/mipmap-hdpi/ic_blueowl.png b/core/ui/src/main/res/mipmap-hdpi/ic_blueowl.png new file mode 100644 index 0000000000..edb03f42a8 Binary files /dev/null and b/core/ui/src/main/res/mipmap-hdpi/ic_blueowl.png differ diff --git a/core/ui/src/main/res/mipmap-hdpi/ic_yellowowl.png b/core/ui/src/main/res/mipmap-hdpi/ic_yellowowl.png index fd2d6dd22d..e937e70c33 100644 Binary files a/core/ui/src/main/res/mipmap-hdpi/ic_yellowowl.png and b/core/ui/src/main/res/mipmap-hdpi/ic_yellowowl.png differ diff --git a/core/ui/src/main/res/mipmap-mdpi/ic_blueowl.png b/core/ui/src/main/res/mipmap-mdpi/ic_blueowl.png new file mode 100644 index 0000000000..b47bd611b3 Binary files /dev/null and b/core/ui/src/main/res/mipmap-mdpi/ic_blueowl.png differ diff --git a/core/ui/src/main/res/mipmap-mdpi/ic_yellowowl.png b/core/ui/src/main/res/mipmap-mdpi/ic_yellowowl.png index 962fd4a848..e31afb9feb 100644 Binary files a/core/ui/src/main/res/mipmap-mdpi/ic_yellowowl.png and b/core/ui/src/main/res/mipmap-mdpi/ic_yellowowl.png differ diff --git a/core/ui/src/main/res/mipmap-xhdpi/ic_blueowl.png b/core/ui/src/main/res/mipmap-xhdpi/ic_blueowl.png new file mode 100644 index 0000000000..9f82d3e200 Binary files /dev/null and b/core/ui/src/main/res/mipmap-xhdpi/ic_blueowl.png differ diff --git a/core/ui/src/main/res/mipmap-xhdpi/ic_yellowowl.png b/core/ui/src/main/res/mipmap-xhdpi/ic_yellowowl.png index a1bf6cd6c3..59940e87be 100644 Binary files a/core/ui/src/main/res/mipmap-xhdpi/ic_yellowowl.png and b/core/ui/src/main/res/mipmap-xhdpi/ic_yellowowl.png differ diff --git a/core/ui/src/main/res/mipmap-xxhdpi/ic_blueowl.png b/core/ui/src/main/res/mipmap-xxhdpi/ic_blueowl.png new file mode 100644 index 0000000000..b66df081d5 Binary files /dev/null and b/core/ui/src/main/res/mipmap-xxhdpi/ic_blueowl.png differ diff --git a/core/ui/src/main/res/mipmap-xxhdpi/ic_yellowowl.png b/core/ui/src/main/res/mipmap-xxhdpi/ic_yellowowl.png index 8f6166d44e..bcc0263e88 100644 Binary files a/core/ui/src/main/res/mipmap-xxhdpi/ic_yellowowl.png and b/core/ui/src/main/res/mipmap-xxhdpi/ic_yellowowl.png differ diff --git a/core/ui/src/main/res/mipmap-xxxhdpi/ic_blueowl.png b/core/ui/src/main/res/mipmap-xxxhdpi/ic_blueowl.png new file mode 100644 index 0000000000..2e220aaab0 Binary files /dev/null and b/core/ui/src/main/res/mipmap-xxxhdpi/ic_blueowl.png differ diff --git a/core/ui/src/main/res/mipmap-xxxhdpi/ic_yellowowl.png b/core/ui/src/main/res/mipmap-xxxhdpi/ic_yellowowl.png index 304b0975dd..609afcb78c 100644 Binary files a/core/ui/src/main/res/mipmap-xxxhdpi/ic_yellowowl.png and b/core/ui/src/main/res/mipmap-xxxhdpi/ic_yellowowl.png differ 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 01c5b42bfb..19b392f309 100644 --- a/core/ui/src/main/res/values-cs-rCZ/strings.xml +++ b/core/ui/src/main/res/values-cs-rCZ/strings.xml @@ -376,6 +376,9 @@ SACHARIDY %1$d g ROZLOŽENÝ BOLUS %1$.2f U %2$d min NAČÍST UDÁLOSTI + SMAZAT ALARMY + DEAKTIVOVAT + AKTUALIZOVAT ČAS NAČÍST HISTORII %1$d NAČÍST CDD NASTAVIT PROFIL @@ -453,6 +456,7 @@ COB vs. IOB !!!!! Detekována pomalá absorbce sacharidů: %2$d%% času. Překontrolujte kalkulaci. COB může být nadhodnocené, a proto může být započítáno více inzulínu !!!!!]]> Podat tuto část z výsledku kalkulace [%] + Časový limit staré glykémie [min] Použito omezení bolusu: %1$.2f U na %2$.2f U Bolus nebude pumpou vydán, pouze zaznamenán Spustit alarm, když je čas na jídlo 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 66ff0c0127..63a66e9048 100644 --- a/core/ui/src/main/res/values-es-rES/strings.xml +++ b/core/ui/src/main/res/values-es-rES/strings.xml @@ -376,6 +376,9 @@ CARBOHIDRATOS %1$d g BOLO EXTENDIDO %1$.2f U %2$d min CARGAR EVENTOS + BORRAR ALARMAS + DESACTIVAR + ACTUALIZAR HORA CARGAR HISTORIAL %1$d CARGAR TDDs ESTABLECER PERFIL @@ -453,6 +456,7 @@ COB vs IOB ¡Se ha detectado una absorción lenta de carbohidratos: %2$d%% de tiempo. Comprueba de nuevo el cálculo. Los COB se pueden sobrestimar, por lo que se podría administrar más insulina de la cuenta!]]> Administrar esta parte del resultado del asistente de bolos [%] + Antiguo umbral de tiempo de glucemia [min] Restricción de bolo aplicada: %1$.2f U a %2$.2f U El bolo sólo se anotará (no será entregado por la bomba) Ejecutar alarma cuando sea hora de comer 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 d50d8ec938..e5d6e0c5f2 100644 --- a/core/ui/src/main/res/values-fr-rFR/strings.xml +++ b/core/ui/src/main/res/values-fr-rFR/strings.xml @@ -376,6 +376,9 @@ GLUCIDES %1$d g BOLUS ÉTENDU %1$.2f U %2$d min CHARGER LES ÉVÉNEMENTS + SUPPRIMER LES ALARMES + DÉSACTIVER + METTRE À JOUR L\'HEURE CHARGER L\'HISTORIQUE %1$d CHARGER les DTQ DÉFINIR LE PROFIL @@ -451,8 +454,9 @@ Assistant bolus Vous avez une glycémie élevée. Au lieu de manger maintenant, il est recommandé d\'attendre une meilleure glycémie. Voulez-vous faire un bolus de correction maintenant et avoir une alerte quand il sera temps de manger ? Dans ce cas, aucun glucide ne sera enregistré et vous devrez utiliser l\'assistant à nouveau lorsque nous vous le rappelons. GA vs IA - !!!!! Absorption lente des glucides détectée : %2$d%% du temps. Vérifiez de nouveau votre calcul. Les GA (Glucides Actifs) peuvent être surestimés et alors plus d\'insuline pourrait être délivré !!!!!]]> + !!!!! Absorption lente des glucides détectée dans %2$d%% des cas. Vérifiez de nouveau votre calcul. Les GA (Glucides Actifs) peuvent être surestimés et alors trop d\'insuline pourrait être injectée !!!!!]]> Injecter ce pourcentage du bolus calculé par l’assistant [%] + Durée limite après la dernière Gly reçue pour appliquer le % de bolus [min] Contrainte de Bolus appliquée : %1$.2f U vers %2$.2f U Les bolus seront seulement enregistrés (pas délivrés par la pompe) Alerter quand il est temps de manger 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 c43a90f3c3..b70d1551fe 100644 --- a/core/ui/src/main/res/values-it-rIT/strings.xml +++ b/core/ui/src/main/res/values-it-rIT/strings.xml @@ -376,6 +376,7 @@ CHO %1$d g BOLO ESTESO %1$.2f U %2$d min CARICA EVENTI + DISATTIVA CARICA STORICO %1$d CARICA TDD IMPOSTA PROFILO @@ -453,6 +454,7 @@ COB vs IOB !!!!! Rilevato assorbimento lento dei carboidrati: %2$d%% del tempo. Ricontrolla il tuo calcolo. COB potrebbero essere sovrastimati e potrebbe essere somministrata più insulina !!!!!]]> Eroga parte del risultato del calcolatore [%] + Soglia tempo glicemia \"vecchia\" [min] Vincolo bolo applicato: %1$.2f U a %2$.2f U Il bolo sarà solo registrato (non erogato dal micro) Esegui allarme quando è tempo di mangiare 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 83d3228c30..6fd3660f69 100644 --- a/core/ui/src/main/res/values-ru-rRU/strings.xml +++ b/core/ui/src/main/res/values-ru-rRU/strings.xml @@ -23,7 +23,7 @@ мг/дл ммоль/л Сохранить - Отложить + Убрать оповещение Виртуальная помпа Ограничения Суперболюс @@ -527,7 +527,7 @@ Сообщение OK Отменить - ОТКЛОНИТЬ + УБРАТЬ Да Нет Закрыть diff --git a/implementation/src/main/java/info/nightscout/implementation/resources/IconsProviderImplementation.kt b/implementation/src/main/java/info/nightscout/implementation/resources/IconsProviderImplementation.kt index b252cb654c..5b7ad08334 100644 --- a/implementation/src/main/java/info/nightscout/implementation/resources/IconsProviderImplementation.kt +++ b/implementation/src/main/java/info/nightscout/implementation/resources/IconsProviderImplementation.kt @@ -11,7 +11,8 @@ class IconsProviderImplementation @Inject constructor(private val config: Config override fun getIcon(): Int = when { - config.NSCLIENT -> info.nightscout.core.ui.R.mipmap.ic_yellowowl + config.NSCLIENT2 -> info.nightscout.core.ui.R.mipmap.ic_blueowl + config.NSCLIENT1 -> info.nightscout.core.ui.R.mipmap.ic_yellowowl config.PUMPCONTROL -> info.nightscout.core.ui.R.mipmap.ic_pumpcontrol else -> info.nightscout.core.ui.R.mipmap.ic_launcher } 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 d66cd58d5c..14ee2eb279 100644 --- a/plugins/aps/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/aps/src/main/res/values-fr-rFR/strings.xml @@ -70,9 +70,9 @@ Activer les SMB lorsqu\'il y a une cible temporaire active (repas imminent, exercise) Activer les SMB avec cibles temp hautes Activer les SMB quand il y a une cible temp haute active (exercise, au dessus de 100 mg/dl ou 5.5 mmol/l) - Max minutes de basal pour limiter le SMB + Max minutes de basal comme limite des SMB SMB RNS minutes max - Minutes de basal max pour limiter les SMB des RNS + Minutes de basal max comme limite des SMB pendant les RNS Glucides minimum requis pour suggestion Quantité de glucides minimum en g pour afficher une alerte de suggestion de glucides. Les suggestions inférieures ne déclencheront pas de notification. Valeur glycémique au-dessous de laquelle l\'injection de l\'insuline est suspendu. La valeur par défaut utilise le modèle standard de la cible. L\'utilisateur peut choisir entre 60mg/dl (3.3mmol/l) et 100mg/dl (5.5mmol/l). Les valeurs au-dessous de 65/3.6 déclenchent l\'utilisation du modèle standard 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 0ac3c06831..22eb2b16a1 100644 --- a/plugins/automation/src/main/res/values-it-rIT/strings.xml +++ b/plugins/automation/src/main/res/values-it-rIT/strings.xml @@ -92,6 +92,7 @@ Ora ultimo bolo %1$s %2$s min fa COB COB %1$s %2$.0f + Frequenza cardiaca IOB [U]: Dist [m]: Tempo ricorrente 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 a7001a7448..b5fb9d3085 100644 --- a/plugins/automation/src/main/res/values-no-rNO/strings.xml +++ b/plugins/automation/src/main/res/values-no-rNO/strings.xml @@ -92,6 +92,8 @@ Siste bolus for %1$s %2$s min siden COB COB %1$s %2$.0f + Puls + HR %1$s %2$.0f IOB [U]: Dist [m]: Gjentakende tidspunkt 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 e27718b842..e0dd020252 100644 --- a/plugins/automation/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/automation/src/main/res/values-ru-rRU/strings.xml @@ -92,6 +92,8 @@ Время болюса %1$s %2$s мин назад Активн углеводы Активн углеводы %1$s %2$.0f + Частота сердечных сокращений + ЧСС%1$s%2$.0f Акт инс IOB [U]: Расст [м]: Время повторения diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/activities/SingleFragmentActivity.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/activities/SingleFragmentActivity.kt index cab20ee2e1..1e7e93ccbb 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/activities/SingleFragmentActivity.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/activities/SingleFragmentActivity.kt @@ -3,7 +3,9 @@ package info.nightscout.configuration.activities import android.content.Intent import android.os.Bundle import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem +import androidx.core.view.MenuProvider import info.nightscout.configuration.R import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase @@ -33,29 +35,32 @@ class SingleFragmentActivity : DaggerAppCompatActivityWithResult() { supportFragmentManager.fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), plugin?.pluginDescription?.fragmentClass!!) ).commit() } - } - override fun onOptionsItemSelected(item: MenuItem): Boolean = - when (item.itemId) { - android.R.id.home -> { - finish() - true + // Add menu items without overriding methods in the Activity + addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { + if (plugin?.preferencesId != -1) menuInflater.inflate(R.menu.menu_single_fragment, menu) } - R.id.nav_plugin_preferences -> { - protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, { - val i = Intent(this, uiInteraction.preferencesActivity) - i.putExtra("id", plugin?.preferencesId) - startActivity(i) - }, null) - true - } + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = + when (menuItem.itemId) { + android.R.id.home -> { + onBackPressedDispatcher.onBackPressed() + true + } - else -> super.onOptionsItemSelected(item) - } + R.id.nav_plugin_preferences -> { + protectionCheck.queryProtection(this@SingleFragmentActivity, ProtectionCheck.Protection.PREFERENCES, { + val i = Intent(this@SingleFragmentActivity, uiInteraction.preferencesActivity) + .setAction("info.nightscout.configuration.activities.SingleFragmentActivity") + .putExtra("id", plugin?.preferencesId) + startActivity(i) + }, null) + true + } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - if (plugin?.preferencesId != -1) menuInflater.inflate(R.menu.menu_single_fragment, menu) - return super.onCreateOptionsMenu(menu) + else -> false + } + }) } } \ No newline at end of file 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 27ec178c8d..acee12e375 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 @@ -3,9 +3,12 @@ package info.nightscout.configuration.maintenance.activities import android.content.Intent import android.os.Bundle import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.core.view.MenuProvider import androidx.fragment.app.FragmentActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -41,6 +44,21 @@ class PrefImportListActivity : TranslatedDaggerAppCompatActivity() { binding.recyclerview.layoutManager = LinearLayoutManager(this) binding.recyclerview.adapter = RecyclerViewAdapter(prefFileListProvider.listPreferenceFiles(loadMetadata = true)) + + // Add menu items without overriding methods in the Activity + addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {} + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = + when (menuItem.itemId) { + android.R.id.home -> { + onBackPressedDispatcher.onBackPressed() + true + } + + else -> false + } + }) } inner class RecyclerViewAdapter internal constructor(private var prefFileList: List) : RecyclerView.Adapter() { @@ -106,12 +124,4 @@ class PrefImportListActivity : TranslatedDaggerAppCompatActivity() { } } } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (item.itemId == android.R.id.home) { - finish() - return true - } - return super.onOptionsItemSelected(item) - } } \ No newline at end of file diff --git a/plugins/configuration/src/main/java/info/nightscout/configuration/setupwizard/SetupWizardActivity.kt b/plugins/configuration/src/main/java/info/nightscout/configuration/setupwizard/SetupWizardActivity.kt index a3ae79c65a..0bd2c50e21 100644 --- a/plugins/configuration/src/main/java/info/nightscout/configuration/setupwizard/SetupWizardActivity.kt +++ b/plugins/configuration/src/main/java/info/nightscout/configuration/setupwizard/SetupWizardActivity.kt @@ -4,6 +4,7 @@ import android.content.Intent import android.os.Bundle import android.view.View import android.widget.TextView +import androidx.activity.OnBackPressedCallback import dagger.android.HasAndroidInjector import info.nightscout.configuration.R import info.nightscout.configuration.activities.DaggerAppCompatActivityWithResult @@ -64,6 +65,12 @@ class SetupWizardActivity : DaggerAppCompatActivityWithResult() { generateLayout() updateButtons() } + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (currentWizardPage == 0) + OKDialog.showConfirmation(this@SetupWizardActivity, rh.gs(R.string.exitwizard)) { finish() } else showPreviousPage(null) + } + }) } override fun onPause() { @@ -134,10 +141,6 @@ class SetupWizardActivity : DaggerAppCompatActivityWithResult() { } } - override fun onBackPressed() { - if (currentWizardPage == 0) OKDialog.showConfirmation(this, rh.gs(R.string.exitwizard)) { finish() } else showPreviousPage(null) - } - @Suppress("UNUSED_PARAMETER") fun exitPressed(view: View?) { sp.putBoolean(R.string.key_setupwizard_processed, true) @@ -147,7 +150,7 @@ class SetupWizardActivity : DaggerAppCompatActivityWithResult() { @Suppress("UNUSED_PARAMETER") fun showNextPage(view: View?) { finish() - val intent = Intent(this, SetupWizardActivity::class.java) + val intent = Intent(this, SetupWizardActivity::class.java).setAction("info.nightscout.configuration.setupwizard.SetupWizardActivity") intent.putExtra(intentMessage, nextPage(null)) startActivity(intent) } @@ -155,7 +158,7 @@ class SetupWizardActivity : DaggerAppCompatActivityWithResult() { @Suppress("UNUSED_PARAMETER") fun showPreviousPage(view: View?) { finish() - val intent = Intent(this, SetupWizardActivity::class.java) + val intent = Intent(this, SetupWizardActivity::class.java).setAction("info.nightscout.configuration.setupwizard.SetupWizardActivity") intent.putExtra(intentMessage, previousPage(null)) startActivity(intent) } @@ -164,7 +167,7 @@ class SetupWizardActivity : DaggerAppCompatActivityWithResult() { @Suppress("UNUSED_PARAMETER") fun finishSetupWizard(view: View?) { sp.putBoolean(R.string.key_setupwizard_processed, true) - val intent = Intent(this, uiInteraction.mainActivity) + val intent = Intent(this, uiInteraction.mainActivity).setAction("info.nightscout.configuration.setupwizard.SetupWizardActivity") intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) startActivity(intent) finish() diff --git a/plugins/main/src/main/res/values-cs-rCZ/strings.xml b/plugins/main/src/main/res/values-cs-rCZ/strings.xml index 3dbe4da682..b299bb55b8 100644 --- a/plugins/main/src/main/res/values-cs-rCZ/strings.xml +++ b/plugins/main/src/main/res/values-cs-rCZ/strings.xml @@ -243,6 +243,7 @@ Krátké názvy modulů Zobrazovat kolonku poznámky v dialozích ošetření Kalkulátor provede výpočet, ale dodána je pouze tato část inzulínu. Výhodné při používání SMB algoritmu. + Vydat celý bolus (100%), pokud je glykémie starší než Povolit poradce s bolusem Při vysoké glykémii použijte připomenutí, abyste začali jíst později, namísto výsledku z kalkulátoru („prebolus“) Povolit superbolus @@ -315,6 +316,11 @@ Ukazovat SMB na hodinkách jako normální bolus. Zobrazovat predikce na hodinkách. Predikce + Vlastní ciferník: %1$s + Nahrát ciferník + Odeslat ciferník + Exportovat ciferník + Vlastní ciferník exportován Znovu poslat všechna data Otevřít nastavení na hodinkách Wear diff --git a/plugins/main/src/main/res/values-es-rES/strings.xml b/plugins/main/src/main/res/values-es-rES/strings.xml index a603ac9bf9..1a6086c56f 100644 --- a/plugins/main/src/main/res/values-es-rES/strings.xml +++ b/plugins/main/src/main/res/values-es-rES/strings.xml @@ -243,6 +243,7 @@ Nombres cortos en pestañas Mostrar el campo notas en diálogos de tratamientos El asistente de bolos realiza el cálculo, pero solo se entrega esta parte de la insulina calculada. Útil con el algoritmo SMB. + Administrar bolo completo (100%) si la glucemia es mayor de Habilitar asistente de bolo Utiliza un recordatorio para empezar a comer más tarde, en lugar del resultado del asistente durante una glucemia alta (\"pre-bolo\") Activar superbolo en asistente diff --git a/plugins/main/src/main/res/values-fr-rFR/strings.xml b/plugins/main/src/main/res/values-fr-rFR/strings.xml index ab4b81dc68..09d2dff60d 100644 --- a/plugins/main/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/main/src/main/res/values-fr-rFR/strings.xml @@ -243,6 +243,7 @@ Raccourcir les titres des onglets Affiche les notes dans les dialogues L\'assistant bolus effectue le calcul mais seulement ce pourcentage de l\'insuline calculée est délivré. Utile avec l\'algorithme SMB. + Faire un bolus complet (100%) si la glycémie est plus ancienne que Activer l\'assistant bolus Utiliser un rappel pour commencer le repas à la place du résultat de l\'assistant quand la glycémie est élevée (\"pré-bolus\") Activer les Superbolus dans l’Assistant diff --git a/plugins/main/src/main/res/values-it-rIT/strings.xml b/plugins/main/src/main/res/values-it-rIT/strings.xml index 11fe67fcef..1fdfed8233 100644 --- a/plugins/main/src/main/res/values-it-rIT/strings.xml +++ b/plugins/main/src/main/res/values-it-rIT/strings.xml @@ -243,6 +243,7 @@ Accorcia titoli schede Finestre tratt.nto: mostra campo note Il calcolatore esegue il calcolo, ma solo questa parte dell\'insulina calcolata è erogata. Utile con algoritmo SMB. + Eroga bolo completo (100%) se la glicemia è più \"vecchia\" di Abilita consiglio bolo Usa un promemoria per iniziare a mangiare invece del risultato del calcolatore durante la glicemia alta (\"pre-bolo\") Abilita superbolo nel calcolatore diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/openhumans/ui/OHLoginActivity.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/openhumans/ui/OHLoginActivity.kt index 1dc79a3912..b7df7d81d8 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/openhumans/ui/OHLoginActivity.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/openhumans/ui/OHLoginActivity.kt @@ -3,11 +3,15 @@ package info.nightscout.plugins.sync.openhumans.ui import android.content.Intent import android.net.Uri import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.widget.CheckBox +import androidx.activity.OnBackPressedCallback import androidx.activity.viewModels import androidx.browser.customtabs.CustomTabsIntent +import androidx.core.view.MenuProvider import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat @@ -94,6 +98,25 @@ class OHLoginActivity : TranslatedDaggerAppCompatActivity() { if (code != null) { viewModel.submitBearerToken(code) } + // Add menu items without overriding methods in the Activity + addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {} + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = + when (menuItem.itemId) { + android.R.id.home -> { + onBackPressedDispatcher.onBackPressed() + true + } + + else -> false + } + }) + onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (!viewModel.goBack()) finish() + } + }) } override fun onNewIntent(intent: Intent) { @@ -103,21 +126,4 @@ class OHLoginActivity : TranslatedDaggerAppCompatActivity() { viewModel.submitBearerToken(code) } } - - override fun onBackPressed() { - if (!viewModel.goBack()) { - @Suppress("DEPRECATION") - super.onBackPressed() - } - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean = - if (item.itemId == android.R.id.home) { - @Suppress("DEPRECATION") - onBackPressed() - true - } else { - super.onOptionsItemSelected(item) - } - } \ No newline at end of file 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 cbe56f27f5..0fd7b2c9ff 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 @@ -12,6 +12,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.comboctl.android.AndroidBluetoothInterface import info.nightscout.comboctl.base.BasicProgressStage import info.nightscout.comboctl.base.BluetoothException +import info.nightscout.comboctl.base.BluetoothNotAvailableException import info.nightscout.comboctl.base.BluetoothNotEnabledException import info.nightscout.comboctl.base.ComboException import info.nightscout.comboctl.base.DisplayFrame @@ -346,10 +347,24 @@ class ComboV2Plugin @Inject constructor ( _pairedStateUIFlow.value = paired pumpManager = newPumpManager + } catch (_: BluetoothNotAvailableException) { + uiInteraction.addNotification( + Notification.BLUETOOTH_NOT_SUPPORTED, + text = rh.gs(R.string.combov2_bluetooth_not_supported), + level = Notification.URGENT + ) + + // Deliberately _not_ setting the driver state here before + // exiting this scope. We are essentially aborting the start + // since Bluetooth is not supported by the hardware, so the + // driver cannot do anything, and therefore cannot leave the + // DriverState.NotInitialized state. + aapsLogger.error(LTag.PUMP, "combov2 driver start cannot be completed since the hardware does not support Bluetooth") + return@runWithPermissionCheck } catch (_: BluetoothNotEnabledException) { uiInteraction.addNotification( Notification.BLUETOOTH_NOT_ENABLED, - text = rh.gs(info.nightscout.core.ui.R.string.ble_not_enabled), + text = rh.gs(R.string.combov2_bluetooth_disabled), level = Notification.INFO ) @@ -761,7 +776,7 @@ class ComboV2Plugin @Inject constructor ( } catch (_: BluetoothNotEnabledException) { uiInteraction.addNotification( Notification.BLUETOOTH_NOT_ENABLED, - text = rh.gs(info.nightscout.core.ui.R.string.ble_not_enabled), + text = rh.gs(R.string.combov2_bluetooth_disabled), level = Notification.INFO ) } catch (e: Exception) { diff --git a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/activities/ComboV2PairingActivity.kt b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/activities/ComboV2PairingActivity.kt index 8ecbda0c7a..cc5c220f89 100644 --- a/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/activities/ComboV2PairingActivity.kt +++ b/pump/combov2/src/main/kotlin/info/nightscout/pump/combov2/activities/ComboV2PairingActivity.kt @@ -9,6 +9,7 @@ import android.text.Editable import android.text.TextWatcher import android.view.View import androidx.activity.ComponentActivity +import androidx.activity.OnBackPressedCallback import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat @@ -17,9 +18,11 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import info.nightscout.comboctl.base.BasicProgressStage +import info.nightscout.comboctl.base.PAIRING_PIN_SIZE import info.nightscout.comboctl.base.PairingPIN import info.nightscout.core.ui.activities.TranslatedDaggerAppCompatActivity import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.pump.combov2.ComboV2Plugin import info.nightscout.pump.combov2.R import info.nightscout.pump.combov2.databinding.Combov2PairingActivityBinding @@ -184,13 +187,13 @@ class ComboV2PairingActivity : TranslatedDaggerAppCompatActivity() { .launchIn(this) } } - } - - override fun onBackPressed() { - aapsLogger.info(LTag.PUMP, "User pressed the back button; cancelling any ongoing pairing") - combov2Plugin.cancelPairing() - @Suppress("DEPRECATION") - super.onBackPressed() + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + aapsLogger.info(LTag.PUMP, "User pressed the back button; cancelling any ongoing pairing") + combov2Plugin.cancelPairing() + finish() + } + }) } override fun onDestroy() { @@ -334,6 +337,10 @@ class ComboV2PairingActivity : TranslatedDaggerAppCompatActivity() { // We need to skip whitespaces since the // TextWatcher above inserts some. val pinString = binding.combov2PinEntryEdit.text.replace(whitespaceRemovalRegex, "") + if (pinString.length != PAIRING_PIN_SIZE) { + ToastUtils.showToastInUiThread(this, rh.gs(R.string.combov2_pairing_invalid_pin_length, PAIRING_PIN_SIZE, pinString.length)) + return@setOnClickListener + } runBlocking { val PIN = PairingPIN(pinString.map { it - '0' }.toIntArray()) combov2Plugin.providePairingPIN(PIN) diff --git a/pump/combov2/src/main/res/values-cs-rCZ/strings.xml b/pump/combov2/src/main/res/values-cs-rCZ/strings.xml index 83e3e6a5d3..785c57faee 100644 --- a/pump/combov2/src/main/res/values-cs-rCZ/strings.xml +++ b/pump/combov2/src/main/res/values-cs-rCZ/strings.xml @@ -47,6 +47,7 @@ Pokud po více než ~5 minutách není navázáno žádné spojení:\n\n Časový limit pro vyhledávání Combo dosažen Párování se nezdařilo z důvodu chyby: %1$s Párování přerušeno z neznámých důvodů + "Neplatná délka PINu párování: potřeba %1$d číslic, zadáno %2$d" Vyhledávání pumpy Navazování připojení Bluetooth (pokus č. %1$d) Provádím navazování spojení s pumpou @@ -124,4 +125,6 @@ Pokud po více než ~5 minutách není navázáno žádné spojení:\n\n Obnovování stavu pumpy po nahlášení chyby Zpět Nelze provést párování, protože ovladač není inicializován. To se obvykle stává, protože nebyla udělena potřebná oprávnění Bluetooth. Jděte zpět, udělte oprávnění Bluetooth, pak zkuste znovu spárovat. + Nelze spustit ovladač - Bluetooth je zakázáno + Ovladač nelze spustit - toto zařízení nepodporuje Bluetooth diff --git a/pump/combov2/src/main/res/values-es-rES/strings.xml b/pump/combov2/src/main/res/values-es-rES/strings.xml index e3355b9989..b466ef2ddd 100644 --- a/pump/combov2/src/main/res/values-es-rES/strings.xml +++ b/pump/combov2/src/main/res/values-es-rES/strings.xml @@ -47,6 +47,7 @@ Si no puedes establecer ninguna conexión después de unos ~5 minutos:\n\n Tiempo de espera de escaneo alcanzado No se pudo emparejar debido al error: %1$s Emparejamiento abortado por razones desconocidas + "Longitud del PIN de emparejamiento inválida: Necesita %1$d digits, obtuvo %2$d" Buscando bomba Estableciendo conexión Bluetooth (intento número %1$d) Realizando emparejamiento con la bomba @@ -124,4 +125,6 @@ Si no puedes establecer ninguna conexión después de unos ~5 minutos:\n\n Actualizando el estado de la bomba después de que informara de un error Retroceder No se puede realizar el emparejamiento porque el controlador no está inicializado. Esto suele ocurrir porque no se han concedido los permisos Bluetooth necesarios. Vuelve atrás, concede los permisos Bluetooth e intenta de nuevo el emparejamiento + No se puede iniciar el controlador - El bluetooth está desactivado + El controlador no puede ejecutarse - este dispositivo no es compatible con Bluetooth diff --git a/pump/combov2/src/main/res/values-it-rIT/strings.xml b/pump/combov2/src/main/res/values-it-rIT/strings.xml index bf840709d1..8e14cf8101 100644 --- a/pump/combov2/src/main/res/values-it-rIT/strings.xml +++ b/pump/combov2/src/main/res/values-it-rIT/strings.xml @@ -97,6 +97,7 @@ Se non viene stabilita alcuna connessione dopo più di ~5 minuti:\n\n Imposta TBR 100% (emulato) Lasciando finire il TBR 100% (emulato) in esecuzione TBR 100%: ignorando la richiesta ridondante + Limite inatteso riscontrato durante la regolazione di TBR: la percentuale target era %1$d%%, raggiunto un limite a %2$d%% Impossibile impostare un TBR assoluto se la velocità basale di base è zero Associa AndroidAPS e Android con un micro Accu-Chek Combo attualmente non associato Disassocia AndroidAPS e Android dal micro Accu-Chek Combo attualmente associato diff --git a/pump/combov2/src/main/res/values-iw-rIL/strings.xml b/pump/combov2/src/main/res/values-iw-rIL/strings.xml index bc65ee458c..25020d71b0 100644 --- a/pump/combov2/src/main/res/values-iw-rIL/strings.xml +++ b/pump/combov2/src/main/res/values-iw-rIL/strings.xml @@ -90,6 +90,7 @@ הגדר בזאלי זמני 100% מדומה מאפשר לבזאלי הזמני 100% המדומה לסיים מתעלם מבקשה מיותרת של בזאלי זמני 100% + נמצאה מגבלה בלתי צפוי בעת הגדרת בזאלי זמני: אחוז המטרה היה %1$d%% והגיע למגבלה ב-%2$d%% לא ניתן להגדיר בזאלי זמני אם המינון הבזאלי הבסיסי הוא 0 צימוד AndroidAPS ואנדרואיד עם משאבת Accu-Chek combo שאינה מצומדת ביטול צימוד AndroidAPS ואנדרואיד ממשאבת Accu-Chek combo המצומדת diff --git a/pump/combov2/src/main/res/values-no-rNO/strings.xml b/pump/combov2/src/main/res/values-no-rNO/strings.xml index c6a2d22361..83d5d63dc2 100644 --- a/pump/combov2/src/main/res/values-no-rNO/strings.xml +++ b/pump/combov2/src/main/res/values-no-rNO/strings.xml @@ -98,6 +98,7 @@ knappene samtidig for å avbryte parringen)\n Angi emulert 100% TBR Lar aktive emulert 100% TBR få avslutte Ignorerer redundant 100% TBR forespørsel + Uventet begrensning oppsto ved justering av TBR: målprosenten var %1$d%%, nådde grense på %2$d%% Kan ikke sette absolutt TBR hvis basalraten er null Sammenkoble AndroidAPS og Android med en ikke-tilkoblet Accu-Chek Combo pumpe Koble fra AndroidAPS og Android fra den ilkoblede Accu-Chek Combo pumpen 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 49f1fb8bcf..d564b3c8cc 100644 --- a/pump/combov2/src/main/res/values-ru-rRU/strings.xml +++ b/pump/combov2/src/main/res/values-ru-rRU/strings.xml @@ -98,6 +98,7 @@ Установить эмуляцию. временного базала TBR 100% Позволить завершиться текущей эмуляции временного базала 100% TBR Игнорирование избыточного запроса на 100% TBR + При настройке ВБС: обнаружен непредвиденный предел: целевой процент %1$d%%, достиг предела %2$d%% Невозможно установить абсолютный TBR, если базовая скорость равна нулю Выполнить сопряжение AndroidAPS и Android с помпой Accu-Chek Combo Отключить AndroidAPS и AndroidAPS от помпы Accu-Chek Combo diff --git a/pump/combov2/src/main/res/values/strings.xml b/pump/combov2/src/main/res/values/strings.xml index 947df4df66..9c4933a7f1 100644 --- a/pump/combov2/src/main/res/values/strings.xml +++ b/pump/combov2/src/main/res/values/strings.xml @@ -53,6 +53,7 @@ buttons at the same time to cancel pairing)\n Combo scan timeout reached Pairing failed due to error: %1$s Pairing aborted for unknown reasons + "Invalid pairing PIN length: need %1$d digits, got %2$d" Scanning for pump Establishing Bluetooth connection (attempt no. %1$d) Performing handshake with pump @@ -139,4 +140,6 @@ buttons at the same time to cancel pairing)\n Refreshing pump status after the pump reported an error Go back Cannot perform pairing because the driver is not initialized. This typically happens because the necessary Bluetooth permissions have not been granted. Go back, grant the Bluetooth permissions, then try again to pair. + Cannot start driver - Bluetooth is disabled + Driver cannot run - this device does not support Bluetooth diff --git a/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/ui/EopatchActivity.kt b/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/ui/EopatchActivity.kt index 1f9cc7f15d..f30e06a5ff 100644 --- a/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/ui/EopatchActivity.kt +++ b/pump/eopatch/src/main/java/info/nightscout/androidaps/plugins/pump/eopatch/ui/EopatchActivity.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.content.pm.ActivityInfo import android.os.Bundle import android.view.MotionEvent +import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AlertDialog import androidx.lifecycle.ViewModelProvider import info.nightscout.androidaps.plugins.pump.eopatch.R @@ -103,6 +104,16 @@ class EopatchActivity : EoBaseActivity() { } } } + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + binding.viewModel?.apply { + when (patchStep.value) { + PatchStep.SAFE_DEACTIVATION -> this@EopatchActivity.finish() + else -> Unit + } + } + } + }) } override fun onNewIntent(intent: Intent?) { @@ -274,15 +285,6 @@ class EopatchActivity : EoBaseActivity() { this@EopatchActivity.finish() } - override fun onBackPressed() { - binding.viewModel?.apply{ - when(patchStep.value){ - PatchStep.SAFE_DEACTIVATION -> this@EopatchActivity.finish() - else -> Unit - } - } - } - companion object { const val RESULT_DISCARDED = RESULT_FIRST_USER + 1 const val EXTRA_START_PATCH_STEP = "EXTRA_START_PATCH_FRAGMENT_UI" 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 07446b938c..e9eb94d844 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 @@ -293,12 +293,12 @@ import kotlin.math.abs val pumpRate = constraintChecker.applyBasalConstraints(Constraint(absoluteRate), 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 - if (connectionOK + return if (connectionOK && medtrumPump.tempBasalInProgress - && Math.abs(medtrumPump.tempBasalAbsoluteRate - pumpRate) <= 0.05 + && abs(medtrumPump.tempBasalAbsoluteRate - pumpRate) <= 0.05 ) { - return PumpEnactResult(injector).success(true).enacted(true).duration(durationInMinutes).absolute(medtrumPump.tempBasalAbsoluteRate) + PumpEnactResult(injector).success(true).enacted(true).duration(durationInMinutes).absolute(medtrumPump.tempBasalAbsoluteRate) .isPercent(false) .isTempCancel(false) } else { @@ -306,7 +306,7 @@ import kotlin.math.abs LTag.PUMP, "setTempBasalAbsolute failed, connectionOK: $connectionOK, tempBasalInProgress: ${medtrumPump.tempBasalInProgress}, tempBasalAbsoluteRate: ${medtrumPump.tempBasalAbsoluteRate}" ) - return PumpEnactResult(injector).success(false).enacted(false).comment("Medtrum setTempBasalAbsolute failed") + PumpEnactResult(injector).success(false).enacted(false).comment("Medtrum setTempBasalAbsolute failed") } } @@ -325,11 +325,11 @@ import kotlin.math.abs aapsLogger.info(LTag.PUMP, "cancelTempBasal - enforceNew: $enforceNew") val connectionOK = medtrumService?.cancelTempBasal() ?: false - if (connectionOK && !medtrumPump.tempBasalInProgress) { - return PumpEnactResult(injector).success(true).enacted(true).isTempCancel(true) + return if (connectionOK && !medtrumPump.tempBasalInProgress) { + PumpEnactResult(injector).success(true).enacted(true).isTempCancel(true) } else { aapsLogger.error(LTag.PUMP, "cancelTempBasal failed, connectionOK: $connectionOK, tempBasalInProgress: ${medtrumPump.tempBasalInProgress}") - return PumpEnactResult(injector).success(false).enacted(false).comment("Medtrum cancelTempBasal failed") + PumpEnactResult(injector).success(false).enacted(false).comment("Medtrum cancelTempBasal failed") } } @@ -436,7 +436,7 @@ import kotlin.math.abs if (isInitialized()) { commandQueue.updateTime(object : Callback() { override fun run() { - if (this.result.success == false) { + if (!this.result.success) { aapsLogger.error(LTag.PUMP, "Medtrum time update failed") // Only notify here on failure (connection may be failed), service will handle success medtrumService?.timeUpdateNotification(false) 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 fd24934cda..fb1ce89d05 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 @@ -291,11 +291,11 @@ class MedtrumPump @Inject constructor( } fun loadUserSettingsFromSP() { - desiredPatchExpiration = sp.getBoolean(info.nightscout.pump.medtrum.R.string.key_patch_expiration, false) - val alarmSettingCode = sp.getString(info.nightscout.pump.medtrum.R.string.key_alarm_setting, AlarmSetting.LIGHT_VIBRATE_AND_BEEP.code.toString()).toByte() + desiredPatchExpiration = sp.getBoolean(R.string.key_patch_expiration, false) + val alarmSettingCode = sp.getString(R.string.key_alarm_setting, AlarmSetting.LIGHT_VIBRATE_AND_BEEP.code.toString()).toByte() desiredAlarmSetting = AlarmSetting.values().firstOrNull { it.code == alarmSettingCode } ?: AlarmSetting.LIGHT_VIBRATE_AND_BEEP - desiredHourlyMaxInsulin = sp.getInt(info.nightscout.pump.medtrum.R.string.key_hourly_max_insulin, 40) - desiredDailyMaxInsulin = sp.getInt(info.nightscout.pump.medtrum.R.string.key_daily_max_insulin, 180) + desiredHourlyMaxInsulin = sp.getInt(R.string.key_hourly_max_insulin, 40) + desiredDailyMaxInsulin = sp.getInt(R.string.key_daily_max_insulin, 180) _pumpSN = pumpSNFromSP } @@ -502,12 +502,12 @@ class MedtrumPump @Inject constructor( AlarmState.PUMP_LOW_BATTERY -> R.string.alarm_pump_low_battery AlarmState.PUMP_LOW_RESERVOIR -> R.string.alarm_pump_low_reservoir AlarmState.PUMP_EXPIRES_SOON -> R.string.alarm_pump_expires_soon - AlarmState.LOWBG_SUSPENDED -> R.string.alarm_lowbg_suspended - AlarmState.LOWBG_SUSPENDED2 -> R.string.alarm_lowbg_suspended2 - AlarmState.AUTO_SUSPENDED -> R.string.alarm_auto_suspended - AlarmState.HMAX_SUSPENDED -> R.string.alarm_hmax_suspended - AlarmState.DMAX_SUSPENDED -> R.string.alarm_dmax_suspended - AlarmState.SUSPENDED -> R.string.alarm_suspended + AlarmState.LOW_BG_SUSPENDED -> R.string.alarm_low_bg_suspended + AlarmState.LOW_BG_SUSPENDED2 -> R.string.alarm_low_bg_suspended2 + AlarmState.AUTO_SUSPENDED -> R.string.alarm_auto_suspended + AlarmState.HOURLY_MAX_SUSPENDED -> R.string.alarm_hourly_max_suspended + AlarmState.DAILY_MAX_SUSPENDED -> R.string.alarm_daily_max_suspended + AlarmState.SUSPENDED -> R.string.alarm_suspended AlarmState.PAUSED -> R.string.alarm_paused AlarmState.OCCLUSION -> R.string.alarm_occlusion AlarmState.EXPIRED -> R.string.alarm_expired @@ -528,10 +528,10 @@ class MedtrumPump @Inject constructor( private fun loadActiveAlarms() { val alarmsStr = sp.getString(R.string.key_active_alarms, "") - if (alarmsStr.isNullOrEmpty()) { - activeAlarms = EnumSet.noneOf(AlarmState::class.java) + activeAlarms = if (alarmsStr.isEmpty()) { + EnumSet.noneOf(AlarmState::class.java) } else { - activeAlarms = alarmsStr.split(",") + alarmsStr.split(",") .mapNotNull { AlarmState.values().find { alarm -> alarm.name == it } } .let { EnumSet.copyOf(it) } } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/bindingadapters/ViewBindingAdapter.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/bindingadapters/ViewBindingAdapter.kt index f4b51efe1a..17f5090276 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/bindingadapters/ViewBindingAdapter.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/bindingadapters/ViewBindingAdapter.kt @@ -1,20 +1,7 @@ package info.nightscout.pump.medtrum.bindingadapters import android.view.View -import android.widget.TextView -import androidx.annotation.ColorRes import androidx.databinding.BindingAdapter -import info.nightscout.pump.medtrum.extension.setVisibleOrGone - -@BindingAdapter("android:visibility") -fun setVisibility(view: View, visible: Boolean) { - view.setVisibleOrGone(visible) -} - -@BindingAdapter("visibleOrGone") -fun setVisibleOrGone(view: View, visibleOrGone: Boolean) { - view.setVisibleOrGone(visibleOrGone) -} @BindingAdapter("onSafeClick") fun View.setOnSafeClickListener(clickListener: View.OnClickListener?) { @@ -22,8 +9,3 @@ fun View.setOnSafeClickListener(clickListener: View.OnClickListener?) { setOnClickListener(OnSafeClickListener(it)) } ?: setOnClickListener(null) } - -@BindingAdapter("textColor") -fun setTextColor(view: TextView, @ColorRes colorResId: Int) { - view.setTextColor(view.context.getColor(colorResId)) -} diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/ManufacturerData.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/ManufacturerData.kt index 098d31d984..a6ef2f3ae8 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/ManufacturerData.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/ManufacturerData.kt @@ -3,7 +3,7 @@ package info.nightscout.pump.medtrum.comm import kotlin.experimental.and import info.nightscout.pump.medtrum.extension.toLong -class ManufacturerData(private val manufacturerDataBytes: ByteArray) { +class ManufacturerData(manufacturerDataBytes: ByteArray) { private var deviceID: Long = 0 private var deviceType = 0 private var version = 0 @@ -12,7 +12,7 @@ class ManufacturerData(private val manufacturerDataBytes: ByteArray) { setData(manufacturerDataBytes) } - fun setData(inputData: ByteArray) { + private fun setData(inputData: ByteArray) { var index = 0 val deviceIDBytes: ByteArray = inputData.copyOfRange(index, index + 4) deviceID = deviceIDBytes.toLong() diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/WriteCommandPackets.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/WriteCommandPackets.kt index ae0f18e9f4..31655f3ed9 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/WriteCommandPackets.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/WriteCommandPackets.kt @@ -9,21 +9,20 @@ class WriteCommandPackets(data: ByteArray, sequenceNumber: Int) { init { // PackageIndex: 0 initially, if there are multiple packets, for the first packet it is set to 0 (not included in CRC calculation but sent in actual header) - var pkgIndex = 0 - var header = byteArrayOf( + val header = byteArrayOf( (data.size + 4).toByte(), data[0], sequenceNumber.toByte(), - pkgIndex.toByte() + 0.toByte() // pkgIndex ) var tmp: ByteArray = header + data.copyOfRange(1, data.size) - var totalCommand: ByteArray = tmp + calcCrc8(tmp, tmp.size).toByte() + val totalCommand: ByteArray = tmp + calcCrc8(tmp, tmp.size).toByte() if ((totalCommand.size - header.size) <= 15) { packages.add(totalCommand + 0.toByte()) } else { - pkgIndex = 1 + var pkgIndex = 1 var remainingCommand = totalCommand.copyOfRange(4, totalCommand.size) while (remainingCommand.size > 15) { @@ -52,13 +51,13 @@ class WriteCommandPackets(data: ByteArray, sequenceNumber: Int) { } fun allPacketsConsumed(): Boolean { - return !(index < packages.size) + return index >= packages.size } private fun calcCrc8(value: ByteArray, size: Int): Int { var crc8 = 0 for (i in 0 until size) { - crc8 = CRC_8_TABLE[(value[i].toInt() and 255) xor (crc8 and 255)].toInt() and 255 + crc8 = CRC_8_TABLE[(value[i].toInt() and 255) xor (crc8 and 255)] and 255 } return crc8 } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/AlarmState.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/AlarmState.kt index 50ae4e30f6..ebc4fc5601 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/AlarmState.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/AlarmState.kt @@ -5,11 +5,11 @@ enum class AlarmState { PUMP_LOW_BATTERY, // Mapped from error flag 1 PUMP_LOW_RESERVOIR, // Mapped from error flag 2 PUMP_EXPIRES_SOON, // Mapped from error flag 3 - LOWBG_SUSPENDED, // Mapped from pump status 64 - LOWBG_SUSPENDED2, // Mapped from pump status 65 + LOW_BG_SUSPENDED, // Mapped from pump status 64 + LOW_BG_SUSPENDED2, // Mapped from pump status 65 AUTO_SUSPENDED, // Mapped from pump status 66 - HMAX_SUSPENDED, // Mapped from pump status 67 - DMAX_SUSPENDED, // Mapped from pump status 68 + HOURLY_MAX_SUSPENDED, // Mapped from pump status 67 + DAILY_MAX_SUSPENDED, // Mapped from pump status 68 SUSPENDED, // Mapped from pump status 69 PAUSED, // Mapped from pump status 70 OCCLUSION, // Mapped from pump status 96 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 b52b9c1793..c17caa6ad9 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 @@ -10,11 +10,11 @@ enum class MedtrumPumpState(val state: Byte) { EJECTED(6), ACTIVE(32), ACTIVE_ALT(33), - LOWBG_SUSPENDED(64), - LOWBG_SUSPENDED2(65), + LOW_BG_SUSPENDED(64), + LOW_BG_SUSPENDED2(65), AUTO_SUSPENDED(66), - HMAX_SUSPENDED(67), - DMAX_SUSPENDED(68), + HOURLY_MAX_SUSPENDED(67), + DAILY_MAX_SUSPENDED(68), SUSPENDED(69), PAUSED(70), OCCLUSION(96), @@ -28,6 +28,7 @@ enum class MedtrumPumpState(val state: Byte) { STOPPED(128.toByte()); companion object { + fun fromByte(state: Byte) = values().find { it.state == state } ?: throw IllegalAccessException("") } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt index 838fff9727..8ec37c2e2c 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt @@ -55,7 +55,7 @@ class ActivatePacket(injector: HasAndroidInjector, private val basalProfile: Byt * byte 6: predictiveLowSuspend // Value for auto mode, not used for AAPS * byte 7: predictiveLowSuspendRange // Value for auto mode, not used for AAPS * byte 8-9: hourlyMaxInsulin // Max hourly dose of insulin, divided by 0.05 - * byte 10-11: daylyMaxSet // Max daily dose of insulin, divided by 0.05 + * byte 10-11: dailyMaxSet // Max daily dose of insulin, divided by 0.05 * byte 12-13: tddToday // Current TDD (of present day), divided by 0.05 * byte 14: 1 // Always 1 * bytes 15 - end // Basal profile > see MedtrumPump @@ -98,7 +98,7 @@ class ActivatePacket(injector: HasAndroidInjector, private val basalProfile: Byt medtrumPump.currentSequenceNumber = basalSequence // We are activated, set the new seq nr medtrumPump.syncedSequenceNumber = basalSequence // We are activated, reset the synced seq nr () - // Sync canula change + // Sync cannula change pumpSync.insertTherapyEventIfNewWithTimestamp( timestamp = System.currentTimeMillis(), type = DetailedBolusInfo.EventType.CANNULA_CHANGE, diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt index f6b54aaa18..e271d53db7 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt @@ -7,7 +7,6 @@ import info.nightscout.pump.medtrum.comm.enums.BasalType import info.nightscout.pump.medtrum.extension.toInt 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 javax.inject.Inject diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ClearPumpAlarmPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ClearPumpAlarmPacket.kt index 15f860fc50..023572873b 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ClearPumpAlarmPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ClearPumpAlarmPacket.kt @@ -4,7 +4,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.pump.medtrum.comm.enums.CommandType.CLEAR_ALARM import info.nightscout.pump.medtrum.extension.toByteArray -class ClearPumpAlarmPacket(injector: HasAndroidInjector, val clearType: Int) : MedtrumPacket(injector) { +class ClearPumpAlarmPacket(injector: HasAndroidInjector, private val clearType: Int) : MedtrumPacket(injector) { init { opCode = CLEAR_ALARM.code 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 ad127fed14..3c3757f66e 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 @@ -15,7 +15,6 @@ 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) { @@ -38,9 +37,9 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int private const val RESP_RECORD_UNKNOWN1_END = RESP_RECORD_UNKNOWN1_START + 1 private const val RESP_RECORD_SERIAL_START = RESP_RECORD_UNKNOWN1_END private const val RESP_RECORD_SERIAL_END = RESP_RECORD_SERIAL_START + 4 - private const val RESP_RECORD_PATCHID_START = RESP_RECORD_SERIAL_END - private const val RESP_RECORD_PATCHID_END = RESP_RECORD_PATCHID_START + 2 - private const val RESP_RECORD_SEQUENCE_START = RESP_RECORD_PATCHID_END + private const val RESP_RECORD_PATCH_ID_START = RESP_RECORD_SERIAL_END + private const val RESP_RECORD_PATCH_ID_END = RESP_RECORD_PATCH_ID_START + 2 + private const val RESP_RECORD_SEQUENCE_START = RESP_RECORD_PATCH_ID_END private const val RESP_RECORD_SEQUENCE_END = RESP_RECORD_SEQUENCE_START + 2 private const val RESP_RECORD_DATA_START = RESP_RECORD_SEQUENCE_END @@ -75,7 +74,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_PATCHID_START, RESP_RECORD_PATCHID_END).toInt() + val recordPatchId = data.copyOfRange(RESP_RECORD_PATCH_ID_START, RESP_RECORD_PATCH_ID_END).toInt() val recordSequence = data.copyOfRange(RESP_RECORD_SEQUENCE_START, RESP_RECORD_SEQUENCE_END).toInt() aapsLogger.debug( @@ -101,13 +100,15 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int 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 unkown1 = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 26).toInt() - val unkown2 = data.copyOfRange(RESP_RECORD_DATA_START + 26, RESP_RECORD_DATA_START + 28).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, unkown1: $unkown1, unkown2: $unkown2, " + "bolusType: $bolusType, bolusWizard: $bolusWizard" + "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" ) if (bolusType == BolusType.NORMAL) { @@ -123,7 +124,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int pumpType = medtrumPump.pumpType(), pumpSerial = medtrumPump.pumpSN.toString(radix = 16) ) - if (syncOk == false) { + 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) @@ -298,7 +299,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int 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 tddMins = data.copyOfRange(RESP_RECORD_DATA_START + 6, RESP_RECORD_DATA_START + 8).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() @@ -315,7 +316,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int 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, tddMins: $tddMins, glucoseRecordTime: $glucoseRecordTime, tdd: " + + 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" ) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/MedtrumPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/MedtrumPacket.kt index 6b175c06df..cc6e7f5f77 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/MedtrumPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/MedtrumPacket.kt @@ -25,7 +25,7 @@ open class MedtrumPacket(protected var injector: HasAndroidInjector) { } init { - // @Suppress("LeakingThis") + @Suppress("LeakingThis") injector.androidInjector().inject(this) } @@ -33,7 +33,7 @@ open class MedtrumPacket(protected var injector: HasAndroidInjector) { return byteArrayOf(opCode) } - /** handles a response from the Medtrum pump, returns true if command was successfull, returns false if command failed or waiting for response */ + /** handles a response from the Medtrum pump, returns true if command was successful, returns false if command failed or waiting for response */ open fun handleResponse(data: ByteArray): Boolean { // Check for broken packets if (RESP_RESULT_END > data.size) { 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 a37b5323cd..e9a1cdae87 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 @@ -19,7 +19,7 @@ class NotificationPacket(val injector: HasAndroidInjector) { * but a notification packet. It is sent by the pump to the phone * when the pump has a notification to send. * - * Notifications are sent regualary, regardless of the pump state. + * Notifications are sent regularly, regardless of the pump state. * * There can be multiple messages in one packet, this is noted by the fieldMask. * @@ -97,10 +97,10 @@ class NotificationPacket(val injector: HasAndroidInjector) { if (fieldMask and MASK_NORMAL_BOLUS != 0) { aapsLogger.debug(LTag.PUMPCOMM, "Normal bolus notification received") - var bolusData = data.copyOfRange(offset, offset + 1).toInt() - var bolusType = bolusData and 0x7F + val bolusData = data.copyOfRange(offset, offset + 1).toInt() + val bolusType = bolusData and 0x7F val bolusCompleted: Boolean = ((bolusData shr 7) and 0x01) != 0 - var bolusDelivered = data.copyOfRange(offset + 1, offset + 3).toInt() * 0.05 + val bolusDelivered = data.copyOfRange(offset + 1, offset + 3).toInt() * 0.05 aapsLogger.debug(LTag.PUMPCOMM, "Bolus type: $bolusType, bolusData: $bolusData bolus completed: $bolusCompleted, bolus delivered: $bolusDelivered") medtrumPump.handleBolusStatusUpdate(bolusType, bolusCompleted, bolusDelivered) offset += 3 @@ -115,12 +115,12 @@ class NotificationPacket(val injector: HasAndroidInjector) { if (fieldMask and MASK_BASAL != 0) { aapsLogger.debug(LTag.PUMPCOMM, "Basal notification received") val basalType = enumValues()[data.copyOfRange(offset, offset + 1).toInt()] - var basalSequence = data.copyOfRange(offset + 1, offset + 3).toInt() - var basalPatchId = data.copyOfRange(offset + 3, offset + 5).toLong() - var basalStartTime = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(offset + 5, offset + 9).toLong()) - var basalRateAndDelivery = data.copyOfRange(offset + 9, offset + 12).toInt() - var basalRate = (basalRateAndDelivery and 0xFFF) * 0.05 - var basalDelivery = (basalRateAndDelivery shr 12) * 0.05 + val basalSequence = data.copyOfRange(offset + 1, offset + 3).toInt() + val basalPatchId = data.copyOfRange(offset + 3, offset + 5).toLong() + val basalStartTime = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(offset + 5, offset + 9).toLong()) + val basalRateAndDelivery = data.copyOfRange(offset + 9, offset + 12).toInt() + val basalRate = (basalRateAndDelivery and 0xFFF) * 0.05 + val basalDelivery = (basalRateAndDelivery shr 12) * 0.05 aapsLogger.debug( LTag.PUMPCOMM, "Basal type: $basalType, basal sequence: $basalSequence, basal patch id: $basalPatchId, basal time: $basalStartTime, basal rate: $basalRate, basal delivery: $basalDelivery" @@ -159,7 +159,7 @@ class NotificationPacket(val injector: HasAndroidInjector) { if (fieldMask and MASK_BATTERY != 0) { aapsLogger.debug(LTag.PUMPCOMM, "Battery notification received") - var parameter = data.copyOfRange(offset, offset + 3).toInt() + val parameter = data.copyOfRange(offset, offset + 3).toInt() // Precision for voltage A is a guess, voltage B is the important one, threshold: < 2.64 medtrumPump.batteryVoltage_A = (parameter and 0xFFF) / 512.0 medtrumPump.batteryVoltage_B = (parameter shr 12) / 512.0 diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ResumePumpPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ResumePumpPacket.kt index aa613b3656..63ecaab62c 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ResumePumpPacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ResumePumpPacket.kt @@ -2,7 +2,6 @@ package info.nightscout.pump.medtrum.comm.packets import dagger.android.HasAndroidInjector import info.nightscout.pump.medtrum.comm.enums.CommandType.RESUME_PUMP -import info.nightscout.pump.medtrum.extension.toByteArray class ResumePumpPacket(injector: HasAndroidInjector) : MedtrumPacket(injector) { diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SetTimeZonePacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SetTimeZonePacket.kt index 129e665cf8..cbddb8c75d 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SetTimeZonePacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SetTimeZonePacket.kt @@ -13,7 +13,7 @@ class SetTimeZonePacket(injector: HasAndroidInjector) : MedtrumPacket(injector) @Inject lateinit var dateUtil: DateUtil @Inject lateinit var medtrumPump: MedtrumPump - var offsetMins: Int = 0 + private var offsetMinutes: Int = 0 init { opCode = SET_TIME_ZONE.code @@ -21,15 +21,15 @@ class SetTimeZonePacket(injector: HasAndroidInjector) : MedtrumPacket(injector) override fun getRequest(): ByteArray { val time = MedtrumTimeUtil().getCurrentTimePumpSeconds() - offsetMins = dateUtil.getTimeZoneOffsetMinutes(dateUtil.now()) - if (offsetMins < 0) offsetMins += 65536 - return byteArrayOf(opCode) + offsetMins.toByteArray(2) + time.toByteArray(4) + offsetMinutes = dateUtil.getTimeZoneOffsetMinutes(dateUtil.now()) + if (offsetMinutes < 0) offsetMinutes += 65536 + return byteArrayOf(opCode) + offsetMinutes.toByteArray(2) + time.toByteArray(4) } override fun handleResponse(data: ByteArray): Boolean { val success = super.handleResponse(data) if (success) { - medtrumPump.pumpTimeZoneOffset = offsetMins + medtrumPump.pumpTimeZoneOffset = offsetMinutes } return success } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SynchronizePacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SynchronizePacket.kt index 4df32dafe7..c7fd95acea 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SynchronizePacket.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/SynchronizePacket.kt @@ -16,7 +16,6 @@ class SynchronizePacket(injector: HasAndroidInjector) : MedtrumPacket(injector) companion object { private const val RESP_STATE_START = 6 - private const val RESP_STATE_END = RESP_STATE_START + 1 private const val RESP_FIELDS_START = 7 private const val RESP_FIELDS_END = RESP_FIELDS_START + 2 private const val RESP_SYNC_DATA_START = 9 @@ -34,7 +33,7 @@ class SynchronizePacket(injector: HasAndroidInjector) : MedtrumPacket(injector) override fun handleResponse(data: ByteArray): Boolean { val success = super.handleResponse(data) if (success) { - var state = MedtrumPumpState.fromByte(data[RESP_STATE_START]) + val state = MedtrumPumpState.fromByte(data[RESP_STATE_START]) aapsLogger.debug(LTag.PUMPCOMM, "SynchronizePacket: state: $state") if (state != medtrumPump.pumpState) { diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt index ce5126de48..a4f7e6c0df 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt @@ -8,7 +8,7 @@ class Crypt { private val RIJNDEAL_S_BOX: IntArray = intArrayOf(99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22) private val RIJNDEAL_INVERSE_S_BOX: IntArray = intArrayOf(82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125) - val MED_CIPHER: Long = 1344751489 + private val MED_CIPHER: Long = 1344751489 fun keyGen(input: Long): Long { val key = randomGen(randomGen(MED_CIPHER xor input)) @@ -25,7 +25,7 @@ class Crypt { private fun simpleCrypt(inputData: Long): Long { var temp = inputData xor MED_CIPHER for (i in 0 until 32) { - temp = changeByTable(rotatoLeft(temp, 32, 1), RIJNDEAL_S_BOX).toLong() + temp = changeByTable(rotatoLeft(temp, 32, 1), RIJNDEAL_S_BOX) } return temp } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ByteArrayExtension.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ByteArrayExtension.kt index 4e1d431086..dac514c20a 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ByteArrayExtension.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ByteArrayExtension.kt @@ -21,7 +21,7 @@ fun ByteArray.toInt(): Int { var result = 0 for (i in this.indices) { val byte = this[i] - val shifted = (byte.toInt() and 0xFF).toInt() shl 8 * i + val shifted = (byte.toInt() and 0xFF) shl 8 * i result = result or shifted } return result diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ViewExtension.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ViewExtension.kt index 5cf65baeb6..2bab7086c4 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ViewExtension.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/extension/ViewExtension.kt @@ -9,26 +9,3 @@ fun View?.visible(vararg views: View?) { for (view in views) view.visible() } - -fun View?.invisible() = this?.run { visibility = View.INVISIBLE } - -fun View?.invisible(vararg views: View?) { - invisible() - for (view in views) - view.invisible() -} - -fun View?.gone() = this?.run { visibility = View.GONE } - -fun View?.gone(vararg views: View?) { - gone() - for (view in views) - view.gone() -} - -fun View?.setVisibleOrGone(visibleOrGone: Boolean, vararg views: View?) { - for (view in views) - if (visibleOrGone) view.visible() else view.gone() -} - -fun View?.setVisibleOrGone(visibleOrGone: Boolean) = setVisibleOrGone(visibleOrGone, this) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/BLEComm.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/BLEComm.kt index b4058efd49..13de8dfacc 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/BLEComm.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/BLEComm.kt @@ -241,16 +241,16 @@ class BLEComm @Inject internal constructor( } override fun onCharacteristicRead(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic, status: Int) { - aapsLogger.debug(LTag.PUMPBTCOMM, "onCharacteristicRead data: " + characteristic.value.contentToString() + " UUID: " + characteristic.getUuid().toString() + " status: " + status) + aapsLogger.debug(LTag.PUMPBTCOMM, "onCharacteristicRead data: " + characteristic.value.contentToString() + " UUID: " + characteristic.uuid.toString() + " status: " + status) } override fun onCharacteristicChanged(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic) { - aapsLogger.debug(LTag.PUMPBTCOMM, "onCharacteristicChanged data: " + characteristic.value.contentToString() + " UUID: " + characteristic.getUuid().toString()) + aapsLogger.debug(LTag.PUMPBTCOMM, "onCharacteristicChanged data: " + characteristic.value.contentToString() + " UUID: " + characteristic.uuid.toString()) - val value = characteristic.getValue() - if (characteristic.getUuid() == UUID.fromString(READ_UUID)) { + val value = characteristic.value + if (characteristic.uuid == UUID.fromString(READ_UUID)) { mCallback?.onNotification(value) - } else if (characteristic.getUuid() == UUID.fromString(WRITE_UUID)) { + } else if (characteristic.uuid == UUID.fromString(WRITE_UUID)) { synchronized(readLock) { if (mReadPacket == null) { mReadPacket = ReadDataPacket(value) @@ -398,7 +398,7 @@ class BLEComm @Inject internal constructor( @Synchronized fun sendMessage(message: ByteArray) { - aapsLogger.debug(LTag.PUMPBTCOMM, "sendMessage message = " + Arrays.toString(message)) + aapsLogger.debug(LTag.PUMPBTCOMM, "sendMessage message = " + message.contentToString()) if (mWritePackets?.allPacketsConsumed() == false) { aapsLogger.error(LTag.PUMPBTCOMM, "sendMessage not all packets consumed!! unable to sent message!") return @@ -455,7 +455,7 @@ class BLEComm @Inject internal constructor( val gattService = getGattService() ?: return var uuid: String val gattCharacteristics = gattService.characteristics - for (i in 0..gattCharacteristics.size - 1) { + for (i in 0 until gattCharacteristics.size) { val gattCharacteristic = gattCharacteristics.get(i) // Check whether read or write properties is set, the pump needs us to enable notifications on all characteristics that have these properties if (gattCharacteristic.properties and NEEDS_ENABLE > 0) { 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 9fc02a1625..da05d95f01 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 @@ -29,7 +29,6 @@ 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.util.MedtrumTimeUtil import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventAppExit @@ -84,8 +83,6 @@ class MedtrumService : DaggerService(), BLECommCallback { private const val ALARM_DAILY_MAX_CLEAR_CODE = 5 } - val timeUtil = MedtrumTimeUtil() - private val disposable = CompositeDisposable() private val mBinder: IBinder = LocalBinder() @@ -124,7 +121,7 @@ class MedtrumService : DaggerService(), BLECommCallback { medtrumPump.loadUserSettingsFromSP() commandQueue.setUserOptions(object : Callback() { override fun run() { - if (medtrumPlugin.isInitialized() && this.result.success == false) { + if (medtrumPlugin.isInitialized() && !this.result.success) { uiInteraction.addNotification( Notification.PUMP_SETTINGS_FAILED, rh.gs(R.string.pump_setting_failed), @@ -204,7 +201,7 @@ class MedtrumService : DaggerService(), BLECommCallback { } fun readPumpStatus() { - rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingpumpstatus))) + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.getting_pump_status))) updateTimeIfNeeded(false) loadEvents() } @@ -229,7 +226,7 @@ class MedtrumService : DaggerService(), BLECommCallback { fun updateTimeIfNeeded(needLoadHistory: Boolean = true): Boolean { // Note we only check timeZone here, time is updated each connection attempt if needed, because the pump requires it to be checked - // But we dont check timeZone each time, therefore we do it here (if needed) + // But we don't check timeZone each time, therefore we do it here (if needed) var result = true if (medtrumPump.pumpTimeZoneOffset != dateUtil.getTimeZoneOffsetMinutes(dateUtil.now())) { result = sendPacketAndGetResponse(SetTimePacket(injector)) @@ -245,7 +242,7 @@ class MedtrumService : DaggerService(), BLECommCallback { } fun loadEvents(): Boolean { - rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingpumpstatus))) + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.getting_pump_status))) // Sync records val result = syncRecords() if (result) { @@ -261,16 +258,16 @@ class MedtrumService : DaggerService(), BLECommCallback { var result = true if (medtrumPump.pumpState in listOf( MedtrumPumpState.PAUSED, - MedtrumPumpState.HMAX_SUSPENDED, - MedtrumPumpState.DMAX_SUSPENDED + MedtrumPumpState.HOURLY_MAX_SUSPENDED, + MedtrumPumpState.DAILY_MAX_SUSPENDED ) ) { when (medtrumPump.pumpState) { - MedtrumPumpState.HMAX_SUSPENDED -> { + MedtrumPumpState.HOURLY_MAX_SUSPENDED -> { result = sendPacketAndGetResponse(ClearPumpAlarmPacket(injector, ALARM_HOURLY_MAX_CLEAR_CODE)) } - MedtrumPumpState.DMAX_SUSPENDED -> { + MedtrumPumpState.DAILY_MAX_SUSPENDED -> { result = sendPacketAndGetResponse(ClearPumpAlarmPacket(injector, ALARM_DAILY_MAX_CLEAR_CODE)) } @@ -285,7 +282,7 @@ class MedtrumService : DaggerService(), BLECommCallback { } fun setUserSettings(): Boolean { - rxBus.send(EventPumpStatusChanged(rh.gs(R.string.settingpumpsettings))) + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.setting_pump_settings))) return sendPacketAndGetResponse(SetPatchPacket(injector)) } @@ -301,16 +298,16 @@ class MedtrumService : DaggerService(), BLECommCallback { medtrumPump.bolusStopped = false medtrumPump.bolusProgressLastTimeStamp = bolusStart - if (insulin > 0 && !medtrumPump.bolusStopped) { + if (insulin > 0) { val result = sendPacketAndGetResponse(SetBolusPacket(injector, insulin)) - if (result == false) { + if (!result) { aapsLogger.error(LTag.PUMPCOMM, "Failed to set bolus") commandQueue.loadEvents(null) // make sure if anything is delivered (which is highly unlikely at this point) we get it t.insulin = 0.0 return false } } else { - aapsLogger.debug(LTag.PUMPCOMM, "Bolus not set, insulin: $insulin, bolusStopped: ${medtrumPump.bolusStopped}") + aapsLogger.debug(LTag.PUMPCOMM, "Bolus not set, insulin: $insulin") t.insulin = 0.0 return false } @@ -384,7 +381,7 @@ class MedtrumService : DaggerService(), BLECommCallback { // Do not call update status directly, reconnection may be needed commandQueue.loadEvents(object : Callback() { override fun run() { - rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingbolusstatus))) + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.getting_bolus_status))) bolusingEvent.percent = 100 } }) @@ -395,7 +392,7 @@ class MedtrumService : DaggerService(), BLECommCallback { aapsLogger.debug(LTag.PUMPCOMM, "bolusStop >>>>> @ " + if (medtrumPump.bolusingTreatment == null) "" else medtrumPump.bolusingTreatment?.insulin) if (isConnected) { var success = sendPacketAndGetResponse(CancelBolusPacket(injector)) - var timeout = System.currentTimeMillis() + T.secs(30).msecs() + val timeout = System.currentTimeMillis() + T.secs(30).msecs() while (!success && System.currentTimeMillis() < timeout) { success = sendPacketAndGetResponse(CancelBolusPacket(injector)) SystemClock.sleep(200) @@ -414,11 +411,11 @@ class MedtrumService : DaggerService(), BLECommCallback { } if (result) result = sendPacketAndGetResponse(SetTempBasalPacket(injector, absoluteRate, durationInMinutes)) - // Get history records, this will update the prevoius basals + // Get history records, this will update the previous basals // Do not call update status directly, reconnection may be needed commandQueue.loadEvents(object : Callback() { override fun run() { - rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingtempbasalstatus))) + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.getting_temp_basal_status))) } }) @@ -426,13 +423,13 @@ class MedtrumService : DaggerService(), BLECommCallback { } fun cancelTempBasal(): Boolean { - var result = sendPacketAndGetResponse(CancelTempBasalPacket(injector)) + val result = sendPacketAndGetResponse(CancelTempBasalPacket(injector)) - // Get history records, this will update the prevoius basals + // Get history records, this will update the previous basals // Do not call update status directly, reconnection may be needed commandQueue.loadEvents(object : Callback() { override fun run() { - rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingtempbasalstatus))) + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.getting_temp_basal_status))) } }) @@ -462,7 +459,7 @@ class MedtrumService : DaggerService(), BLECommCallback { if (medtrumPump.syncedSequenceNumber < medtrumPump.currentSequenceNumber) { for (sequence in (medtrumPump.syncedSequenceNumber + 1)..medtrumPump.currentSequenceNumber) { result = sendPacketAndGetResponse(GetRecordPacket(injector, sequence), COMMAND_SYNC_TIMEOUT_SEC) - if (result == false) break + if (!result) break } } return result @@ -471,23 +468,23 @@ class MedtrumService : DaggerService(), BLECommCallback { private fun handlePumpStateUpdate(state: MedtrumPumpState) { // Map the pump state to an alarm state and add it to the active alarms val alarmState = when (state) { - MedtrumPumpState.NONE -> AlarmState.NONE - MedtrumPumpState.LOWBG_SUSPENDED -> AlarmState.LOWBG_SUSPENDED - MedtrumPumpState.LOWBG_SUSPENDED2 -> AlarmState.LOWBG_SUSPENDED2 - MedtrumPumpState.AUTO_SUSPENDED -> AlarmState.AUTO_SUSPENDED - MedtrumPumpState.HMAX_SUSPENDED -> AlarmState.HMAX_SUSPENDED - MedtrumPumpState.DMAX_SUSPENDED -> AlarmState.DMAX_SUSPENDED - MedtrumPumpState.SUSPENDED -> AlarmState.SUSPENDED - MedtrumPumpState.PAUSED -> AlarmState.PAUSED - MedtrumPumpState.OCCLUSION -> AlarmState.OCCLUSION - MedtrumPumpState.EXPIRED -> AlarmState.EXPIRED - MedtrumPumpState.RESERVOIR_EMPTY -> AlarmState.RESERVOIR_EMPTY - MedtrumPumpState.PATCH_FAULT -> AlarmState.PATCH_FAULT - MedtrumPumpState.PATCH_FAULT2 -> AlarmState.PATCH_FAULT2 - MedtrumPumpState.BASE_FAULT -> AlarmState.BASE_FAULT - MedtrumPumpState.BATTERY_OUT -> AlarmState.BATTERY_OUT - MedtrumPumpState.NO_CALIBRATION -> AlarmState.NO_CALIBRATION - else -> null + MedtrumPumpState.NONE -> AlarmState.NONE + MedtrumPumpState.LOW_BG_SUSPENDED -> AlarmState.LOW_BG_SUSPENDED + MedtrumPumpState.LOW_BG_SUSPENDED2 -> AlarmState.LOW_BG_SUSPENDED2 + MedtrumPumpState.AUTO_SUSPENDED -> AlarmState.AUTO_SUSPENDED + MedtrumPumpState.HOURLY_MAX_SUSPENDED -> AlarmState.HOURLY_MAX_SUSPENDED + MedtrumPumpState.DAILY_MAX_SUSPENDED -> AlarmState.DAILY_MAX_SUSPENDED + MedtrumPumpState.SUSPENDED -> AlarmState.SUSPENDED + MedtrumPumpState.PAUSED -> AlarmState.PAUSED + MedtrumPumpState.OCCLUSION -> AlarmState.OCCLUSION + MedtrumPumpState.EXPIRED -> AlarmState.EXPIRED + MedtrumPumpState.RESERVOIR_EMPTY -> AlarmState.RESERVOIR_EMPTY + MedtrumPumpState.PATCH_FAULT -> AlarmState.PATCH_FAULT + MedtrumPumpState.PATCH_FAULT2 -> AlarmState.PATCH_FAULT2 + MedtrumPumpState.BASE_FAULT -> AlarmState.BASE_FAULT + MedtrumPumpState.BATTERY_OUT -> AlarmState.BATTERY_OUT + MedtrumPumpState.NO_CALIBRATION -> AlarmState.NO_CALIBRATION + else -> null } if (alarmState != null && alarmState != AlarmState.NONE) { medtrumPump.addAlarm(alarmState) @@ -533,8 +530,8 @@ class MedtrumService : DaggerService(), BLECommCallback { medtrumPump.clearAlarmState() } - MedtrumPumpState.LOWBG_SUSPENDED, - MedtrumPumpState.LOWBG_SUSPENDED2, + MedtrumPumpState.LOW_BG_SUSPENDED, + MedtrumPumpState.LOW_BG_SUSPENDED2, MedtrumPumpState.AUTO_SUSPENDED, MedtrumPumpState.SUSPENDED, MedtrumPumpState.PAUSED -> { @@ -546,7 +543,7 @@ class MedtrumService : DaggerService(), BLECommCallback { // Pump will report proper TBR for this } - MedtrumPumpState.HMAX_SUSPENDED -> { + MedtrumPumpState.HOURLY_MAX_SUSPENDED -> { uiInteraction.addNotification( Notification.PUMP_SUSPENDED, rh.gs(R.string.pump_is_suspended_hour_max), @@ -555,7 +552,7 @@ class MedtrumService : DaggerService(), BLECommCallback { // Pump will report proper TBR for this } - MedtrumPumpState.DMAX_SUSPENDED -> { + MedtrumPumpState.DAILY_MAX_SUSPENDED -> { uiInteraction.addNotification( Notification.PUMP_SUSPENDED, rh.gs(R.string.pump_is_suspended_day_max), @@ -721,8 +718,6 @@ class MedtrumService : DaggerService(), BLECommCallback { // State for connect flow private inner class AuthState : State() { - val retryCounter = 0 - override fun onEnter() { aapsLogger.debug(LTag.PUMPCOMM, "Medtrum Service reached AuthState") mPacket = AuthorizePacket(injector) @@ -734,7 +729,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true // Check if we have a supported pump @@ -776,7 +771,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true // Place holder, not really used (yet) @@ -808,7 +803,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true val currTime = dateUtil.now() @@ -843,7 +838,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true toState(SetTimeZoneState()) @@ -871,7 +866,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true medtrumPump.needCheckTimeUpdate = false @@ -901,7 +896,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true toState(SubscribeState()) @@ -929,7 +924,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true toState(ReadyState()) @@ -949,7 +944,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onEnter() { aapsLogger.debug(LTag.PUMPCOMM, "Medtrum Service reached ReadyState!") // Now we are fully connected and authenticated and we can start sending commands. Let AAPS know - if (isConnected == false) { + if (!isConnected) { medtrumPump.connectionState = ConnectionState.CONNECTED } } @@ -964,7 +959,7 @@ class MedtrumService : DaggerService(), BLECommCallback { override fun onIndication(data: ByteArray) { if (mPacket?.handleResponse(data) == true) { - // Succes! + // Success! responseHandled = true responseSuccess = true toState(ReadyState()) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumActivity.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumActivity.kt index a7fd32336f..dbf48c36aa 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumActivity.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumActivity.kt @@ -6,6 +6,7 @@ import android.content.pm.ActivityInfo import android.os.Bundle import android.view.MotionEvent import android.view.WindowManager +import androidx.activity.OnBackPressedCallback import androidx.lifecycle.ViewModelProvider import info.nightscout.core.utils.extensions.safeGetSerializableExtra import info.nightscout.pump.medtrum.R @@ -19,17 +20,13 @@ class MedtrumActivity : MedtrumBaseActivity() { override fun getLayoutId(): Int = R.layout.activity_medtrum - override fun dispatchTouchEvent(event: MotionEvent): Boolean { - return super.dispatchTouchEvent(event) - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) binding.apply { - viewModel = ViewModelProvider(this@MedtrumActivity, viewModelFactory).get(MedtrumViewModel::class.java) + viewModel = ViewModelProvider(this@MedtrumActivity, viewModelFactory)[MedtrumViewModel::class.java] viewModel?.apply { processIntent(intent) @@ -70,6 +67,28 @@ class MedtrumActivity : MedtrumBaseActivity() { } } } + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + binding.viewModel?.apply { + when (patchStep.value) { + PatchStep.PREPARE_PATCH, + PatchStep.START_DEACTIVATION, + PatchStep.RETRY_ACTIVATION -> { + handleCancel() + this@MedtrumActivity.finish() + } + + PatchStep.COMPLETE, + PatchStep.DEACTIVATION_COMPLETE -> { + handleComplete() + this@MedtrumActivity.finish() + } + + else -> Unit + } + } + } + }) } override fun onNewIntent(intent: Intent?) { @@ -88,20 +107,10 @@ class MedtrumActivity : MedtrumBaseActivity() { } } - override fun onDestroy() { - super.onDestroy() - } - - override fun onBackPressed() { - binding.viewModel?.apply { - // Do nothing - } - } - companion object { const val EXTRA_START_PATCH_STEP = "EXTRA_START_PATCH_FRAGMENT_UI" - const val EXTRA_START_FROM_MENU = "EXTRA_START_FROM_MENU" + private const val EXTRA_START_FROM_MENU = "EXTRA_START_FROM_MENU" @JvmStatic fun createIntentFromMenu(context: Context, patchStep: PatchStep): Intent { return Intent(context, MedtrumActivity::class.java).apply { @@ -115,5 +124,4 @@ class MedtrumActivity : MedtrumBaseActivity() { private fun setupViewFragment(baseFragment: MedtrumBaseFragment<*>) { replaceFragmentInActivity(baseFragment, R.id.framelayout_fragment, false) } - } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPreparePatchFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPreparePatchFragment.kt index 5e23d96632..425f7fac3f 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPreparePatchFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPreparePatchFragment.kt @@ -5,7 +5,6 @@ import android.view.View import androidx.lifecycle.ViewModelProvider import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.databinding.FragmentMedtrumPreparePatchBinding -import info.nightscout.pump.medtrum.ui.MedtrumBaseFragment import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumViewModel import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeCompleteFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeCompleteFragment.kt index 75b2bad284..f7e3c402d2 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeCompleteFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeCompleteFragment.kt @@ -8,7 +8,6 @@ import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.code.PatchStep import info.nightscout.pump.medtrum.databinding.FragmentMedtrumPrimeCompleteBinding -import info.nightscout.pump.medtrum.ui.MedtrumBaseFragment import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumViewModel import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeFragment.kt index 3322c8a54f..80020abe46 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimeFragment.kt @@ -8,7 +8,6 @@ import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.code.PatchStep import info.nightscout.pump.medtrum.databinding.FragmentMedtrumPrimeBinding -import info.nightscout.pump.medtrum.ui.MedtrumBaseFragment import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumViewModel import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimingFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimingFragment.kt index fe1234a5c3..eeee99aa71 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimingFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPrimingFragment.kt @@ -8,7 +8,6 @@ import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.code.PatchStep import info.nightscout.pump.medtrum.databinding.FragmentMedtrumPrimingBinding -import info.nightscout.pump.medtrum.ui.MedtrumBaseFragment import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumViewModel import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationConnectFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationConnectFragment.kt index 466be92e7b..47de209db4 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationConnectFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationConnectFragment.kt @@ -7,7 +7,6 @@ import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.code.PatchStep import info.nightscout.pump.medtrum.databinding.FragmentMedtrumRetryActivationConnectBinding -import info.nightscout.pump.medtrum.ui.MedtrumBaseFragment import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumViewModel import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationFragment.kt index 5e1673685b..829f80d217 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationFragment.kt @@ -7,7 +7,6 @@ import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.code.PatchStep import info.nightscout.pump.medtrum.databinding.FragmentMedtrumRetryActivationBinding -import info.nightscout.pump.medtrum.ui.MedtrumBaseFragment import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumViewModel import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag @@ -32,7 +31,7 @@ class MedtrumRetryActivationFragment : MedtrumBaseFragment : ViewModel() { private var _navigator: WeakReference? = null - var navigator: N? + private var navigator: N? set(value) { _navigator = WeakReference(value) } 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 da742ea91d..1cd1de8a95 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 @@ -114,7 +114,7 @@ class MedtrumOverviewViewModel @Inject constructor( aapsLogger.debug(LTag.PUMP, "MedtrumViewModel pumpStateFlow: $state") _canDoResetAlarms.postValue( medtrumPump.pumpState in listOf( - MedtrumPumpState.PAUSED, MedtrumPumpState.HMAX_SUSPENDED, MedtrumPumpState.DMAX_SUSPENDED + MedtrumPumpState.PAUSED, MedtrumPumpState.HOURLY_MAX_SUSPENDED, MedtrumPumpState.DAILY_MAX_SUSPENDED ) ) @@ -153,7 +153,7 @@ class MedtrumOverviewViewModel @Inject constructor( } } - fun updateGUI() { + private fun updateGUI() { // Update less dynamic values if (medtrumPump.lastConnection != 0L) { val agoMilliseconds = System.currentTimeMillis() - medtrumPump.lastConnection diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumViewModel.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumViewModel.kt index 688770f884..f12f49e6aa 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumViewModel.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumViewModel.kt @@ -10,13 +10,10 @@ import info.nightscout.pump.medtrum.MedtrumPump import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.code.ConnectionState import info.nightscout.pump.medtrum.services.MedtrumService -import info.nightscout.pump.medtrum.code.EventType import info.nightscout.pump.medtrum.code.PatchStep import info.nightscout.pump.medtrum.comm.enums.MedtrumPumpState import info.nightscout.pump.medtrum.encryption.Crypt import info.nightscout.pump.medtrum.ui.MedtrumBaseNavigator -import info.nightscout.pump.medtrum.ui.event.SingleLiveEvent -import info.nightscout.pump.medtrum.ui.event.UIEvent import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import kotlinx.coroutines.CoroutineScope @@ -43,10 +40,6 @@ class MedtrumViewModel @Inject constructor( val title: LiveData get() = _title - private val _eventHandler = SingleLiveEvent>() - val eventHandler: LiveData> - get() = _eventHandler - private var oldPatchStep: PatchStep? = null private var mInitPatchStep: PatchStep? = null private var connectRetryCounter = 0 @@ -155,7 +148,7 @@ class MedtrumViewModel @Inject constructor( PatchStep.RETRY_ACTIVATION_CONNECT, PatchStep.PREPARE_PATCH_CONNECT -> { - // Make sure we are disconnected, else dont move step + // Make sure we are disconnected, else don't move step if (medtrumService?.isConnected == true) { aapsLogger.info(LTag.PUMP, "moveStep: connected, not moving step") return @@ -167,7 +160,7 @@ class MedtrumViewModel @Inject constructor( PatchStep.PRIME_COMPLETE, PatchStep.ATTACH_PATCH, PatchStep.ACTIVATE -> { - // Make sure we are connected, else dont move step + // Make sure we are connected, else don't move step if (medtrumService?.isConnected == false) { aapsLogger.info(LTag.PUMP, "moveStep: not connected, not moving step") return @@ -321,7 +314,7 @@ class MedtrumViewModel @Inject constructor( aapsLogger.info(LTag.PUMP, "prepareStep: title before cond: $stringResId") if (currentTitle != stringResId) { aapsLogger.info(LTag.PUMP, "prepareStep: title: $stringResId") - _title.postValue(stringResId) + stringResId?.let { _title.postValue(it) } } patchStep.postValue(newStep) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/util/MedtrumTimeUtil.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/util/MedtrumTimeUtil.kt index ad3910f0ec..fd6dc2ddd6 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/util/MedtrumTimeUtil.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/util/MedtrumTimeUtil.kt @@ -5,19 +5,13 @@ import java.time.Instant class MedtrumTimeUtil { - fun getCurrentTimePumpSeconds() : Long { + fun getCurrentTimePumpSeconds(): Long { val startInstant = Instant.parse("2014-01-01T00:00:00Z") val currentInstant = Instant.now() return Duration.between(startInstant, currentInstant).seconds } - fun getCurrentTimePumpMillis() : Long { - val startInstant = Instant.parse("2014-01-01T00:00:00Z") - val currentInstant = Instant.now() - return Duration.between(startInstant, currentInstant).seconds * 1000 - } - - fun convertPumpTimeToSystemTimeMillis(pumpTime: Long) : Long { + fun convertPumpTimeToSystemTimeMillis(pumpTime: Long): Long { val startInstant = Instant.parse("2014-01-01T00:00:00Z") val pumpInstant = startInstant.plusSeconds(pumpTime) val epochInstant = Instant.EPOCH diff --git a/pump/medtrum/src/main/res/layout/activity_medtrum.xml b/pump/medtrum/src/main/res/layout/activity_medtrum.xml index 2c1d16aad2..50b4d5451b 100644 --- a/pump/medtrum/src/main/res/layout/activity_medtrum.xml +++ b/pump/medtrum/src/main/res/layout/activity_medtrum.xml @@ -34,8 +34,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - tools:text="@string/string_change_patch" /> + app:layout_constraintTop_toTopOf="parent" /> diff --git a/pump/medtrum/src/main/res/layout/fragment_medtrum_deactivation_complete.xml b/pump/medtrum/src/main/res/layout/fragment_medtrum_deactivation_complete.xml index cc564f230f..1fb333cb19 100644 --- a/pump/medtrum/src/main/res/layout/fragment_medtrum_deactivation_complete.xml +++ b/pump/medtrum/src/main/res/layout/fragment_medtrum_deactivation_complete.xml @@ -26,19 +26,33 @@ tools:context=".ui.MedtrumActivity"> + + + xmlns:app="http://schemas.android.com/apk/res-auto"> diff --git a/pump/medtrum/src/main/res/values-af-rZA/arrays.xml b/pump/medtrum/src/main/res/values-af-rZA/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-af-rZA/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-af-rZA/strings.xml b/pump/medtrum/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-bg-rBG/arrays.xml b/pump/medtrum/src/main/res/values-bg-rBG/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-bg-rBG/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-bg-rBG/strings.xml b/pump/medtrum/src/main/res/values-bg-rBG/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-bg-rBG/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-ca-rES/arrays.xml b/pump/medtrum/src/main/res/values-ca-rES/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-ca-rES/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-ca-rES/strings.xml b/pump/medtrum/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-cs-rCZ/arrays.xml b/pump/medtrum/src/main/res/values-cs-rCZ/arrays.xml new file mode 100644 index 0000000000..b6253b10b2 --- /dev/null +++ b/pump/medtrum/src/main/res/values-cs-rCZ/arrays.xml @@ -0,0 +1,13 @@ + + + + Světlo, vibrace a pípnutí + Světlo a vibrace + Světlo a pípnutí + Světlo + Vibrace a pípnutí + Vibrace + Pípnutí + Ticho + + diff --git a/pump/medtrum/src/main/res/values-cs-rCZ/strings.xml b/pump/medtrum/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 0000000000..0bd6c25637 --- /dev/null +++ b/pump/medtrum/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,119 @@ + + + + Medtrum + MT + Integrace pumpy Medtrum Nano + Nastavení pumpy Medtrum + Chyba pumpy: %1$s!! + Nevyzkoušená pumpa: %1$d! Kontaktujte nás na Discordu nebo Githubu, kde získáte podporu. + Pumpa je pozastavena + Pumpa je pozastavena kvůli překročení maximálního množství inzulínu za hodinu + Pumpa je pozastavena kvůli překročení maximálního množství inzulínu za den + Patch není aktivován + Načtení uživatelského nastavení do pumpy selhalo! + + Stav BLE + Naposledy připojeno + Stav pumpy + Aktivní alarmy + %.2f U + %.2f V + Typ bazálu + Bazální dávka + %.2f U/h + Typ pumpy + Verze FW + Č. patche + Patch vyprší + Obnovit + Resetovat alarmy + Vyměnit patch + Vyžádáno uživatelem + Nepovoleno + + Žádný + Téměř vybitá baterie pumpy + Téměř prázdný zásobník pumpy + Pumpa brzy vyprší + Smyčka pozastavena nízká glykémie + Smyčka pozastavena nízká glykémie 2 + Automatické pozastavení + Pozastavení z důvodu hodinového překročení + Pozastavení z důvodu denního překročení + Pozastaveno + Pozastaveno + Okluze + Expirováno + Prázdný zásobník + Chyba Patche + Chyba Patche 2 + Chyba základny + Vybitá baterie + Žádná kalibrace + Nepodařilo se aktualizovat časové pásmo pumpy, odložit zprávu a aktualizovat ručně. + + Opakovat + Další + Zahodit + Aktivovat Patch + Připojit a naplnit + Naplnit + Plnění + Plnění dokončeno + Připojit Patch + Aktivuji... + Aktivace dokončena + Deaktivovat Patch + Deaktivace... + Patch deaktivován + Aktivace probíhá + Neočekávaný stav: %1$s + Nebyl vybrán žádný profil. Vyberte prosím profil a zkuste to znovu. + Sériové číslo pumpy: %1$X + Žádný aktivní Patch. Stiskněte Další pro zahájení aktivačního procesu. + Základna by neměla být připojena ke kanyle až do dalšího kroku! + Připojte základnu k nové kanyle, odstraňte zbývající vzduch a doplňte inzulinem, poté stiskněte tlačítko Další. + Poznámka: Pro aktivaci je nutné nejméně 70 jednotek. + Prozatím nepřipojujte Patch k tělu. + Stiskněte tlačítko jehly do poloviny. Potom klepněte na Další pro spuštění plnění. + Počkejte prosím na dokončení plnění. + Nepodařilo se provést plnění, zkuste to znovu stisknutím tlačítka Opakovat. + Stiskněte Další pro pokračování. + Stiskněte Další pro spuštění aktivace. + Odstraňte bezpečnostní zámek. Připojte pumpu k tělu. Stiskněte tlačítko jehly. + Odstraňte bezpečnostní zámek. Připojte pumpu k tělu. Stiskněte tlačítko jehly. + Aktivace Pacthe a nastavení počátečního bazálu. Počkejte prosím. + Chyba při aktivaci, stiskněte Opakovat pro nový pokus. + Nový Patch aktivován. Zbývá %.2f jednotek. + Stiskněte OK pro návrat na hlavní obrazovku. + Opravdu chcete deaktivovat současný Patch? + Jste si jistý, že chcete zrušit aktivaci? + Jste si jisti? Tuto akci nelze vrátit zpět!! + Stiskněte Další pro deaktivaci nebo Zrušit pro návrat na hlavní obrazovku. + Deaktivace Patche. Počkejte prosím. + Nepodařilo se deaktivovat, stiskněte Zahodit pro zapomenutí Patche. + Zatížení jehly. Odstraňte Patch z těla. + Odstraňte základnu a vhodně zlikvidujte použitou kanylu. + Stiskněte OK pro návrat na hlavní obrazovku. Stiskněte Další pro zahájení aktivace nového Patche. + Jejda! Něco se pokazilo, zdá se, že již probíhá aktivace. + Stiskněte Další pro obnovení aktivace nebo Zahodit pro resetování stavu aktivace. + Počkejte prosím, čtení stavu aktivace z Patche. + + Sériové číslo + Zadejte sériové číslo základny Patche. + Nastavení alarmů + Vyberte preferované nastavení alarmů. + Vypršení platnosti Patche + Pokud je povoleno, Patch vyprší po 3 dnech s maximální dobou odkladu 8 hodin. + Hodinové maximum inzulínu + Zadejte maximální povolený počet jednotek inzulínu za hodinu. Pokud je překročeno, pumpa bude pozastavena. + Denní maximální inzulín + Zadejte maximální povolené množství inzulínu za den. Pokud je překročeno, pumpa bude pozastavena. + + Čekání na konec bolusu. Zbývá %1$d sek. + Nahrávám stav pumpy + Nahrávám stav bolusu + Nahrávám stav dočasného bazálu + Nastavení uživatelských voleb + diff --git a/pump/medtrum/src/main/res/values-da-rDK/arrays.xml b/pump/medtrum/src/main/res/values-da-rDK/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-da-rDK/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-da-rDK/strings.xml b/pump/medtrum/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-de-rDE/arrays.xml b/pump/medtrum/src/main/res/values-de-rDE/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-de-rDE/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-de-rDE/strings.xml b/pump/medtrum/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-el-rGR/arrays.xml b/pump/medtrum/src/main/res/values-el-rGR/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-el-rGR/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-el-rGR/strings.xml b/pump/medtrum/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-es-rES/arrays.xml b/pump/medtrum/src/main/res/values-es-rES/arrays.xml new file mode 100644 index 0000000000..fb234690b1 --- /dev/null +++ b/pump/medtrum/src/main/res/values-es-rES/arrays.xml @@ -0,0 +1,13 @@ + + + + Luz, vibración y pitido + Luz y vibración + Luz y pitido + Luz + Vibración y pitido + Vibración + Pitido + Silencio + + diff --git a/pump/medtrum/src/main/res/values-es-rES/strings.xml b/pump/medtrum/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..0358cd08c9 --- /dev/null +++ b/pump/medtrum/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,119 @@ + + + + Medtrum + MT + Integración de bombas de insulina Medtrum Nano + Ajustes de bomba Medtrum + Error de bomba: %1$s !! + Bomba no probada: %1$d! Por favor, contacta con nosotros en Discord o GitHub para obtener soporte + Bomba suspendida + Bomba suspendida por superarse el máximo de insulina por hora + Bomba suspendida por superar el máximo diario de insulina + Parche no activado + Error al configurar los ajustes del usuario en la bomba + + Estado BLE + Última conexión + Estado de la bomba + Alarmas activas + %.2f U + %.2f V + Tipo de basal + Tasa basal + %.2f U/h + Tipo de bomba + Versión de firmware + Parche sin etiqueta + El parche expira + Actualizar + Restablecer alarmas + Cambiar parche + Solicitado por el usuario + No habilitado + + Ninguno + Batería baja de la bomba + Reservorio bajo en la bomba + El parche caduca pronto + Suspensión por glucosa baja + Suspensión por glucosa baja 2 + Auto suspendido + suspensión por máximo por hora + suspensión por máximo por día + Suspendido + Pausado + Oclusión + Expirado + Reservorio vacío + Fallo del parche + Falta del parche 2 + Fallo de base + Batería agotada + Sin calibración + Error al actualizar la zona horaria de la bomba, posponer zumbido y actualizar manualmente. + + Reintentar + Siguiente + Descartar + Activar parche + Conectar y llenar + Purgar + Purgando + Purgado completado + Colocar parche + Activando... + Activación completa + Desactivar parche + Desactivando... + Parche desactivado + Activación en progreso + Estado inesperado: %1$s + No se ha seleccionado ningún perfil. Seleccione un perfil e inténtelo de nuevo. + Número de serie de base de la bomba: %1$X + No hay ningún parche activo. Presiona Siguiente para iniciar el proceso de activación. + ¡La base de la bomba no debe conectarse al parche hasta el siguiente paso! + Conecta la base de la bomba a un nuevo parche, elimina el aire residual y rellena con insulina. Después pulsa Siguiente. + Nota: Se necesitan un mínimo de 70 unidades para la actvación. + No pegues todavía el parche al cuerpo. + Pulsa el botón de la aguja hasta la mitad. A continuación, pulsa Siguiente para iniciar el purgado. + Espera a que finalice el cebado. + No se ha podido purgar, pulsa Reintentar para volver a intentarlo. + Presiona Siguiente para continuar. + Presiona Siguiente para comenzar la activación. + Retira el cierre de seguridad. Acopla la bomba al cuerpo. Pulsa el botón de la aguja. + Retira el cierre de seguridad. Acopla la bomba al cuerpo. Pulsa el botón de la aguja. + Activando la bomba y ajustando la tasa basal inicial. Espera por favor. + Fallo al activar, pulsa Reintentar para volver a intenetarlo. + Nuevo parche activado %.2f Unidades restantes. + Presiona OK para volver a la pantalla principal. + ¿Estás seguro de que quieres desactivar el parche actual? + ¿Estás seguro de que quieres cancelar la activación? + ¿Estás seguro? ¡¡Esta acción no se puede revertir!! + Presiona Siguiente para desactivar o Cancelar para volver a la pantalla principal. + Desactivando parche. Espere, por favor. + Fallo al desactivar, presiona Descartar para olvidar el parche. + Retira la aguja. Retira el parche del cuerpo. + Retira la base de bomba y desecha el parche usado de forma adecuada. + Presiona OK para volver a la pantalla principal. Presiona Siguiente para iniciar la activación de un nuevo parche. + ¡Ups! Algo ha ido mal, parece que hay una activación en curso. + Presiona Siguiente para reanudar la activación o Descartar para restablecer el estado de activación. + Por favor, espera, leyendo el estado de activación de la bomba. + + Número de serie + Introduce el número de serie de la base de la bomba. + Ajustes de las alarmas + Selecciona los ajustes de la alarma de la bomba que prefieras. + Caducidad del parche + Cuando está activado, el parche caducará a los 3 días, con un periodo de gracia de 8 horas adicionales + Insulina máxima por hora + Especificar las unidades máximas de insulina permitidas por hora. Si se supera, la bomba se suspenderá. + Insulina máxima diaria + Especificar las unidades máximas de insulina permitidas por día. Si se superan, la bomba se suspenderá. + + Esperando el fin del bolo. Quedan %1$d seg. + Obteniendo el estado de la bomba + Obteneniendo el estado del bolo + Obteniendo el estado de la basal temporal + Configurar las opciones del usuario + diff --git a/pump/medtrum/src/main/res/values-fr-rFR/arrays.xml b/pump/medtrum/src/main/res/values-fr-rFR/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-fr-rFR/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-fr-rFR/strings.xml b/pump/medtrum/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000000..8830648bd7 --- /dev/null +++ b/pump/medtrum/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,119 @@ + + + + Medtrum + MT + Intégration de pompe pour Medtrum Nano + Paramètres de la pompe Medtrum + Erreur pompe: %1$s!! + Pompe non testée : %1$d! Veuillez nous contacter sur discord ou github pour obtenir de l\'aide + La pompe est suspendue + La pompe est suspendue, la quantité maximum d\'insuline par heure est dépassée + La pompe est suspendue, la quantité maximum d\'insuline par jour est dépassée + Patch non activé + La configuration des paramètres de la pompe a échoué! + + État BT + Dernière connexion + État de la pompe + Alarmes actives + %.2f U + %.2f V + Type de Basale + Débit de Basal + %.2f U/h + Type de pompe + Version du FW + N° du Patch + Expiration du Patch + Actualiser + Réinitialiser les alarmes + Changer le Patch + Demandé par l\'utilisateur + Non activé + + Aucun + Batterie de la pompe faible + Réservoir bas + La pompe expire bientôt + Arrêt Glycémie Basse + Arrêt Glycémie Basse 2 + Suspension auto + suspension max horaire + suspension max journalier + Suspendu + En pause + Occlusion + Expiré + Réservoir vide + Défaut Patch + Défaut Patch 2 + Défaillance de la base + Pile morte + Absence d\'étalonnage + Impossible de mettre à jour le fuseau horaire de la pompe, mettre en veille le message et rafraîchir manuellement. + + Réessayer + Suivant + Retirer + Activer le Patch + Connecter et remplir + Amorcer + Amorçage + Amorçage terminé + Fixer le Patch + En cours d\'activation... + Activation effectuée + Désactiver le Patch + Désactivation en cours... + Patch désactivé + Activation en cours + État inattendu : %1$s + Aucun profil sélectionné. Veuillez sélectionner un profil et réessayez. + N° de série de la base de la pompe : %1$X + Aucun Patch actif. Appuyez sur Suivant pour commencer le processus d\'activation. + La base de la pompe ne doit pas être connectée au Patch avant l\'étape suivante ! + Connectez la base de la pompe à un nouveau Patch, retirez l\'air résiduel et remplissez avec de l\'insuline, puis appuyez sur Suivant. + Remarque : Un minimum de 70 unités est requis pour l\'activation. + Ne fixez pas encore le Patch sur le corps. + Appuyez à mi-course sur le bouton de l\'aiguille. Puis appuyez sur Suivant pour démarrer l\'amorçage. + Merci de patienter jusqu\'à la fin de l\'amorçage. + Échec d\'amorçage, appuyez sur Réessayez pour éssayer à nouveau. + Appuyez sur Suivant pour continuer. + Appuyez sur Suivant pour démarrer l\'activation. + Retirez le verrou de sécurité. Fixez la pompe au corps. Appuyez sur le bouton de l\'aiguille. + Retirez le verrou de sécurité. Fixez la pompe au corps. Appuyez sur le bouton de l\'aiguille. + Activation de la pompe et du débit de base initial. Veuillez patienter. + Échec de l\'activation, appuyez sur Réessayez pour éssayer à nouveau. + Nouveau Patch activé. %.2f Unités restantes. + Appuyez sur OK pour revenir à l\'écran principal. + Êtes-vous sûr de vouloir désactiver le Patch actuel ? + Êtes-vous sûr de vouloir annuler l\'activation? + Êtes-vous certain ? Cette action est irréversible!! + Appuyez sur Suivant pour désactiver ou Annuler pour revenir à l\'écran principal. + Désactivation du Patch. Veuillez patienter. + Échec de la désactivation, appuyez sur Supprimer pour oublier le Patch. + Retirer l\'aiguille. Retirer le Patch du corps. + Retirez la base de la pompe et jetez le Patch utilisé de façon appropriée. + Appuyez sur OK pour revenir à l\'écran principal. Appuyez sur Suivant pour démarrer l\'activation du nouveau Patch. + Oups ! Quelque chose s\'est mal passé, il semble qu\'il y ait déjà une activation en cours. + Appuyez sur Suivant pour reprendre l\'activation ou Supprimer pour réinitialiser l\'état d\'activation. + Veuillez patienter, lecture de l\'état d\'activation de la pompe. + + Numéro de série + Entrez le numéro de série de la base de votre pompe. + Paramètres d\'Alarme + Sélectionnez vos préférences d’alarme de votre pompe. + Expiration du Patch + Lorsqu\'il est activé, le Patch expirera après 3 jours, avec un délai de grâce de 8 heures au-delà. + Insuline maximale horaire + Spécifiez le nombre maximum d\'unités d\'insuline autorisées par heure. Si ce montant est dépassé, la pompe sera suspendue. + Insuline maximale quotidienne + Spécifiez le nombre maximum d\'unités d\'insuline autorisées par jour. Si ce montant est dépassé, la pompe sera suspendue. + + Bolus en cours. %1$d sec. restantes. + Obtenir l\'état de la pompe + Obtenir l\'état du bolus + Obtenir l\'état du basal temporaire + Réglage des paramètres utilisateur + diff --git a/pump/medtrum/src/main/res/values-ga-rIE/arrays.xml b/pump/medtrum/src/main/res/values-ga-rIE/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-ga-rIE/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-ga-rIE/strings.xml b/pump/medtrum/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-hr-rHR/arrays.xml b/pump/medtrum/src/main/res/values-hr-rHR/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-hr-rHR/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-hr-rHR/strings.xml b/pump/medtrum/src/main/res/values-hr-rHR/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-hr-rHR/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-hu-rHU/arrays.xml b/pump/medtrum/src/main/res/values-hu-rHU/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-hu-rHU/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-hu-rHU/strings.xml b/pump/medtrum/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-it-rIT/arrays.xml b/pump/medtrum/src/main/res/values-it-rIT/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-it-rIT/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-it-rIT/strings.xml b/pump/medtrum/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 0000000000..492785a918 --- /dev/null +++ b/pump/medtrum/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,32 @@ + + + + Medtrum + MT + Errore micro: %1$s!! + Il micro è sospeso + + Stato BLE + Ultima connessione + Stato micro + %.2f U + Tipo basale + Velocità basale + %.2f U/h + Tipo micro + Aggiorna + Non abilitato + + Nessuno + Sospeso + In pausa + Occlusione + Scaduto + Serbatoio vuoto + + + Numero seriale + Impostazioni allarmi + Scadenza patch + + diff --git a/pump/medtrum/src/main/res/values-iw-rIL/arrays.xml b/pump/medtrum/src/main/res/values-iw-rIL/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-iw-rIL/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-iw-rIL/strings.xml b/pump/medtrum/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-ja-rJP/arrays.xml b/pump/medtrum/src/main/res/values-ja-rJP/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-ja-rJP/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-ja-rJP/strings.xml b/pump/medtrum/src/main/res/values-ja-rJP/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-ja-rJP/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-ko-rKR/arrays.xml b/pump/medtrum/src/main/res/values-ko-rKR/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-ko-rKR/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-ko-rKR/strings.xml b/pump/medtrum/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-lt-rLT/arrays.xml b/pump/medtrum/src/main/res/values-lt-rLT/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-lt-rLT/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-lt-rLT/strings.xml b/pump/medtrum/src/main/res/values-lt-rLT/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-lt-rLT/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-nl-rNL/arrays.xml b/pump/medtrum/src/main/res/values-nl-rNL/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-nl-rNL/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-nl-rNL/strings.xml b/pump/medtrum/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-no-rNO/arrays.xml b/pump/medtrum/src/main/res/values-no-rNO/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-no-rNO/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-no-rNO/strings.xml b/pump/medtrum/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-pl-rPL/arrays.xml b/pump/medtrum/src/main/res/values-pl-rPL/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-pl-rPL/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-pl-rPL/strings.xml b/pump/medtrum/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-pt-rBR/arrays.xml b/pump/medtrum/src/main/res/values-pt-rBR/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-pt-rBR/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-pt-rBR/strings.xml b/pump/medtrum/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-pt-rPT/arrays.xml b/pump/medtrum/src/main/res/values-pt-rPT/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-pt-rPT/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-pt-rPT/strings.xml b/pump/medtrum/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-ro-rRO/arrays.xml b/pump/medtrum/src/main/res/values-ro-rRO/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-ro-rRO/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-ro-rRO/strings.xml b/pump/medtrum/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-ru-rRU/arrays.xml b/pump/medtrum/src/main/res/values-ru-rRU/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-ru-rRU/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-ru-rRU/strings.xml b/pump/medtrum/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-sk-rSK/arrays.xml b/pump/medtrum/src/main/res/values-sk-rSK/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-sk-rSK/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-sk-rSK/strings.xml b/pump/medtrum/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-sr-rCS/arrays.xml b/pump/medtrum/src/main/res/values-sr-rCS/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-sr-rCS/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-sr-rCS/strings.xml b/pump/medtrum/src/main/res/values-sr-rCS/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-sr-rCS/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-sv-rSE/arrays.xml b/pump/medtrum/src/main/res/values-sv-rSE/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-sv-rSE/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-sv-rSE/strings.xml b/pump/medtrum/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-tr-rTR/arrays.xml b/pump/medtrum/src/main/res/values-tr-rTR/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-tr-rTR/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-tr-rTR/strings.xml b/pump/medtrum/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values-zh-rCN/arrays.xml b/pump/medtrum/src/main/res/values-zh-rCN/arrays.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/pump/medtrum/src/main/res/values-zh-rCN/arrays.xml @@ -0,0 +1,2 @@ + + diff --git a/pump/medtrum/src/main/res/values-zh-rCN/strings.xml b/pump/medtrum/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..36c8a820fe --- /dev/null +++ b/pump/medtrum/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pump/medtrum/src/main/res/values/strings.xml b/pump/medtrum/src/main/res/values/strings.xml index 575782c9eb..361b32dbdd 100644 --- a/pump/medtrum/src/main/res/values/strings.xml +++ b/pump/medtrum/src/main/res/values/strings.xml @@ -6,8 +6,8 @@ patch_expiration hourly_max_insulin daily_max_insulin - - medtrumpump_settings + + medtrum_pump_setting pump_state active_alarms last_connection @@ -26,7 +26,7 @@ Medtrum MT Pump integration for Medtrum Nano - Medtrum pump settings + Medtrum pump settings Pump error: %1$s !! Pump untested: %1$d! Please contact us at discord or github for support Pump is suspended @@ -34,14 +34,14 @@ Pump is suspended due to daily max insulin exceeded Patch not activated Setting user settings to pump failed! - + BLE Status Last connected Pump state Active alarms %.2f U - %.2f V + %.2f V Basal type Basal rate %.2f U/h @@ -60,11 +60,11 @@ Pump low battery Pump low reservoir Pump expires soon - Low BG suspended - Low BG suspended 2 + Low BG suspended + Low BG suspended 2 Auto suspended - hourly max suspended - daily max suspended + hourly max suspended + daily max suspended Suspended Paused Occlusion @@ -101,16 +101,15 @@ No active patch. Press Next to begin the activation process. Pump base should not be connected to the patch until the next step! Connect pump base to a new patch, remove the residual air and fill with insulin, then press Next. - Note: A minimum of 70 units is required for actvation. + Note: A minimum of 70 units is required for activation. Do not attach the patch to the body yet. Half-press needle button. Then tap Next to start prime. Please wait for the priming to complete. Failed to prime, press Retry to try again. Press Next to continue. Press Next to start activation. - Remove the safety lock. Attach the pump to the body. Press the needle button. Remove the safety lock. Attach the pump to the body. Press the needle button. - Activating pump and settng initial basal rate. Please Wait. + Activating pump and setting initial basal rate. Please Wait. Failed to activate, press Retry to try again. New patch activated. %.2f Units remaining. Press OK to return to main screen. @@ -142,10 +141,9 @@ Specify the maximum units of insulin allowed per day. If exceeded, the pump will suspend. - Waiting for bolus end. Remaining %1$d sec. - Getting pump status - Getting bolus status - Getting temporary basal status - Setting user options + Getting pump status + Getting bolus status + Getting temporary basal status + Setting user options diff --git a/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml b/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml index 7d58491568..64081101e5 100644 --- a/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml +++ b/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml @@ -3,8 +3,8 @@ xmlns:validate="http://schemas.android.com/apk/res-auto"> - + diff --git a/pump/pump-common/src/main/java/info/nightscout/pump/common/ui/PumpBLEConfigActivity.kt b/pump/pump-common/src/main/java/info/nightscout/pump/common/ui/PumpBLEConfigActivity.kt index 68c6f30eed..42928f570f 100644 --- a/pump/pump-common/src/main/java/info/nightscout/pump/common/ui/PumpBLEConfigActivity.kt +++ b/pump/pump-common/src/main/java/info/nightscout/pump/common/ui/PumpBLEConfigActivity.kt @@ -13,6 +13,8 @@ import android.content.Context import android.os.Bundle import android.os.Handler import android.os.HandlerThread +import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup @@ -20,6 +22,7 @@ import android.widget.AdapterView import android.widget.AdapterView.OnItemClickListener import android.widget.BaseAdapter import android.widget.TextView +import androidx.core.view.MenuProvider import info.nightscout.core.ui.activities.TranslatedDaggerAppCompatActivity import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.interfaces.plugin.ActivePlugin @@ -140,6 +143,21 @@ class PumpBLEConfigActivity : TranslatedDaggerAppCompatActivity() { updateCurrentlySelectedBTDevice() }) } + + // Add menu items without overriding methods in the Activity + addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {} + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = + when (menuItem.itemId) { + android.R.id.home -> { + onBackPressedDispatcher.onBackPressed() + true + } + + else -> false + } + }) } private fun updateCurrentlySelectedBTDevice() { @@ -156,16 +174,6 @@ class PumpBLEConfigActivity : TranslatedDaggerAppCompatActivity() { } } - override fun onOptionsItemSelected(item: MenuItem): Boolean = - when (item.itemId) { - android.R.id.home -> { - finish() - true - } - - else -> super.onOptionsItemSelected(item) - } - override fun onResume() { super.onResume() bleSelector.onResume() diff --git a/pump/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt b/pump/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt index a9d0e976b3..da05125412 100644 --- a/pump/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt +++ b/pump/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt @@ -17,6 +17,8 @@ import android.os.Bundle import android.os.Handler import android.os.HandlerThread import android.os.ParcelUuid +import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup @@ -26,6 +28,7 @@ import android.widget.BaseAdapter import android.widget.TextView import android.widget.Toast import androidx.core.app.ActivityCompat +import androidx.core.view.MenuProvider import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.R import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil @@ -118,6 +121,21 @@ class RileyLinkBLEConfigActivity : TranslatedDaggerAppCompatActivity() { updateCurrentlySelectedRileyLink() }) } + + // Add menu items without overriding methods in the Activity + addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {} + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = + when (menuItem.itemId) { + android.R.id.home -> { + onBackPressedDispatcher.onBackPressed() + true + } + + else -> false + } + }) } private fun updateCurrentlySelectedRileyLink() { @@ -148,16 +166,6 @@ class RileyLinkBLEConfigActivity : TranslatedDaggerAppCompatActivity() { } } - override fun onOptionsItemSelected(item: MenuItem): Boolean = - when (item.itemId) { - android.R.id.home -> { - finish() - true - } - - else -> super.onOptionsItemSelected(item) - } - private fun prepareForScanning() { val checkOK = blePreCheck.prerequisitesCheck(this) if (checkOK) { diff --git a/ui/src/main/java/info/nightscout/ui/activities/TreatmentsActivity.kt b/ui/src/main/java/info/nightscout/ui/activities/TreatmentsActivity.kt index f53797d513..ee79248e3f 100644 --- a/ui/src/main/java/info/nightscout/ui/activities/TreatmentsActivity.kt +++ b/ui/src/main/java/info/nightscout/ui/activities/TreatmentsActivity.kt @@ -1,7 +1,10 @@ package info.nightscout.ui.activities import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import com.google.android.material.tabs.TabLayout @@ -61,23 +64,26 @@ class TreatmentsActivity : TranslatedDaggerAppCompatActivity() { override fun onTabUnselected(tab: TabLayout.Tab) {} override fun onTabReselected(tab: TabLayout.Tab) {} }) + + addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {} + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = + when (menuItem.itemId) { + android.R.id.home -> { + onBackPressedDispatcher.onBackPressed() + true + } + + else -> false + } + }) } - override fun onOptionsItemSelected(item: MenuItem): Boolean = - when (item.itemId) { - android.R.id.home -> { - finish() - true - } - - else -> super.onOptionsItemSelected(item) - } - private fun setFragment(selectedFragment: Fragment) { supportFragmentManager.beginTransaction() .replace(R.id.fragment_container, selectedFragment) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) .commit() } - } \ No newline at end of file diff --git a/wear/src/main/res/values-cs-rCZ/strings.xml b/wear/src/main/res/values-cs-rCZ/strings.xml index 47c3a2d2ea..1e88264e5d 100644 --- a/wear/src/main/res/values-cs-rCZ/strings.xml +++ b/wear/src/main/res/values-cs-rCZ/strings.xml @@ -11,6 +11,7 @@ AAPS(Kokpit) AAPS (Steampunk) AAPS (DigitalStyle) + AAPS (vlastní) AAPS(Akce) AAPS(Doč. cíl) AAPS(Rychlý bolus) @@ -143,6 +144,7 @@ Zobrazit pouze čas a glykémii Vibrovat každou hodinu Zobrazit číslo týdne + Zobrazovat sekundy Váš styl: bez stylu minimalistický styl diff --git a/wear/src/main/res/values-es-rES/strings.xml b/wear/src/main/res/values-es-rES/strings.xml index f39923de34..8437dddeed 100644 --- a/wear/src/main/res/values-es-rES/strings.xml +++ b/wear/src/main/res/values-es-rES/strings.xml @@ -72,7 +72,7 @@ Tratamiento Trata Bolo - Carbohidratos + Carbos eCarbs Configuración Estado diff --git a/wear/src/main/res/values-ru-rRU/strings.xml b/wear/src/main/res/values-ru-rRU/strings.xml index db94f8ded6..9414b826d7 100644 --- a/wear/src/main/res/values-ru-rRU/strings.xml +++ b/wear/src/main/res/values-ru-rRU/strings.xml @@ -184,7 +184,7 @@ 000г 00,0 0,00 ед - Отложить оповещения AAPS + Оповещение о переходе AAPS в режим энергосбережения Отправка команды отложить оповещения AAPS ч н