From 528777d769a0586b16e2e4af02386106f6edfc78 Mon Sep 17 00:00:00 2001 From: Pavneet-Sing Date: Fri, 30 Jun 2023 15:27:43 +0530 Subject: [PATCH 1/2] - Remove local network assets in GPS variants - Clean up --- .../browser/app/domain/NetworkModel.java | 40 ++++++++----------- .../browser/app/domain/UserAssetModel.java | 18 ++++++--- ...isibleAssetsBottomSheetDialogFragment.java | 26 +++++------- .../crypto_wallet/util/AndroidUtils.java | 11 +++++ .../util/NetworkResponsesCollector.java | 3 +- .../crypto_wallet/util/NetworkUtils.java | 5 +++ .../browser/crypto_wallet/util/Utils.java | 4 -- 7 files changed, 58 insertions(+), 49 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java b/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java index e223fbc8b1827..73e4434a5e951 100644 --- a/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java +++ b/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java @@ -26,6 +26,7 @@ import org.chromium.brave_wallet.mojom.NetworkInfo; import org.chromium.brave_wallet.mojom.OriginInfo; import org.chromium.chrome.browser.crypto_wallet.activities.BuySendSwapActivity; +import org.chromium.chrome.browser.crypto_wallet.util.AndroidUtils; import org.chromium.chrome.browser.crypto_wallet.util.JavaUtils; import org.chromium.chrome.browser.crypto_wallet.util.NetworkResponsesCollector; import org.chromium.chrome.browser.crypto_wallet.util.NetworkUtils; @@ -40,9 +41,11 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; public class NetworkModel implements JsonRpcServiceObserver { private JsonRpcService mJsonRpcService; @@ -138,9 +141,8 @@ public NetworkModel(JsonRpcService jsonRpcService, CryptoSharedData sharedData, }); }); _mDefaultCoinCryptoNetworks.addSource(mSharedData.getCoinTypeLd(), coinType -> { - mJsonRpcService.getAllNetworks(coinType, networkInfos -> { - _mDefaultCoinCryptoNetworks.postValue( - stripDebugNetwork(context, Arrays.asList(networkInfos))); + getAllNetworks(mJsonRpcService, Collections.singletonList(coinType), networkInfoSet -> { + _mDefaultCoinCryptoNetworks.postValue(new ArrayList<>(networkInfoSet)); }); }); @@ -274,7 +276,16 @@ static void getAllNetworks(JsonRpcService jsonRpcService, List supporte NetworkResponsesCollector networkResponsesCollector = new NetworkResponsesCollector(jsonRpcService, supportedCoins); - networkResponsesCollector.getNetworks(networkInfos -> { callback.call(networkInfos); }); + networkResponsesCollector.getNetworks(networkInfoSet -> { + if (!AndroidUtils.isDebugBuild()) { + networkInfoSet = + networkInfoSet.stream() + .filter(networkInfo + -> !NetworkUtils.Filters.isLocalNetwork(networkInfo)) + .collect(Collectors.toSet()); + } + callback.call(networkInfoSet); + }); } public void init() { @@ -283,10 +294,8 @@ public void init() { return; } - getAllNetworks(mJsonRpcService, mSharedData.getSupportedCryptoCoins(), allNetworks -> { - _mCryptoNetworks.postValue( - stripDebugNetwork(mContext, new ArrayList<>(allNetworks))); - }); + getAllNetworks(mJsonRpcService, mSharedData.getSupportedCryptoCoins(), + allNetworks -> { _mCryptoNetworks.postValue(new ArrayList<>(allNetworks)); }); } } @@ -359,21 +368,6 @@ void setOrigin(Origin origin) { mOrigin = origin; } - private List stripDebugNetwork(Context context, List networkInfos) { - if ((context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { - return networkInfos; - } else { - List networkInfosFiltered = new ArrayList<>(); - // remove localhost network - for (NetworkInfo networkInfo : networkInfos) { - if (!networkInfo.chainId.equals(BraveWalletConstants.LOCALHOST_CHAIN_ID)) { - networkInfosFiltered.add(networkInfo); - } - } - return networkInfosFiltered; - } - } - List getSubTestNetworks(NetworkInfo networkInfo) { List cryptoNws = _mCryptoNetworks.getValue(); if (cryptoNws == null || cryptoNws.size() == 0 diff --git a/android/java/org/chromium/chrome/browser/app/domain/UserAssetModel.java b/android/java/org/chromium/chrome/browser/app/domain/UserAssetModel.java index 3e570465ba88c..ec5fa6503f2c6 100644 --- a/android/java/org/chromium/chrome/browser/app/domain/UserAssetModel.java +++ b/android/java/org/chromium/chrome/browser/app/domain/UserAssetModel.java @@ -10,10 +10,12 @@ import org.chromium.brave_wallet.mojom.BlockchainRegistry; import org.chromium.brave_wallet.mojom.BlockchainToken; +import org.chromium.brave_wallet.mojom.BraveWalletConstants; import org.chromium.brave_wallet.mojom.BraveWalletService; import org.chromium.brave_wallet.mojom.JsonRpcService; import org.chromium.brave_wallet.mojom.NetworkInfo; import org.chromium.chrome.browser.crypto_wallet.adapters.WalletCoinAdapter; +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.JavaUtils; import org.chromium.chrome.browser.crypto_wallet.util.NetworkUtils; @@ -25,6 +27,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.stream.Stream; public class UserAssetModel { private final Object mLock = new Object(); @@ -97,22 +100,27 @@ public void fetchAssets(boolean nftsOnly, NetworkInfo selectedNetwork) { private void fetchAllNetworksAssets(boolean nftsOnly) { mBraveWalletService.getAllUserAssets(userAssets -> { - var supportedNetworkAssets = + Stream supportedNetworkAssets = Arrays.stream(userAssets) .filter(token -> !WalletConstants.UNSUPPORTED_NETWORKS.contains( token.chainId)) - .filter(token -> nftsOnly == token.isNft) - .toArray(BlockchainToken[] ::new); + .filter(token -> nftsOnly == token.isNft); + if (!AndroidUtils.isDebugBuild()) { + supportedNetworkAssets = supportedNetworkAssets.filter( + token -> !token.chainId.equals(BraveWalletConstants.LOCALHOST_CHAIN_ID)); + } + BlockchainToken[] supportedNetworkAssetsArray = + supportedNetworkAssets.toArray(BlockchainToken[] ::new); TokenUtils.getAllTokensFiltered(mBlockchainRegistry, mCryptoNetworks, nftsOnly ? TokenUtils.TokenType.NFTS : TokenUtils.TokenType.NON_NFTS, tokens -> { sortByNetwork(tokens); var filteredTokens = TokenUtils.distinctiveConcatenatedArrays( - tokens, supportedNetworkAssets); + tokens, supportedNetworkAssetsArray); _mAssetsResult.postValue(new AssetsResult(Arrays.asList(filteredTokens), - Arrays.asList(supportedNetworkAssets))); + Arrays.asList(supportedNetworkAssetsArray))); }); }); } diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/EditVisibleAssetsBottomSheetDialogFragment.java b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/EditVisibleAssetsBottomSheetDialogFragment.java index 1faf313588d3f..3d78da17b0896 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/EditVisibleAssetsBottomSheetDialogFragment.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/EditVisibleAssetsBottomSheetDialogFragment.java @@ -43,7 +43,6 @@ import org.chromium.brave_wallet.mojom.BlockchainToken; import org.chromium.brave_wallet.mojom.BraveWalletService; import org.chromium.brave_wallet.mojom.CoinType; -import org.chromium.brave_wallet.mojom.JsonRpcService; import org.chromium.brave_wallet.mojom.KeyringService; import org.chromium.brave_wallet.mojom.NetworkInfo; import org.chromium.chrome.R; @@ -140,15 +139,6 @@ private KeyringService getKeyringService() { return null; } - private JsonRpcService getJsonRpcService() { - Activity activity = getActivity(); - if (activity instanceof BraveWalletBaseActivity) { - return ((BraveWalletBaseActivity) activity).getJsonRpcService(); - } - - return null; - } - public void setSelectedNetwork(NetworkInfo selectedNetwork) { assert selectedNetwork != null; mSelectedNetwork = selectedNetwork; @@ -605,10 +595,12 @@ public void onClick(DialogInterface dialog, int id) { @Override public void onMaybeShowTrashButton( WalletListItemModel walletListItemModel, ImageView trashButton) { - if (mType != WalletCoinAdapter.AdapterType.EDIT_VISIBLE_ASSETS_LIST) return; + assert walletListItemModel.getAssetNetwork() != null : "Network should not be null"; + // Prevent NPE of network, issue:#31303 + if (mType != WalletCoinAdapter.AdapterType.EDIT_VISIBLE_ASSETS_LIST + || walletListItemModel.getAssetNetwork() == null) + return; - JsonRpcService jsonRpcService = getJsonRpcService(); - if (jsonRpcService == null) return; TokenUtils.isCustomToken(getBlockchainRegistry(), walletListItemModel.getAssetNetwork(), walletListItemModel.getAssetNetwork().coin, walletListItemModel.getBlockchainToken(), isCustom -> { @@ -621,9 +613,11 @@ public void onMaybeShowTrashButton( @Override public void onAssetCheckedChanged( WalletListItemModel walletListItemModel, CheckBox assetCheck, boolean isChecked) { - if (mType != WalletCoinAdapter.AdapterType.EDIT_VISIBLE_ASSETS_LIST) return; - JsonRpcService jsonRpcService = getJsonRpcService(); - if (jsonRpcService == null) return; + assert walletListItemModel.getAssetNetwork() != null : "Network should not be null"; + // Prevent NPE of network, issue:#31303 + if (mType != WalletCoinAdapter.AdapterType.EDIT_VISIBLE_ASSETS_LIST + || walletListItemModel.getAssetNetwork() == null) + return; BlockchainToken thisToken = walletListItemModel.getBlockchainToken(); TokenUtils.isCustomToken(getBlockchainRegistry(), walletListItemModel.getAssetNetwork(), diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java index 0bd073026dc24..3247fb7969b77 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java @@ -6,6 +6,7 @@ package org.chromium.chrome.browser.crypto_wallet.util; import android.content.Context; +import android.content.pm.ApplicationInfo; import android.content.res.Resources; import android.graphics.Typeface; import android.os.Build; @@ -18,6 +19,7 @@ import androidx.annotation.IdRes; import androidx.fragment.app.Fragment; +import org.chromium.base.ContextUtils; import org.chromium.chrome.R; public class AndroidUtils { @@ -120,4 +122,13 @@ public static int getSkeletonRowCount(int skeletonRowHeight) { int pxHeight = getScreenHeight(); return (int) Math.floor(pxHeight / skeletonRowHeight); } + + /** + * @return {@code true} if the app is a debug build, {@code false} otherwise. + */ + public static boolean isDebugBuild() { + return (ContextUtils.getApplicationContext().getApplicationInfo().flags + & ApplicationInfo.FLAG_DEBUGGABLE) + != 0; + } } diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkResponsesCollector.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkResponsesCollector.java index b9536c981426b..6691eeaa9435a 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkResponsesCollector.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkResponsesCollector.java @@ -14,6 +14,7 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; public class NetworkResponsesCollector { private JsonRpcService mJsonRpcService; @@ -27,7 +28,7 @@ public NetworkResponsesCollector(JsonRpcService jsonRpcService, List co mNetworks = new LinkedHashSet<>(); } - public void getNetworks(Callbacks.Callback1> runWhenDone) { + public void getNetworks(Callbacks.Callback1> runWhenDone) { AsyncUtils.MultiResponseHandler networkInfosMultiResponse = new AsyncUtils.MultiResponseHandler(coinTypes.size()); ArrayList accountsPermissionsContexts = diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkUtils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkUtils.java index 99835470b1fe8..76b434aeaa413 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkUtils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/NetworkUtils.java @@ -8,6 +8,7 @@ import android.content.Context; import android.text.TextUtils; +import org.chromium.brave_wallet.mojom.BraveWalletConstants; import org.chromium.brave_wallet.mojom.NetworkInfo; import org.chromium.chrome.R; import org.chromium.url.mojom.Url; @@ -27,6 +28,10 @@ public static boolean isSameNetwork(NetworkInfo network, String chainId, int coi public static boolean isSameNetwork(NetworkInfo network1, NetworkInfo network2) { return isSameNetwork(network1, network2.chainId, network2.coin); } + + public static boolean isLocalNetwork(NetworkInfo network) { + return network.chainId.equals(BraveWalletConstants.LOCALHOST_CHAIN_ID); + } } public static NetworkInfo getAllNetworkOption(Context context) { diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java index 7673ad4f4a302..3ca6a300ac918 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java @@ -322,10 +322,6 @@ public static void isCustomNetwork(JsonRpcService jsonRpcService, int coinType, }); } - public static boolean isDebuggable(Activity activity) { - return 0 != (activity.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE); - } - public static String[] makeNetworksAbbrevList(Activity activity, NetworkInfo[] allNetworks) { List categories = new ArrayList(); From 8fe57269bca169307921af7ec7a692c032fe7adc Mon Sep 17 00:00:00 2001 From: Pavneet-Sing Date: Fri, 30 Jun 2023 20:48:01 +0530 Subject: [PATCH 2/2] clean up --- .../org/chromium/chrome/browser/app/domain/NetworkModel.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java b/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java index 73e4434a5e951..8c4c9b68da661 100644 --- a/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java +++ b/android/java/org/chromium/chrome/browser/app/domain/NetworkModel.java @@ -6,7 +6,6 @@ package org.chromium.chrome.browser.app.domain; import android.content.Context; -import android.content.pm.ApplicationInfo; import android.text.TextUtils; import android.util.Pair; @@ -38,10 +37,8 @@ import org.chromium.url.internal.mojom.Origin; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set;