(Wallet) Fix NOTREACHED on Android Wallet (#23843)

* Fix NOTREACHED on Android Wallet
* Set ETH as a default network after restoring
This commit is contained in:
Simone Arpe
2024-05-27 18:23:26 +02:00
committed by GitHub
parent 3d816d1ddd
commit d6ea9451d8
2 changed files with 78 additions and 47 deletions
@@ -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(),
@@ -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<Integer, HashMap<String, Double>> callback) {
HashMap<String, Double> nativeAssetsBalances = new HashMap<>();
/**
* Get assets balances for all accounts on selected network.
*/
public static void getNativeAssetsBalances(JsonRpcService jsonRpcService,
NetworkInfo selectedNetwork, AccountInfo[] accountInfos,
Callbacks.Callback2<Integer, HashMap<String, Double>> callback) {
if (jsonRpcService == null) return;
HashMap<String, Double> nativeAssetsBalances = new HashMap<String, Double>();
MultiResponseHandler balancesMultiResponse = new MultiResponseHandler(accounts.length);
ArrayList<GetBalanceResponseBaseContext> contexts = new ArrayList<>();
MultiResponseHandler balancesMultiResponse = new MultiResponseHandler(accountInfos.length);
ArrayList<GetBalanceResponseBaseContext> contexts =
new ArrayList<GetBalanceResponseBaseContext>();
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<NetworkInfo> networks, KeyringService keyringService,
JsonRpcService jsonRpcService, BraveWalletService braveWalletService,
BlockchainRegistry blockchainRegistry, MultiResponseHandler multiResponse,
private static void processP3ACoinNetworks(
@CoinType.EnumType int coinType,
List<NetworkInfo> networks,
KeyringService keyringService,
JsonRpcService jsonRpcService,
BraveWalletService braveWalletService,
BlockchainRegistry blockchainRegistry,
MultiResponseHandler multiResponse,
ArrayList<GetNativeAssetsBalancesResponseContext> nativeAssetsBalancesResponses,
ArrayList<GetBlockchainTokensBalancesResponseContext>
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 extends GetBalanceResponseBaseContext> T addBalanceResponseContext(
ArrayList<GetBalanceResponseBaseContext> contexts, T context, String accountAddress,
ArrayList<GetBalanceResponseBaseContext> contexts,
T context,
String accountAddress,
BlockchainToken token) {
context.accountAddress = accountAddress.toLowerCase(Locale.ENGLISH);
if (token != null) context.userAsset = token;