diff --git a/app/src/main/res/navigation/external_sign_graph.xml b/app/src/main/res/navigation/external_sign_graph.xml index 098c55efad..086b853ea9 100644 --- a/app/src/main/res/navigation/external_sign_graph.xml +++ b/app/src/main/res/navigation/external_sign_graph.xml @@ -9,7 +9,6 @@ android:id="@+id/ConfirmSignExtrinsicFragment" android:name="io.novafoundation.nova.feature_external_sign_impl.presentation.signExtrinsic.ExternalSignFragment" android:label="ConfirmSignExtrinsicFragment" - app:useAdd="true" tools:layout="@layout/fragment_confirm_sign_extrinsic"> ) : LedgerDeviceDiscoveryService { + private var discoveringSubscribersManager = DiscoveringSubscribersManager() + constructor(vararg delegates: LedgerDeviceDiscoveryService) : this(delegates.toList()) override val discoveredDevices: Flow> by lazy { @@ -26,10 +28,37 @@ class CompoundLedgerDiscoveryService( } override fun startDiscovery() { - delegates.forEach { it.startDiscovery() } + if (discoveringSubscribersManager.noSubscribers()) { + delegates.forEach { it.startDiscovery() } + } + + discoveringSubscribersManager.addSubscriber() } override fun stopDiscovery() { - delegates.forEach { it.stopDiscovery() } + discoveringSubscribersManager.removeSubscriber() + + if (discoveringSubscribersManager.noSubscribers()) { + delegates.forEach { it.stopDiscovery() } + } + } +} + +private class DiscoveringSubscribersManager { + + private var subscribers = 0 + + fun addSubscriber() { + subscribers++ + } + + fun removeSubscriber() { + if (subscribers == 0) return + + subscribers-- + } + + fun noSubscribers(): Boolean { + return subscribers == 0 } }