Skip to content

Commit

Permalink
fix(wallet): hide buy for unsupported tokens (uplift to 1.48.x) (#16737)
Browse files Browse the repository at this point in the history
  • Loading branch information
Pavneet Singh authored Jan 20, 2023
1 parent 7437c2d commit aa7d88f
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<Boolean> 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand All @@ -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);
}
});
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,30 @@ public static <T> List<T> filter(List<T> list, Predicate<T> filter) {
}
return filteredList;
}

public static <T> T find(List<T> list, Predicate<T> predicate) {
for (T item : list) {
if (predicate.test(item)) {
return item;
}
}
return null;
}

public static <T> boolean includes(List<T> list, Predicate<T> predicate) {
return find(list, predicate) != null;
}

public static <T> T find(T[] items, Predicate<T> predicate) {
for (T item : items) {
if (predicate.test(item)) {
return item;
}
}
return null;
}

public static <T> boolean includes(T[] items, Predicate<T> predicate) {
return find(items, predicate) != null;
}
}

0 comments on commit aa7d88f

Please sign in to comment.