combov2: Show UI notifications and toaster messages when BT is not enabled
This commit is contained in:
parent
6d998c8081
commit
377188353a
2 changed files with 35 additions and 10 deletions
|
@ -133,6 +133,7 @@ open class Notification {
|
||||||
const val EOELOW_PATCH_ALERTS = 79
|
const val EOELOW_PATCH_ALERTS = 79
|
||||||
const val COMBO_PUMP_SUSPENDED = 80
|
const val COMBO_PUMP_SUSPENDED = 80
|
||||||
const val COMBO_UNKNOWN_TBR = 81
|
const val COMBO_UNKNOWN_TBR = 81
|
||||||
|
const val BLUETOOTH_NOT_ENABLED = 82
|
||||||
|
|
||||||
const val USER_MESSAGE = 1000
|
const val USER_MESSAGE = 1000
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,6 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.cancel
|
|
||||||
import kotlinx.coroutines.cancelAndJoin
|
import kotlinx.coroutines.cancelAndJoin
|
||||||
import kotlinx.coroutines.channels.BufferOverflow
|
import kotlinx.coroutines.channels.BufferOverflow
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
|
@ -310,6 +309,8 @@ class ComboV2Plugin @Inject constructor (
|
||||||
try {
|
try {
|
||||||
bluetoothInterface!!.setup()
|
bluetoothInterface!!.setup()
|
||||||
|
|
||||||
|
rxBus.send(EventDismissNotification(Notification.BLUETOOTH_NOT_ENABLED))
|
||||||
|
|
||||||
aapsLogger.debug(LTag.PUMP, "Setting up pump manager")
|
aapsLogger.debug(LTag.PUMP, "Setting up pump manager")
|
||||||
pumpManager = ComboCtlPumpManager(bluetoothInterface!!, pumpStateStore)
|
pumpManager = ComboCtlPumpManager(bluetoothInterface!!, pumpStateStore)
|
||||||
pumpManager!!.setup {
|
pumpManager!!.setup {
|
||||||
|
@ -327,6 +328,12 @@ class ComboV2Plugin @Inject constructor (
|
||||||
val paired = pumpManager!!.getPairedPumpAddresses().isNotEmpty()
|
val paired = pumpManager!!.getPairedPumpAddresses().isNotEmpty()
|
||||||
_pairedStateUIFlow.value = paired
|
_pairedStateUIFlow.value = paired
|
||||||
} catch (_: BluetoothNotEnabledException) {
|
} catch (_: BluetoothNotEnabledException) {
|
||||||
|
uiInteraction.addNotification(
|
||||||
|
Notification.BLUETOOTH_NOT_ENABLED,
|
||||||
|
text = rh.gs(info.nightscout.core.ui.R.string.ble_not_enabled),
|
||||||
|
level = Notification.INFO
|
||||||
|
)
|
||||||
|
|
||||||
// If the user currently has Bluetooth disabled, retry until
|
// If the user currently has Bluetooth disabled, retry until
|
||||||
// the user turns it on. AAPS will automatically show a dialog
|
// the user turns it on. AAPS will automatically show a dialog
|
||||||
// box which requests the user to enable Bluetooth. Upon
|
// box which requests the user to enable Bluetooth. Upon
|
||||||
|
@ -555,6 +562,8 @@ class ComboV2Plugin @Inject constructor (
|
||||||
_bluetoothAddressUIFlow.value = bluetoothAddress.toString()
|
_bluetoothAddressUIFlow.value = bluetoothAddress.toString()
|
||||||
_serialNumberUIFlow.value = pumpManager!!.getPumpID(bluetoothAddress)
|
_serialNumberUIFlow.value = pumpManager!!.getPumpID(bluetoothAddress)
|
||||||
|
|
||||||
|
rxBus.send(EventDismissNotification(Notification.BLUETOOTH_NOT_ENABLED))
|
||||||
|
|
||||||
// Erase any display frame that may be left over from a previous connection.
|
// Erase any display frame that may be left over from a previous connection.
|
||||||
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
|
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
|
||||||
_displayFrameUIFlow.resetReplayCache()
|
_displayFrameUIFlow.resetReplayCache()
|
||||||
|
@ -729,6 +738,12 @@ class ComboV2Plugin @Inject constructor (
|
||||||
executePendingDisconnect()
|
executePendingDisconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (_: BluetoothNotEnabledException) {
|
||||||
|
uiInteraction.addNotification(
|
||||||
|
Notification.BLUETOOTH_NOT_ENABLED,
|
||||||
|
text = rh.gs(info.nightscout.core.ui.R.string.ble_not_enabled),
|
||||||
|
level = Notification.INFO
|
||||||
|
)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
aapsLogger.error(LTag.PUMP, "Connection failure: $e")
|
aapsLogger.error(LTag.PUMP, "Connection failure: $e")
|
||||||
ToastUtils.showToastInUiThread(context, rh.gs(R.string.combov2_could_not_connect))
|
ToastUtils.showToastInUiThread(context, rh.gs(R.string.combov2_could_not_connect))
|
||||||
|
@ -1575,15 +1590,24 @@ class ComboV2Plugin @Inject constructor (
|
||||||
context, config, aapsLogger, androidPermission,
|
context, config, aapsLogger, androidPermission,
|
||||||
permissionsToCheckFor = listOf("android.permission.BLUETOOTH_CONNECT")
|
permissionsToCheckFor = listOf("android.permission.BLUETOOTH_CONNECT")
|
||||||
) {
|
) {
|
||||||
pumpManager?.pairWithNewPump(discoveryDuration) { newPumpAddress, previousAttemptFailed ->
|
try {
|
||||||
aapsLogger.info(
|
pumpManager?.pairWithNewPump(discoveryDuration) { newPumpAddress, previousAttemptFailed ->
|
||||||
LTag.PUMP,
|
aapsLogger.info(
|
||||||
"New pairing PIN request from Combo pump with Bluetooth " +
|
LTag.PUMP,
|
||||||
"address $newPumpAddress (previous attempt failed: $previousAttemptFailed)"
|
"New pairing PIN request from Combo pump with Bluetooth " +
|
||||||
)
|
"address $newPumpAddress (previous attempt failed: $previousAttemptFailed)"
|
||||||
_previousPairingAttemptFailedFlow.value = previousAttemptFailed
|
)
|
||||||
newPINChannel.receive()
|
_previousPairingAttemptFailedFlow.value = previousAttemptFailed
|
||||||
} ?: throw IllegalStateException("Attempting to access uninitialized pump manager")
|
newPINChannel.receive()
|
||||||
|
} ?: throw IllegalStateException("Attempting to access uninitialized pump manager")
|
||||||
|
} catch (e: BluetoothNotEnabledException) {
|
||||||
|
// If Bluetooth is turned off during pairing, show a toaster message.
|
||||||
|
// Notifications on the AAPS overview fragment are not useful here
|
||||||
|
// because the pairing activity obscures that fragment. So, instead,
|
||||||
|
// alert the user by showing the notification via the toaster.
|
||||||
|
ToastUtils.errorToast(context, info.nightscout.core.ui.R.string.ble_not_enabled)
|
||||||
|
ComboCtlPumpManager.PairingResult.ExceptionDuringPairing(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pairingResult !is ComboCtlPumpManager.PairingResult.Success)
|
if (pairingResult !is ComboCtlPumpManager.PairingResult.Success)
|
||||||
|
|
Loading…
Reference in a new issue