Skip to content

Commit

Permalink
Show test networks separately (#19467)
Browse files Browse the repository at this point in the history
* Implement test network in separate section

* Collect networks as list

* Show network icon and remove default icon

* Fix eth icon flasing and add null check

* Update blockie size and clean up

* Minor review changes
  • Loading branch information
Pavneet Singh authored Jul 31, 2023
1 parent 56caf80 commit 6215d4c
Show file tree
Hide file tree
Showing 13 changed files with 201 additions and 322 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import org.chromium.brave_wallet.mojom.JsonRpcService;
import org.chromium.brave_wallet.mojom.JsonRpcServiceObserver;
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.AssetUtils;
Expand All @@ -43,7 +42,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class NetworkModel implements JsonRpcServiceObserver {
Expand All @@ -65,7 +63,7 @@ public class NetworkModel implements JsonRpcServiceObserver {
private final MediatorLiveData<List<NetworkInfo>> _mPrimaryNetworks;
private final MediatorLiveData<List<NetworkInfo>> _mSecondaryNetworks;
private Map<String, NetworkSelectorModel> mNetworkSelectorMap;
private OriginInfo mOriginInfo;
private final MutableLiveData<NetworkLists> _mNetworkLists;
public final LiveData<String[]> mCustomNetworkIds;
public LiveData<NetworkInfo> mNeedToCreateAccountForNetwork;
public final LiveData<Triple<String, NetworkInfo, List<NetworkInfo>>> mChainNetworkAllNetwork;
Expand All @@ -76,6 +74,7 @@ public class NetworkModel implements JsonRpcServiceObserver {
public final LiveData<NetworkInfo> mDefaultNetwork;
public final LiveData<List<NetworkInfo>> mPrimaryNetworks;
public final LiveData<List<NetworkInfo>> mSecondaryNetworks;
public final LiveData<NetworkLists> mNetworkLists;
private Origin mOrigin;

public NetworkModel(BraveWalletService braveWalletService, JsonRpcService jsonRpcService,
Expand Down Expand Up @@ -109,6 +108,8 @@ public NetworkModel(BraveWalletService braveWalletService, JsonRpcService jsonRp
mSecondaryNetworks = _mSecondaryNetworks;
jsonRpcService.addObserver(this);
mNetworkSelectorMap = new HashMap<>();
_mNetworkLists = new MutableLiveData<>();
mNetworkLists = _mNetworkLists;
_mPairChainAndNetwork.setValue(Pair.create("", Collections.emptyList()));
_mPairChainAndNetwork.addSource(_mChainId, chainId -> {
_mPairChainAndNetwork.setValue(
Expand Down Expand Up @@ -271,23 +272,23 @@ public void refreshNetworks() {
}

static void getAllNetworks(JsonRpcService jsonRpcService, List<Integer> supportedCoins,
Callbacks.Callback1<Set<NetworkInfo>> callback) {
Callbacks.Callback1<List<NetworkInfo>> callback) {
if (jsonRpcService == null) {
callback.call(Collections.emptySet());
callback.call(Collections.emptyList());
return;
}

NetworkResponsesCollector networkResponsesCollector =
new NetworkResponsesCollector(jsonRpcService, supportedCoins);
networkResponsesCollector.getNetworks(networkInfoSet -> {
networkResponsesCollector.getNetworks(networkInfoList -> {
if (!AndroidUtils.isDebugBuild()) {
networkInfoSet =
networkInfoSet.stream()
networkInfoList =
networkInfoList.stream()
.filter(networkInfo
-> !NetworkUtils.Filters.isLocalNetwork(networkInfo))
.collect(Collectors.toSet());
.collect(Collectors.toList());
}
callback.call(networkInfoSet);
callback.call(networkInfoList);
});
}

Expand All @@ -311,8 +312,28 @@ public void init() {
}
}

getAllNetworks(mJsonRpcService, mSharedData.getSupportedCryptoCoins(),
allNetworks -> { _mCryptoNetworks.postValue(new ArrayList<>(allNetworks)); });
getAllNetworks(
mJsonRpcService, mSharedData.getSupportedCryptoCoins(), cryptoNetworks -> {
_mCryptoNetworks.postValue(cryptoNetworks);

List<NetworkInfo> primary = new ArrayList<>();
List<NetworkInfo> secondary = new ArrayList<>();
List<NetworkInfo> test = new ArrayList<>();
NetworkLists networkLists =
new NetworkLists(cryptoNetworks, primary, secondary, test);
for (NetworkInfo networkInfo : cryptoNetworks) {
if (WalletConstants.SUPPORTED_TOP_LEVEL_CHAIN_IDS.contains(
networkInfo.chainId)) {
primary.add(networkInfo);
} else if (WalletConstants.KNOWN_TEST_CHAIN_IDS.contains(
networkInfo.chainId)) {
test.add(networkInfo);
} else {
secondary.add(networkInfo);
}
}
_mNetworkLists.postValue(networkLists);
});
}
}

Expand Down Expand Up @@ -391,21 +412,6 @@ void setOrigin(Origin origin) {
mOrigin = origin;
}

List<NetworkInfo> getSubTestNetworks(NetworkInfo networkInfo) {
List<NetworkInfo> cryptoNws = _mCryptoNetworks.getValue();
if (cryptoNws == null || cryptoNws.size() == 0
|| !WalletConstants.SUPPORTED_TOP_LEVEL_CHAIN_IDS.contains(networkInfo.chainId))
return Collections.emptyList();
List<NetworkInfo> list = new ArrayList<>();
for (NetworkInfo info : cryptoNws) {
if (WalletConstants.KNOWN_TEST_CHAIN_IDS.contains(info.chainId)
&& networkInfo.coin == info.coin && !isCustomChain(info.chainId)) {
list.add(info);
}
}
return list;
}

private boolean isCustomChain(String netWorkChainId) {
String[] customNetworkChains = JavaUtils.safeVal(_mCustomNetworkIds.getValue());
for (String chain : customNetworkChains) {
Expand Down Expand Up @@ -455,4 +461,33 @@ public void onConnectionError(MojoException e) {}

@Override
public void close() {}

public static class NetworkLists {
// Networks from core.
public List<NetworkInfo> mCoreNetworks;
public List<NetworkInfo> mPrimaryNetworkList;
public List<NetworkInfo> mSecondaryNetworkList;
public List<NetworkInfo> mTestNetworkList;

public NetworkLists() {
mCoreNetworks = Collections.emptyList();
mPrimaryNetworkList = Collections.emptyList();
mSecondaryNetworkList = Collections.emptyList();
mTestNetworkList = Collections.emptyList();
}
public NetworkLists(List<NetworkInfo> mCoreNetworks, List<NetworkInfo> mPrimaryNetworkList,
List<NetworkInfo> mSecondaryNetworkList, List<NetworkInfo> mTestNetworkList) {
this.mCoreNetworks = mCoreNetworks;
this.mPrimaryNetworkList = mPrimaryNetworkList;
this.mSecondaryNetworkList = mSecondaryNetworkList;
this.mTestNetworkList = mTestNetworkList;
}

public NetworkLists(NetworkLists networkLists) {
this.mCoreNetworks = new ArrayList<>(networkLists.mCoreNetworks);
this.mPrimaryNetworkList = new ArrayList<>(networkLists.mPrimaryNetworkList);
this.mSecondaryNetworkList = new ArrayList<>(networkLists.mSecondaryNetworkList);
this.mTestNetworkList = new ArrayList<>(networkLists.mTestNetworkList);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,10 @@
import androidx.lifecycle.Transformations;

import org.chromium.brave_wallet.mojom.NetworkInfo;
import org.chromium.chrome.browser.crypto_wallet.presenters.NetworkInfoPresenter;
import org.chromium.chrome.browser.crypto_wallet.util.NetworkUtils;
import org.chromium.mojo.bindings.Callbacks;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
Expand All @@ -32,8 +30,7 @@ public class NetworkSelectorModel {
private final NetworkModel mNetworkModel;
private final MutableLiveData<NetworkInfo> _mSelectedNetwork;
private Mode mMode;
public LiveData<List<NetworkInfoPresenter>> mPrimaryNetworks;
public LiveData<List<NetworkInfoPresenter>> mSecondaryNetworks;
public LiveData<NetworkModel.NetworkLists> mNetworkListsLd;
private final LiveData<NetworkInfo> mSelectedNetwork;
private String mSelectedChainId;

Expand Down Expand Up @@ -61,27 +58,19 @@ public void init() {
_mSelectedNetwork.postValue(NetworkUtils.getAllNetworkOption(mContext));
}
}
mPrimaryNetworks = Transformations.map(mNetworkModel.mPrimaryNetworks, networkInfos -> {
List<NetworkInfoPresenter> list = new ArrayList<>();
mNetworkListsLd = Transformations.map(mNetworkModel.mNetworkLists, networkLists -> {
if (networkLists == null) return new NetworkModel.NetworkLists();
NetworkModel.NetworkLists networkListsCopy =
new NetworkModel.NetworkLists(networkLists);
List<NetworkInfo> allNetworkList = new ArrayList<>(networkLists.mCoreNetworks);
if (mMode == Mode.LOCAL_NETWORK_FILTER) {
list.add(0,
new NetworkInfoPresenter(NetworkUtils.getAllNetworkOption(mContext), true,
Collections.emptyList()));
NetworkInfo allNetwork = NetworkUtils.getAllNetworkOption(mContext);
networkListsCopy.mPrimaryNetworkList.add(0, allNetwork);
// Selected local network can be "All networks"
allNetworkList.add(0, allNetwork);
}
for (NetworkInfo networkInfo : networkInfos) {
list.add(new NetworkInfoPresenter(
networkInfo, true, mNetworkModel.getSubTestNetworks(networkInfo)));
}
updateLocalNetwork(networkInfos, mSelectedChainId);
return list;
});
mSecondaryNetworks = Transformations.map(mNetworkModel.mSecondaryNetworks, networkInfos -> {
List<NetworkInfoPresenter> list = new ArrayList<>();
for (NetworkInfo networkInfo : networkInfos) {
list.add(new NetworkInfoPresenter(networkInfo, false, Collections.emptyList()));
}
updateLocalNetwork(networkInfos, mSelectedChainId);
return list;
updateLocalNetwork(allNetworkList, mSelectedChainId);
return networkListsCopy;
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public void fetchAssetsByType(TokenUtils.TokenType type, NetworkInfo selectedNet
}
NetworkModel.getAllNetworks(
mJsonRpcService, mSharedData.getSupportedCryptoCoins(), allNetworks -> {
mAllNetworkInfos = new ArrayList<>(allNetworks);
mAllNetworkInfos = allNetworks;
if (selectedNetwork.chainId.equals(
NetworkUtils.getAllNetworkOption(mContext).chainId)) {
mKeyringService.getAllAccounts(allAccounts -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public void update(WeakReference<BraveWalletBaseActivity> activityRef) {
mJsonRpcService, mKeyringService, mActivityRef, mActivityRef.get()))
return;
NetworkModel.getAllNetworks(mJsonRpcService, mSharedData.getSupportedCryptoCoins(), allNetworks -> {
mAllNetworkInfoList = new ArrayList<>(allNetworks);
mAllNetworkInfoList = allNetworks;
mKeyringService.getAllAccounts(allAccounts -> {
mAllAccountInfoList = Arrays.asList(allAccounts.accounts);
var allAccountsArray = allAccounts.accounts;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.chromium.chrome.browser.crypto_wallet.util.TokenUtils;
import org.chromium.chrome.browser.crypto_wallet.util.WalletConstants;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
Expand Down Expand Up @@ -59,7 +58,7 @@ public void fetchAssets(boolean nftsOnly, NetworkInfo selectedNetwork) {
if (JavaUtils.anyNull(mBraveWalletService, mJsonRpcService, mSelectedNetwork)) return;
NetworkModel.getAllNetworks(
mJsonRpcService, mSharedData.getSupportedCryptoCoins(), allNetworks -> {
mCryptoNetworks = new ArrayList<>(allNetworks);
mCryptoNetworks = allNetworks;
if (mType == WalletCoinAdapter.AdapterType.EDIT_VISIBLE_ASSETS_LIST) {
if (NetworkUtils.isAllNetwork(mSelectedNetwork)) {
fetchAllNetworksAssets(nftsOnly);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,9 @@ private void initState() {
networkSelectorAdapter = new NetworkSelectorAdapter(this, new ArrayList<>());
mRVNetworkSelector.setAdapter(networkSelectorAdapter);
networkSelectorAdapter.setOnNetworkItemSelected(this);
mNetworkSelectorModel.mPrimaryNetworks.observe(this, primaryNetworkInfos -> {
networkSelectorAdapter.addPrimaryNetwork(primaryNetworkInfos);
});
mNetworkSelectorModel.mSecondaryNetworks.observe(this, secondaryNetworkInfos -> {
networkSelectorAdapter.addSecondaryNetwork(secondaryNetworkInfos);
mNetworkSelectorModel.mNetworkListsLd.observe(this, networkLists -> {
if (networkLists == null) return;
networkSelectorAdapter.addNetworks(networkLists);
});
setSelectedNetworkObserver();
}
Expand Down
Loading

0 comments on commit 6215d4c

Please sign in to comment.