Updated on 2026-08-14

This commit is contained in:
Tangem 2023-08-17 18:17:52 +03:00
parent 23a113a1eb
commit ff33484b28
8 changed files with 55 additions and 25 deletions

View file

@ -17,6 +17,7 @@ sealed class AppDialog : StateDialog {
data class SimpleOkDialogRes(
val headerId: Int,
val messageId: Int,
val args: List<String> = emptyList(),
val onOk: VoidCallback? = null,
) : AppDialog()

View file

@ -1,5 +1,6 @@
package com.tangem.tap.features.tokens.impl.presentation.router
import com.tangem.blockchain.common.Blockchain
import com.tangem.core.navigation.AppScreen
import com.tangem.core.navigation.NavigationAction
import com.tangem.tap.common.extensions.dispatchDialogShow
@ -49,12 +50,21 @@ internal class DefaultTokensListRouter(
)
}
override fun openUnsupportedSoltanaNetworkAlert() {
store.dispatchDialogShow(
AppDialog.SimpleOkDialogRes(
override fun openUnsupportedNetworkAlert(blockchain: Blockchain) {
val alert = when (blockchain) {
Blockchain.Solana -> AppDialog.SimpleOkDialogRes(
headerId = R.string.common_warning,
messageId = R.string.alert_manage_tokens_unsupported_message,
),
)
)
Blockchain.Chia, Blockchain.ChiaTestnet -> AppDialog.SimpleOkDialogRes(
headerId = R.string.common_warning,
messageId = R.string.alert_manage_tokens_unsupported_curve_message,
args = listOf(blockchain.fullName),
)
else -> null // there's no alerts for other blockchains yer
}
if (alert != null) {
store.dispatchDialogShow(alert)
}
}
}

View file

@ -1,5 +1,7 @@
package com.tangem.tap.features.tokens.impl.presentation.router
import com.tangem.blockchain.common.Blockchain
/** Tokens list feature router */
internal interface TokensListRouter {
@ -28,6 +30,9 @@ internal interface TokensListRouter {
*/
fun openRemoveWalletAlert(tokenName: String, onOkClick: () -> Unit)
/** Open alert if solana network is unsupported */
fun openUnsupportedSoltanaNetworkAlert()
/** Open alert if solana network is unsupported
*
* @param blockchain blockchain to show alert
*/
fun openUnsupportedNetworkAlert(blockchain: Blockchain)
}

View file

@ -309,9 +309,13 @@ internal class TokensListViewModel @Inject constructor(
toggledNetwork.changeToggleState()
}
} else {
analyticsSender.sendWhenBlockchainAdded(blockchain)
changedBlockchainList.add(blockchain)
toggledNetwork.changeToggleState()
if (isUnsupportedToken(blockchain)) {
router.openUnsupportedNetworkAlert(blockchain)
} else {
analyticsSender.sendWhenBlockchainAdded(blockchain)
changedBlockchainList.add(blockchain)
toggledNetwork.changeToggleState()
}
}
}
@ -350,17 +354,8 @@ internal class TokensListViewModel @Inject constructor(
toggledNetwork.changeToggleState()
}
} else {
val scanResponse = reduxStateHolder.scanResponse
val isUnsupportedToken =
!(
scanResponse?.card?.canHandleToken(
blockchain = token.blockchain,
cardTypesResolver = scanResponse.cardTypesResolver,
) ?: false
)
if (isUnsupportedToken) {
router.openUnsupportedSoltanaNetworkAlert()
if (isUnsupportedToken(token.blockchain)) {
router.openUnsupportedNetworkAlert(token.blockchain)
} else {
analyticsSender.sendWhenTokenAdded(token.token)
changedTokensList.add(token)
@ -370,6 +365,15 @@ internal class TokensListViewModel @Inject constructor(
}
}
private fun isUnsupportedToken(blockchain: Blockchain): Boolean {
val scanResponse = reduxStateHolder.scanResponse
val canHandleToken = scanResponse?.card?.canHandleToken(
blockchain = blockchain,
cardTypesResolver = scanResponse.cardTypesResolver,
) ?: false
return !canHandleToken
}
private companion object {
const val MAIN_NETWORK_LABEL = "MAIN"
}

View file

@ -25,9 +25,14 @@ object SimpleOkDialog {
}
fun create(dialog: AppDialog.SimpleOkDialogRes, context: Context): AlertDialog {
val message = if (dialog.args.isEmpty()) {
context.getString(dialog.messageId)
} else {
context.getString(dialog.messageId, *dialog.args.toTypedArray())
}
return AlertDialog.Builder(context).apply {
setTitle(context.getString(dialog.headerId))
setMessage(dialog.messageId)
setMessage(message)
setPositiveButton(R.string.common_ok) { _, _ -> }
setOnDismissListener {
store.dispatchDialogHide()