Commit Graph
5181 Commits
Author SHA1 Message Date
Artem Samoilenko 29e4ec889c [cr147][Android] Cleanup for moveTabs* APIs
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/b3f1b6b71c7b8c6587f4788d009574d7e47f9409

commit b3f1b6b71c7b8c6587f4788d009574d7e47f9409
Author: Aishwarya Rajesh <aishwaryarj@google.com>
Date:   Fri Feb 13 15:04:51 2026 -0800

    [MIR] Cleanup moveTabs* APIs

    See updated bug description for rationale on updates in this CL.

    At the end of this CL, we will have 3 APIs to move tabs to a window:

    1. moveTabsToNewWindow(): Moves tabs to a brand new window. This will
    show a message at instance limit.
    2. moveTabsToWindowByIdChecked(): Moves tabs to an active instance or
    creates a new activity for an inactive instance or an active instance
    that has its activity destroyed. This API will fail if the id provided
    does not have persisted state.
    3. moveTabsToOtherWindow(): Gives the user a chance to select a window
    from the TargetSelectorDialog to move the tabs to. This implicitly
    invokes #2 for a window selected from the dialog and #1 if we have
    exactly one eligible window running currently.

    Bug: 476106567
    Change-Id: I701f46a1090220d4f9db705cb4df803b30ac284a
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7564470
    Commit-Queue: Aishwarya Rajesh <aishwaryarj@google.com>
    Reviewed-by: Sirisha Kavuluru <skavuluru@google.com>
    Cr-Commit-Position: refs/heads/main@{#1584943}
2026-03-26 19:25:04 -04:00
Artem Samoilenko 478933a38a [cr147][Android] Changes for MonotonicObservableSupplier observers
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/416a61c418c152a7a7ae568d89302e5ecb6e4a3d

commit 416a61c418c152a7a7ae568d89302e5ecb6e4a3d
Author: Andrew Grieve <agrieve@chromium.org>
Date:   Tue Dec 2 14:13:59 2025 -0800

    Android: Split ObservableSupplier into Nullable / Monotonic / NonNull variants

    The goal is to use proper @Nullable annotations with
    ObservableSuppliers.

    To achieve this, we use interfaces that define nullness:
     * (Settable)NullableObservableSupplier
     * (Settable)ObservableSupplier <-- monotonic
     * (Settable)NonNullObservableSupplier

    And we have ObservableSupplierImpl implement all of them.

    In order to make this migration manageable, I've marked the interfaces
    as @NullUnmarked, and will fix annotations in batches until they
    can be marked @NullMarked.

    This CL includes a batch in order to test out the new interfaces (and
    because many were necessary to make the change).

    Monotonic suppliers are by far the most common afaict, so that's why
    the non-prefixed ObservableSupplier is the monotonic one (that, and
    because "Monotonic" is a mouthful).

    One implication of this approach is that we'll never have:
       ObservableSupplier<@Nullable Foo>
    We'd have instead:
       NullableObservableSupplier<Foo>

    Having the nullness in the interface rather than in the generic
    allows for defining toNonNull() only on monotonic suppliers, and
    simplifies the implementation.

    Bug: 455874046
    Change-Id: Id48e235b9ff16a5b21a9c1199863150d17c22736
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7206746
    Commit-Queue: Andrew Grieve <agrieve@chromium.org>
    Reviewed-by: Calder Kitagawa <ckitagawa@chromium.org>
    Owners-Override: Andrew Grieve <agrieve@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1553094}
2026-03-26 19:25:03 -04:00
Artem Samoilenko bcbe9747c4 [cr147][Android] Changes for removed LocationBarMediator.setSearchQuery
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/69d1e350a6a14cbdbf5c4ad071ba5bb149a1a45f

commit 69d1e350a6a14cbdbf5c4ad071ba5bb149a1a45f
Author: Charles Cai <charlesyc@google.com>
Date:   Fri Feb 13 08:34:05 2026 -0800

    Consolidate VoiceRecognitionHandler's Delegate interface into OmniboxStub.

    Bug: 477922724
    Change-Id: I4af3e9f7a5d22b3ef16117193299d542564e197a
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7564529
    Reviewed-by: Sky Malice <skym@chromium.org>
    Reviewed-by: Tomasz Wiszkowski <ender@google.com>
    Commit-Queue: Charles Cai <charlesyc@google.com>
    Auto-Submit: Charles Cai <charlesyc@google.com>
    Cr-Commit-Position: refs/heads/main@{#1584696}
2026-03-26 19:25:03 -04:00
Artem Samoilenko 3efa4c2c72 [cr147][Android] Changes for ModuleRegistry refactor
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/79c909bca53dfd97ed264b823b1ced45e7956d54

commit 79c909bca53dfd97ed264b823b1ced45e7956d54
Author: Xi Han <hanxi@google.com>
Date:   Fri Feb 13 08:46:30 2026 -0800

    [MagicStack] Refactor ModuleRegistry to fix ChromeTabbedActivity leak.

    The leak was due to never unregister entries in
    mModuleConfigCheckerMap which is owned by singleton
    HomeModulesConfigManager when the CTA is destroyed. In this CL, we
    remove this map from HomeModulesConfigManager, and all checks go
    through ModuleRegistry which is one per CTA and is destroyed when CTA
    is destroyed.
    1) Remove ModuleConfigChecker interface, and move the isEligible() to
       ModuleProviderBuilder interface;
    2) Reuse the existing |mModuleBuildersMap| in ModuleRegistry for
       modules' eligibility checks.
    3) Only one behavior change is: the "new tab page cards" is empty if the
       bottom sheet is opened from the Ntp's customization toolbar button.
       We have deprecated this button and the list works as before if the
       bottom sheet is opened from all other entry points, i.e., from menu
       and magic stack cards.

    Bug: 462709210
    Change-Id: I2cd442a82cf8515246635ecb79cfa102fbebb366
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7574493
    Commit-Queue: Xi Han <hanxi@chromium.org>
    Reviewed-by: Calder Kitagawa <ckitagawa@chromium.org>
    Reviewed-by: Xinyi Ji <xinyiji@chromium.org>
    Reviewed-by: Theresa Sullivan <twellington@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1584704}
2026-03-26 19:25:02 -04:00
Artem Samoilenko 2f7aa3e5b8 [cr147][Android] Changes for local search being visible
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/afb98db40a7b9cdadc42e55aa469a186e0dd92dc

commit afb98db40a7b9cdadc42e55aa469a186e0dd92dc
Author: Jinsuk Kim <jinsukkim@chromium.org>
Date:   Wed Feb 11 13:29:26 2026 -0800

    [SettingsSearch] Fix local search being visible

    Fixes a bug of making the local search visible  together with settings
    search by accident. A regression caused the search coordinator passed
    to FragmentDependencyProvider before being initialized. Replaced
    the coordinator with its supplier to address it.

    Bug: 483010813
    Change-Id: Ie9cfe9d03e56a3480b5a978290ca5222122eafd1
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7568002
    Reviewed-by: Moe Adel <adelm@google.com>
    Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1583490}
2026-03-26 19:24:57 -04:00
Artem Samoilenko efb447cd02 [cr147][Android] Changes for tab and group reparenting initiated from MultiInstanceManagerApi31
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/3c9e581ce27c3a692be86c19edd659a721eb78bd

commit 3c9e581ce27c3a692be86c19edd659a721eb78bd
Author: Aishwarya Rajesh <aishwaryarj@google.com>
Date:   Mon Feb 9 18:28:07 2026 -0800

    [MIR] Create TabReparentingDelegate to hold implementation for tab and
    group reparenting initiated from MultiInstanceManagerApi31

    This is largely a non-functional refactor that involves moving existing
    reparenting logic from MultiInstanceManagerApi31 to the new
    TabReparentingDelegate for better division of responsibility.

    The CL introduces a behavioral change where previously we would trigger
    openWindow() to show the max-instance toast while attempting to move
    tabs to a new window at instance limit, whereas we now show the instance
    creation limit message which provides a link to the window manager and
    hence offering an improved user experience.

    The CL also cleans up low value tests and updates some test fixtures in
    MultiInstanceManagerApi31UnitTest and adds increased coverage for the
    existing reparenting logic in TabReparentingDelegateUnitTest.

    Bug: 479933537
    Change-Id: I3e9b501c215a3add20cdb1c156c2b872e1c38a3d
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7551974
    Reviewed-by: Sirisha Kavuluru <skavuluru@google.com>
    Commit-Queue: Aishwarya Rajesh <aishwaryarj@google.com>
    Cr-Commit-Position: refs/heads/main@{#1582211}
2026-03-26 19:24:57 -04:00
Artem Samoilenko c23efc4218 [cr147][Android] Changes for NTP Avatar
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/4f22c9c8d3976fc7ccae881d2645dfb480fd46dc

commit 4f22c9c8d3976fc7ccae881d2645dfb480fd46dc
Author: Anton Goncharenko <agonch@google.com>
Date:   Wed Feb 11 06:12:57 2026 -0800

    [Signin][Android] Migrate NTP Avatar to the activity-less sign-in flow.

    This is part of the effort to reduce reliance on
    SigninAndHistorySyncActivity by sign-in entry points.

    BottomSheetSigninAndHistorySyncCoordinator is instantiated in
    IdentityDiscController#setProfile, if it's a regular profile (not
    off-the-record). It gets destroyed if switched to incognito profile. In
    incognito the profile avatar button should be disabled, but as extra
    reassurance the sign-in flow crashes with an incognito profile.

    IdentityDiscController#onClick triggers the new flow via the coordinator
    when available, falling back to the legacy activity-based flow
    otherwise.

    Bug: 478812680
    Change-Id: I1643d7d12794b7c90bafd419191926cceae2f561
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7531719
    Reviewed-by: Boris Sazonov <bsazonov@chromium.org>
    Commit-Queue: Anton Goncharenko <agonch@google.com>
    Reviewed-by: Menghan Yang <myuu@google.com>
    Cr-Commit-Position: refs/heads/main@{#1583182}
2026-03-26 19:24:57 -04:00
Serg e8dd714c3f [Android] Fix autofill toggle greyed out when Google is the system autofill service (#35018)
* [Android] Fix autofill toggle greyed out when Google is the system autofill service

When Google's Autofill with Google (AWG) is set as the preferred autofill
service in Android OS settings, Chromium disables the third-party autofill
toggle in Settings because Chrome has its own built-in Google-synced
autofill. Since Brave does not have built-in Google autofill, AWG should
be treated like any other third-party provider (e.g. 1Password, Bitwarden).

This fix has two parts:

Java side: Override AutofillClientProviderUtils.getAndroidAutofillFramework-
Availability() via bytecode changeMethodOwner to remap the
ANDROID_AUTOFILL_SERVICE_IS_GOOGLE status to AVAILABLE or SETTING_TURNED_OFF
based on the user's existing pref. This makes the toggle interactive in the
Settings UI.

Native side: The C++ code calls the Java method via JNI, bypassing the
bytecode redirect. To handle this, BraveAutofillClientProviderUtils is
annotated with @CalledByNative to generate its own JNI header. A chromium_src
override of autofill_client_provider.cc uses #define to redirect the original
JNI function to the Brave version, ensuring the native code also uses the
remapped availability status and doesn't reset the pref on browser startup.

Resolves: https://github.com/brave/brave-browser/issues/52960
2026-03-26 22:45:23 +01:00
Simone Arpe 2ef6adddc8 Remove old Wallet code (#34988)
- Removes `AssetsPricesHelper` class by inlining `fetchPrices` at its two call sites (`BraveWalletPanel` and `Utils`) with direct `assetRatioService.getPrice()` calls, eliminating an unnecessary `MultiResponseHandler` wrapper.
- Moves price lookup helpers (`getPrice`, `getPriceForAsset`, `parseAssetPrice`) into Utils.java where all callers already have access.
- Removes the now-unused `FetchPricesResponseContext` from `AsyncUtils`.
- Fixes copy-paste bug in `ParsedTransaction` where `minBuyAmountArg` was reading `txArgs[1]` (same as `sellAmountArg`) instead of `txArgs[2]`, confirmed against the desktop C++ implementation in `eth_data_parser.cc`.
- Fixes general warnings for `ParsedTransaction` class.
- Improves Javadocs.
2026-03-26 12:26:57 +01:00
Serg bfe0809ef0 [Android] Respect Brave Origin policies in settings search (#34985)
Remove policy-disabled features from the settings search index so
they don't appear in search results when disabled by Brave Origin
or enterprise policy.

Resolves: https://github.com/brave/brave-browser/issues/53530
2026-03-25 17:04:54 +01:00
Serg 62575a9e0b [Android] Show loading state in Origin preferences during post-purchase credential fetch (#34955)
* [Android] Show loading state in Origin preferences during post-purchase credential fetch

When a Brave Origin purchase is completed, there is a delay while the
receipt is passed from Play Store to the SKUs SDK via
fetchOrderCredentials. During this time, the Origin preferences screen
opens but credentials aren't ready yet.

- Disable all toggles and clickable preferences until
  fetchOrderCredentials completes
- Show a snackbar with "Disabling features" spinner instead of
  "Restart now" during the credential fetch
- On success, re-enable preferences and transition to "Restart now"
- On failure, close the preferences screen
- Always show restart snackbar on toggle change regardless of
  setPolicyValue result, since failure means a restart is needed
- Remove duplicate color definitions (schemes_primary_fixed_dim,
  schemes_on_primary_fixed, semantic_text_secondary,
  semantic_text_tertiary) that already exist in nala tokens

Resolves: https://github.com/brave/brave-browser/issues/53915
2026-03-25 15:54:01 +01:00
Serg a537c15708 [Android] Implement Origin subscription linking after purchase (#34719)
Add support for linking Brave Origin subscriptions after purchase on
Android, following the same link-order flow used by Leo (AI Chat).

- Add OriginIAPSubscription Mojo interface and C++ implementation to
  read purchase token/order ID from prefs and persist link status
- Handle product=origin in SubscriptionRenderFrameObserver: inject
  braveOrigin.receipt and braveOrigin.orderId into localStorage on
  the initial landing page, and linkResult.setStatus() callback on
  the /order-link/ result page
- Register OriginIAPSubscription Mojo binding in
  BraveContentBrowserClient
- Update LinkSubscriptionUtils to use link-order intent for Origin
- Hide Purchase section in Origin preferences when already linked
- Move subscription_render_frame_observer.h include out of
  ENABLE_BRAVE_VPN guard so it is available for all Android
  subscription products
- Generalize Leo-specific constants (kIntentParamValueLeo,
  kResultLandingPagePathLeo) since they are now shared with Origin
- Add Origin test cases to browser tests

Resolves: https://github.com/brave/brave-browser/issues/53613
2026-03-24 12:59:55 -04:00
Serg 079729bb4f [Android] Fix crash in BraveRewardsNativeWorker when profile is not ready (#34907)
BraveRewardsNativeWorker crashes when constructed before the browser is
fully initialized. This happens when an AlarmManager retention
notification (DAY_10/DAY_30/DAY_35) fires and the app process is started
by Android just to handle the broadcast — ProfileManager::
GetActiveUserProfile() dereferences a null g_browser_process in this
case.

The fix:
- Checks that GetActiveUserProfile() returns a valid profile before
  creating the native worker in JNI_BraveRewardsNativeWorker_Init. If it
  doesn't, the native object is not created.
- Resets the Java singleton when native init is skipped, so subsequent
  calls can retry once the browser is fully initialized.
- Adds null-profile guards to IsSupported, IsSupportedSkipRegionCheck,
  and IsRewardsEnabled which also call GetActiveUserProfile()
  independently.
- Adds null checks for getInstance() at all call sites since it can now
  return null.

Resolves: https://github.com/brave/brave-browser/issues/53877
2026-03-24 00:19:52 +01:00
samartnik afb83224c9 [Android] UI preparation for custom search engines (#34890)
This PR is only prepares UI and strings, the main implementation will be done separately in the context of brave/brave-browser#21837
2026-03-23 15:33:09 -04:00
Simone Arpe 8b52bd7400 (Wallet) Improve account name generation (#34831) 2026-03-20 12:59:26 +01:00
Simone Arpe 464eac5bd7 (Wallet) Fix Zcash networks visibility and position during onboarding (#34829) 2026-03-20 11:18:21 +01:00
Brian Johnson b9811f29a7 Only use brave:// scheme for display (#34610)
brave:// should be converted to chrome:// as early as possible so all internal checks for chrome:// are valid. You can still open brave:// urls and they should display as brave:// urls, but internally both the actual url and virtual url should be chrome://
2026-03-20 00:49:16 +01:00
AlexeyBarabash 11dd709902 [Android] Convert BraveAndroidDynamicColors to CachedFlag (#34810)
* [Android] Convert BraveAndroidDynamicColors to CachedFlag

This allows to respect the flag at BraveDynamicColors
on app early start

Resolves: https://github.com/brave/brave-browser/issues/53754
2026-03-19 20:08:56 +02:00
Simone Arpe dbb3f73525 Add YouTube filter options under Settings → Media (#34779)
Adds four filter options, already present in Shields & privacy → Content filtering, and include them also in Settings → Media → YouTube section.
Each filter option is synchronized in both sections (i.e. modifying an option under Settings → Media will be reflected in the other section accordingly).

The YouTube section is also reordered:

Block YouTube Shorts
Block YouTube Playables
Block YouTube recommended content
Block YouTube distracting elements
Block YouTube thumbnails
Block YouTube auto-dubbed videos
Block YouTube members-only videos
2026-03-17 21:32:18 +01:00
vadims 270588d928 App close auto shred not working [Tablet] (#34702)
Fixed the `On App Closed` auto-shred option to trigger only when the app
is fully closed, not when the user switches apps or presses the Home
button.

Resolves: https://github.com/brave/brave-browser/issues/53441
---------

Signed-off-by: Vadym Struts <vstruts@brave.com>
2026-03-16 17:25:06 +01:00
AlexeyBarabash a5c47b8f71 [Android][Settings Search] Replace background images with the void (#34687)
Resolves https://github.com/brave/brave-browser/issues/53524
2026-03-13 22:41:49 +02:00
Szilard Szaloki 8dc92ab21c Account: changes the title label for logged-in users (#34707) 2026-03-14 05:14:17 +09:00
AlexeyBarabash e8302c177f Android settings search indexes (#34576)
Added support for search indexes for Brave preferences fragments
2026-03-12 23:20:56 +02:00
Serg 94c841cc01 [Android] Use Nala ic_search icon for dark theme support (#34679)
Remove hardcoded ic_search.xml (#495057 fill) that was shadowing the
Nala version which uses @color/icon_default for proper light/dark
theme adaptation.

Resolves: https://github.com/brave/brave-browser/issues/53297
2026-03-12 16:32:52 -04:00
Anton Paymyshev a95360aa75 Drop gas_estimation field from TxData1559 (#34515)
* Drop gas_estimation field from TxData1559

* fix ci

* fix ci

* fix ci

* fix ci

* fix ci

* fix ci

* Address review
2026-03-12 22:13:34 +07:00
Darnell Andries b88610b3d4 Add Android metrics for Brave Search (#34076)
* Add widget search perecent metric

* Add quick search percentage metrics

* Address bot feedback
2026-03-11 16:27:31 -07:00
Simone Arpe 61a9a1434a Rename onboarding variants X and Y to avoid name collision (#34566)
Uncomments `getDayZeroVariant` to fetch the variant names and it renames them to X (default) and Y (new onboarding) to avoid naming collision with NTP A/B study.
2026-03-11 17:27:54 +01:00
AlexeyBarabash 01e05371c8 [CodeHealth][Android] Ignore more patches for overwritten resources (#34534)
* [CodeHealth][Android] Ignore patch generation for overwritten resources

This is update of the Android resources list we should
not generate patch for because we overwrite them.

Converted bookmark_toolbar.xml layout file override to patch, 
because it is trivial.

Resolves https://github.com/brave/brave-browser/issues/53436
2026-03-11 15:14:28 +02:00
Darnell Andries ec69821f17 Add metric for Android quick search (#33731)
* Add metric for Android quick search

* Address PR feedback

* Add registry check

* Add Brave to quick search answer
2026-03-10 11:22:18 -07:00
Serg 12400944d6 [Android] Fix crash in BraveNewsUtils when mojo pipe is closed (#34573)
Guard mojo calls with try/catch for IllegalStateException since the
pipe can be closed by onDetachedFromWindow() or onConnectionError()
before the BEST_EFFORT task executes, and Java mojo bindings have no
non-destructive validity check.

Resolves: https://github.com/brave/brave-browser/issues/53479
2026-03-09 23:27:30 +01:00
Simone Arpe 9ff0e5646d Init exit menu item as hidden (#34482)
Initializes exit menu item as hidden for new users only by setting it as disabled during onboarding. Exit item will be shown as disabled in the customized menu and tapping it on the toggle will bring it back.
2026-03-09 15:19:19 +01:00
Serg ae69664eab [Android] Clean up Origin preferences and implement reset/link purchase (#34535)
- Remove unused "Crash reports" toggle (no policy mapping)
- Remove "Manage account" preference
- Rename "Leo AI" toggle label to "AI"
- Implement "Reset to defaults" with confirmation dialog
- Implement "Link purchase" to open Brave account linking page

Resolves: https://github.com/brave/brave-browser/issues/53435
2026-03-06 17:28:33 -05:00
Serg 3efa85704e [Android] Restore Origin purchase on app startup for device change scenario (#34495)
When a user purchases Brave Origin on one device and later switches to a
new device (or reinstalls), the local preferences are empty and the
Origin menu always shows the purchase screen instead of the settings
screen.

This adds a verifyPurchase() method to BraveOriginSubscriptionPrefs that
queries Google Play for an existing Origin purchase and restores the
local preferences (purchase token, product ID, package name) if one is
found. The query is triggered during
BraveActivity.finishNativeInitialization() only when the local
subscription pref is not already active, so it doesn't run unnecessarily
for users who already have their purchase recorded locally.

Toasts are suppressed during the startup query to avoid showing billing
error messages on devices without Google Play, and re-enabled when the
purchase screen is opened.

Resolves: https://github.com/brave/brave-browser/issues/53405
2026-03-05 16:38:37 -05:00
AlexeyBarabash c36de06488 [Android][cr146] Put url into url bar after QR scan (#34437)
* [Android][cr146] Put url into url bar after QR scan

This commit brings back pre-cr146 behaviour
on scanning QR codes with url - url text now
is at the url bar and selected again.

Resolves https://github.com/brave/brave-browser/issues/53318
2026-03-05 16:19:01 +02:00
Serg e9ae9e7377 [Android] Fix stale verified publisher checkmark on tab switch (#34449)
The verified publisher checkmark could persist when switching tabs
because brave:// URLs were not treated as internal URLs and
OnPanelPublisherInfo silently dropped null publisher info without
notifying the Java layer.

- Treat brave:// URLs as internal alongside chrome:// so they
  clear the checkmark instead of querying getPublisherInfo.
- Notify Java with an empty publisher ID when OnPanelPublisherInfo
  receives null info, so the UI clears stale state.
- Reset the checkmark immediately in didSelectTab as a safety net
  before the async publisher query completes.

Resolves: https://github.com/brave/brave-browser/issues/53332
2026-03-04 20:59:29 -05:00
Simone Arpe d81a0e484e (Wallet) Fix edit fee dialog styles (#34388)
* Switch from `getActivity()` in favor of `requireContext()`

* Improve Edit Fee dialog styles

* Fix window leaked upon config changes

* Fix presubmit warning
2026-03-04 13:22:38 +00:00
Simone Arpe aebf44f653 Fix private tab layout and RTL support (#34401) 2026-03-04 14:20:06 +01:00
Simone Arpe 3ea61f5823 (Wallet) Add padding to avoid focus ring cut off (#34389)
Add padding to avoid focus ring cut off
2026-03-04 10:35:59 +00:00
vadims f13eac71f2 Global Shred site's data preference is not available in settings under Brave Shields & privacy (#34391)
Fixed global auto-shred settings to be displayed in Settings under
Brave Shields & Privacy when the Shred feature is enabled.

Resolves: https://github.com/brave/brave-browser/issues/53295
---------

Signed-off-by: Vadym Struts <vstruts@brave.com>
2026-03-04 11:01:13 +01:00
Serg 7246781c90 [Android] Use Leo design tokens for icons in Brave Origin settings (#34411)
Migrate Origin settings icons from custom drawables with hardcoded fill
colors to Leo design token equivalents that use @color/icon_default for
proper dark theme support. Remove manual icon tinting code that was
working around the hardcoded colors.

Resolves: https://github.com/brave/brave-browser/issues/53334
2026-03-04 01:20:01 +01:00
Serg 8c0ed68c2e [Android] Gate email aliases preference behind kEmailAliases feature flag (#34403)
The email aliases toggle in Brave Origin settings was always visible
regardless of whether the feature flag is enabled. Since the feature is
disabled by default, users would see a non-functional toggle.

Expose kEmailAliases to Java via ChromeFeatureList and hide the
preference when the flag is disabled.

Resolves: https://github.com/brave/brave-browser/issues/53323
2026-03-03 21:36:30 +00:00
Serg cb5b0a007d [Android] fix: handle Mojo BadMessageException gracefully (#34360)
Chromium 146 introduced BadMessageException in the Java Mojo bindings
(crbug.com/469861566, https://github.com/chromium/chromium/commit/c04b8552deeef)
to surface malformed or unexpected messages (invalid headers, unknown methods,
deserialization errors, responses for already-cancelled requests). However, the
default ExceptionHandler simply re-throws the exception as unchecked, causing
crashes instead of gracefully closing the pipe.

This differs from the C++ Mojo bindings behavior where
Connector::DispatchMessage (mojo/public/cpp/bindings/lib/connector.cc) handles
dispatch failures by calling HandleError() which resets the pipe cleanly.

Set a delegate on ExceptionHandler.DefaultExceptionHandler that catches
BadMessageException and returns false (closing the pipe), while re-throwing
all other exceptions to preserve existing behavior.

Resolves: https://github.com/brave/brave-browser/issues/53290
2026-03-02 21:44:20 +01:00
Simone Arpe 32a340275c Fix HeadingH1/2/3/4 by adding android:textStyle bold (#34355) 2026-03-02 16:49:20 +01:00
AlexeyBarabash f038f8d936 [Android] Fix debug crash at assertNonNull on app start at News (#34330)
Resolves https://github.com/brave/brave-browser/issues/53262
2026-02-27 23:43:18 +00:00
AlexeyBarabash 5210710174 Fixing some Nullaway check warnings (#34122)
* Fixed some Nullaway check warnings

Resolves brave/brave-browser#53098
2026-02-27 18:17:36 +02:00
Simone Arpe 3f35655f1d Implement new layout for widget search promo panel (#34207)
Implements new layout for widget search promo panel and introduces better handling of activity recreations and configuration changes to redraw the widget search promo panel with correct theme (day/night) and proper position.

Other notable enhancements:

- Tweak tablet margins to better frame the onboarding cards on foldable devices after initial review with the design team.
- Fix post-FRE intent and delay activity to avoid a glitch on foldable devices by following the same strategy applied upstream.
- Accessibility: include content descriptions for widget search promo panel images.
- Nala: include new drawables from Nala tokens.
- Append new source android-widget for all searches made from the widget.
- Implement tests to verify new source android-widget.
2026-02-27 13:45:17 +01:00
Serg aa2fcc5c1f [Android] Fix in-app review flow crash on Play Store split APK installs (#34229)
PlayCoreDialogWrapperActivity (from core-common) lives in base.apk
but deserializes a Parcelable (review.zzc) from split_chrome.apk.
The base split's ClassLoader can't see chrome split classes, causing
ClassNotFoundException. Chromium fixes this for its own activities
via BundleUtils.checkContextClassLoader(), but PlayCoreDialogWrapperActivity
extends plain Activity and is not covered.

Fix by registering an ActivityLifecycleCallbacks that sets the
Application's ClassLoader on the Intent extras Bundle before onCreate().

Also adds a QA preference to force the in-app review flow from settings
for easier testing.

Resolves: https://github.com/brave/brave-browser/issues/53179
2026-02-26 23:19:42 +00:00
Artem Samoilenko f4f73437c0 [cr147][Android] Changes for ToolbarSwipeLayout
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/6257cc0a04731f19de38049632765ee5ffa5f249

commit 6257cc0a04731f19de38049632765ee5ffa5f249
Author: Yanting Yu <yyanting@google.com>
Date:   Tue Feb 17 13:22:09 2026 -0800

    Fix the toolbar swipe animation in NTP (Part2).

    This is the follow up CL for crrev.com/c/7552991. In this CL, we fixed
    1) toolbar jumps down when swiping the toolbar from newly created NTP;
    2) the empty bar is observed above the bottom toolbar after swipe to
    non-NTP tab from newly created NTP.

    Root cause: When preparing the swipe animation, we use the stale toolbar
    capture including the top padding for E2E in NTP. Even though the
    toolbar is notified to remove its own padding before swipe starts. We
    fixed this bug by forcing the toolbar to update its layout and capture
    the bitmap.

    Before: https://screencast.googleplex.com/cast/NTAyMDk1NTYwNzgyNjQzMnxkNWU5ZGQwYy1jMw
    After: https://screencast.googleplex.com/cast/NjI5MTcyNTEzMDY2MTg4OHxkMzE3Y2ZhNi1lYQ

    Bug: 469708907, 480857474
    Change-Id: I7a365b8f1a11ea65d7b3c13b54e00bfb7f1d88ce
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7563889
    Commit-Queue: Yanting Yu <yyanting@google.com>
    Reviewed-by: Patrick Noland <pnoland@chromium.org>
    Reviewed-by: Xi Han <hanxi@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1585966}
2026-02-26 14:14:57 +00:00
AlexeyBarabash 2701f088c3 [cr146][Android] Encapsulate TopInsetProvider observer two-step pattern
Chromium change:
https://source.chromium.org/chromium/chromium/src/+/2eb1baa19a3548ac2bee87fdd1231ea4051442f0

	[E2E] Encapsulate TopInsetProvider observer two-step pattern

	This CL introduces a new class to encapsulates the common
	two-step pattern of:
	1. Waiting for TopInsetProvider to become available via a supplier
	2. Adding an observer to the provider once available

	This pattern was duplicated in ToolbarPositionController,
	AutocompleteCoordinator, and NewTabPage.

	The new utility class manage TopInsetProvider access with clear
	separation between owners and consumers

	TransitiveTopInsetProvider:
	  - Provides access to consumers who need to observe inset changes
	  - Automatically manages observer registration when provider becomes available
	  - Queues observers added before provider is set

	Bug: 478739083
	Change-Id: Ib818c4f16df88f1d6ab6befc633f1fb9031ba3d5
	Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7509092
2026-02-26 14:14:55 +00:00
AlexeyBarabash 4accb1d201 Revert "[cr146][Android] Changed shareDelegate arg at ChromeContextMenuPopulator.ctor"
This reverts commit 7d23353a12adf000a22615fd1d07ed389e9fd94c.

Chromium change:
https://source.chromium.org/chromium/chromium/src/+/ecc16f6754610b4e29b7dde1748bea45b3e48a9c

	Revert (partial) "Fix @Nullable annotation for ChromeContextMenuPopulator's ShareDelegate"

	This reverts commit c6562cde86eaf48819f83a7bd68e37b37626e51b.

	Reason for revert:
	The Suspect CL https://chromium-review.googlesource.com/q/Icc52e361fd3c5f64ef4ab1ff51397d841bc13f64 is highly likely the cause of the crash. Please see the crash report http://crash/d477a2ee4d2284d8.
	Rebase the Revert CL on top of main branch with conflicts allowed option to prevent false positive merge conflicts.

	If you agree with the revert CL, please approve it and mark as Commit-Queue +2 to submit it.

	More details can be found in the go/crash-revert-cls-creation.

	Original change's description:
	> Fix @Nullable annotation for ChromeContextMenuPopulator's ShareDelegate
	>
	> And switch it to not be a Supplier, since nothing currently requires it
	> to be one.
	>
	> Bug: 467389696
	> Change-Id: Icc52e361fd3c5f64ef4ab1ff51397d841bc13f64
	> Cq-Include-Trybots: luci.chrome.try:android-internal-dbg,android-internal-binary-size
	> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7542574
	> Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
	> Commit-Queue: Andrew Grieve <agrieve@chromium.org>
	> Cr-Commit-Position: refs/heads/main@{#1579495}
	>
	Crash Bug: 482849462

	Change-Id: I6042384ff35cd6d3747fa2dab28607fe243e18f8
	Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7555790
2026-02-26 14:14:55 +00:00