Pump status line refactor

This commit is contained in:
Milos Kozak 2021-10-04 17:35:17 +02:00
parent da481f0da4
commit f802cc488e
22 changed files with 848 additions and 899 deletions

View file

@ -63,7 +63,8 @@ class OverviewData @Inject constructor(
BG, BG,
IOB_COB, IOB_COB,
SENSITIVITY, SENSITIVITY,
GRAPH GRAPH,
PUMPSTATUS
} }
var rangeToDisplay = 6 // for graph var rangeToDisplay = 6 // for graph
@ -72,6 +73,7 @@ class OverviewData @Inject constructor(
var endTime: Long = 0 var endTime: Long = 0
fun reset() { fun reset() {
pumpStatus = ""
calcProgress = "" calcProgress = ""
lastBg = null lastBg = null
temporaryBasal = null temporaryBasal = null
@ -122,6 +124,12 @@ class OverviewData @Inject constructor(
endTime = toTime endTime = toTime
} }
/*
* PUMP STATUS
*/
var pumpStatus: String = ""
/* /*
* CALC PROGRESS * CALC PROGRESS
*/ */

View file

@ -61,7 +61,11 @@ import info.nightscout.androidaps.plugins.source.DexcomPlugin
import info.nightscout.androidaps.plugins.source.XdripPlugin import info.nightscout.androidaps.plugins.source.XdripPlugin
import info.nightscout.androidaps.queue.CommandQueue import info.nightscout.androidaps.queue.CommandQueue
import info.nightscout.androidaps.skins.SkinProvider import info.nightscout.androidaps.skins.SkinProvider
import info.nightscout.androidaps.utils.* import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.TrendCalculator
import info.nightscout.androidaps.utils.alertDialogs.OKDialog import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.buildHelper.BuildHelper import info.nightscout.androidaps.utils.buildHelper.BuildHelper
import info.nightscout.androidaps.utils.protection.ProtectionCheck import info.nightscout.androidaps.utils.protection.ProtectionCheck
@ -73,6 +77,7 @@ import info.nightscout.androidaps.utils.wizard.QuickWizard
import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxkotlin.plusAssign import io.reactivex.rxkotlin.plusAssign
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject import javax.inject.Inject
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import kotlin.math.abs import kotlin.math.abs
@ -159,8 +164,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
skinProvider.activeSkin().preProcessLandscapeOverviewLayout(dm, view, landscape, resourceHelper.gb(R.bool.isTablet), smallHeight) skinProvider.activeSkin().preProcessLandscapeOverviewLayout(dm, view, landscape, resourceHelper.gb(R.bool.isTablet), smallHeight)
binding.nsclientLayout.visibility = config.NSCLIENT.toVisibility() binding.nsclientLayout.visibility = config.NSCLIENT.toVisibility()
binding.loopPumpStatusLayout.pumpStatus.setBackgroundColor(resourceHelper.gc(R.color.colorInitializingBorder))
binding.notifications.setHasFixedSize(false) binding.notifications.setHasFixedSize(false)
binding.notifications.layoutManager = LinearLayoutManager(view.context) binding.notifications.layoutManager = LinearLayoutManager(view.context)
axisWidth = if (dm.densityDpi <= 120) 3 else if (dm.densityDpi <= 160) 10 else if (dm.densityDpi <= 320) 35 else if (dm.densityDpi <= 420) 50 else if (dm.densityDpi <= 560) 70 else 80 axisWidth = if (dm.densityDpi <= 120) 3 else if (dm.densityDpi <= 160) 10 else if (dm.densityDpi <= 320) 35 else if (dm.densityDpi <= 420) 50 else if (dm.densityDpi <= 560) 70 else 80
@ -189,10 +192,10 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
prepareGraphsIfNeeded(overviewMenus.setting.size) prepareGraphsIfNeeded(overviewMenus.setting.size)
overviewMenus.setupChartMenu(binding.graphsLayout.chartMenuButton) overviewMenus.setupChartMenu(binding.graphsLayout.chartMenuButton)
binding.loopPumpStatusLayout.activeProfile.setOnClickListener(this) binding.activeProfile.setOnClickListener(this)
binding.loopPumpStatusLayout.activeProfile.setOnLongClickListener(this) binding.activeProfile.setOnLongClickListener(this)
binding.loopPumpStatusLayout.tempTarget.setOnClickListener(this) binding.tempTarget.setOnClickListener(this)
binding.loopPumpStatusLayout.tempTarget.setOnLongClickListener(this) binding.tempTarget.setOnLongClickListener(this)
binding.buttonsLayout.acceptTempButton.setOnClickListener(this) binding.buttonsLayout.acceptTempButton.setOnClickListener(this)
binding.buttonsLayout.treatmentButton.setOnClickListener(this) binding.buttonsLayout.treatmentButton.setOnClickListener(this)
binding.buttonsLayout.wizardButton.setOnClickListener(this) binding.buttonsLayout.wizardButton.setOnClickListener(this)
@ -204,7 +207,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
binding.buttonsLayout.quickWizardButton.setOnLongClickListener(this) binding.buttonsLayout.quickWizardButton.setOnLongClickListener(this)
binding.infoLayout.apsMode.setOnClickListener(this) binding.infoLayout.apsMode.setOnClickListener(this)
binding.infoLayout.apsMode.setOnLongClickListener(this) binding.infoLayout.apsMode.setOnLongClickListener(this)
binding.loopPumpStatusLayout.activeProfile.setOnLongClickListener(this) binding.activeProfile.setOnLongClickListener(this)
} }
@Synchronized @Synchronized
@ -245,10 +248,14 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
.toObservable(EventNewOpenLoopNotification::class.java) .toObservable(EventNewOpenLoopNotification::class.java)
.observeOn(aapsSchedulers.io) .observeOn(aapsSchedulers.io)
.subscribe({ scheduleUpdateGUI("EventNewOpenLoopNotification") }, fabricPrivacy::logException)) .subscribe({ scheduleUpdateGUI("EventNewOpenLoopNotification") }, fabricPrivacy::logException))
disposable.add(rxBus disposable += rxBus
.toObservable(EventPumpStatusChanged::class.java) .toObservable(EventPumpStatusChanged::class.java)
.observeOn(aapsSchedulers.main) .observeOn(aapsSchedulers.main)
.subscribe({ updatePumpStatus(it) }, fabricPrivacy::logException)) .delay (30, TimeUnit.MILLISECONDS, aapsSchedulers.main)
.subscribe({
overviewData.pumpStatus = it.getStatus(resourceHelper)
updateGUI("EventPumpStatusChanged", OverviewData.Property.PUMPSTATUS)
}, fabricPrivacy::logException)
refreshLoop = Runnable { refreshLoop = Runnable {
overviewPlugin.refreshLoop("refreshLoop") overviewPlugin.refreshLoop("refreshLoop")
@ -406,18 +413,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
} }
} }
private fun updatePumpStatus(event: EventPumpStatusChanged) {
val status = event.getStatus(resourceHelper)
if (status != "") {
binding.loopPumpStatusLayout.pumpStatus.text = status
binding.loopPumpStatusLayout.pumpStatusLayout.visibility = View.VISIBLE
binding.loopPumpStatusLayout.loopLayout.visibility = View.GONE
} else {
binding.loopPumpStatusLayout.pumpStatusLayout.visibility = View.GONE
binding.loopPumpStatusLayout.loopLayout.visibility = View.VISIBLE
}
}
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun processButtonsVisibility() { private fun processButtonsVisibility() {
val lastBG = iobCobCalculator.ads.lastBg() val lastBG = iobCobCalculator.ads.lastBg()
@ -600,14 +595,11 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
// if (what != OverviewData.Property.CALC_PROGRESS) // if (what != OverviewData.Property.CALC_PROGRESS)
// aapsLogger.debug(LTag.UI, "UpdateGui $from $what") // aapsLogger.debug(LTag.UI, "UpdateGui $from $what")
if (profileFunction.getProfile() == null) { if (profileFunction.getProfile() == null) {
binding.loopPumpStatusLayout.pumpStatus.setText(R.string.noprofileset) binding.activeProfile.setText(R.string.noprofileset)
binding.loopPumpStatusLayout.pumpStatusLayout.visibility = View.VISIBLE binding.activeProfile.setBackgroundColor(resourceHelper.gc(R.color.errorAlertBackground))
binding.loopPumpStatusLayout.loopLayout.visibility = View.GONE
return return
} }
binding.notifications.let { notificationStore.updateNotifications(it) } binding.notifications.let { notificationStore.updateNotifications(it) }
binding.loopPumpStatusLayout.pumpStatusLayout.visibility = View.GONE
binding.loopPumpStatusLayout.loopLayout.visibility = View.VISIBLE
val units = profileFunction.getUnits() val units = profileFunction.getUnits()
val pump = activePlugin.activePump val pump = activePlugin.activePump
@ -658,9 +650,9 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
else resourceHelper.gc(R.color.ribbonTextDefault) else resourceHelper.gc(R.color.ribbonTextDefault)
} ?: resourceHelper.gc(R.color.ribbonTextDefault) } ?: resourceHelper.gc(R.color.ribbonTextDefault)
binding.loopPumpStatusLayout.activeProfile.text = profileFunction.getProfileNameWithRemainingTime() binding.activeProfile.text = profileFunction.getProfileNameWithRemainingTime()
binding.loopPumpStatusLayout.activeProfile.setBackgroundColor(profileBackgroundColor) binding.activeProfile.setBackgroundColor(profileBackgroundColor)
binding.loopPumpStatusLayout.activeProfile.setTextColor(profileTextColor) binding.activeProfile.setTextColor(profileTextColor)
} }
OverviewData.Property.TEMPORARY_BASAL -> { OverviewData.Property.TEMPORARY_BASAL -> {
@ -721,9 +713,9 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
if (overviewData.temporaryTarget?.isInProgress(dateUtil) == false) overviewData.temporaryTarget = null if (overviewData.temporaryTarget?.isInProgress(dateUtil) == false) overviewData.temporaryTarget = null
val tempTarget = overviewData.temporaryTarget val tempTarget = overviewData.temporaryTarget
if (tempTarget != null) { if (tempTarget != null) {
binding.loopPumpStatusLayout.tempTarget.setTextColor(resourceHelper.gc(R.color.ribbonTextWarning)) binding.tempTarget.setTextColor(resourceHelper.gc(R.color.ribbonTextWarning))
binding.loopPumpStatusLayout.tempTarget.setBackgroundColor(resourceHelper.gc(R.color.ribbonWarning)) binding.tempTarget.setBackgroundColor(resourceHelper.gc(R.color.ribbonWarning))
binding.loopPumpStatusLayout.tempTarget.text = Profile.toTargetRangeString(tempTarget.lowTarget, tempTarget.highTarget, GlucoseUnit.MGDL, units) + " " + dateUtil.untilString(tempTarget.end, resourceHelper) binding.tempTarget.text = Profile.toTargetRangeString(tempTarget.lowTarget, tempTarget.highTarget, GlucoseUnit.MGDL, units) + " " + dateUtil.untilString(tempTarget.end, resourceHelper)
} else { } else {
// If the target is not the same as set in the profile then oref has overridden it // If the target is not the same as set in the profile then oref has overridden it
profileFunction.getProfile()?.let { profile -> profileFunction.getProfile()?.let { profile ->
@ -731,13 +723,13 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
if (targetUsed != 0.0 && abs(profile.getTargetMgdl() - targetUsed) > 0.01) { if (targetUsed != 0.0 && abs(profile.getTargetMgdl() - targetUsed) > 0.01) {
aapsLogger.debug("Adjusted target. Profile: ${profile.getTargetMgdl()} APS: $targetUsed") aapsLogger.debug("Adjusted target. Profile: ${profile.getTargetMgdl()} APS: $targetUsed")
binding.loopPumpStatusLayout.tempTarget.text = Profile.toTargetRangeString(targetUsed, targetUsed, GlucoseUnit.MGDL, units) binding.tempTarget.text = Profile.toTargetRangeString(targetUsed, targetUsed, GlucoseUnit.MGDL, units)
binding.loopPumpStatusLayout.tempTarget.setTextColor(resourceHelper.gc(R.color.ribbonTextWarning)) binding.tempTarget.setTextColor(resourceHelper.gc(R.color.ribbonTextWarning))
binding.loopPumpStatusLayout.tempTarget.setBackgroundColor(resourceHelper.gc(R.color.tempTargetBackground)) binding.tempTarget.setBackgroundColor(resourceHelper.gc(R.color.tempTargetBackground))
} else { } else {
binding.loopPumpStatusLayout.tempTarget.setTextColor(resourceHelper.gc(R.color.ribbonTextDefault)) binding.tempTarget.setTextColor(resourceHelper.gc(R.color.ribbonTextDefault))
binding.loopPumpStatusLayout.tempTarget.setBackgroundColor(resourceHelper.gc(R.color.ribbonDefault)) binding.tempTarget.setBackgroundColor(resourceHelper.gc(R.color.ribbonDefault))
binding.loopPumpStatusLayout.tempTarget.text = Profile.toTargetRangeString(profile.getTargetLowMgdl(), profile.getTargetHighMgdl(), GlucoseUnit.MGDL, units) binding.tempTarget.text = Profile.toTargetRangeString(profile.getTargetLowMgdl(), profile.getTargetHighMgdl(), GlucoseUnit.MGDL, units)
} }
} }
} }
@ -832,6 +824,12 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
String.format(Locale.ENGLISH, "%.0f%%", autosensData.autosensResult.ratio * 100) String.format(Locale.ENGLISH, "%.0f%%", autosensData.autosensResult.ratio * 100)
} ?: "" } ?: ""
} }
OverviewData.Property.PUMPSTATUS -> {
val status = overviewData.pumpStatus
binding.pumpStatus.text = status
binding.pumpStatusLayout.visibility = (status != "").toVisibility()
}
} }
} }
} }

View file

@ -135,16 +135,22 @@ class OverviewPlugin @Inject constructor(
.toObservable(EventLoopInvoked::class.java) .toObservable(EventLoopInvoked::class.java)
.observeOn(aapsSchedulers.io) .observeOn(aapsSchedulers.io)
.subscribe({ overviewData.preparePredictions("EventLoopInvoked") }, fabricPrivacy::logException) .subscribe({ overviewData.preparePredictions("EventLoopInvoked") }, fabricPrivacy::logException)
disposable.add(rxBus disposable += rxBus
.toObservable(EventNewBasalProfile::class.java) .toObservable(EventNewBasalProfile::class.java)
.observeOn(aapsSchedulers.io) .observeOn(aapsSchedulers.io)
.subscribe({ loadProfile("EventNewBasalProfile") }, fabricPrivacy::logException)) .subscribe({ loadProfile("EventNewBasalProfile") }, fabricPrivacy::logException)
disposable.add(rxBus disposable += rxBus
.toObservable(EventAutosensCalculationFinished::class.java) .toObservable(EventAutosensCalculationFinished::class.java)
.observeOn(aapsSchedulers.io) .observeOn(aapsSchedulers.io)
.subscribe({ .subscribe({
if (it.cause !is EventCustomCalculationFinished) refreshLoop("EventAutosensCalculationFinished") if (it.cause !is EventCustomCalculationFinished) refreshLoop("EventAutosensCalculationFinished")
}, fabricPrivacy::logException)) }, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventPumpStatusChanged::class.java)
.observeOn(aapsSchedulers.io)
.subscribe({
overviewData.pumpStatus = it.getStatus(resourceHelper)
}, fabricPrivacy::logException)
Thread { loadAll("onResume") }.start() Thread { loadAll("onResume") }.start()
} }

View file

@ -135,6 +135,7 @@ class QueueThread internal constructor(
aapsLogger.debug(LTag.PUMPQUEUE, "disconnected") aapsLogger.debug(LTag.PUMPQUEUE, "disconnected")
return return
} else { } else {
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.WAITING_FOR_DISCONNECTION))
aapsLogger.debug(LTag.PUMPQUEUE, "waiting for disconnect") aapsLogger.debug(LTag.PUMPQUEUE, "waiting for disconnect")
SystemClock.sleep(1000) SystemClock.sleep(1000)
} }

View file

@ -273,7 +273,7 @@
style="@style/ButtonSmallFontStyle" style="@style/ButtonSmallFontStyle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_danarhistory" android:drawableTop="@drawable/ic_pump_history"
android:paddingLeft="0dp" android:paddingLeft="0dp"
android:paddingRight="0dp" android:paddingRight="0dp"
android:text="@string/nav_historybrowser" android:text="@string/nav_historybrowser"

View file

@ -273,7 +273,7 @@
style="@style/ButtonSmallFontStyle" style="@style/ButtonSmallFontStyle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_danarhistory" android:drawableTop="@drawable/ic_pump_history"
android:paddingLeft="0dp" android:paddingLeft="0dp"
android:paddingRight="0dp" android:paddingRight="0dp"
android:text="@string/nav_historybrowser" android:text="@string/nav_historybrowser"

View file

@ -10,8 +10,7 @@
android:id="@+id/top_part_scrollbar" android:id="@+id/top_part_scrollbar"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1">
tools:ignore="UselessParent">
<LinearLayout <LinearLayout
android:id="@+id/inner_layout" android:id="@+id/inner_layout"
@ -24,9 +23,42 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
<include <LinearLayout
android:id="@+id/loop_pump_status_layout" android:id="@+id/loop_layout"
layout="@layout/overview_loop_pumpstatus_layout" /> android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/active_profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="Profile"
android:textAppearance="?android:attr/textAppearanceSmall"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/temp_target"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="TempTarget"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/mdtp_white"
tools:ignore="HardcodedText" />
</LinearLayout>
<include <include
android:id="@+id/info_layout" android:id="@+id/info_layout"
@ -92,6 +124,28 @@
</ScrollView> </ScrollView>
<LinearLayout
android:id="@+id/pump_status_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:id="@+id/pump_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@color/pumpStatusBackground"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<include <include
android:id="@+id/buttons_layout" android:id="@+id/buttons_layout"
layout="@layout/overview_buttons_layout" /> layout="@layout/overview_buttons_layout" />

View file

@ -1,67 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/loop_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/active_profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="Profile"
android:textAppearance="?android:attr/textAppearanceSmall"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/temp_target"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="TempTarget"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/mdtp_white"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/pump_status_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:id="@+id/pump_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
</LinearLayout>

View file

@ -10,6 +10,7 @@ class EventPumpStatusChanged : EventStatus {
CONNECTED, CONNECTED,
HANDSHAKING, HANDSHAKING,
PERFORMING, PERFORMING,
WAITING_FOR_DISCONNECTION,
DISCONNECTING, DISCONNECTING,
DISCONNECTED DISCONNECTED
} }
@ -46,12 +47,13 @@ class EventPumpStatusChanged : EventStatus {
// status for startup wizard // status for startup wizard
override fun getStatus(resourceHelper: ResourceHelper): String { override fun getStatus(resourceHelper: ResourceHelper): String {
return when (status) { return when (status) {
Status.CONNECTING -> String.format(resourceHelper.gs(R.string.connectingfor), secondsElapsed) Status.CONNECTING -> String.format(resourceHelper.gs(R.string.connectingfor), secondsElapsed)
Status.HANDSHAKING -> resourceHelper.gs(R.string.handshaking) Status.HANDSHAKING -> resourceHelper.gs(R.string.handshaking)
Status.CONNECTED -> resourceHelper.gs(R.string.connected) Status.CONNECTED -> resourceHelper.gs(R.string.connected)
Status.PERFORMING -> performingAction Status.PERFORMING -> performingAction
Status.DISCONNECTING -> resourceHelper.gs(R.string.disconnecting) Status.WAITING_FOR_DISCONNECTION -> resourceHelper.gs(R.string.waiting_for_disconnection)
Status.DISCONNECTED -> "" Status.DISCONNECTING -> resourceHelper.gs(R.string.disconnecting)
Status.DISCONNECTED -> ""
} }
} }
} }

View file

@ -12,7 +12,7 @@
<color name="black_overlay">#66000000</color> <color name="black_overlay">#66000000</color>
<!-- Fragments--> <!-- Fragments-->
<color name="colorInitializingBorder">#00695c</color> <color name="pumpStatusBackground">#505050</color>
<!-- Dialogs--> <!-- Dialogs-->
<color name="dialog_title_background">#303030</color> <color name="dialog_title_background">#303030</color>

View file

@ -81,6 +81,7 @@
<string name="connected">Connected</string> <string name="connected">Connected</string>
<string name="disconnected">Disconnected</string> <string name="disconnected">Disconnected</string>
<string name="disconnecting">Disconnecting</string> <string name="disconnecting">Disconnecting</string>
<string name="waiting_for_disconnection">Waiting for disconnection</string>
<string name="androidaps_start">AndroidAPS started</string> <string name="androidaps_start">AndroidAPS started</string>
<string name="formatinsulinunits1">%1$.1f U</string> <string name="formatinsulinunits1">%1$.1f U</string>
<string name="formatinsulinunits">%1$.2f U</string> <string name="formatinsulinunits">%1$.2f U</string>
@ -289,6 +290,8 @@
<string name="loop">Loop</string> <string name="loop">Loop</string>
<string name="ns">NS</string> <string name="ns">NS</string>
<string name="record">Record</string> <string name="record">Record</string>
<string name="reading_pump_history">Reading pump history</string>
<string name="pump_icon">Pump icon</string>
<!-- Command--> <!-- Command-->
<string name="connectiontimedout">Connection timed out</string> <string name="connectiontimedout">Connection timed out</string>

View file

@ -64,6 +64,8 @@ class DanaFragment : DaggerFragment() {
private val loopHandler = Handler(Looper.getMainLooper()) private val loopHandler = Handler(Looper.getMainLooper())
private lateinit var refreshLoop: Runnable private lateinit var refreshLoop: Runnable
private var pumpStatus = ""
private var pumpStatusIcon = "{fa-bluetooth-b}"
private var _binding: DanarFragmentBinding? = null private var _binding: DanarFragmentBinding? = null
@ -87,10 +89,8 @@ class DanaFragment : DaggerFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
binding.danaPumpstatus.setBackgroundColor(resourceHelper.gc(R.color.colorInitializingBorder))
binding.history.setOnClickListener { startActivity(Intent(context, DanaHistoryActivity::class.java)) } binding.history.setOnClickListener { startActivity(Intent(context, DanaHistoryActivity::class.java)) }
binding.viewprofile.setOnClickListener { binding.viewProfile.setOnClickListener {
val profile = danaPump.createConvertedProfile()?.getDefaultProfileJson() val profile = danaPump.createConvertedProfile()?.getDefaultProfileJson()
?: return@setOnClickListener ?: return@setOnClickListener
val profileName = danaPump.createConvertedProfile()?.getDefaultProfileName() val profileName = danaPump.createConvertedProfile()?.getDefaultProfileName()
@ -152,31 +152,25 @@ class DanaFragment : DaggerFragment() {
.toObservable(EventPumpStatusChanged::class.java) .toObservable(EventPumpStatusChanged::class.java)
.observeOn(aapsSchedulers.main) .observeOn(aapsSchedulers.main)
.subscribe({ .subscribe({
when (it.status) { pumpStatusIcon = when (it.status) {
EventPumpStatusChanged.Status.CONNECTING -> EventPumpStatusChanged.Status.CONNECTING ->
@Suppress("SetTextI18n") "{fa-bluetooth-b spin} ${it.secondsElapsed}s"
binding.btconnection.text = "{fa-bluetooth-b spin} ${it.secondsElapsed}s"
EventPumpStatusChanged.Status.CONNECTED -> EventPumpStatusChanged.Status.CONNECTED ->
@Suppress("SetTextI18n") "{fa-bluetooth}"
binding.btconnection.text = "{fa-bluetooth}"
EventPumpStatusChanged.Status.DISCONNECTED -> EventPumpStatusChanged.Status.DISCONNECTED ->
@Suppress("SetTextI18n") "{fa-bluetooth-b}"
binding.btconnection.text = "{fa-bluetooth-b}"
else -> { else ->
} "{fa-bluetooth-b}"
}
if (it.getStatus(resourceHelper) != "") {
binding.danaPumpstatus.text = it.getStatus(resourceHelper)
binding.danaPumpstatuslayout.visibility = View.VISIBLE
} else {
binding.danaPumpstatuslayout.visibility = View.GONE
} }
binding.btconnection.text = pumpStatusIcon
pumpStatus = it.getStatus(resourceHelper)
binding.pumpStatus.text = pumpStatus
binding.pumpStatusLayout.visibility = (pumpStatus != "").toVisibility()
}, fabricPrivacy::logException) }, fabricPrivacy::logException)
binding.danaPumpstatus.text = ""
binding.danaPumpstatuslayout.visibility = View.GONE pumpStatus = ""
@Suppress("SetTextI18n") pumpStatusIcon = "{fa-bluetooth-b}"
binding.btconnection.text = "{fa-bluetooth-b}"
updateGUI() updateGUI()
} }
@ -185,6 +179,8 @@ class DanaFragment : DaggerFragment() {
super.onPause() super.onPause()
disposable.clear() disposable.clear()
loopHandler.removeCallbacks(refreshLoop) loopHandler.removeCallbacks(refreshLoop)
pumpStatus = ""
pumpStatusIcon = "{fa-bluetooth-b}"
} }
@Synchronized @Synchronized
@ -197,6 +193,11 @@ class DanaFragment : DaggerFragment() {
@Synchronized @Synchronized
fun updateGUI() { fun updateGUI() {
if (_binding == null) return if (_binding == null) return
binding.btconnection.text = pumpStatusIcon
binding.pumpStatus.text = pumpStatus
binding.pumpStatusLayout.visibility = (pumpStatus != "").toVisibility()
binding.queue.text = commandQueue.spannedStatus()
binding.queueStatusLayout.visibility = (commandQueue.spannedStatus().toString() != "").toVisibility()
val pump = danaPump val pump = danaPump
val plugin: Pump = activePlugin.activePump val plugin: Pump = activePlugin.activePump
if (pump.lastConnection != 0L) { if (pump.lastConnection != 0L) {
@ -225,18 +226,9 @@ class DanaFragment : DaggerFragment() {
warnColors.setColorInverse(binding.reservoir, pump.reservoirRemainingUnits, 50.0, 20.0) warnColors.setColorInverse(binding.reservoir, pump.reservoirRemainingUnits, 50.0, 20.0)
binding.battery.text = "{fa-battery-" + pump.batteryRemaining / 25 + "}" binding.battery.text = "{fa-battery-" + pump.batteryRemaining / 25 + "}"
warnColors.setColorInverse(binding.battery, pump.batteryRemaining.toDouble(), 51.0, 26.0) warnColors.setColorInverse(binding.battery, pump.batteryRemaining.toDouble(), 51.0, 26.0)
binding.iob.text = resourceHelper.gs(R.string.formatinsulinunits, pump.iob)
binding.firmware.text = resourceHelper.gs(R.string.dana_model, pump.modelFriendlyName(), pump.hwModel, pump.protocol, pump.productCode) binding.firmware.text = resourceHelper.gs(R.string.dana_model, pump.modelFriendlyName(), pump.hwModel, pump.protocol, pump.productCode)
binding.basalstep.text = pump.basalStep.toString() binding.basalBolusStep.text = pump.basalStep.toString() + "/" + pump.bolusStep.toString()
binding.bolusstep.text = pump.bolusStep.toString()
binding.serialNumber.text = pump.serialNumber binding.serialNumber.text = pump.serialNumber
val status = commandQueue.spannedStatus()
if (status.toString() == "") {
binding.queue.visibility = View.GONE
} else {
binding.queue.visibility = View.VISIBLE
binding.queue.text = status
}
val icon = if (danaPump.pumpType() == PumpType.DANA_I) R.drawable.ic_dana_i else R.drawable.ic_dana_rs val icon = if (danaPump.pumpType() == PumpType.DANA_I) R.drawable.ic_dana_i else R.drawable.ic_dana_rs
binding.danaIcon.setImageDrawable(context?.let { ContextCompat.getDrawable(it, icon) }) binding.danaIcon.setImageDrawable(context?.let { ContextCompat.getDrawable(it, icon) })
//hide user options button if not an RS pump or old firmware //hide user options button if not an RS pump or old firmware

File diff suppressed because it is too large Load diff

View file

@ -28,7 +28,7 @@
android:contentDescription="@string/pumphistory" android:contentDescription="@string/pumphistory"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_danarhistory" /> app:srcCompat="@drawable/ic_pump_history" />
<TextView <TextView
android:id="@+id/textView2" android:id="@+id/textView2"

View file

@ -108,8 +108,6 @@
<string name="profile_set_failed">Setting of basal profile failed</string> <string name="profile_set_failed">Setting of basal profile failed</string>
<string name="danar_bluetooth_status">Bluetooth status</string> <string name="danar_bluetooth_status">Bluetooth status</string>
<string name="danar_iob_label">Pump IOB</string> <string name="danar_iob_label">Pump IOB</string>
<string name="basal_step">Basal Step</string>
<string name="bolus_step">Bolus Step</string>
<string name="virtualpump_firmware_label">Firmware</string> <string name="virtualpump_firmware_label">Firmware</string>
<string name="danar_pump_settings">Dana pump settings</string> <string name="danar_pump_settings">Dana pump settings</string>
<string name="timeformat12h">12h</string> <string name="timeformat12h">12h</string>
@ -131,5 +129,6 @@
<string name="press_ok_on_the_pump">Press OK on the pump\nand enter 2 displayed numbers\nKeep display on pump ON by pressing minus button until you finish entering code.</string> <string name="press_ok_on_the_pump">Press OK on the pump\nand enter 2 displayed numbers\nKeep display on pump ON by pressing minus button until you finish entering code.</string>
<string name="num1pin">1: (12 digits)</string> <string name="num1pin">1: (12 digits)</string>
<string name="num2pin">2: (8 digits)</string> <string name="num2pin">2: (8 digits)</string>
<string name="basal_bolus_step">Basal/bolus step</string>
</resources> </resources>

View file

@ -190,6 +190,7 @@ class DanaRSService : DaggerService() {
aapsLogger.debug(LTag.PUMPCOMM, "Pump time difference: $timeDiff seconds") aapsLogger.debug(LTag.PUMPCOMM, "Pump time difference: $timeDiff seconds")
} }
} }
rxBus.send(EventPumpStatusChanged(resourceHelper.gs(R.string.reading_pump_history)))
loadEvents() loadEvents()
// RS doesn't provide exact timestamp = rely on history // RS doesn't provide exact timestamp = rely on history
val eb = pumpSync.expectedPumpState().extendedBolus val eb = pumpSync.expectedPumpState().extendedBolus

View file

@ -10,6 +10,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import dagger.android.support.DaggerFragment import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.activities.TDDStatsActivity import info.nightscout.androidaps.activities.TDDStatsActivity
import info.nightscout.androidaps.diaconn.activities.DiaconnG8HistoryActivity
import info.nightscout.androidaps.diaconn.activities.DiaconnG8UserOptionsActivity
import info.nightscout.androidaps.diaconn.databinding.DiaconnG8FragmentBinding import info.nightscout.androidaps.diaconn.databinding.DiaconnG8FragmentBinding
import info.nightscout.androidaps.diaconn.events.EventDiaconnG8NewStatus import info.nightscout.androidaps.diaconn.events.EventDiaconnG8NewStatus
import info.nightscout.androidaps.events.EventExtendedBolusChange import info.nightscout.androidaps.events.EventExtendedBolusChange
@ -74,10 +76,9 @@ class DiaconnG8Fragment : DaggerFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
binding.diaconnG8Pumpstatus.setBackgroundColor(resourceHelper.gc(R.color.colorInitializingBorder)) binding.history.setOnClickListener { startActivity(Intent(context, DiaconnG8HistoryActivity::class.java)) }
binding.history.setOnClickListener { startActivity(Intent(context, info.nightscout.androidaps.diaconn.activities.DiaconnG8HistoryActivity::class.java)) }
binding.stats.setOnClickListener { startActivity(Intent(context, TDDStatsActivity::class.java)) } binding.stats.setOnClickListener { startActivity(Intent(context, TDDStatsActivity::class.java)) }
binding.userOptions.setOnClickListener { startActivity(Intent(context, info.nightscout.androidaps.diaconn.activities.DiaconnG8UserOptionsActivity::class.java)) } binding.userOptions.setOnClickListener { startActivity(Intent(context, DiaconnG8UserOptionsActivity::class.java)) }
binding.btconnection.setOnClickListener { binding.btconnection.setOnClickListener {
aapsLogger.debug(LTag.PUMP, "Clicked connect to pump") aapsLogger.debug(LTag.PUMP, "Clicked connect to pump")
diaconnG8Pump.lastConnection = 0 diaconnG8Pump.lastConnection = 0

View file

@ -36,6 +36,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:layout_marginRight="5dp" android:layout_marginRight="5dp"
android:background="@color/pumpStatusBackground"
android:gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center_horizontal"
android:text="@string/initializing" android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" /> android:textAppearance="?android:attr/textAppearanceSmall" />
@ -678,7 +679,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:drawableTop="@drawable/ic_danarhistory" android:drawableTop="@drawable/ic_pump_history"
android:paddingLeft="0dp" android:paddingLeft="0dp"
android:paddingRight="0dp" android:paddingRight="0dp"
android:text="@string/pumphistory" /> android:text="@string/pumphistory" />

View file

@ -21,7 +21,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/pumphistory" android:contentDescription="@string/pumphistory"
app:srcCompat="@drawable/ic_danarhistory" /> app:srcCompat="@drawable/ic_pump_history" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -90,8 +90,6 @@ class MedtronicFragment : DaggerFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
binding.pumpStatus.setBackgroundColor(resourceHelper.gc(R.color.colorInitializingBorder))
binding.rlStatus.text = resourceHelper.gs(RileyLinkServiceState.NotStarted.resourceId) binding.rlStatus.text = resourceHelper.gs(RileyLinkServiceState.NotStarted.resourceId)
binding.pumpStatusIcon.setTextColor(Color.WHITE) binding.pumpStatusIcon.setTextColor(Color.WHITE)

View file

@ -32,6 +32,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:layout_marginRight="5dp" android:layout_marginRight="5dp"
android:background="@color/pumpStatusBackground"
android:gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center_horizontal"
android:text="@string/initializing" android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" /> android:textAppearance="?android:attr/textAppearanceSmall" />
@ -557,7 +558,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:drawableTop="@drawable/ic_danarhistory" android:drawableTop="@drawable/ic_pump_history"
android:paddingLeft="0dp" android:paddingLeft="0dp"
android:paddingRight="0dp" android:paddingRight="0dp"
android:text="@string/pumphistory" /> android:text="@string/pumphistory" />