feat(wallet): implement aurora bridge button

This commit is contained in:
Pavneet-Sing
2022-08-25 14:30:18 +05:30
parent 31f1b86533
commit 55915ce2a1
11 changed files with 211 additions and 41 deletions
@@ -8,10 +8,10 @@ package org.chromium.chrome.browser.crypto_wallet.activities;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.MenuItem;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
@@ -19,25 +19,21 @@ import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.brave_wallet.mojom.AccountInfo;
import org.chromium.brave_wallet.mojom.AssetPriceTimeframe;
import org.chromium.brave_wallet.mojom.AssetRatioService;
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.CoinType;
import org.chromium.brave_wallet.mojom.JsonRpcService;
import org.chromium.brave_wallet.mojom.KeyringInfo;
import org.chromium.brave_wallet.mojom.KeyringService;
import org.chromium.brave_wallet.mojom.TransactionInfo;
import org.chromium.brave_wallet.mojom.TxService;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.crypto_wallet.BlockchainRegistryFactory;
import org.chromium.chrome.browser.crypto_wallet.activities.AccountDetailActivity;
@@ -46,12 +42,16 @@ import org.chromium.chrome.browser.crypto_wallet.adapters.WalletCoinAdapter;
import org.chromium.chrome.browser.crypto_wallet.listeners.OnWalletListItemClick;
import org.chromium.chrome.browser.crypto_wallet.model.WalletListItemModel;
import org.chromium.chrome.browser.crypto_wallet.observers.ApprovedTxObserver;
import org.chromium.chrome.browser.crypto_wallet.util.AssetUtils;
import org.chromium.chrome.browser.crypto_wallet.util.AssetsPricesHelper;
import org.chromium.chrome.browser.crypto_wallet.util.BalanceHelper;
import org.chromium.chrome.browser.crypto_wallet.util.SmoothLineChartEquallySpaced;
import org.chromium.chrome.browser.crypto_wallet.util.TokenUtils;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
import org.chromium.chrome.browser.crypto_wallet.util.WalletConstants;
import org.chromium.chrome.browser.init.AsyncInitializationActivity;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.util.TabUtils;
import java.util.ArrayList;
import java.util.HashMap;
@@ -79,6 +79,7 @@ public class AssetDetailActivity
private WalletCoinAdapter mWalletTxCoinAdapter;
private Button mBtnBuy;
private Button mBtnSwap;
private Button mBtnBridgeToAurora;
private boolean mHasNewTx;
private boolean mNativeInitialized;
@@ -138,21 +139,53 @@ public class AssetDetailActivity
}
});
Button btnSend = findViewById(R.id.btn_send);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils.openBuySendSwapActivity(AssetDetailActivity.this,
BuySendSwapActivity.ActivityType.SEND, mAssetSymbol);
}
});
btnSend.setOnClickListener(v
-> Utils.openBuySendSwapActivity(AssetDetailActivity.this,
BuySendSwapActivity.ActivityType.SEND, mAssetSymbol));
mBtnSwap = findViewById(R.id.btn_swap);
mBtnSwap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils.openBuySendSwapActivity(AssetDetailActivity.this,
BuySendSwapActivity.ActivityType.SWAP, mAssetSymbol);
}
});
if (AssetUtils.isAuroraAddress(mContractAddress, mAssetSymbol)) {
mBtnSwap.setVisibility(View.GONE);
mBtnBridgeToAurora = findViewById(R.id.btn_aurora_bridge);
mBtnBridgeToAurora.setVisibility(View.VISIBLE);
Spanned auroraLearnMore = Utils.createSpanForSurroundedPhrase(this,
R.string.brave_wallet_aurora_modal_description,
(v) -> { TabUtils.openLinkWithFocus(this, WalletConstants.URL_BRIDGE_RISKS); });
MaterialAlertDialogBuilder auroraDialogBuilder =
new MaterialAlertDialogBuilder(this, R.style.BraveWalletAlertDialogTheme);
View dialogView = getLayoutInflater().inflate(R.layout.dialog_aurora_bridge, null);
auroraDialogBuilder.setView(dialogView);
AlertDialog auroraDialog = auroraDialogBuilder.create();
TextView message = dialogView.findViewById(R.id.dialog_aurora_desc);
Button btnOpenRainBow = dialogView.findViewById(R.id.btn_open_rainbow_app);
message.setMovementMethod(LinkMovementMethod.getInstance());
message.setText(auroraLearnMore);
btnOpenRainBow.setOnClickListener(
v -> { TabUtils.openLinkWithFocus(this, WalletConstants.URL_RAINBOW_AURORA); });
SharedPreferencesManager preferencesManager = SharedPreferencesManager.getInstance();
mBtnBridgeToAurora.setOnClickListener(v -> {
if (preferencesManager.readBoolean(
WalletConstants.PREF_SHOW_BRIDGE_INFO_DIALOG, true)) {
auroraDialog.show();
preferencesManager.writeBoolean(
WalletConstants.PREF_SHOW_BRIDGE_INFO_DIALOG, false);
} else {
TabUtils.openLinkWithFocus(this, WalletConstants.URL_RAINBOW_AURORA);
}
});
} else {
mBtnSwap.setOnClickListener(v
-> Utils.openBuySendSwapActivity(AssetDetailActivity.this,
BuySendSwapActivity.ActivityType.SWAP, mAssetSymbol));
}
adjustButtonsVisibilities();
RadioGroup radioGroup = findViewById(R.id.asset_duration_radio_group);
@@ -378,7 +411,9 @@ public class AssetDetailActivity
private void adjustButtonsVisibilities() {
if (Utils.allowBuyAndSwap(mChainId)) {
mBtnBuy.setVisibility(View.VISIBLE);
mBtnSwap.setVisibility(View.VISIBLE);
if (!AssetUtils.isAuroraAddress(mContractAddress, mAssetSymbol)) {
mBtnSwap.setVisibility(View.VISIBLE);
}
} else {
mBtnBuy.setVisibility(View.GONE);
mBtnSwap.setVisibility(View.GONE);
@@ -0,0 +1,54 @@
/* Copyright (c) 2022 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.chromium.chrome.browser.crypto_wallet.util;
import android.text.TextUtils;
public class AssetUtils {
public static String ASSET_SYMBOL_ETH = "ETH";
public static String AURORA_SUPPORTED_CONTRACT_ADDRESSES[] = {
"0x4e834cdcc911605227eedddb89fad336ab9dc00a", // AAVE
"0x8bec47865ade3b172a928df8f990bc7f2a3b9f79", // AURORA
"0xb59d0fdaf498182ff19c4e80c00ecfc4470926e2", // BAL
"0x2b9025aecc5ce7a8e6880d3e9c6e458927ecba04", // BAT
"0xdeacf0faa2b80af41470003b5f6cd113d47b4dcd", // COMP
"0xabe9818c5fb5e751c4310be6f0f18c8d85f9bd7f", // CREAM
"0xe3520349f477a5f6eb06107066048508498a291b", // DAI
"0xe301ed8c7630c9678c39e4e45193d1e7dfb914f7", // DODO
"0xea62791aa682d455614eaa2a12ba3d9a2fd197af", // FLX
"0xda2585430fef327ad8ee44af8f1f989a2a91a3d2", // FRAX
"0xc8fdd32e0bf33f0396a18209188bb8c6fb8747d2", // FXS
"0x943f4bf75d5854e92140403255a471950ab8a26f", // HAPI
"0x94190d8ef039c670c6d6b9990142e0ce2a1e3178", // LINK
"0x1d1f82d8b8fc72f29a8c268285347563cb6cd8b3", // MKR
"0x74974575d2f1668c63036d51ff48dbaa68e52408", // MODA
"0x951cfdc9544b726872a8faf56792ef6704731aae", // OCT
"0x07b2055fbd17b601c780aeb3abf4c2b3a30c7aae", // OIN
"0x885f8CF6E45bdd3fdcDc644efdcd0AC93880c781", // PAD
"0x291c8fceaca3342b29cc36171deb98106f712c66", // PICKLE
"0x18921f1e257038e538ba24d49fa6495c8b1617bc", // REN
"0xdc9be1ff012d3c6da818d136a3b2e5fdd4442f74", // SNX
"0x7821c773a12485b12a2b5b7bc451c3eb200986b1", // SUSHI
"0x1bc741235ec0ee86ad488fa49b69bb6c823ee7b7", // UNI
"0xb12bfca5a55806aaf64e99521918a4bf0fc40802", // USDC
"0x4988a896b1227218e4a686fde5eabdcabd91571f", // USDT
"0xf4eb217ba2454613b15dbdea6e5f22276410e89e", // WBTC
"0x99ec8f13b2afef5ec49073b9d20df109d25f78c0", // WOO
"0xa64514a8af3ff7366ad3d5daa5a548eefcef85e0" // YFI
};
public static boolean isAuroraAddress(String contractAddress, String assetSymbol) {
if (!TextUtils.isEmpty(contractAddress)) {
for (String address : AURORA_SUPPORTED_CONTRACT_ADDRESSES) {
if (address.equalsIgnoreCase(contractAddress)) {
return true;
}
}
}
return ASSET_SYMBOL_ETH.equalsIgnoreCase(assetSymbol);
}
}
@@ -43,8 +43,7 @@ public class SelectedAccountResponsesCollector {
selectedAccountInfosPerCoinMultiResponse.singleResponseComplete, coin);
accountsPermissionsContexts.add(accountContext);
if (CoinType.FIL == coin) {
} else {
if (CoinType.FIL != coin) {
mKeyringService.getSelectedAccount(coin, accountContext);
}
}
@@ -8,6 +8,14 @@ import java.util.List;
public final class WalletConstants {
public static final long MILLI_SECOND = 1000;
// URLs
// Crypto
public static final String URL_BRIDGE_RISKS = "https://ethereum.org/en/bridges/#bridge-risk";
// Aurora
public static final String URL_RAINBOW_AURORA = "https://rainbowbridge.app";
// Android resources
public static final String RESOURCE_ID = "id";
@@ -24,6 +32,9 @@ public final class WalletConstants {
public static final String ADD_NETWORK_FRAGMENT_ARG_ACTIVE_NETWORK = "activeNetwork";
public static final String ADD_NETWORK_FRAGMENT_ARG_CHAIN_ID = "chainId";
// AssetDetailsActivity
public static final String PREF_SHOW_BRIDGE_INFO_DIALOG = "pref_show_bridge_info_dialog";
public static List<String> BUY_SUPPORTED_NETWORKS = Arrays.asList(
BraveWalletConstants.MAINNET_CHAIN_ID, BraveWalletConstants.RINKEBY_CHAIN_ID,
BraveWalletConstants.ROPSTEN_CHAIN_ID, BraveWalletConstants.GOERLI_CHAIN_ID,
@@ -21,6 +21,7 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.crypto_wallet.util.WalletConstants;
import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.content_public.browser.LoadUrlParams;
@@ -105,4 +106,14 @@ public class TabUtils {
braveActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(braveActivityIntent);
}
/**
* Open link in a (normal/non-incognito) tab
* @param activity packageContext/source of the intent
* @param link to be opened
*/
public static void openLinkWithFocus(Activity activity, String link) {
TabUtils.openUrlInNewTab(false, link);
TabUtils.bringChromeTabbedActivityToTheTop(activity);
}
}