package com.tangem.domain.wallet; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.tangem.Constant; import com.tangem.data.Blockchain; import com.tangem.tangemcard.data.TangemCard; import com.tangem.tangemcard.data.TangemCardExtensionsKt; public class TangemContext { // public static final String EXTRA_BLOCKCHAIN_DATA = "BLOCKCHAIN_DATA"; private Context context; private TangemCard card; private CoinData coinData; private String error; private String message; public TangemContext() { } public TangemContext(TangemCard card) { this.card = card; } public Blockchain getBlockchain() { if (card == null) return Blockchain.Unknown; Blockchain blockchain = Blockchain.fromId(card.getBlockchainID()); if ((blockchain == Blockchain.Ethereum || blockchain == Blockchain.EthereumTestNet) && card.isToken()) { if (card.getTokenSymbol().startsWith("NFT:")) { return Blockchain.NftToken; } else { return Blockchain.Token; } } if ((blockchain == Blockchain.Rootstock) && card.isToken()) { return Blockchain.RootstockToken; } return blockchain; } // public void setBlockchain(Blockchain blockchain) { // if (card == null) return; // card.setBlockchainID(blockchain.getID()); // } // private String blockchainName = ""; public String getBlockchainName() { Blockchain blockchain = getBlockchain(); if (blockchain == Blockchain.Token || blockchain == Blockchain.RootstockToken) { String token = card.getTokenSymbol(); return token + "
" + getBlockchain().getOfficialName() + " smart contract token"; } if (blockchain == Blockchain.NftToken) { return card.getTokenSymbol().substring(4) + "
" + getBlockchain().getOfficialName() + " smart contract token"; } return blockchain.getOfficialName(); } public Context getContext() { return context; } public void setContext(Context context) { this.context = context; } public TangemCard getCard() { return card; } public void setCard(TangemCard card) { this.card = card; } public CoinData getCoinData() { return coinData; } public void setCoinData(CoinData coinData) { this.coinData = coinData; } public void setError(String error) { this.error = error; } public void setError(int valueId) { this.error = getString(valueId); } public String getError() { return error; } public boolean hasError() { return error != null && !error.isEmpty(); } public void setMessage(String value) { this.message = value; } public void setMessage(int valueId) { this.message = getString(valueId); } public String getMessage() { return message; } public static TangemContext loadFromBundle(Context context, Bundle bundle) { TangemContext tangemContext = new TangemContext(); tangemContext.setContext(context); if (bundle.containsKey(TangemCardExtensionsKt.EXTRA_TANGEM_CARD_UID)) { tangemContext.card = new TangemCard(bundle.getString(TangemCardExtensionsKt.EXTRA_TANGEM_CARD_UID)); TangemCardExtensionsKt.loadFromBundle(tangemContext.card, bundle.getBundle(TangemCardExtensionsKt.EXTRA_TANGEM_CARD)); } if (tangemContext.getBlockchain() != null) { if (bundle.containsKey(Constant.EXTRA_BLOCKCHAIN_DATA)) { tangemContext.coinData = CoinData.fromBundle(tangemContext.getBlockchain(), bundle.getBundle(Constant.EXTRA_BLOCKCHAIN_DATA)); } else { tangemContext.coinData = CoinEngineFactory.INSTANCE.create(tangemContext).createCoinData(); } } tangemContext.error = bundle.getString("Error"); tangemContext.message = bundle.getString("Message"); return tangemContext; } public void saveToIntent(Intent intent) { if (card != null) { intent.putExtra(TangemCardExtensionsKt.EXTRA_TANGEM_CARD_UID, card.getUID()); intent.putExtra(TangemCardExtensionsKt.EXTRA_TANGEM_CARD, TangemCardExtensionsKt.getAsBundle(card)); } if (coinData != null) { intent.putExtra(Constant.EXTRA_BLOCKCHAIN_DATA, coinData.asBundle()); } intent.putExtra("Error", error); intent.putExtra("Message", message); } public String getString(int stringId) { if (context != null) return getContext().getResources().getString(stringId); return "context.resources.string[" + stringId + "]"; } public void setDenomination(byte[] denomination) { try { CoinEngine engine = CoinEngineFactory.INSTANCE.create(getBlockchain()); CoinEngine.InternalAmount internalAmount = engine.convertToInternalAmount(denomination); CoinEngine.Amount amount = engine.convertToAmount(internalAmount); card.setDenomination(denomination, amount.toString()); } catch (Exception e) { e.printStackTrace(); card.setDenomination(denomination, "N/A"); } } }