diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java index 042c8ad48602..2b4db0b7facf 100644 --- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java +++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java @@ -215,6 +215,8 @@ public abstract class BraveActivity extends ChromeActivity BraveNewsConnectionErrorHandler.BraveNewsConnectionErrorHandlerDelegate, MiscAndroidMetricsConnectionErrorHandler .MiscAndroidMetricsConnectionErrorHandlerDelegate { + public static final String BRAVE_WALLET_HOST = "wallet"; + public static final String BRAVE_WALLET_URL = "brave://wallet/crypto/portfolio/assets"; public static final String BRAVE_BUY_URL = "brave://wallet/crypto/fund-wallet"; public static final String BRAVE_SEND_URL = "brave://wallet/send"; public static final String BRAVE_SWAP_URL = "brave://wallet/swap"; diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BraveWalletActivity.java b/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BraveWalletActivity.java index be3044ccb506..8918ef82108c 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BraveWalletActivity.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BraveWalletActivity.java @@ -5,10 +5,6 @@ package org.chromium.chrome.browser.crypto_wallet.activities; -import static org.chromium.chrome.browser.crypto_wallet.adapters.CryptoFragmentPageAdapter.ACCOUNTS_FRAGMENT_POSITION; -import static org.chromium.chrome.browser.crypto_wallet.adapters.CryptoFragmentPageAdapter.MARKET_FRAGMENT_POSITION; -import static org.chromium.chrome.browser.crypto_wallet.adapters.CryptoFragmentPageAdapter.PORTFOLIO_FRAGMENT_POSITION; -import static org.chromium.chrome.browser.crypto_wallet.adapters.CryptoFragmentPageAdapter.TRANSACTIONS_ACTIVITY_FRAGMENT_POSITION; import static org.chromium.chrome.browser.crypto_wallet.util.Utils.ONBOARDING_ACTION; import static org.chromium.chrome.browser.crypto_wallet.util.Utils.ONBOARDING_FIRST_PAGE_ACTION; import static org.chromium.chrome.browser.crypto_wallet.util.Utils.RESTORE_WALLET_ACTION; @@ -349,31 +345,7 @@ private void showMainLayout() { addRemoveSecureFlag(false); mCryptoOnboardingLayout.setVisibility(View.GONE); - mCryptoLayout.setVisibility(View.VISIBLE); - - mBottomNavigationView.setOnItemSelectedListener(menuItem -> { - final int menuItemId = menuItem.getItemId(); - if (menuItemId == R.id.action_wallet_portfolio) { - mViewPager.setCurrentItem(PORTFOLIO_FRAGMENT_POSITION, true); - } else if (menuItemId == R.id.action_wallet_activity) { - mViewPager.setCurrentItem(TRANSACTIONS_ACTIVITY_FRAGMENT_POSITION, true); - } else if (menuItemId == R.id.action_wallet_accounts) { - mViewPager.setCurrentItem(ACCOUNTS_FRAGMENT_POSITION, true); - } else if (menuItemId == R.id.action_wallet_explore) { - mViewPager.setCurrentItem(MARKET_FRAGMENT_POSITION, true); - } - return true; - }); - - if (mKeyringService != null) { - mKeyringService.isWalletBackedUp(backed_up -> { - if (!backed_up) { - showWalletBackupBanner(); - } else { - findViewById(R.id.wallet_backup_banner).setVisibility(View.GONE); - } - }); - } + WalletUtils.openWebWallet(); } private void addBackupWalletSequence( diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/controller/DAppsWalletController.java b/android/java/org/chromium/chrome/browser/crypto_wallet/controller/DAppsWalletController.java index 36b1ba54336a..6fc33825ed81 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/controller/DAppsWalletController.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/controller/DAppsWalletController.java @@ -5,11 +5,14 @@ package org.chromium.chrome.browser.crypto_wallet.controller; +import static org.chromium.chrome.browser.app.BraveActivity.BRAVE_WALLET_HOST; + import android.content.Context; import android.content.DialogInterface; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; @@ -32,15 +35,17 @@ import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.toolbar.bottom.BottomToolbarConfiguration; import org.chromium.chrome.browser.util.ConfigurationUtils; +import org.chromium.content_public.browser.WebContents; import org.chromium.mojo.bindings.ConnectionErrorHandler; import org.chromium.mojo.system.MojoException; +import org.chromium.url.GURL; public class DAppsWalletController implements ConnectionErrorHandler, BraveWalletPanel.BraveWalletPanelServices { private static final String TAG = DAppsWalletController.class.getSimpleName(); private FullscreenManager mFullscreenManager; - private Context mContext; - private View mAnchorViewHost; + private final Context mContext; + private final View mAnchorViewHost; private AssetRatioService mAssetRatioService; private KeyringService mKeyringService; private BraveWalletService mBraveWalletService; @@ -50,39 +55,71 @@ public class DAppsWalletController private BraveWalletPanel mBraveWalletPanel; private DialogInterface.OnDismissListener mOnDismissListener; private final AppCompatActivity mActivity; + @Nullable private final GURL mVisibleUrl; - private DialogInterface.OnDismissListener mDialogOrPanelDismissListener = dialog -> { - if (mOnDismissListener != null) { - mOnDismissListener.onDismiss(dialog); - } - cleanUp(); - }; + @NonNull private final DefaultLifecycleObserver mDefaultLifecycleObserver; + + @NonNull private final DialogInterface.OnDismissListener mDialogOrPanelDismissListener; public DAppsWalletController(Context mContext, View mAnchorViewHost) { this.mContext = mContext; this.mAnchorViewHost = mAnchorViewHost; this.mActivity = BraveActivity.getChromeTabbedActivity(); + WebContents webContents = null; + mDefaultLifecycleObserver = + new DefaultLifecycleObserver() { + @Override + public void onResume(@NonNull LifecycleOwner owner) { + if (mBraveWalletPanel != null) { + mBraveWalletPanel.resume(); + } + } + + @Override + public void onPause(@NonNull LifecycleOwner owner) { + if (mBraveWalletPanel != null) { + mBraveWalletPanel.pause(); + } + } + }; + mDialogOrPanelDismissListener = + dialog -> { + if (mOnDismissListener != null) { + mOnDismissListener.onDismiss(dialog); + } + DAppsWalletController.this.cleanUp(); + }; try { BraveActivity activity = BraveActivity.getBraveActivity(); + webContents = activity.getCurrentWebContents(); + ObservableSupplier managerSupplier = activity.getBrowserControlsManagerSupplier(); mFullscreenManager = managerSupplier.get().getFullscreenManager(); } catch (BraveActivity.BraveActivityNotFoundException | NullPointerException e) { Log.e(TAG, "Constructor", e); } + + if (webContents != null) { + mVisibleUrl = webContents.getVisibleUrl(); + } else { + mVisibleUrl = null; + } } - public DAppsWalletController(Context mContext, View mAnchorViewHost, + public DAppsWalletController( + Context context, + View anchorViewHost, DialogInterface.OnDismissListener onDismissListener) { - this(mContext, mAnchorViewHost); + this(context, anchorViewHost); this.mOnDismissListener = onDismissListener; } public void showWalletPanel() { - InitAssetRatioService(); - InitKeyringService(); - InitJsonRpcService(); - InitBraveWalletService(); + initAssetRatioService(); + initKeyringService(); + initJsonRpcService(); + initBraveWalletService(); if (Utils.shouldShowCryptoOnboarding()) { showOnBoardingOrUnlock(); } else { @@ -102,14 +139,17 @@ public void showWalletPanel() { } private void createAndShowWalletPanel() { + boolean showExpandButton = + mVisibleUrl != null && !mVisibleUrl.getHost().equals(BRAVE_WALLET_HOST); mBraveWalletPanel = - new BraveWalletPanel(mAnchorViewHost, mDialogOrPanelDismissListener, this); + new BraveWalletPanel( + mAnchorViewHost, mDialogOrPanelDismissListener, this, showExpandButton); mBraveWalletPanel.showLikePopDownMenu(); setupLifeCycleUpdater(); } private void setupLifeCycleUpdater() { - mActivity.getLifecycle().addObserver(defaultLifecycleObserver); + mActivity.getLifecycle().addObserver(mDefaultLifecycleObserver); } private void showOnBoardingOrUnlock() { @@ -165,10 +205,10 @@ public void onConnectionError(MojoException e) { mAssetRatioService.close(); mAssetRatioService = null; } - InitAssetRatioService(); - InitKeyringService(); - InitJsonRpcService(); - InitBraveWalletService(); + initAssetRatioService(); + initKeyringService(); + initJsonRpcService(); + initBraveWalletService(); updateState(); } @@ -198,28 +238,28 @@ private void updateState() { mHasStateInitialise = true; } - private void InitKeyringService() { + private void initKeyringService() { if (mKeyringService != null) { return; } mKeyringService = KeyringServiceFactory.getInstance().getKeyringService(this); } - private void InitJsonRpcService() { + private void initJsonRpcService() { if (mJsonRpcService != null) { return; } mJsonRpcService = JsonRpcServiceFactory.getInstance().getJsonRpcService(this); } - private void InitBraveWalletService() { + private void initBraveWalletService() { if (mBraveWalletService != null) { return; } mBraveWalletService = BraveWalletServiceFactory.getInstance().getBraveWalletService(this); } - private void InitAssetRatioService() { + private void initAssetRatioService() { if (mAssetRatioService != null) { return; } @@ -244,27 +284,10 @@ private void cleanUp() { mAssetRatioService = null; } if (mActivity != null) { - mActivity.getLifecycle().removeObserver(defaultLifecycleObserver); + mActivity.getLifecycle().removeObserver(mDefaultLifecycleObserver); } } - private final DefaultLifecycleObserver defaultLifecycleObserver = - new DefaultLifecycleObserver() { - @Override - public void onResume(@NonNull LifecycleOwner owner) { - if (mBraveWalletPanel != null) { - mBraveWalletPanel.resume(); - } - } - - @Override - public void onPause(@NonNull LifecycleOwner owner) { - if (mBraveWalletPanel != null) { - mBraveWalletPanel.pause(); - } - } - }; - private boolean shouldShowNotificationAtTop(Context context) { return ConfigurationUtils.isTablet(context) || !BottomToolbarConfiguration.isBottomToolbarEnabled(); diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/modal/BraveWalletPanel.java b/android/java/org/chromium/chrome/browser/crypto_wallet/modal/BraveWalletPanel.java index 18ac5e942565..5607e15be2a8 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/modal/BraveWalletPanel.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/modal/BraveWalletPanel.java @@ -100,6 +100,8 @@ public class BraveWalletPanel implements DialogInterface { private final Context mContext; private final Observer mAllAccountsInfoObserver; + private final boolean mShowExpandButton; + private final Observer mDefaultNetworkObserver; public interface BraveWalletPanelServices { @@ -109,9 +111,11 @@ public interface BraveWalletPanelServices { JsonRpcService getJsonRpcService(); } - public BraveWalletPanel(@NonNull final View anchorViewHost, + public BraveWalletPanel( + @NonNull final View anchorViewHost, @NonNull final OnDismissListener onDismissListener, - @NonNull final BraveWalletPanelServices braveWalletPanelServices) { + @NonNull final BraveWalletPanelServices braveWalletPanelServices, + final boolean showExpandButton) { try { mWalletModel = BraveActivity.getBraveActivity().getWalletModel(); // Update network model to use network per origin @@ -120,6 +124,7 @@ public BraveWalletPanel(@NonNull final View anchorViewHost, Log.e(TAG, "BraveWalletPanel Constructor", e); } + mShowExpandButton = showExpandButton; mAccountsWithPermissions = new HashSet<>(); mExecutor = Executors.newSingleThreadExecutor(); mHandler = new Handler(Looper.getMainLooper()); @@ -423,15 +428,19 @@ private void setUpViews() { mPopupWindow.setWidth((int) (isTablet ? (deviceWidth * 0.6) : (deviceWidth * 0.95))); mExpandWalletImage = mPopupView.findViewById(R.id.iv_dapp_panel_expand); - mExpandWalletImage.setOnClickListener(v -> { - dismiss(); - try { - BraveActivity activity = BraveActivity.getBraveActivity(); - activity.openBraveWallet(false, false, false); - } catch (BraveActivity.BraveActivityNotFoundException e) { - Log.e(TAG, "setUpViews ExpandWalletImage click " + e); - } - }); + if (mShowExpandButton) { + mExpandWalletImage.setVisibility(View.VISIBLE); + mExpandWalletImage.setOnClickListener( + v -> { + dismiss(); + try { + BraveActivity activity = BraveActivity.getBraveActivity(); + activity.openBraveWallet(false, false, false); + } catch (BraveActivity.BraveActivityNotFoundException e) { + Log.e(TAG, "ExpandWalletImage", e); + } + }); + } mOptionsImage = mPopupView.findViewById(R.id.iv_dapp_panel_menu); mOptionsImage.setOnClickListener(v -> { showPopupMenu(); }); diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletUtils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletUtils.java index 367678b5d4e4..bcfeb0b88f6a 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletUtils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletUtils.java @@ -11,6 +11,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.chromium.base.Log; import org.chromium.brave_wallet.mojom.AccountId; import org.chromium.brave_wallet.mojom.AccountInfo; import org.chromium.brave_wallet.mojom.BlockchainToken; @@ -19,6 +20,7 @@ import org.chromium.brave_wallet.mojom.SolanaTxData; import org.chromium.brave_wallet.mojom.TxDataUnion; import org.chromium.chrome.R; +import org.chromium.chrome.browser.app.BraveActivity; import org.chromium.chrome.browser.util.TabUtils; import org.chromium.mojo_base.mojom.TimeDelta; @@ -37,6 +39,7 @@ public class WalletUtils { private static final String ACCOUNT_INFO = "accountInfo"; private static final String BLOCKCHAIN_TOKEN = "blockchainToken"; private static final String NETWORK_INFO = "networkInfo"; + private static final String TAG = "WalletUtils"; private static String getNewAccountPrefixForCoin(@CoinType.EnumType int coinType) { switch (coinType) { @@ -154,6 +157,16 @@ public static NetworkInfo getNetworkInfoFromIntent(@NonNull final Intent intent) return NetworkInfo.deserialize(ByteBuffer.wrap(bytes)); } + public static void openWebWallet() { + try { + BraveActivity activity = BraveActivity.getBraveActivity(); + activity.openNewOrSelectExistingTab(BraveActivity.BRAVE_WALLET_URL, true); + TabUtils.bringChromeTabbedActivityToTheTop(activity); + } catch (BraveActivity.BraveActivityNotFoundException e) { + Log.e(TAG, "Error while opening wallet tab.", e); + } + } + public static void openWalletHelpCenter(Context context) { if (context == null) return; TabUtils.openUrlInCustomTab(context, WalletConstants.WALLET_HELP_CENTER); diff --git a/android/java/res/layout/brave_wallet_panel_layout.xml b/android/java/res/layout/brave_wallet_panel_layout.xml index 00212dfe959e..9d24b969a789 100644 --- a/android/java/res/layout/brave_wallet_panel_layout.xml +++ b/android/java/res/layout/brave_wallet_panel_layout.xml @@ -40,6 +40,7 @@ android:contentDescription="@string/accessibility_wallet_dapp_panel_expand" android:foreground="?android:attr/selectableItemBackground" android:paddingVertical="10dp" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/browser/ui/BUILD.gn b/browser/ui/BUILD.gn index 7b78c93750ae..b6cc38091d39 100644 --- a/browser/ui/BUILD.gn +++ b/browser/ui/BUILD.gn @@ -45,6 +45,12 @@ source_set("ui") { "webui/brave_rewards_page_ui.h", "webui/brave_rewards_source.cc", "webui/brave_rewards_source.h", + "webui/brave_wallet/line_chart/line_chart_ui.cc", + "webui/brave_wallet/line_chart/line_chart_ui.h", + "webui/brave_wallet/market/market_ui.cc", + "webui/brave_wallet/market/market_ui.h", + "webui/brave_wallet/nft/nft_ui.cc", + "webui/brave_wallet/nft/nft_ui.h", "webui/brave_web_ui_controller_factory.cc", "webui/brave_web_ui_controller_factory.h", "webui/brave_webui_source.cc", @@ -534,6 +540,10 @@ source_set("ui") { "//brave/components/brave_wallet/browser:constants", "//brave/components/brave_wallet/browser:pref_names", "//brave/components/brave_wallet/browser:utils", + "//brave/components/brave_wallet_ui/line_chart:line_chart_display_generated", + "//brave/components/brave_wallet_ui/market:market_display_generated", + "//brave/components/brave_wallet_ui/nft:nft_display_generated", + "//brave/components/brave_wallet_ui/page:brave_wallet_page_generated", "//brave/components/brave_wayback_machine/buildflags", "//brave/components/constants", "//brave/components/cosmetic_filters/resources/data:generated_resources", @@ -988,12 +998,6 @@ source_set("ui") { "webui/brave_news_internals/brave_news_internals_ui.h", "webui/brave_wallet/ledger/ledger_ui.cc", "webui/brave_wallet/ledger/ledger_ui.h", - "webui/brave_wallet/line_chart/line_chart_ui.cc", - "webui/brave_wallet/line_chart/line_chart_ui.h", - "webui/brave_wallet/market/market_ui.cc", - "webui/brave_wallet/market/market_ui.h", - "webui/brave_wallet/nft/nft_ui.cc", - "webui/brave_wallet/nft/nft_ui.h", "webui/brave_wallet/page_handler/wallet_page_handler.cc", "webui/brave_wallet/page_handler/wallet_page_handler.h", "webui/brave_wallet/trezor/trezor_ui.cc", @@ -1017,10 +1021,6 @@ source_set("ui") { "//brave/components/brave_wallet/common:mojom", "//brave/components/brave_wallet_ui:resources", "//brave/components/brave_wallet_ui/ledger:ledger_bridge_generated", - "//brave/components/brave_wallet_ui/line_chart:line_chart_display_generated", - "//brave/components/brave_wallet_ui/market:market_display_generated", - "//brave/components/brave_wallet_ui/nft:nft_display_generated", - "//brave/components/brave_wallet_ui/page:brave_wallet_page_generated", "//brave/components/brave_wallet_ui/panel:brave_wallet_panel_generated", "//brave/components/brave_wallet_ui/trezor:trezor_bridge_generated", "//brave/components/commands/browser", diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index 41ba936da342..0fc82529f0c6 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -4084,7 +4084,7 @@ If you don't accept this request, VPN will not reconnect and your internet conne Confirm - + ... diff --git a/browser/ui/webui/brave_wallet/android/android_wallet_page_ui.cc b/browser/ui/webui/brave_wallet/android/android_wallet_page_ui.cc index dd390b95f723..b476d7c3e2a7 100644 --- a/browser/ui/webui/brave_wallet/android/android_wallet_page_ui.cc +++ b/browser/ui/webui/brave_wallet/android/android_wallet_page_ui.cc @@ -9,6 +9,7 @@ #include "brave/components/brave_wallet_page/resources/grit/brave_wallet_deposit_page_generated_map.h" #include "brave/components/brave_wallet_page/resources/grit/brave_wallet_fund_wallet_page_generated_map.h" +#include "brave/components/brave_wallet_page/resources/grit/brave_wallet_page_generated_map.h" #include "brave/components/brave_wallet_page/resources/grit/brave_wallet_send_page_generated_map.h" #include "brave/components/brave_wallet_page/resources/grit/brave_wallet_swap_page_generated_map.h" #include "brave/components/l10n/common/localization_util.h" @@ -60,36 +61,16 @@ AndroidWalletPageUI::AndroidWalletPageUI(content::WebUI* web_ui, } // Add required resources. - if (url.path() == kWalletSwapPagePath) { - webui::SetupWebUIDataSource( - source, - base::make_span(kBraveWalletSwapPageGenerated, - kBraveWalletSwapPageGeneratedSize), - IDR_BRAVE_WALLET_SWAP_PAGE_HTML); - } else if (url.path() == kWalletSendPagePath) { - webui::SetupWebUIDataSource( - source, - base::make_span(kBraveWalletSendPageGenerated, - kBraveWalletSendPageGeneratedSize), - IDR_BRAVE_WALLET_SEND_PAGE_HTML); - - } else if (url.path() == kWalletBuyPagePath) { - webui::SetupWebUIDataSource( - source, - base::make_span(kBraveWalletFundWalletPageGenerated, - kBraveWalletFundWalletPageGeneratedSize), - IDR_BRAVE_WALLET_FUND_WALLET_PAGE_HTML); - - } else if (url.path() == kWalletDepositPagePath) { - webui::SetupWebUIDataSource( - source, - base::make_span(kBraveWalletDepositPageGenerated, - kBraveWalletDepositPageGeneratedSize), - IDR_BRAVE_WALLET_DEPOSIT_PAGE_HTML); + if (url.host() == kWalletPageHost) { + webui::SetupWebUIDataSource(source, + base::make_span(kBraveWalletPageGenerated, + kBraveWalletPageGeneratedSize), + IDR_WALLET_PAGE_HTML); } else { NOTREACHED() << "Failed to find page resources for:" << url.path(); } + source->AddBoolean("isAndroid", true); source->AddString("braveWalletLedgerBridgeUrl", kUntrustedLedgerURL); source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::FrameSrc, diff --git a/browser/ui/webui/brave_wallet/wallet_page_ui.cc b/browser/ui/webui/brave_wallet/wallet_page_ui.cc index 18a3b2dfaa37..4776e95ac097 100644 --- a/browser/ui/webui/brave_wallet/wallet_page_ui.cc +++ b/browser/ui/webui/brave_wallet/wallet_page_ui.cc @@ -79,6 +79,7 @@ WalletPageUI::WalletPageUI(content::WebUI* web_ui) source->AddString("braveWalletNftBridgeUrl", kUntrustedNftURL); source->AddString("braveWalletLineChartBridgeUrl", kUntrustedLineChartURL); source->AddString("braveWalletMarketUiBridgeUrl", kUntrustedMarketURL); + source->AddString("isAndroid", false); source->AddBoolean(brave_wallet::mojom::kP3ACountTestNetworksLoadTimeKey, base::CommandLine::ForCurrentProcess()->HasSwitch( brave_wallet::mojom::kP3ACountTestNetworksSwitch)); diff --git a/browser/ui/webui/brave_web_ui_controller_factory.cc b/browser/ui/webui/brave_web_ui_controller_factory.cc index 480b51b02164..74d0ab0fc0f5 100644 --- a/browser/ui/webui/brave_web_ui_controller_factory.cc +++ b/browser/ui/webui/brave_web_ui_controller_factory.cc @@ -6,6 +6,7 @@ #include "brave/browser/ui/webui/brave_web_ui_controller_factory.h" #include +#include #include "base/feature_list.h" #include "base/memory/ptr_util.h" @@ -116,7 +117,7 @@ WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { #if !BUILDFLAG(IS_ANDROID) } else if (host == kWebcompatReporterHost) { return new webcompat_reporter::WebcompatReporterUI(web_ui, url.host()); -#endif +#endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(ENABLE_IPFS_INTERNALS_WEBUI) } else if (host == kIPFSWebUIHost && ipfs::IpfsServiceFactory::IsIpfsEnabled(profile)) { @@ -139,7 +140,7 @@ WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { } else if (host == kWalletPanelHost && brave_wallet::IsAllowedForContext(profile)) { return new WalletPanelUI(web_ui); -#endif // BUILDFLAG(OS_ANDROID) +#endif // !BUILDFLAG(OS_ANDROID) } else if (host == kRewardsPageHost && // We don't want to check for supported profile type here because // we want private windows to redirect to the regular profile. @@ -165,8 +166,6 @@ WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { brave_news::features::kBraveNewsFeedUpdate) && host == kBraveNewsInternalsHost) { return new BraveNewsInternalsUI(web_ui, url.host()); -#endif // !BUILDFLAG(IS_ANDROID) -#if !BUILDFLAG(IS_ANDROID) } else if (host == kWelcomeHost && !profile->IsGuestSession()) { return new BraveWelcomeUI(web_ui, url.host()); } else if (host == chrome::kChromeUISettingsHost) { @@ -198,7 +197,7 @@ WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { #if BUILDFLAG(ENABLE_BRAVE_PLAYER) } else if (host == brave_player::kBravePlayerHost) { return new BravePlayerUI(web_ui); -#endif +#endif // BUILDFLAG(IS_ANDROID) } return nullptr; @@ -230,11 +229,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, ipfs::IpfsServiceFactory::IsIpfsEnabled(profile)) || #endif // BUILDFLAG(ENABLE_IPFS_INTERNALS_WEBUI) #if BUILDFLAG(IS_ANDROID) - (url.is_valid() && url.host_piece() == kWalletPageHost && - (url.path() == kWalletSwapPagePath || - url.path() == kWalletSendPagePath || - url.path().starts_with(kWalletBuyPagePath) || - url.path().starts_with(kWalletDepositPagePath))) || + (url.is_valid() && url.host_piece() == kWalletPageHost) || #else (base::FeatureList::IsEnabled( brave_news::features::kBraveNewsFeedUpdate) && @@ -313,7 +308,11 @@ bool ShouldBlockWalletWebUI(content::BrowserContext* browser_context, } auto* keyring_service = brave_wallet::KeyringServiceFactory::GetServiceForContext(profile); - return keyring_service && keyring_service->IsLockedSync(); + // Support to unlock Wallet has been extended also through WebUI, + // so we block only when Wallet hasn't been created yet, as onboarding + // is offered only via native Andrioid UI. + return !keyring_service || + (keyring_service && !keyring_service->IsWalletCreatedSync()); } #endif // BUILDFLAG(IS_ANDROID) } // namespace diff --git a/chromium_src/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.cc b/chromium_src/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.cc index fd6c8d55a52d..3168a766a4c4 100644 --- a/chromium_src/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.cc +++ b/chromium_src/chrome/browser/ui/webui/chrome_untrusted_web_ui_configs.cc @@ -49,17 +49,17 @@ void RegisterChromeUntrustedWebUIConfigs() { RegisterChromeUntrustedWebUIConfigs_ChromiumImpl(); -#if !BUILDFLAG(IS_ANDROID) - content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( - std::make_unique()); content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( std::make_unique()); - content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( - std::make_unique()); content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( std::make_unique()); content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( std::make_unique()); +#if !BUILDFLAG(IS_ANDROID) + content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( + std::make_unique()); + content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( + std::make_unique()); #if BUILDFLAG(ENABLE_BRAVE_VPN) if (brave_vpn::IsBraveVPNFeatureEnabled()) { content::WebUIConfigMap::GetInstance().AddUntrustedWebUIConfig( diff --git a/components/brave_wallet/browser/android_page_appearing_browsertest.cc b/components/brave_wallet/browser/android_page_appearing_browsertest.cc index 178def1b6c47..bf6c9ccf66e6 100644 --- a/components/brave_wallet/browser/android_page_appearing_browsertest.cc +++ b/components/brave_wallet/browser/android_page_appearing_browsertest.cc @@ -354,6 +354,16 @@ class AndroidPageAppearingBrowserTest : public PlatformBrowserTest { network::TestURLLoaderFactory url_loader_factory_; }; +IN_PROC_BROWSER_TEST_F(AndroidPageAppearingBrowserTest, + TestPortfolioPageAppearing) { + GURL url = GURL("chrome://wallet/crypto/portfolio/assets"); + const std::vector ignore_patterns = { + "TypeError: Cannot read properties of undefined (reading " + "'onCompleteReset')", + "Error calling jsonRpcService.getERC20TokenBalances"}; + VerifyPage(url, ignore_patterns); +} + IN_PROC_BROWSER_TEST_F(AndroidPageAppearingBrowserTest, TestSwapPageAppearing) { GURL url = GURL("chrome://wallet/swap"); const std::vector ignore_patterns = { diff --git a/components/brave_wallet_ui/BUILD.gn b/components/brave_wallet_ui/BUILD.gn index 7de84c4794e3..a314fb8f4dee 100644 --- a/components/brave_wallet_ui/BUILD.gn +++ b/components/brave_wallet_ui/BUILD.gn @@ -9,38 +9,43 @@ import("//mojo/public/tools/bindings/mojom.gni") import("//tools/grit/repack.gni") repack("resources") { + deps = [ + "//brave/components/brave_wallet_ui/line_chart:line_chart_display_generated", + "//brave/components/brave_wallet_ui/market:market_display_generated", + "//brave/components/brave_wallet_ui/nft:nft_display_generated", + "//brave/components/brave_wallet_ui/page:brave_wallet_page_generated", + ] + + sources = [ + "$root_gen_dir/brave/components/brave_wallet_page/resources/brave_wallet_page_generated.pak", + "$root_gen_dir/brave/components/line_chart_display/resources/line_chart_display_generated.pak", + "$root_gen_dir/brave/components/market_display/resources/market_display_generated.pak", + "$root_gen_dir/brave/components/nft_display/resources/nft_display_generated.pak", + ] if (is_android) { - deps = [ + deps += [ "//brave/components/brave_wallet_ui/page/screens/android-buy/android:brave_wallet_fund_wallet_page_generated", "//brave/components/brave_wallet_ui/page/screens/fund-wallet/android:brave_wallet_deposit_page_generated", "//brave/components/brave_wallet_ui/page/screens/send/android:brave_wallet_send_page_generated", "//brave/components/brave_wallet_ui/page/screens/swap/android:brave_wallet_swap_page_generated", ] - sources = [ + sources += [ "$root_gen_dir/brave/components/brave_wallet_page/resources/brave_wallet_deposit_page_generated.pak", "$root_gen_dir/brave/components/brave_wallet_page/resources/brave_wallet_fund_wallet_page_generated.pak", "$root_gen_dir/brave/components/brave_wallet_page/resources/brave_wallet_send_page_generated.pak", "$root_gen_dir/brave/components/brave_wallet_page/resources/brave_wallet_swap_page_generated.pak", ] } else { - deps = [ + deps += [ "//brave/components/brave_wallet_ui/ledger:ledger_bridge_generated", - "//brave/components/brave_wallet_ui/line_chart:line_chart_display_generated", - "//brave/components/brave_wallet_ui/market:market_display_generated", - "//brave/components/brave_wallet_ui/nft:nft_display_generated", - "//brave/components/brave_wallet_ui/page:brave_wallet_page_generated", "//brave/components/brave_wallet_ui/panel:brave_wallet_panel_generated", "//brave/components/brave_wallet_ui/trezor:trezor_bridge_generated", ] - sources = [ - "$root_gen_dir/brave/components/brave_wallet_page/resources/brave_wallet_page_generated.pak", + sources += [ "$root_gen_dir/brave/components/brave_wallet_panel/resources/brave_wallet_panel_generated.pak", "$root_gen_dir/brave/components/ledger_bridge/resources/ledger_bridge_generated.pak", - "$root_gen_dir/brave/components/line_chart_display/resources/line_chart_display_generated.pak", - "$root_gen_dir/brave/components/market_display/resources/market_display_generated.pak", - "$root_gen_dir/brave/components/nft_display/resources/nft_display_generated.pak", "$root_gen_dir/brave/components/trezor_bridge/resources/trezor_bridge_generated.pak", ] } diff --git a/components/brave_wallet_ui/components/desktop/lock-screen/index.tsx b/components/brave_wallet_ui/components/desktop/lock-screen/index.tsx index c3a9a8c2e39d..fb934f51608f 100644 --- a/components/brave_wallet_ui/components/desktop/lock-screen/index.tsx +++ b/components/brave_wallet_ui/components/desktop/lock-screen/index.tsx @@ -16,6 +16,7 @@ import { import { WalletRoutes } from '../../../constants/types' // Utils +import { loadTimeData } from '../../../../common/loadTimeData' import { getLocale } from '../../../../common/locale' import { openWalletRouteTab } from '../../../utils/routes-utils' import { UISelectors, WalletSelectors } from '../../../common/selectors' @@ -96,6 +97,8 @@ export const LockScreen = () => { } }, [isPanel]) + const isAndroid = loadTimeData.getBoolean('isAndroid') || false + // render return ( @@ -135,12 +138,14 @@ export const LockScreen = () => { > {getLocale('braveWalletLockScreenButton')} + {!isAndroid && ( + )} ) diff --git a/components/brave_wallet_ui/components/desktop/wallet-menus/accounts-menu.tsx b/components/brave_wallet_ui/components/desktop/wallet-menus/accounts-menu.tsx index 399d16ebd959..1f0bca190771 100644 --- a/components/brave_wallet_ui/components/desktop/wallet-menus/accounts-menu.tsx +++ b/components/brave_wallet_ui/components/desktop/wallet-menus/accounts-menu.tsx @@ -5,6 +5,7 @@ import * as React from 'react' import { useHistory } from 'react-router' +import { loadTimeData } from '../../../../common/loadTimeData' // Options import { CreateAccountOptions } from '../../../options/nav-options' @@ -24,9 +25,13 @@ export const AccountsMenu = () => { // routing const history = useHistory() + const isAndroid = loadTimeData.getBoolean('isAndroid') || false return ( - {CreateAccountOptions.map((option) => ( + {CreateAccountOptions.filter(option => ( + // Filter out hardware wallet item on Android. + !isAndroid || option.name !== 'braveWalletConnectHardwareWallet' + )).map((option) => ( history.push(option.route)} diff --git a/components/brave_wallet_ui/components/desktop/wallet-page-wrapper/wallet-page-wrapper.tsx b/components/brave_wallet_ui/components/desktop/wallet-page-wrapper/wallet-page-wrapper.tsx index 3e985e0ca1f9..4608cdcad18e 100644 --- a/components/brave_wallet_ui/components/desktop/wallet-page-wrapper/wallet-page-wrapper.tsx +++ b/components/brave_wallet_ui/components/desktop/wallet-page-wrapper/wallet-page-wrapper.tsx @@ -41,6 +41,8 @@ import { CardHeaderContentWrapper } from './wallet-page-wrapper.style' +import { loadTimeData } from '../../../../common/loadTimeData' + export interface Props { wrapContentInBox?: boolean cardWidth?: number @@ -76,6 +78,8 @@ export const WalletPageWrapper = (props: Props) => { useDarkBackground } = props + const isAndroid = loadTimeData.getBoolean('isAndroid') || false + // Wallet Selectors (safe) const isWalletCreated = useSafeWalletSelector(WalletSelectors.isWalletCreated) const isWalletLocked = useSafeWalletSelector(WalletSelectors.isWalletLocked) @@ -152,7 +156,7 @@ export const WalletPageWrapper = (props: Props) => { noPadding={noPadding} isPanel={isPanel} > - {isWalletCreated && !hideHeader && !isPanel && ( + {isWalletCreated && !hideHeader && !isPanel && !isAndroid && ( )} {isWalletCreated && !isWalletLocked && !hideNav && } diff --git a/components/brave_wallet_ui/constants/types.ts b/components/brave_wallet_ui/constants/types.ts index 1a309f020c27..4e2aea29a48c 100644 --- a/components/brave_wallet_ui/constants/types.ts +++ b/components/brave_wallet_ui/constants/types.ts @@ -651,7 +651,7 @@ export enum WalletRoutes { BackupRecoveryPhrase = '/crypto/backup-wallet/backup-recovery-phrase', BackupVerifyRecoveryPhrase = '/crypto/backup-wallet/verify-recovery-phrase', - // wallet mangement + // wallet management Restore = '/crypto/restore-wallet', Unlock = '/crypto/unlock', diff --git a/components/brave_wallet_ui/page/wallet_page.tsx b/components/brave_wallet_ui/page/wallet_page.tsx index a3588aec9ec2..6fa67992619a 100644 --- a/components/brave_wallet_ui/page/wallet_page.tsx +++ b/components/brave_wallet_ui/page/wallet_page.tsx @@ -37,12 +37,7 @@ import 'emptykit.css' import { setIconBasePath } from '@brave/leo/react/icon' setIconBasePath('chrome://resources/brave-icons') -function App() { - const [initialThemeType, setInitialThemeType] = - React.useState() - React.useEffect(() => { - chrome.braveTheme.getBraveThemeType(setInitialThemeType) - }, []) +function App () { React.useEffect(() => { /** Sets FAVICON for Wallet Pages */ @@ -62,19 +57,16 @@ function App() { return ( - {initialThemeType && ( - - - - - - - - )} + + + + + + + ) diff --git a/components/constants/webui_url_constants.h b/components/constants/webui_url_constants.h index 1ce59c121364..824face8979d 100644 --- a/components/constants/webui_url_constants.h +++ b/components/constants/webui_url_constants.h @@ -45,12 +45,6 @@ inline constexpr char kVPNPanelURL[] = inline constexpr char kVPNPanelHost[] = "vpn-panel.top-chrome"; inline constexpr char kBraveUIWalletPageURL[] = "chrome://wallet/"; inline constexpr char kWalletPageHost[] = "wallet"; -#if BUILDFLAG(IS_ANDROID) -inline constexpr char kWalletBuyPagePath[] = "/crypto/fund-wallet"; -inline constexpr char kWalletSendPagePath[] = "/send"; -inline constexpr char kWalletSwapPagePath[] = "/swap"; -inline constexpr char kWalletDepositPagePath[] = "/crypto/deposit-funds"; -#endif // BUILDFLAG(IS_ANDROID) inline constexpr char kExtensionSettingsURL[] = "brave://settings/extensions"; inline constexpr char kWalletSettingsURL[] = "brave://settings/wallet"; inline constexpr char kBraveSyncPath[] = "braveSync"; diff --git a/components/resources/brave_components_resources.grd b/components/resources/brave_components_resources.grd index 9e70d4204c3d..c51e26a95d9c 100644 --- a/components/resources/brave_components_resources.grd +++ b/components/resources/brave_components_resources.grd @@ -45,13 +45,13 @@ + + + + - - - -