diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BuySendSwapActivity.java b/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BuySendSwapActivity.java index b0c0e8862a8..1debe888de5 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BuySendSwapActivity.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BuySendSwapActivity.java @@ -44,6 +44,7 @@ import org.chromium.chrome.browser.crypto_wallet.fragments.ApproveTxBottomSheetD import org.chromium.chrome.browser.crypto_wallet.fragments.EditVisibleAssetsBottomSheetDialogFragment; import org.chromium.chrome.browser.crypto_wallet.util.Utils; import org.chromium.chrome.browser.init.AsyncInitializationActivity; +import org.chromium.chrome.browser.util.TabUtils; import org.chromium.mojo.bindings.ConnectionErrorHandler; import org.chromium.mojo.system.MojoException; @@ -354,19 +355,18 @@ public class BuySendSwapActivity extends AsyncInitializationActivity } btnBuySendSwap.setOnClickListener(v -> { + Spinner accountSpinner = findViewById(R.id.accounts_spinner); + String from = mCustomAccountAdapter.getTitleAtPosition( + accountSpinner.getSelectedItemPosition()); + TextView fromValueText = findViewById(R.id.from_value_text); + // TODO(sergz): Some kind of validation that we have enough balance + String value = fromValueText.getText().toString(); if (mActivityType == ActivityType.SEND) { - // TODO(sergz): token transfers via a token contract String to = toValueText.getText().toString(); if (to.isEmpty()) { // TODO(sergz): some address validation return; } - TextView fromValueText = findViewById(R.id.from_value_text); - // TODO(sergz): Some kind of validation that we have enough balance - String value = fromValueText.getText().toString(); - Spinner accountSpinner = findViewById(R.id.accounts_spinner); - String from = mCustomAccountAdapter.getTitleAtPosition( - accountSpinner.getSelectedItemPosition()); if (mCurrentErcToken == null || mCurrentErcToken.contractAddress.isEmpty()) { TxData data = Utils.getTxData("0x1", "", "", to, Utils.toHexWei(value), new byte[0]); @@ -375,6 +375,13 @@ public class BuySendSwapActivity extends AsyncInitializationActivity addUnapprovedTransactionERC20( to, Utils.toHexWei(value), from, mCurrentErcToken.contractAddress); } + } else if (mActivityType == ActivityType.BUY) { + assert mErcTokenRegistry != null; + String asset = assetDropDown.getText().toString(); + mErcTokenRegistry.getBuyUrl(from, asset, value, url -> { + TabUtils.openUrlInNewTab(false, url); + TabUtils.bringChromeTabbedActivityToTheTop(this); + }); } }); diff --git a/android/java/org/chromium/chrome/browser/util/TabUtils.java b/android/java/org/chromium/chrome/browser/util/TabUtils.java index 71d081bdafc..0a2ad211345 100644 --- a/android/java/org/chromium/chrome/browser/util/TabUtils.java +++ b/android/java/org/chromium/chrome/browser/util/TabUtils.java @@ -9,6 +9,7 @@ package org.chromium.chrome.browser.util; import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.view.ContextThemeWrapper; import android.view.MenuItem; import android.view.View; @@ -17,6 +18,7 @@ import android.widget.PopupMenu; import org.chromium.base.ApplicationStatus; 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.night_mode.GlobalNightModeStateProviderHolder; @@ -97,4 +99,10 @@ public class TabUtils { } rewardsLayout.setVisibility(View.VISIBLE); } + + public static void bringChromeTabbedActivityToTheTop(Activity activity) { + Intent braveActivityIntent = new Intent(activity, ChromeTabbedActivity.class); + braveActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + activity.startActivity(braveActivityIntent); + } } diff --git a/components/brave_wallet/browser/brave_wallet_constants.h b/components/brave_wallet/browser/brave_wallet_constants.h index 29bbc959eed..21254fa7db6 100644 --- a/components/brave_wallet/browser/brave_wallet_constants.h +++ b/components/brave_wallet/browser/brave_wallet_constants.h @@ -46,6 +46,10 @@ static base::NoDestructor> kBuyTokens( const char kWalletBaseDirectory[] = "BraveWallet"; const char kImageSourceHost[] = "erc-token-images"; +const char kWyreID[] = "AC_MGNVBGHPA9T"; +const char kBuyUrl[] = + "https://pay.sendwyre.com/?dest=ethereum:%s" + "&destCurrency=%s&amount=%s&accountId=%s&paymentMethod=debit-card"; } // namespace brave_wallet diff --git a/components/brave_wallet/browser/erc_token_registry.cc b/components/brave_wallet/browser/erc_token_registry.cc index 38719d4befc..bf9f3aa90cf 100644 --- a/components/brave_wallet/browser/erc_token_registry.cc +++ b/components/brave_wallet/browser/erc_token_registry.cc @@ -8,6 +8,7 @@ #include #include +#include "base/strings/stringprintf.h" #include "brave/components/brave_wallet/browser/brave_wallet_constants.h" namespace brave_wallet { @@ -87,4 +88,14 @@ void ERCTokenRegistry::GetBuyTokens(GetBuyTokensCallback callback) { std::move(callback).Run(std::move(erc_buy_tokens)); } +void ERCTokenRegistry::GetBuyUrl(const std::string& address, + const std::string& symbol, + const std::string& amount, + GetBuyUrlCallback callback) { + std::string url = base::StringPrintf(kBuyUrl, address.c_str(), symbol.c_str(), + amount.c_str(), kWyreID); + + std::move(callback).Run(url); +} + } // namespace brave_wallet diff --git a/components/brave_wallet/browser/erc_token_registry.h b/components/brave_wallet/browser/erc_token_registry.h index 0757b3bf0d1..0cb513a0d5f 100644 --- a/components/brave_wallet/browser/erc_token_registry.h +++ b/components/brave_wallet/browser/erc_token_registry.h @@ -38,6 +38,10 @@ class ERCTokenRegistry : public mojom::ERCTokenRegistry { GetTokenBySymbolCallback callback) override; void GetAllTokens(GetAllTokensCallback callback) override; void GetBuyTokens(GetBuyTokensCallback callback) override; + void GetBuyUrl(const std::string& address, + const std::string& symbol, + const std::string& amount, + GetBuyUrlCallback callback) override; protected: std::vector erc_tokens_; diff --git a/components/brave_wallet/common/brave_wallet.mojom b/components/brave_wallet/common/brave_wallet.mojom index 3b0e8a816eb..7be5a888f1c 100644 --- a/components/brave_wallet/common/brave_wallet.mojom +++ b/components/brave_wallet/common/brave_wallet.mojom @@ -200,6 +200,7 @@ interface ERCTokenRegistry { GetTokenBySymbol(string symbol) => (ERCToken? token); GetAllTokens() => (array tokens); GetBuyTokens() => (array tokens); + GetBuyUrl(string address, string symbol, string amount) => (string url); }; interface KeyringController {