Add lastConnection and expiry to overview

This commit is contained in:
jbr7rr 2023-06-16 21:01:59 +02:00
parent 7b53630947
commit c0138ffad8
4 changed files with 68 additions and 33 deletions

View file

@ -132,16 +132,23 @@ class MedtrumPump @Inject constructor(
sp.putString(R.string.key_actual_basal_profile, encodedString ?: "") sp.putString(R.string.key_actual_basal_profile, encodedString ?: "")
} }
private var _lastConnection = 0L // Time in ms!
var lastConnection: Long
get() = _lastConnection
set(value) {
_lastConnection = value
sp.putLong(R.string.key_last_connection, value)
}
private var _pumpSN = 0L private var _pumpSN = 0L
val pumpSN: Long val pumpSN: Long
get() = _pumpSN get() = _pumpSN
val pumpType: PumpType = PumpType.MEDTRUM_NANO // TODO, type based on pumpSN or pump activation/connection val pumpType: PumpType = PumpType.MEDTRUM_NANO // TODO, type based on pumpSN or pump activation/connection
var lastConnection = 0L // Time in ms!
var lastTimeReceivedFromPump = 0L // Time in ms! // TODO: Consider removing as is not used? var lastTimeReceivedFromPump = 0L // Time in ms! // TODO: Consider removing as is not used?
var suspendTime = 0L // Time in ms! var suspendTime = 0L // Time in ms!
var patchStartTime = 0L // Time in ms! var patchStartTime = 0L // Time in ms! // TODO: save in SP
var patchAge = 0L // Time in seconds?! // TODO: Not used var patchAge = 0L // Time in seconds?! // TODO: Not used
var batteryVoltage_A = 0.0 var batteryVoltage_A = 0.0
@ -186,6 +193,7 @@ class MedtrumPump @Inject constructor(
init { init {
// Load stuff from SP // Load stuff from SP
_patchSessionToken = sp.getLong(R.string.key_session_token, 0L) _patchSessionToken = sp.getLong(R.string.key_session_token, 0L)
_lastConnection = sp.getLong(R.string.key_last_connection, 0L)
_currentSequenceNumber = sp.getInt(R.string.key_current_sequence_number, 0) _currentSequenceNumber = sp.getInt(R.string.key_current_sequence_number, 0)
_patchId = sp.getLong(R.string.key_patch_id, 0L) _patchId = sp.getLong(R.string.key_patch_id, 0L)
_syncedSequenceNumber = sp.getInt(R.string.key_synced_sequence_number, 0) _syncedSequenceNumber = sp.getInt(R.string.key_synced_sequence_number, 0)

View file

@ -1,27 +1,21 @@
package info.nightscout.pump.medtrum.ui.viewmodel package info.nightscout.pump.medtrum.ui.viewmodel
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.pump.medtrum.code.EventType import info.nightscout.pump.medtrum.code.EventType
import info.nightscout.pump.medtrum.ui.MedtrumBaseNavigator import info.nightscout.pump.medtrum.ui.MedtrumBaseNavigator
import info.nightscout.pump.medtrum.ui.event.SingleLiveEvent import info.nightscout.pump.medtrum.ui.event.SingleLiveEvent
import info.nightscout.pump.medtrum.ui.event.UIEvent import info.nightscout.pump.medtrum.ui.event.UIEvent
import info.nightscout.pump.medtrum.ui.viewmodel.BaseViewModel
import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.pump.medtrum.MedtrumPump import info.nightscout.pump.medtrum.MedtrumPump
import info.nightscout.pump.medtrum.R import info.nightscout.pump.medtrum.R
import info.nightscout.pump.medtrum.code.ConnectionState import info.nightscout.pump.medtrum.code.ConnectionState
import info.nightscout.pump.medtrum.comm.enums.MedtrumPumpState import info.nightscout.pump.medtrum.comm.enums.MedtrumPumpState
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventPumpStatusChanged
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.logging.LTag import info.nightscout.rx.logging.LTag
import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.interfaces.ResourceHelper
import io.reactivex.rxjava3.disposables.CompositeDisposable import info.nightscout.shared.utils.DateUtil
import io.reactivex.rxjava3.kotlin.plusAssign import info.nightscout.shared.utils.T
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel import kotlinx.coroutines.cancel
@ -31,11 +25,9 @@ import javax.inject.Inject
class MedtrumOverviewViewModel @Inject constructor( class MedtrumOverviewViewModel @Inject constructor(
private val aapsLogger: AAPSLogger, private val aapsLogger: AAPSLogger,
private val rh: ResourceHelper, private val rh: ResourceHelper,
private val rxBus: RxBus,
private val aapsSchedulers: AapsSchedulers,
private val fabricPrivacy: FabricPrivacy,
private val profileFunction: ProfileFunction, private val profileFunction: ProfileFunction,
private val commandQueue: CommandQueue, private val commandQueue: CommandQueue,
private val dateUtil: DateUtil,
val medtrumPump: MedtrumPump val medtrumPump: MedtrumPump
) : BaseViewModel<MedtrumBaseNavigator>() { ) : BaseViewModel<MedtrumBaseNavigator>() {
@ -57,9 +49,9 @@ class MedtrumOverviewViewModel @Inject constructor(
val bleStatus: LiveData<String> val bleStatus: LiveData<String>
get() = _bleStatus get() = _bleStatus
private val _lastConnected = SingleLiveEvent<String>() private val _lastConnectionMinAgo = SingleLiveEvent<String>()
val lastConnected: LiveData<String> val lastConnectionMinAgo: LiveData<String>
get() = _lastConnected get() = _lastConnectionMinAgo
private val _activeAlarms = SingleLiveEvent<String>() private val _activeAlarms = SingleLiveEvent<String>()
val activeAlarms: LiveData<String> val activeAlarms: LiveData<String>
@ -105,6 +97,7 @@ class MedtrumOverviewViewModel @Inject constructor(
} }
} }
} }
updateGUI()
} }
} }
scope.launch { scope.launch {
@ -115,6 +108,14 @@ class MedtrumOverviewViewModel @Inject constructor(
} else { } else {
_canDoResetAlarms.postValue(false) _canDoResetAlarms.postValue(false)
} }
updateGUI()
}
}
// Periodically update gui
scope.launch {
while (true) {
updateGUI()
kotlinx.coroutines.delay(T.mins(1).msecs())
} }
} }
} }
@ -141,5 +142,25 @@ class MedtrumOverviewViewModel @Inject constructor(
_eventHandler.postValue(UIEvent(EventType.CHANGE_PATCH_CLICKED)) _eventHandler.postValue(UIEvent(EventType.CHANGE_PATCH_CLICKED))
} }
} }
fun updateGUI() {
// Update less dynamic values
val agoMilliseconds = System.currentTimeMillis() - medtrumPump.lastConnection
val agoMinutes = agoMilliseconds / 1000 / 60
_lastConnectionMinAgo.postValue(rh.gs(info.nightscout.shared.R.string.minago, agoMinutes))
// TODO: Update these values
// _activeAlarms.postValue(rh.gs(R.string.active_alarms, pump.activeAlarms))
// _pumpType.postValue(rh.gs(R.string.pump_type, pump.pumpType))
// _fwVersion.postValue(rh.gs(R.string.fw_version, pump.fwVersion))
// _patchNo.postValue(rh.gs(R.string.patch_no, pump.patchNo))
if (medtrumPump.desiredPatchExpiration) {
val expiry = medtrumPump.patchStartTime + T.hours(84).msecs()
_patchExpiry.postValue(dateUtil.dateAndTimeString(expiry))
} else {
_patchExpiry.postValue(rh.gs(R.string.expiry_not_enabled))
}
}
} }

View file

@ -3,7 +3,6 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<data> <data>
<variable <variable
name="viewmodel" name="viewmodel"
type="info.nightscout.pump.medtrum.ui.viewmodel.MedtrumOverviewViewModel" /> type="info.nightscout.pump.medtrum.ui.viewmodel.MedtrumOverviewViewModel" />
@ -82,7 +81,7 @@
android:gravity="end" android:gravity="end"
android:paddingStart="5dp" android:paddingStart="5dp"
android:paddingEnd="5dp" android:paddingEnd="5dp"
android:text="@string/last_connected_label" android:text="@string/last_connection_label"
android:textSize="14sp" /> android:textSize="14sp" />
<TextView <TextView
@ -96,14 +95,14 @@
android:textSize="14sp" /> android:textSize="14sp" />
<TextView <TextView
android:id="@+id/last_connected" android:id="@+id/last_connection"
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:gravity="start" android:gravity="start"
android:paddingStart="5dp" android:paddingStart="5dp"
android:paddingEnd="5dp" android:paddingEnd="5dp"
android:text="@{viewmodel.lastConnected}" android:text="@{viewmodel.lastConnectionMinAgo}"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
@ -111,9 +110,11 @@
<View <View
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="2dip" android:layout_height="2dip"
android:layout_marginStart="20dp"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="5dp" android:layout_marginBottom="5dp"
android:background="@color/list_delimiter" /> android:background="?android:attr/dividerHorizontal" />
<!-- Pump State --> <!-- Pump State -->
<LinearLayout <LinearLayout
@ -319,9 +320,11 @@
<View <View
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="2dip" android:layout_height="2dip"
android:layout_marginStart="20dp"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="5dp" android:layout_marginBottom="5dp"
android:background="@color/list_delimiter" /> android:background="?android:attr/dividerHorizontal" />
<!-- PumpType --> <!-- PumpType -->
<LinearLayout <LinearLayout
@ -485,16 +488,17 @@
</LinearLayout> </LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginStart="20dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="5dp"
android:background="?android:attr/dividerHorizontal" />
</LinearLayout> </LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="@color/list_delimiter" />
<!-- Add other fields here as needed, like the ones above -->
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View file

@ -9,6 +9,7 @@
<string name="key_medtrumpump_settings" translatable="false">medtrumpump_settings</string> <string name="key_medtrumpump_settings" translatable="false">medtrumpump_settings</string>
<string name="key_pump_state" translatable="false">pump_state</string> <string name="key_pump_state" translatable="false">pump_state</string>
<string name="key_last_connection" translatable="false">last_connection</string>
<string name="key_session_token" translatable="false">medtrum_session_token</string> <string name="key_session_token" translatable="false">medtrum_session_token</string>
<string name="key_patch_id" translatable="false">patch_id</string> <string name="key_patch_id" translatable="false">patch_id</string>
<string name="key_actual_basal_profile" translatable="false">actual_basal_profile</string> <string name="key_actual_basal_profile" translatable="false">actual_basal_profile</string>
@ -28,7 +29,7 @@
<!-- overview fragment --> <!-- overview fragment -->
<string name="ble_status_label">BLE Status</string> <string name="ble_status_label">BLE Status</string>
<string name="last_connected_label">Last connected</string> <string name="last_connection_label">Last connected</string>
<string name="pump_state_label">Pump state</string> <string name="pump_state_label">Pump state</string>
<string name="active_alarms_label">Active alarms</string> <string name="active_alarms_label">Active alarms</string>
<string name="reservoir_label"> Reservoir</string> <string name="reservoir_label"> Reservoir</string>
@ -44,6 +45,7 @@
<string name="reset_alarms_label">Reset alarms</string> <string name="reset_alarms_label">Reset alarms</string>
<string name="change_patch_label">Change patch</string> <string name="change_patch_label">Change patch</string>
<string name="requested_by_user" comment="26 characters max for translation">Requested by user</string> <string name="requested_by_user" comment="26 characters max for translation">Requested by user</string>
<string name="expiry_not_enabled">Not enabled</string>
<!-- wizard--> <!-- wizard-->
<string name="string_change_patch">Discard/Change Patch</string> <!-- TODO check--> <string name="string_change_patch">Discard/Change Patch</string> <!-- TODO check-->
@ -66,7 +68,7 @@
<string name="alarm_setting_title">Alarm Settings</string> <string name="alarm_setting_title">Alarm Settings</string>
<string name="alarm_setting_summary">Select your preferred pump alarm settings.</string> <string name="alarm_setting_summary">Select your preferred pump alarm settings.</string>
<string name="patch_expiration_title">Patch Expiration</string> <string name="patch_expiration_title">Patch Expiration</string>
<string name="patch_expiration_summary">Turn this on to get an alert 12 hours before the patch expiration. When enabled, the patch will expire after 3 days.</string> <string name="patch_expiration_summary">Turn this on to get an alert 12 hours before the patch expiration. When enabled, the patch will expire after 3.5 days.</string>
<string name="hourly_max_insulin_title">Hourly Maximum Insulin</string> <string name="hourly_max_insulin_title">Hourly Maximum Insulin</string>
<string name="hourly_max_insulin_summary">Specify the maximum units of insulin allowed per hour. If exceeded, the pump will suspend.</string> <string name="hourly_max_insulin_summary">Specify the maximum units of insulin allowed per hour. If exceeded, the pump will suspend.</string>
<string name="daily_max_insulin_title">Daily Maximum Insulin</string> <string name="daily_max_insulin_title">Daily Maximum Insulin</string>