diff --git a/android/java/org/chromium/chrome/browser/app/domain/CryptoModel.java b/android/java/org/chromium/chrome/browser/app/domain/CryptoModel.java index d478fe4b8e82..0c8a86de8d49 100644 --- a/android/java/org/chromium/chrome/browser/app/domain/CryptoModel.java +++ b/android/java/org/chromium/chrome/browser/app/domain/CryptoModel.java @@ -27,6 +27,7 @@ import org.chromium.brave_wallet.mojom.JsonRpcService; import org.chromium.brave_wallet.mojom.JsonRpcServiceObserver; import org.chromium.brave_wallet.mojom.KeyringService; +import org.chromium.brave_wallet.mojom.NetworkInfo; import org.chromium.brave_wallet.mojom.SolanaTxManagerProxy; import org.chromium.brave_wallet.mojom.SwapService; import org.chromium.brave_wallet.mojom.TransactionInfo; @@ -35,8 +36,11 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletDAppsActivity; import org.chromium.chrome.browser.crypto_wallet.model.CryptoAccountTypeInfo; +import org.chromium.chrome.browser.crypto_wallet.util.AssetUtils; +import org.chromium.chrome.browser.crypto_wallet.util.JavaUtils; import org.chromium.chrome.browser.crypto_wallet.util.PendingTxHelper; import org.chromium.chrome.browser.crypto_wallet.util.SelectedAccountResponsesCollector; +import org.chromium.chrome.browser.crypto_wallet.util.TokenUtils; import org.chromium.chrome.browser.crypto_wallet.util.Utils; import org.chromium.chrome.browser.crypto_wallet.util.WalletUtils; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -310,6 +314,18 @@ public void setAccountInfosFromKeyRingModel( mNetworkModel.setAccountInfosFromKeyRingModel(accountInfosFromKeyRingModel); } + // TODO: Move to BuyModel class + public void isBuySupported(NetworkInfo selectedNetwork, String assetSymbol, + String contractAddress, String chainId, Callback1 callback) { + TokenUtils.getBuyTokensFiltered( + mBlockchainRegistry, selectedNetwork, TokenUtils.TokenType.ALL, tokens -> { + callback.call(JavaUtils.includes(tokens, + iToken + -> AssetUtils.Filters.isSameToken( + iToken, assetSymbol, contractAddress, chainId))); + }); + } + // Clear buy send swap model public void clearBSS() { mSendModel = null; diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/activities/AssetDetailActivity.java b/android/java/org/chromium/chrome/browser/crypto_wallet/activities/AssetDetailActivity.java index 551dda07e424..eae9635015de 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/activities/AssetDetailActivity.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/activities/AssetDetailActivity.java @@ -46,6 +46,7 @@ import org.chromium.chrome.browser.crypto_wallet.listeners.OnWalletListItemClick; import org.chromium.chrome.browser.crypto_wallet.model.WalletListItemModel; import org.chromium.chrome.browser.crypto_wallet.observers.ApprovedTxObserver; +import org.chromium.chrome.browser.crypto_wallet.util.AndroidUtils; import org.chromium.chrome.browser.crypto_wallet.util.AssetUtils; import org.chromium.chrome.browser.crypto_wallet.util.SmoothLineChartEquallySpaced; import org.chromium.chrome.browser.crypto_wallet.util.TokenUtils; @@ -111,6 +112,10 @@ protected void triggerLayoutInflation() { } mExecutor = Executors.newSingleThreadExecutor(); mHandler = new Handler(Looper.getMainLooper()); + BraveActivity activity = BraveActivity.getBraveActivity(); + if (activity != null) { + mWalletModel = activity.getWalletModel(); + } Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -432,10 +437,6 @@ public void finishNativeInitialization() { getPriceHistory(mAssetSymbol, "usd", AssetPriceTimeframe.ONE_DAY); getPrice(mAssetSymbol, "btc", AssetPriceTimeframe.LIVE); getBlockchainToken(() -> setUpAccountList()); - BraveActivity activity = BraveActivity.getBraveActivity(); - if (activity != null) { - mWalletModel = activity.getWalletModel(); - } } @Override @@ -486,11 +487,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { } private void adjustButtonsVisibilities() { - if (Utils.allowBuy(mChainId)) { - mBtnBuy.setVisibility(View.VISIBLE); - } else { - mBtnBuy.setVisibility(View.GONE); - } + showHideBuyUi(); if (Utils.allowSwap(mChainId)) { if (!AssetUtils.isAuroraAddress(mContractAddress, mChainId)) { mBtnSwap.setVisibility(View.VISIBLE); @@ -499,4 +496,24 @@ private void adjustButtonsVisibilities() { mBtnSwap.setVisibility(View.GONE); } } + + private void showHideBuyUi() { + if (!Utils.allowBuy(mChainId)) { + AndroidUtils.gone(mBtnBuy); + return; + } + if (mWalletModel == null) return; + + LiveDataUtil.observeOnce(mWalletModel.getCryptoModel().getNetworkModel().mDefaultNetwork, + selectedNetwork -> { + mWalletModel.getCryptoModel().isBuySupported(selectedNetwork, mAssetSymbol, + mContractAddress, mChainId, isBuyEnabled -> { + if (isBuyEnabled) { + AndroidUtils.show(mBtnBuy); + } else { + AndroidUtils.gone(mBtnBuy); + } + }); + }); + } } diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/AssetUtils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/AssetUtils.java index e5440c8aeb33..7eeb8f6e7337 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/AssetUtils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/AssetUtils.java @@ -51,6 +51,20 @@ public class AssetUtils { "0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e" // YFI }; + public static class Filters { + public static boolean isSameToken(BlockchainToken token1, BlockchainToken token2) { + return token1.symbol.equals(token2.symbol) + && token1.contractAddress.equals(token2.contractAddress) + && token1.chainId.equals(token2.chainId); + } + + public static boolean isSameToken( + BlockchainToken token, String symbol, String contractAddress, String chainId) { + return token.symbol.equals(symbol) && token.contractAddress.equals(contractAddress) + && token.chainId.equals(chainId); + } + } + public static boolean isAuroraAddress(String contractAddress, String chainId) { boolean isEthereumBridgeAddress = false; boolean isNativeAsset = TextUtils.isEmpty(contractAddress); @@ -134,8 +148,8 @@ public static String getRampNetworkPrefix(String chainId) { return "SOLANA"; case BraveWalletConstants.OPTIMISM_MAINNET_CHAIN_ID: return "OPTIMISM"; - // case BraveWalletConstants.FILECOIN_MAINNET: return "FILECOIN"; /*not - // supported yet*/ + // case BraveWalletConstants.FILECOIN_MAINNET: return "FILECOIN"; /*not + // supported yet*/ case BraveWalletConstants.MAINNET_CHAIN_ID: case BraveWalletConstants.CELO_MAINNET_CHAIN_ID: default: diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/JavaUtils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/JavaUtils.java index 3fa60d57cec5..549a23df6ad8 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/JavaUtils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/JavaUtils.java @@ -37,4 +37,30 @@ public static List filter(List list, Predicate filter) { } return filteredList; } + + public static T find(List list, Predicate predicate) { + for (T item : list) { + if (predicate.test(item)) { + return item; + } + } + return null; + } + + public static boolean includes(List list, Predicate predicate) { + return find(list, predicate) != null; + } + + public static T find(T[] items, Predicate predicate) { + for (T item : items) { + if (predicate.test(item)) { + return item; + } + } + return null; + } + + public static boolean includes(T[] items, Predicate predicate) { + return find(items, predicate) != null; + } }