Updated on 2026-08-14
This commit is contained in:
parent
f076ab08e7
commit
2d3a1d3bc7
8 changed files with 45 additions and 1 deletions
|
|
@ -68,6 +68,7 @@ internal class PreviewCustomTokenSelectorComponent(
|
|||
isMainNetwork = false,
|
||||
isSelected = n.id == params.selectedNetwork?.id,
|
||||
onSelectedStateChange = { params.onNetworkSelected(n) },
|
||||
onLongClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ internal class PreviewManageTokensComponent(
|
|||
isMainNetwork = networkIndex == 0,
|
||||
isSelected = false,
|
||||
onSelectedStateChange = { toggleNetwork(currencyIndex, networkIndex, isSelected = it) },
|
||||
onLongClick = {},
|
||||
)
|
||||
}.toImmutableList()
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,12 @@ internal data class CurrencyNetworkUM(
|
|||
val type: String,
|
||||
val iconResId: Int,
|
||||
val isMainNetwork: Boolean,
|
||||
val onLongClick: () -> Unit,
|
||||
override val isSelected: Boolean,
|
||||
override val onSelectedStateChange: (Boolean) -> Unit,
|
||||
) : SelectableItemUM {
|
||||
|
||||
override val id: String = network.id.value
|
||||
|
||||
data class LongTapConfig(val contractAddress: String, val onLongTap: () -> Unit)
|
||||
}
|
||||
|
|
@ -3,8 +3,11 @@ package com.tangem.features.managetokens.ui
|
|||
import android.content.res.Configuration
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.combinedClickable
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
|
|
@ -364,6 +367,7 @@ private fun BasicCurrencyItem(item: CurrencyItemUM.Basic, isEditable: Boolean, m
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
private fun NetworksList(
|
||||
networks: NetworksUM,
|
||||
|
|
@ -392,7 +396,14 @@ private fun NetworksList(
|
|||
isLastItem = index == currentItems.lastIndex,
|
||||
content = {
|
||||
BlockchainRow(
|
||||
modifier = Modifier.padding(end = TangemTheme.dimens.spacing8),
|
||||
modifier = Modifier
|
||||
.padding(end = TangemTheme.dimens.spacing8)
|
||||
.combinedClickable(
|
||||
onLongClick = network.onLongClick,
|
||||
onClick = {},
|
||||
indication = null,
|
||||
interactionSource = remember { MutableInteractionSource() },
|
||||
),
|
||||
model = with(network) {
|
||||
BlockchainRowUM(
|
||||
id = id,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.tangem.features.managetokens.utils.list
|
|||
import arrow.core.getOrElse
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
import com.tangem.core.decompose.ui.UiMessageSender
|
||||
import com.tangem.core.ui.clipboard.ClipboardManager
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.core.ui.message.SnackbarMessage
|
||||
|
|
@ -32,6 +33,7 @@ import kotlinx.coroutines.launch
|
|||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
@ComponentScoped
|
||||
internal class ManageTokensListManager @Inject constructor(
|
||||
private val getManagedTokensUseCase: GetManagedTokensUseCase,
|
||||
|
|
@ -40,6 +42,7 @@ internal class ManageTokensListManager @Inject constructor(
|
|||
private val checkCurrencyUnsupportedUseCase: CheckCurrencyUnsupportedUseCase,
|
||||
private val messageSender: UiMessageSender,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
clipboardManager: ClipboardManager,
|
||||
) : ManageTokensUiActions {
|
||||
|
||||
private lateinit var scope: CoroutineScope
|
||||
|
|
@ -59,6 +62,7 @@ internal class ManageTokensListManager @Inject constructor(
|
|||
dispatchers = dispatchers,
|
||||
actions = this,
|
||||
scopeProvider = Provider { scope },
|
||||
clipboardManager = clipboardManager,
|
||||
)
|
||||
|
||||
val currenciesToAdd: StateFlow<ChangedCurrencies> = changedCurrenciesManager.currenciesToAdd.asStateFlow()
|
||||
|
|
|
|||
|
|
@ -1,9 +1,12 @@
|
|||
package com.tangem.features.managetokens.utils.list
|
||||
|
||||
import com.tangem.core.decompose.ui.UiMessageSender
|
||||
import com.tangem.core.ui.clipboard.ClipboardManager
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.extensions.wrappedList
|
||||
import com.tangem.core.ui.message.ContentMessage
|
||||
import com.tangem.core.ui.message.SnackbarMessage
|
||||
import com.tangem.domain.managetokens.model.CurrencyUnsupportedState
|
||||
import com.tangem.domain.managetokens.model.ManagedCryptoCurrency
|
||||
import com.tangem.domain.tokens.model.Network
|
||||
|
|
@ -32,6 +35,7 @@ internal class ManageTokensUiManager(
|
|||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
private val scopeProvider: Provider<CoroutineScope>,
|
||||
private val actions: ManageTokensUiActions,
|
||||
private val clipboardManager: ClipboardManager,
|
||||
) {
|
||||
|
||||
private val scope: CoroutineScope
|
||||
|
|
@ -130,6 +134,7 @@ internal class ManageTokensUiManager(
|
|||
onSelectCurrencyNetwork = { networkId, isSelected ->
|
||||
selectNetwork(currencyBatch.key, currency, networkId, isSelected)
|
||||
},
|
||||
onLongTap = ::copyContractAddress,
|
||||
)
|
||||
|
||||
batches.updateUiBatchesItem(
|
||||
|
|
@ -139,6 +144,18 @@ internal class ManageTokensUiManager(
|
|||
}
|
||||
}
|
||||
|
||||
private fun copyContractAddress(source: ManagedCryptoCurrency.SourceNetwork) {
|
||||
if (source is ManagedCryptoCurrency.SourceNetwork.Default) {
|
||||
clipboardManager.setText(text = source.contractAddress)
|
||||
showSnackbarMessage(resourceReference(R.string.contract_address_copied_message))
|
||||
}
|
||||
}
|
||||
|
||||
private fun showSnackbarMessage(messageText: TextReference) {
|
||||
val message = SnackbarMessage(message = messageText)
|
||||
messageSender.send(message)
|
||||
}
|
||||
|
||||
private fun selectNetwork(
|
||||
batchKey: Int,
|
||||
currency: ManagedCryptoCurrency,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ internal fun ManagedCryptoCurrency.Token.toUiNetworksModel(
|
|||
isExpanded: Boolean,
|
||||
isItemsEditable: Boolean,
|
||||
onSelectedStateChange: (SourceNetwork, Boolean) -> Unit,
|
||||
onLongTap: (SourceNetwork) -> Unit,
|
||||
): NetworksUM {
|
||||
return if (isExpanded) {
|
||||
NetworksUM.Expanded(
|
||||
|
|
@ -20,6 +21,7 @@ internal fun ManagedCryptoCurrency.Token.toUiNetworksModel(
|
|||
isSelected = it.network in addedIn,
|
||||
isEditable = isItemsEditable,
|
||||
onSelectedStateChange = onSelectedStateChange,
|
||||
onLongTap = onLongTap,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
)
|
||||
|
|
@ -38,6 +40,7 @@ internal fun Network.toCurrencyNetworkModel(
|
|||
iconResId = id.getIconRes(isColored = true),
|
||||
isSelected = isSelected,
|
||||
type = standardType.name,
|
||||
onLongClick = {},
|
||||
isMainNetwork = false,
|
||||
onSelectedStateChange = onSelectedStateChange,
|
||||
)
|
||||
|
|
@ -47,6 +50,7 @@ private fun SourceNetwork.toCurrencyNetworkModel(
|
|||
isSelected: Boolean,
|
||||
isEditable: Boolean,
|
||||
onSelectedStateChange: (SourceNetwork, Boolean) -> Unit,
|
||||
onLongTap: (SourceNetwork) -> Unit,
|
||||
): CurrencyNetworkUM {
|
||||
return CurrencyNetworkUM(
|
||||
network = network,
|
||||
|
|
@ -54,6 +58,7 @@ private fun SourceNetwork.toCurrencyNetworkModel(
|
|||
iconResId = id.getIconRes(isColored = isSelected || !isEditable),
|
||||
isSelected = isSelected || !isEditable,
|
||||
type = typeName,
|
||||
onLongClick = { onLongTap(this) },
|
||||
isMainNetwork = this is SourceNetwork.Main,
|
||||
onSelectedStateChange = { selected ->
|
||||
onSelectedStateChange(this, selected)
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ internal fun CurrencyItemUM.toggleExpanded(
|
|||
currency: ManagedCryptoCurrency,
|
||||
isEditable: Boolean,
|
||||
onSelectCurrencyNetwork: (SourceNetwork, Boolean) -> Unit,
|
||||
onLongTap: (SourceNetwork) -> Unit,
|
||||
): CurrencyItemUM {
|
||||
if (currency !is ManagedCryptoCurrency.Token) return this
|
||||
|
||||
|
|
@ -29,6 +30,7 @@ internal fun CurrencyItemUM.toggleExpanded(
|
|||
isExpanded = isExpanded,
|
||||
isItemsEditable = isEditable,
|
||||
onSelectedStateChange = onSelectCurrencyNetwork,
|
||||
onLongTap = onLongTap,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue