Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tweak portfolio UI and add option to show hidden NFTs #19990

Merged
merged 17 commits into from
Sep 6, 2023
Merged
Prev Previous commit
Next Next commit
Apply code formatting
  • Loading branch information
simoarpe committed Sep 5, 2023
commit adede5562e75406c3d9fe78664f41d0446d11365
Original file line number Diff line number Diff line change
Expand Up @@ -88,14 +88,16 @@ public PortfolioModel(Context context, TxService txService, KeyringService keyri
}

// TODO(pav): We should fetch and process all portfolio list here
public void prepareNftListMetaData(List<BlockchainToken> nftList, List<BlockchainToken> hiddenNftList,
List<NetworkInfo> allNetworkList, PortfolioHelper portfolioHelper) {
public void prepareNftListMetaData(List<BlockchainToken> nftList,
List<BlockchainToken> hiddenNftList, List<NetworkInfo> allNetworkList,
PortfolioHelper portfolioHelper) {
mPortfolioHelper = portfolioHelper;
fetchNftMetadata(nftList, allNetworkList, _mNftModels);
fetchNftMetadata(hiddenNftList, allNetworkList, _mNftHiddenModels);
}

private void fetchNftMetadata(List<BlockchainToken> nftList, List<NetworkInfo> allNetworkList, MutableLiveData<List<NftDataModel>> nftModels) {
private void fetchNftMetadata(List<BlockchainToken> nftList, List<NetworkInfo> allNetworkList,
MutableLiveData<List<NftDataModel>> nftModels) {
// Filter out and calculate the size of supported NFTs.
// The total sum will be used by `MultiResponseHandler` to detect
// when `setWhenAllCompletedAction()` can be processed.
Expand Down Expand Up @@ -157,8 +159,8 @@ public void discoverAssetsOnAllSupportedChains() {
* @param callback to get the @{code PortfolioHelper} object containing result
*/
public void fetchNfts(List<NetworkInfo> selectedNetworks,
BraveWalletBaseActivity braveWalletBaseActivity,
Callbacks.Callback1<PortfolioHelper> callback) {
BraveWalletBaseActivity braveWalletBaseActivity,
Callbacks.Callback1<PortfolioHelper> callback) {
NetworkModel.getAllNetworks(
mJsonRpcService, mSharedData.getSupportedCryptoCoins(), allNetworks -> {
mAllNetworkInfos = allNetworks;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,8 @@ private void setUpObservers() {
mNftDataModels = nftDataModels;
recordP3AView();
mWalletNftAdapter = new WalletNftAdapter();
setUpNftList(mRvNft, mWalletNftAdapter, nftDataModels, mPortfolioModel.mPortfolioHelper.getPerTokenCryptoSum(),
setUpNftList(mRvNft, mWalletNftAdapter, nftDataModels,
mPortfolioModel.mPortfolioHelper.getPerTokenCryptoSum(),
mPortfolioModel.mPortfolioHelper.getPerTokenFiatSum(), SelectedTab.NFTS);
mPbAssetDiscovery.setVisibility(View.INVISIBLE);
});
Expand All @@ -267,7 +268,8 @@ private void setUpObservers() {
if (mPortfolioModel.mPortfolioHelper == null) return;
mNftHiddenDataModels = nftHiddenDataModels;
mWalletHiddenNftAdapter = new WalletNftAdapter();
setUpNftList(mRvHiddenNft, mWalletHiddenNftAdapter, nftHiddenDataModels, mPortfolioModel.mPortfolioHelper.getPerTokenCryptoSum(),
setUpNftList(mRvHiddenNft, mWalletHiddenNftAdapter, nftHiddenDataModels,
mPortfolioModel.mPortfolioHelper.getPerTokenCryptoSum(),
mPortfolioModel.mPortfolioHelper.getPerTokenFiatSum(), SelectedTab.HIDDEN);
});

Expand Down Expand Up @@ -350,8 +352,10 @@ private void openNetworkSelection() {
startActivity(intent);
}

private void setUpNftList(RecyclerView recyclerView, WalletNftAdapter adapter, List<PortfolioModel.NftDataModel> nftDataModels,
HashMap<String, Double> perTokenCryptoSum, HashMap<String, Double> perTokenFiatSum, SelectedTab selectedTab) {
private void setUpNftList(RecyclerView recyclerView, WalletNftAdapter adapter,
List<PortfolioModel.NftDataModel> nftDataModels,
HashMap<String, Double> perTokenCryptoSum, HashMap<String, Double> perTokenFiatSum,
SelectedTab selectedTab) {
String tokensPath = BlockchainRegistryFactory.getInstance().getTokensIconsLocation();

List<WalletListItemModel> walletListItemModelList =
Expand All @@ -363,11 +367,11 @@ private void setUpNftList(RecyclerView recyclerView, WalletNftAdapter adapter, L
recyclerView.setLayoutManager(
new AutoFitVerticalGridLayoutManager(getActivity(), 2, NFT_ITEM_WIDTH_DP));

if (mSelectedTab == selectedTab) {
// Show empty screen layout if no NFTs have been added.
boolean emptyList = walletListItemModelList.isEmpty();
mAddNftsContainer.setVisibility(emptyList ? View.VISIBLE : View.GONE);
}
if (mSelectedTab == selectedTab) {
// Show empty screen layout if no NFTs have been added.
boolean emptyList = walletListItemModelList.isEmpty();
mAddNftsContainer.setVisibility(emptyList ? View.VISIBLE : View.GONE);
}
}

private void clearAssets() {
Expand All @@ -386,7 +390,8 @@ public void onAssetClick(BlockchainToken asset) {
nftDataModel -> AssetUtils.Filters.isSameNFT(asset, nftDataModel.token));
if (selectedNft == null) {
PortfolioModel.NftDataModel selectedHiddenNft = JavaUtils.find(mNftHiddenDataModels,
nftHiddenDataModel -> AssetUtils.Filters.isSameNFT(asset, nftHiddenDataModel.token));
nftHiddenDataModel
-> AssetUtils.Filters.isSameNFT(asset, nftHiddenDataModel.token));
if (selectedHiddenNft == null) {
return;
}
Expand All @@ -403,14 +408,16 @@ private void updateNftGrid() {

Activity activity = getActivity();
if (!(activity instanceof BraveWalletActivity)) return;
mPortfolioModel.fetchNfts(mSelectedNetworkList,
(BraveWalletBaseActivity) activity, (portfolioHelper) -> {
mPortfolioModel.fetchNfts(
mSelectedNetworkList, (BraveWalletBaseActivity) activity, (portfolioHelper) -> {
if (!AndroidUtils.canUpdateFragmentUi(this)) return;
mPortfolioHelper = portfolioHelper;
List<BlockchainToken> nfts = mPortfolioHelper.getUserAssets();
List<BlockchainToken> hiddenNfts = mPortfolioHelper.getHiddenAssets();
LiveDataUtil.observeOnce(getNetworkModel().mCryptoNetworks, networkList -> mPortfolioModel.prepareNftListMetaData(
nfts, hiddenNfts, networkList, mPortfolioHelper));
LiveDataUtil.observeOnce(getNetworkModel().mCryptoNetworks,
networkList

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PortfolioModel has the mAllNetworkInfos. Add a getter and reuse it than LiveDataUtil.observeOnce(getNetworkModel().mCryptoNetworks,

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, right! Nice catch, thank you!

-> mPortfolioModel.prepareNftListMetaData(
nfts, hiddenNfts, networkList, mPortfolioHelper));
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,19 @@ public void fetchNfts(@NonNull final Callbacks.Callback1<PortfolioHelper> callba
AtomicInteger allAssets = new AtomicInteger();
final List<BlockchainToken> assets = new ArrayList<>();
for (NetworkInfo selectedNetwork : mSelectedNetworks) {
TokenUtils.getUserOrAllTokensFiltered(braveWalletService, blockchainRegistry,
selectedNetwork, selectedNetwork.coin, TokenUtils.TokenType.NFTS, false, tokens -> {
TokenUtils.getUserOrAllTokensFiltered(braveWalletService,
blockchainRegistry, selectedNetwork, selectedNetwork.coin,
TokenUtils.TokenType.NFTS, false, tokens -> {
assets.addAll(Arrays.asList(tokens));
if (allAssets.incrementAndGet() == totalNetworks) {
List<String> comparableUserAssets = mUserAssets.stream().map(Utils::tokenToString).collect(Collectors.toList());
assets.removeIf(blockChainToken -> comparableUserAssets.contains(Utils.tokenToString(blockChainToken)));
List<String> comparableUserAssets =
mUserAssets.stream()
.map(Utils::tokenToString)
.collect(Collectors.toList());
assets.removeIf(blockChainToken
-> comparableUserAssets.contains(
Utils.tokenToString(
blockChainToken)));
mHiddenAssets.addAll(assets);
callback.call(this);
}
Expand Down