From 09aa78f1d183005e5f5c2d0038a902bbcbdccdcb Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Sat, 1 Jul 2023 20:46:29 +0200 Subject: [PATCH] Recovery option when patch activation process is interrupted --- .../nightscout/pump/medtrum/code/PatchStep.kt | 2 + .../pump/medtrum/di/MedtrumModule.kt | 9 ++ .../pump/medtrum/services/BLEComm.kt | 3 + .../pump/medtrum/ui/MedtrumActivity.kt | 41 ++++---- .../medtrum/ui/MedtrumOverviewFragment.kt | 5 +- .../pump/medtrum/ui/MedtrumPrimingFragment.kt | 9 +- .../MedtrumRetryActivationConnectFragment.kt | 50 ++++++++++ .../ui/MedtrumRetryActivationFragment.kt | 46 +++++++++ .../medtrum/ui/viewmodel/MedtrumViewModel.kt | 67 ++++++++----- .../fragment_medtrum_activate_complete.xml | 3 +- .../fragment_medtrum_retry_activation.xml | 93 +++++++++++++++++++ ...gment_medtrum_retry_activation_connect.xml | 67 +++++++++++++ pump/medtrum/src/main/res/values/strings.xml | 5 + 13 files changed, 346 insertions(+), 54 deletions(-) create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationConnectFragment.kt create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationFragment.kt create mode 100644 pump/medtrum/src/main/res/layout/fragment_medtrum_retry_activation.xml create mode 100644 pump/medtrum/src/main/res/layout/fragment_medtrum_retry_activation_connect.xml diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/code/PatchStep.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/code/PatchStep.kt index bba4cdfecb..ea0cdf3d28 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/code/PatchStep.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/code/PatchStep.kt @@ -13,6 +13,8 @@ enum class PatchStep { ATTACH_PATCH, ACTIVATE, ACTIVATE_COMPLETE, + RETRY_ACTIVATION, + RETRY_ACTIVATION_CONNECT, ERROR, CANCEL, COMPLETE; diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt index 4dd4612536..bc5c286b46 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt @@ -21,6 +21,8 @@ import info.nightscout.pump.medtrum.ui.MedtrumPrimingFragment import info.nightscout.pump.medtrum.ui.MedtrumStartDeactivationFragment import info.nightscout.pump.medtrum.ui.MedtrumActivity import info.nightscout.pump.medtrum.ui.MedtrumOverviewFragment +import info.nightscout.pump.medtrum.ui.MedtrumRetryActivationConnectFragment +import info.nightscout.pump.medtrum.ui.MedtrumRetryActivationFragment import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumOverviewViewModel import info.nightscout.pump.medtrum.ui.viewmodel.MedtrumViewModel import info.nightscout.pump.medtrum.ui.viewmodel.ViewModelFactory @@ -77,6 +79,13 @@ abstract class MedtrumModule { @ContributesAndroidInjector internal abstract fun contributesPreparePatchConnectFragment(): MedtrumPreparePatchConnectFragment + @FragmentScope + @ContributesAndroidInjector + internal abstract fun contributesRetryActivationFragment(): MedtrumRetryActivationFragment + @FragmentScope + @ContributesAndroidInjector + internal abstract fun contributesRetryActivationConnectFragment(): MedtrumRetryActivationConnectFragment + @FragmentScope @ContributesAndroidInjector internal abstract fun contributesPrimeFragment(): MedtrumPrimeFragment 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 beba3622d0..a357be8c9f 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 @@ -157,6 +157,9 @@ class BLEComm @Inject internal constructor( isConnected = false isConnecting = true + mWritePackets = null + mReadPacket = null + if (mDevice != null && mDeviceSN == deviceSN) { // Skip scanning and directly connect to gatt aapsLogger.debug(LTag.PUMPBTCOMM, "Skipping scan and directly connecting to gatt") 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 458f1ee13e..07f96164d8 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 @@ -35,34 +35,29 @@ class MedtrumActivity : MedtrumBaseActivity() { patchStep.observe(this@MedtrumActivity) { when (it) { - PatchStep.PREPARE_PATCH -> setupViewFragment(MedtrumPreparePatchFragment.newInstance()) - PatchStep.PREPARE_PATCH_CONNECT -> setupViewFragment(MedtrumPreparePatchConnectFragment.newInstance()) - PatchStep.PRIME -> setupViewFragment(MedtrumPrimeFragment.newInstance()) - PatchStep.PRIMING -> setupViewFragment(MedtrumPrimingFragment.newInstance()) - PatchStep.PRIME_COMPLETE -> setupViewFragment(MedtrumPrimeCompleteFragment.newInstance()) - PatchStep.ATTACH_PATCH -> setupViewFragment(MedtrumAttachPatchFragment.newInstance()) - PatchStep.ACTIVATE -> setupViewFragment(MedtrumActivateFragment.newInstance()) - PatchStep.ACTIVATE_COMPLETE -> setupViewFragment(MedtrumActivateCompleteFragment.newInstance()) - PatchStep.COMPLETE -> this@MedtrumActivity.finish() - PatchStep.ERROR -> Unit // Do nothing, let activity handle this + PatchStep.PREPARE_PATCH -> setupViewFragment(MedtrumPreparePatchFragment.newInstance()) + PatchStep.PREPARE_PATCH_CONNECT -> setupViewFragment(MedtrumPreparePatchConnectFragment.newInstance()) + PatchStep.PRIME -> setupViewFragment(MedtrumPrimeFragment.newInstance()) + PatchStep.PRIMING -> setupViewFragment(MedtrumPrimingFragment.newInstance()) + PatchStep.PRIME_COMPLETE -> setupViewFragment(MedtrumPrimeCompleteFragment.newInstance()) + PatchStep.ATTACH_PATCH -> setupViewFragment(MedtrumAttachPatchFragment.newInstance()) + PatchStep.ACTIVATE -> setupViewFragment(MedtrumActivateFragment.newInstance()) + PatchStep.ACTIVATE_COMPLETE -> setupViewFragment(MedtrumActivateCompleteFragment.newInstance()) + PatchStep.CANCEL, + PatchStep.COMPLETE -> this@MedtrumActivity.finish() + PatchStep.ERROR -> Unit // Do nothing, let activity handle this + PatchStep.RETRY_ACTIVATION -> setupViewFragment(MedtrumRetryActivationFragment.newInstance()) + PatchStep.RETRY_ACTIVATION_CONNECT -> setupViewFragment(MedtrumRetryActivationConnectFragment.newInstance()) + PatchStep.START_DEACTIVATION -> setupViewFragment(MedtrumStartDeactivationFragment.newInstance()) + PatchStep.DEACTIVATE -> setupViewFragment(MedtrumDeactivatePatchFragment.newInstance()) - PatchStep.CANCEL -> { - if (setupStep.value !in listOf(MedtrumViewModel.SetupStep.ACTIVATED, MedtrumViewModel.SetupStep.START_DEACTIVATION, MedtrumViewModel.SetupStep.STOPPED)) { - resetPumpState() - } - this@MedtrumActivity.finish() - } - - PatchStep.START_DEACTIVATION -> setupViewFragment(MedtrumStartDeactivationFragment.newInstance()) - PatchStep.DEACTIVATE -> setupViewFragment(MedtrumDeactivatePatchFragment.newInstance()) - - PatchStep.FORCE_DEACTIVATION -> { + PatchStep.FORCE_DEACTIVATION -> { medtrumPump.pumpState = MedtrumPumpState.STOPPED moveStep(PatchStep.DEACTIVATION_COMPLETE) } - PatchStep.DEACTIVATION_COMPLETE -> setupViewFragment(MedtrumDeactivationCompleteFragment.newInstance()) - null -> Unit + PatchStep.DEACTIVATION_COMPLETE -> setupViewFragment(MedtrumDeactivationCompleteFragment.newInstance()) + null -> Unit } } } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumOverviewFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumOverviewFragment.kt index 650de82ede..5df3d575c0 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumOverviewFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumOverviewFragment.kt @@ -41,9 +41,10 @@ class MedtrumOverviewFragment : MedtrumBaseFragment requireContext().apply { if (medtrumPump.pumpState > MedtrumPumpState.EJECTED && medtrumPump.pumpState < MedtrumPumpState.STOPPED) { startActivity(MedtrumActivity.createIntentFromMenu(this, PatchStep.START_DEACTIVATION)) - } else { + } else if (medtrumPump.pumpState in listOf(MedtrumPumpState.STOPPED, MedtrumPumpState.NONE)) { startActivity(MedtrumActivity.createIntentFromMenu(this, PatchStep.PREPARE_PATCH)) - medtrumPump.pumpState = MedtrumPumpState.NONE // Reset pumpstate here, fetch on next connection + } else { + startActivity(MedtrumActivity.createIntentFromMenu(this, PatchStep.RETRY_ACTIVATION)) } } else -> Unit 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 52a4b1622f..9751f4f70c 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 @@ -34,10 +34,11 @@ class MedtrumPrimingFragment : MedtrumBaseFragment Unit // Nothing to do here, previous state - MedtrumViewModel.SetupStep.PRIMED -> moveStep(PatchStep.PRIME_COMPLETE) + MedtrumViewModel.SetupStep.FILLED, + MedtrumViewModel.SetupStep.PRIMING -> Unit // Nothing to do here + MedtrumViewModel.SetupStep.PRIMED -> moveStep(PatchStep.PRIME_COMPLETE) - MedtrumViewModel.SetupStep.ERROR -> { + MedtrumViewModel.SetupStep.ERROR -> { moveStep(PatchStep.ERROR) updateSetupStep(MedtrumViewModel.SetupStep.FILLED) // Reset setup step binding.textWaitForPriming.text = rh.gs(R.string.priming_error) @@ -45,7 +46,7 @@ class MedtrumPrimingFragment : MedtrumBaseFragment { + else -> { ToastUtils.errorToast(requireContext(), rh.gs(R.string.unexpected_state, it.toString())) aapsLogger.error(LTag.PUMP, "Unexpected state: $it") } 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 new file mode 100644 index 0000000000..5a09b3bf0c --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationConnectFragment.kt @@ -0,0 +1,50 @@ +package info.nightscout.pump.medtrum.ui + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +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 +import javax.inject.Inject + +class MedtrumRetryActivationConnectFragment : MedtrumBaseFragment() { + + @Inject lateinit var aapsLogger: AAPSLogger + + companion object { + + fun newInstance(): MedtrumRetryActivationConnectFragment = MedtrumRetryActivationConnectFragment() + } + + override fun getLayoutId(): Int = R.layout.fragment_medtrum_retry_activation_connect + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + aapsLogger.debug(LTag.PUMP, "MedtrumRetryActivationConnectFragment onViewCreated") + binding.apply { + viewModel = ViewModelProvider(requireActivity(), viewModelFactory).get(MedtrumViewModel::class.java) + viewModel?.apply { + + setupStep.observe(viewLifecycleOwner) { + when (it) { + MedtrumViewModel.SetupStep.INITIAL -> Unit // Nothing to do here + MedtrumViewModel.SetupStep.FILLED -> forceMoveStep(PatchStep.PRIME) + MedtrumViewModel.SetupStep.PRIMING -> forceMoveStep(PatchStep.PRIMING) + MedtrumViewModel.SetupStep.PRIMED -> forceMoveStep(PatchStep.PRIME_COMPLETE) + MedtrumViewModel.SetupStep.ACTIVATED -> forceMoveStep(PatchStep.ACTIVATE_COMPLETE) + + else -> { + aapsLogger.error(LTag.PUMP, "Unexpected state: $it") + } + } + } + retryActivationConnect() + } + } + } +} 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 new file mode 100644 index 0000000000..2136ea0092 --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumRetryActivationFragment.kt @@ -0,0 +1,46 @@ +package info.nightscout.pump.medtrum.ui + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +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 +import info.nightscout.shared.interfaces.ResourceHelper +import javax.inject.Inject + +class MedtrumRetryActivationFragment : MedtrumBaseFragment() { + + @Inject lateinit var aapsLogger: AAPSLogger + @Inject lateinit var rh: ResourceHelper + + companion object { + + fun newInstance(): MedtrumRetryActivationFragment = MedtrumRetryActivationFragment() + } + + override fun getLayoutId(): Int = R.layout.fragment_medtrum_retry_activation + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + aapsLogger.debug(LTag.PUMP, "MedtrumRetryActivationFragment onViewCreated") + binding.apply { + viewModel = ViewModelProvider(requireActivity(), viewModelFactory).get(MedtrumViewModel::class.java) + viewModel?.apply { + preparePatch() // Use this to make sure we are disconnceted at this stage + } + btnNegative.setOnClickListener { + OKDialog.showConfirmation(requireActivity(), rh.gs(R.string.medtrum_deactivate_pump_confirm)) { + viewModel?.apply { + moveStep(PatchStep.FORCE_DEACTIVATION) + } + } + } + } + } +} 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 ab492749d0..00e68cb52d 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 @@ -70,7 +70,7 @@ class MedtrumViewModel @Inject constructor( ) { medtrumService?.connect("Try reconnect from viewModel") } - if (patchStep.value == PatchStep.PREPARE_PATCH_CONNECT) { + if (patchStep.value in listOf(PatchStep.PREPARE_PATCH_CONNECT, PatchStep.RETRY_ACTIVATION_CONNECT)) { // We are disconnected during prepare patch connect, this means we failed to connect (wrong session token?) // Retry 3 times, then give up if (connectRetryCounter < 3) { @@ -104,7 +104,7 @@ class MedtrumViewModel @Inject constructor( } MedtrumPumpState.PRIMING -> { - // Do Nothing, wait for priming to complete + updateSetupStep(SetupStep.PRIMING) } MedtrumPumpState.PRIMED, MedtrumPumpState.EJECTED -> { @@ -138,7 +138,7 @@ class MedtrumViewModel @Inject constructor( if (oldPatchStep != newPatchStep) { when (newPatchStep) { - PatchStep.CANCEL -> { + PatchStep.CANCEL -> { if (oldPatchStep !in listOf( PatchStep.START_DEACTIVATION, PatchStep.DEACTIVATE, @@ -151,7 +151,7 @@ class MedtrumViewModel @Inject constructor( medtrumService?.disconnect("Cancel") } - PatchStep.COMPLETE -> { + PatchStep.COMPLETE -> { medtrumService?.disconnect("Complete") } @@ -159,11 +159,13 @@ class MedtrumViewModel @Inject constructor( PatchStep.DEACTIVATE, PatchStep.FORCE_DEACTIVATION, PatchStep.DEACTIVATION_COMPLETE, - PatchStep.PREPARE_PATCH -> { + PatchStep.PREPARE_PATCH, + PatchStep.RETRY_ACTIVATION, + PatchStep.RETRY_ACTIVATION_CONNECT -> { // Do nothing, deactivation uses commandQueue to control connection } - PatchStep.PREPARE_PATCH_CONNECT -> { + PatchStep.PREPARE_PATCH_CONNECT -> { // Make sure we are disconnected, else dont move step if (medtrumService?.isConnected == true) { aapsLogger.info(LTag.PUMP, "moveStep: connected, not moving step") @@ -172,7 +174,7 @@ class MedtrumViewModel @Inject constructor( } } - else -> { + else -> { // Make sure we are connected, else dont move step if (medtrumService?.isConnected == false) { aapsLogger.info(LTag.PUMP, "moveStep: not connected, not moving step") @@ -188,6 +190,13 @@ class MedtrumViewModel @Inject constructor( aapsLogger.info(LTag.PUMP, "moveStep: $oldPatchStep -> $newPatchStep") } + fun forceMoveStep(newPatchStep: PatchStep) { + val oldPatchStep = patchStep.value + + prepareStep(newPatchStep) + aapsLogger.info(LTag.PUMP, "forceMoveStep: $oldPatchStep -> $newPatchStep") + } + fun initializePatchStep(step: PatchStep) { mInitPatchStep = prepareStep(step) } @@ -200,7 +209,7 @@ class MedtrumViewModel @Inject constructor( scope.launch { if (medtrumService?.isConnected == false) { aapsLogger.info(LTag.PUMP, "preparePatch: new session") - // New session, generate new session token, only do this when not connected + // New session, generate new session token medtrumPump.patchSessionToken = Crypt().generateRandomToken() // Connect to pump medtrumService?.connect("PreparePatch") @@ -256,27 +265,39 @@ class MedtrumViewModel @Inject constructor( }) } - fun resetPumpState() { - medtrumPump.pumpState = MedtrumPumpState.NONE + fun retryActivationConnect() { + scope.launch { + if (medtrumService?.isConnected == false) { + // Reset medtrum pump state, we will pickup pomp state on connect + medtrumPump.pumpState = MedtrumPumpState.NONE + medtrumService?.connect("RetryActivationConnect") + } else { + aapsLogger.error(LTag.PUMP, "retryActivationConnect: Already connected when trying to prepare patch") + updateSetupStep(SetupStep.ERROR) + } + } } private fun prepareStep(newStep: PatchStep): PatchStep { val stringResId = when (newStep) { - PatchStep.PREPARE_PATCH -> R.string.step_prepare_patch - PatchStep.PREPARE_PATCH_CONNECT -> R.string.step_prepare_patch_connect - PatchStep.PRIME -> R.string.step_prime - PatchStep.PRIMING -> R.string.step_priming - PatchStep.PRIME_COMPLETE -> R.string.step_priming_complete - PatchStep.ATTACH_PATCH -> R.string.step_attach - PatchStep.ACTIVATE -> R.string.step_activate - PatchStep.ACTIVATE_COMPLETE -> R.string.step_activate_complete - PatchStep.START_DEACTIVATION -> R.string.step_deactivate - PatchStep.DEACTIVATE -> R.string.step_deactivating - PatchStep.DEACTIVATION_COMPLETE -> R.string.step_deactivate_complete + PatchStep.PREPARE_PATCH -> R.string.step_prepare_patch + PatchStep.PREPARE_PATCH_CONNECT -> R.string.step_prepare_patch_connect + PatchStep.PRIME -> R.string.step_prime + PatchStep.PRIMING -> R.string.step_priming + PatchStep.PRIME_COMPLETE -> R.string.step_priming_complete + PatchStep.ATTACH_PATCH -> R.string.step_attach + PatchStep.ACTIVATE -> R.string.step_activate + PatchStep.ACTIVATE_COMPLETE -> R.string.step_activate_complete + PatchStep.START_DEACTIVATION -> R.string.step_deactivate + PatchStep.DEACTIVATE -> R.string.step_deactivating + PatchStep.DEACTIVATION_COMPLETE -> R.string.step_deactivate_complete + PatchStep.RETRY_ACTIVATION, + PatchStep.RETRY_ACTIVATION_CONNECT -> R.string.step_retry_activation + PatchStep.COMPLETE, PatchStep.FORCE_DEACTIVATION, PatchStep.ERROR, - PatchStep.CANCEL -> _title.value + PatchStep.CANCEL -> _title.value } val currentTitle = _title.value @@ -291,7 +312,7 @@ class MedtrumViewModel @Inject constructor( return newStep } - enum class SetupStep { INITIAL, FILLED, PRIMED, ACTIVATED, ERROR, START_DEACTIVATION, STOPPED + enum class SetupStep { INITIAL, FILLED, PRIMING, PRIMED, ACTIVATED, ERROR, START_DEACTIVATION, STOPPED } val setupStep = MutableLiveData() diff --git a/pump/medtrum/src/main/res/layout/fragment_medtrum_activate_complete.xml b/pump/medtrum/src/main/res/layout/fragment_medtrum_activate_complete.xml index ef9a93c14b..7e2b250fa1 100644 --- a/pump/medtrum/src/main/res/layout/fragment_medtrum_activate_complete.xml +++ b/pump/medtrum/src/main/res/layout/fragment_medtrum_activate_complete.xml @@ -63,12 +63,11 @@