From d6ea9451d8c591b404266742ba28a1db43ff4691 Mon Sep 17 00:00:00 2001 From: Simone Arpe Date: Mon, 27 May 2024 18:23:26 +0200 Subject: [PATCH] (Wallet) Fix NOTREACHED on Android Wallet (#23843) * Fix NOTREACHED on Android Wallet * Set ETH as a default network after restoring --- .../OnboardingRestoreWalletFragment.java | 13 +- .../crypto_wallet/util/BalanceHelper.java | 112 +++++++++++------- 2 files changed, 78 insertions(+), 47 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding/OnboardingRestoreWalletFragment.java b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding/OnboardingRestoreWalletFragment.java index 451192cf6f4..182aaf72813 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding/OnboardingRestoreWalletFragment.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding/OnboardingRestoreWalletFragment.java @@ -207,9 +207,16 @@ public class OnboardingRestoreWalletFragment extends BaseOnboardingWalletFragmen mShowRecoveryPhraseCheckbox.setChecked(false); mRestoreLegacyWalletCheckbox.setChecked(false); - if (mOnNextPage != null) { - mOnNextPage.onboardingCompleted(); - } + // Set ETH account by default as initial state. + keyringService.getAllAccounts( + allAccounts -> + keyringService.setSelectedAccount( + allAccounts.ethDappSelectedAccount.accountId, + success -> { + if (mOnNextPage != null) { + mOnNextPage.onboardingCompleted(); + } + })); } else { Toast.makeText( requireActivity(), diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/BalanceHelper.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/BalanceHelper.java index e46a0c25324..814f6f3898e 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/BalanceHelper.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/BalanceHelper.java @@ -5,6 +5,8 @@ package org.chromium.chrome.browser.crypto_wallet.util; +import androidx.annotation.NonNull; + import org.chromium.base.Callbacks; import org.chromium.brave_wallet.mojom.AccountInfo; import org.chromium.brave_wallet.mojom.BlockchainRegistry; @@ -38,23 +40,24 @@ import java.util.Locale; import java.util.Map; public class BalanceHelper { - private static String TAG = "BalanceHelper"; + /** Get assets balances for all accounts on selected network. */ + public static void getNativeAssetsBalances( + @NonNull final JsonRpcService jsonRpcService, + @NonNull final NetworkInfo selectedNetwork, + @NonNull final AccountInfo[] accounts, + @NonNull final Callbacks.Callback2> callback) { + HashMap nativeAssetsBalances = new HashMap<>(); - /** - * Get assets balances for all accounts on selected network. - */ - public static void getNativeAssetsBalances(JsonRpcService jsonRpcService, - NetworkInfo selectedNetwork, AccountInfo[] accountInfos, - Callbacks.Callback2> callback) { - if (jsonRpcService == null) return; - HashMap nativeAssetsBalances = new HashMap(); + MultiResponseHandler balancesMultiResponse = new MultiResponseHandler(accounts.length); + ArrayList contexts = new ArrayList<>(); - MultiResponseHandler balancesMultiResponse = new MultiResponseHandler(accountInfos.length); - ArrayList contexts = - new ArrayList(); + if (selectedNetwork.coin == CoinType.BTC || selectedNetwork.coin == CoinType.ZEC) { + callback.call(selectedNetwork.coin, nativeAssetsBalances); + return; + } // Native balances - for (AccountInfo accountInfo : accountInfos) { + for (AccountInfo accountInfo : accounts) { if (accountInfo.accountId.coin != selectedNetwork.coin) continue; // Get CoinType SOL balances @@ -242,46 +245,67 @@ public class BalanceHelper { } } - private static void processP3ACoinNetworks(@CoinType.EnumType int coinType, - List networks, KeyringService keyringService, - JsonRpcService jsonRpcService, BraveWalletService braveWalletService, - BlockchainRegistry blockchainRegistry, MultiResponseHandler multiResponse, + private static void processP3ACoinNetworks( + @CoinType.EnumType int coinType, + List networks, + KeyringService keyringService, + JsonRpcService jsonRpcService, + BraveWalletService braveWalletService, + BlockchainRegistry blockchainRegistry, + MultiResponseHandler multiResponse, ArrayList nativeAssetsBalancesResponses, ArrayList blockchainTokensBalancesResponses) { - if (JavaUtils.anyNull(braveWalletService, blockchainRegistry)) return; + if (JavaUtils.anyNull(braveWalletService, blockchainRegistry, jsonRpcService)) return; - keyringService.getAllAccounts(allAccounts -> { - for (NetworkInfo network : networks) { - AccountInfo[] accountInfoArray = AssetUtils.filterAccountsByNetwork( - allAccounts.accounts, network.coin, network.chainId); + keyringService.getAllAccounts( + allAccounts -> { + for (NetworkInfo network : networks) { + AccountInfo[] accountInfoArray = + AssetUtils.filterAccountsByNetwork( + allAccounts.accounts, network.coin, network.chainId); - TokenUtils.getVisibleUserAssetsFiltered( - braveWalletService, network, coinType, TokenUtils.TokenType.ALL, tokens -> { - // Assets balances. - GetNativeAssetsBalancesResponseContext getNativeAssetsBalancesContext = - new GetNativeAssetsBalancesResponseContext( - multiResponse.singleResponseComplete); - getNativeAssetsBalances(jsonRpcService, network, accountInfoArray, - getNativeAssetsBalancesContext); - nativeAssetsBalancesResponses.add(getNativeAssetsBalancesContext); + TokenUtils.getVisibleUserAssetsFiltered( + braveWalletService, + network, + coinType, + TokenUtils.TokenType.ALL, + tokens -> { + // Assets balances. + GetNativeAssetsBalancesResponseContext + getNativeAssetsBalancesContext = + new GetNativeAssetsBalancesResponseContext( + multiResponse.singleResponseComplete); + getNativeAssetsBalances( + jsonRpcService, + network, + accountInfoArray, + getNativeAssetsBalancesContext); + nativeAssetsBalancesResponses.add( + getNativeAssetsBalancesContext); - // Tokens balances. - GetBlockchainTokensBalancesResponseContext - getBlockchainTokensBalancesContext = - new GetBlockchainTokensBalancesResponseContext( - multiResponse.singleResponseComplete); - getBlockchainTokensBalances(jsonRpcService, network, accountInfoArray, - tokens, getBlockchainTokensBalancesContext); - blockchainTokensBalancesResponses.add( - getBlockchainTokensBalancesContext); - }); - } - }); + // Tokens balances. + GetBlockchainTokensBalancesResponseContext + getBlockchainTokensBalancesContext = + new GetBlockchainTokensBalancesResponseContext( + multiResponse.singleResponseComplete); + getBlockchainTokensBalances( + jsonRpcService, + network, + accountInfoArray, + tokens, + getBlockchainTokensBalancesContext); + blockchainTokensBalancesResponses.add( + getBlockchainTokensBalancesContext); + }); + } + }); } private static T addBalanceResponseContext( - ArrayList contexts, T context, String accountAddress, + ArrayList contexts, + T context, + String accountAddress, BlockchainToken token) { context.accountAddress = accountAddress.toLowerCase(Locale.ENGLISH); if (token != null) context.userAsset = token;