From c4fcd17befe9cf0422ee0ebd9dd817ec22f1cebd Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 3 Aug 2023 16:28:14 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../warningMessage/WarningMessagesManager.kt | 6 +++--- .../com/tangem/utils/extensions/Collection.kt | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt index 183ba76207..01bb883f69 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt @@ -1,7 +1,7 @@ package com.tangem.tap.domain.configurable.warningMessage import com.tangem.blockchain.common.Blockchain -import com.tangem.utils.extensions.removeBy +import com.tangem.utils.extensions.removeByReplace import com.tangem.wallet.R import java.util.concurrent.CopyOnWriteArrayList @@ -44,12 +44,12 @@ class WarningMessagesManager { } fun removeWarnings(origin: WarningMessage.Origin) { - warningsList.removeBy { it.origin == origin } + warningsList.removeByReplace { it.origin == origin } sortByPriority() } fun removeWarnings(messageRes: Int) { - warningsList.removeBy { it.messageResId == messageRes } + warningsList.removeByReplace { it.messageResId == messageRes } } fun containsWarning(warning: WarningMessage) = warning in warningsList diff --git a/core/utils/src/main/java/com/tangem/utils/extensions/Collection.kt b/core/utils/src/main/java/com/tangem/utils/extensions/Collection.kt index 36ef7e1ad6..36644cfda9 100644 --- a/core/utils/src/main/java/com/tangem/utils/extensions/Collection.kt +++ b/core/utils/src/main/java/com/tangem/utils/extensions/Collection.kt @@ -53,11 +53,12 @@ inline fun MutableCollection.addOrReplace(item: T, predicate: (T) -> Bool /** * Removes an element from the collection based on the provided predicate. + * Uses iterator, avoid using it in COW collections * * @param predicate The condition to remove an element. * @return [Boolean] indicating whether an element was removed. */ -inline fun MutableCollection.removeBy(predicate: (T) -> Boolean): Boolean { +inline fun MutableCollection.removeByIterate(predicate: (T) -> Boolean): Boolean { var removed = false val iterator = this.iterator() @@ -73,6 +74,19 @@ inline fun MutableCollection.removeBy(predicate: (T) -> Boolean): Boolean return removed } +/** + * Removes an element from the collection based on the provided predicate. + * Uses removeAll() method and could be used for COW collections + * + * @param predicate The condition to remove an element. + * @return [Boolean] indicating whether an element was removed. + */ +fun MutableList.removeByReplace(predicate: (T) -> Boolean): Boolean { + val toRemove = this.filter(predicate) + this.removeAll(toRemove) + return toRemove.isNotEmpty() +} + /** * Replaces an element in the collection with the provided item based on the predicate. *