Skip to content

[pull] main from MetaMask:main#443

Merged
pull[bot] merged 10 commits into
Reality2byte:mainfrom
MetaMask:main
Jan 9, 2026
Merged

[pull] main from MetaMask:main#443
pull[bot] merged 10 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Jan 9, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

brianacnguyen and others added 10 commits January 9, 2026 17:45
## **Description**

Aligned headers and footers for swap/bridge modals and views to ensure
consistent spacing and visual alignment across the UI.

**Changes include:**
- **ButtonToggle**: Simplified component to use `ButtonPrimary` when
active and `ButtonSecondary` when inactive, removing custom styling
- **BridgeView**: Removed extra bottom padding from the button container
for tighter footer alignment
- **SlippageModal**: Updated layout with consistent padding and proper
text styling using design system tokens
- **QuoteExpiredModal**: Added proper footer padding and updated
description text color to `TextColor.Alternative`
- **TooltipModal**: Added "Got it" footer button and consistent padding
structure

## **Changelog**

CHANGELOG entry: Fixed inconsistent header and footer spacing in swap
and bridge modals

## **Related issues**

Fixes:
https://consensyssoftware.atlassian.net/browse/MDP-657?atlOrigin=eyJpIjoiYjIzZjdjNmY2NmRiNDMzZGE3MTcwNmE1YjAyZGQ2OTIiLCJwIjoiaiJ9

## **Manual testing steps**

```gherkin
Feature: Swap/Bridge Modal Alignment

  Scenario: User views the slippage modal
    Given the user is on the swap/bridge view with a valid quote

    When user taps on the slippage setting
    Then the slippage modal should display with consistent header and footer spacing

  Scenario: User views a tooltip modal
    Given the user is on a screen with tooltip icons

    When user taps on a tooltip icon
    Then the tooltip modal should display with a "Got it" button footer
```

## **Screenshots/Recordings**

### **Before**

<!-- [screenshots/recordings] -->

### **After**

https://github.com/user-attachments/assets/2b632787-bfff-479c-a40d-79cbe8ba1cb5

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Standardizes swap/bridge UI headers/footers and cleans up button
styling.
> 
> - Simplifies `ButtonToggle` to render `ButtonPrimary` when active and
`ButtonSecondary` when inactive; removes custom styles/constants and
updates snapshots (incl. `SegmentedControl`).
> - Replaces `BottomSheetHeader` with `HeaderCenter` in Bridge token
selectors, `QuoteExpiredModal`, `SlippageModal`, and `TooltipModal`;
updates title layout, close button handling, and related
snapshots/tests.
> - Spacing/style tweaks: remove extra bottom padding in `BridgeView`
button container; adjust container/footer paddings (platform-aware) and
set body text to `TextColor.Alternative` where applicable.
> - Navbar: `getBridgeNavbar` now uses `getHeaderCenterNavbarOptions`;
tests updated to expect a `header` function.
> - `TooltipModal`: adds "Got it" footer button and interaction test.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8a063b7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
… cp-7.61.6 (#24368)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Fix Tron resources calculation and default value.

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Fixes Tron resource max handling and safe percentage calculation.
> 
> - `useTronResources`: passes actual `max` values (can be `0`) to
`createResource`; percentage uses `Math.max(1, max)` to avoid
divide-by-zero while preserving displayed `max`
> - Tests updated to expect `max: 0` when no resources exist; existing
parsing and capping behaviors verified
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
d0c7e87. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Antonio Regadas <antonio.regadas@consensys.net>
…24365)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Updates dependency to latest minor version.
> 
> - Upgrades `@metamask/tron-wallet-snap` from `^1.17.0` to `^1.19.0` in
`package.json`; refreshes `yarn.lock` accordingly
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
460a33e. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Alejandro Garcia Anglada <aganglada@gmail.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This PR addresses an issue where the "Add Account" button was being
displayed in the Account Selector when launched from the Ramp Aggregator
component, even though it should be hidden in that context.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: removes `Add account` in the account selector during
the ramps flow.

## **Related issues**

Fixes:
https://consensyssoftware.atlassian.net/browse/MUL-1211?atlOrigin=eyJpIjoiYjExYTc2N2YwMjkzNDBkN2E5MjI5N2E4ZjJlYWY0MjYiLCJwIjoiaiJ9
Fixes: #21578

## **Manual testing steps**

```gherkin
Feature: Add account from account selector

  Scenario: user is trying to create a new account
    Given the user is in the on ramp deposit screen

    When user clicks the account selector
    Then they should see that the `Add account` button is not available. 
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**


https://github.com/user-attachments/assets/e71c10fb-ae76-475c-9089-d25777bc6881

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

[mul-1211-after.webm](https://github.com/user-attachments/assets/7243f2b6-ceb0-46c4-9ac3-fae0de63f4d1)


## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Implements a `disableAddAccountButton` control to hide the add-account
UI in Account Selector and applies it to ramp/deposit flows.
> 
> - Adds `disableAddAccountButton` to `AccountSelector` params/types and
wires it to conditionally render `BottomSheetFooter` and
`MultichainAccountSelectorList` `showFooter`
> - Updates Ramp Aggregator and Deposit `AccountSelector` navigations to
pass `{ disableAddAccountButton: true }` (alongside
`isEvmOnly`/`disablePrivacyMode`)
> - Extends tests: validates navigation params from ramps, verifies add
button visibility for both multichain and non-multichain modes, and
minor expectations adjustments
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e557606. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

In the reveal SRP flow, the user cannot scroll the accounts list inside
the component with the SRP once this one is expanded

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: bug fix where a user couldn't scroll through the SRP
reveal bottom sheet on Android

## **Related issues**

Fixes: #19999
Jira ticket: https://consensyssoftware.atlassian.net/browse/MUL-1366

## **Manual testing steps**

```gherkin
Feature: reveal SRP screen

  Scenario: user wants to see all of one SRP's accounts on Android
    Given user has multiple SRPs with more than 10 EVM accounts in each

    When user goes to settings > security > reveal SRP > XX accounts
    Then user is able to scroll down the list of accounts without issues
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**


https://github.com/user-attachments/assets/aa56fcd7-781d-44d1-a97a-6a853a33f32a

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Resolves Android scrolling issues in the SRP reveal bottom sheet by
constraining list height and enabling nested scrolling.
> 
> - Updates `SRPList` to use `useWindowDimensions` and pass
`vars.maxHeight` (~70% of window height) to `styleSheet`
> - Adds `maxHeight` to `SRPList.styles.ts` and a `flatList` style
(`flexGrow: 0`) to prevent over-expansion
> - Switches `FlatList` to `react-native-gesture-handler` and enables
`scrollEnabled`/`nestedScrollEnabled`
> - Cleans up redundant flex styles in `base` and
`srpListContentContainer`
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a5650b9. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This pull request updates the create cherry pick workflow to pass
untrusted GitHub values as ENV variables instead of raw inputs to the
`run` section of the workflow. This helps ensure we are setting good
patterns, and eliminates the risk of command injection from an employee
who invokes this workflow.

Alternatively, if this action is no longer used we can delete it
entirely (this is the approach the extension platform team is taking)

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

CHANGELOG entry: null

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

No issue exists

## **Manual testing steps**

After merging this pull request, run the workflow to confirm it still
works as intended

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [X] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [X] I've completed the PR template to the best of my ability
- [X] I’ve included tests if applicable
- [X] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [X] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Modernizes and simplifies the cherry-pick workflow.
> 
> - Replace `actions/checkout` + Node setup steps with
`MetaMask/action-checkout-and-setup@v1` (`is-high-risk-environment:
false`)
> - Pass workflow inputs as env vars (`BRANCH_NAME`, `COMMIT_HASH`,
`PR_NUMBER`) to `create-cherry-pick-pr.sh` and quote args in `run`
> - Remove `fetch-depth`, `ref`, custom token usage, and Node version
detection/setup
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a8428b7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

refine import account screen UI

## **Changelog**

CHANGELOG entry:null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MDP-323

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

| before | after |
| -------- | ------- |
|
![before](https://github.com/user-attachments/assets/79b73321-7eab-4901-b485-be0baadf1df4)
|
![after](https://github.com/user-attachments/assets/810ab1f8-ea30-4726-98c3-992f089e1160)
|

### **Before**

`~`

### **After**

`~`

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.





<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Modernizes the Import Private Key UI while preserving behavior.
> 
> - Replaces `ButtonIcon` close control with `HeaderCenter` back header
(`testID` preserved) and removes decorative download icon
> - Adjusts layout and spacing: adds `marginTop`, switches to
`paddingHorizontal`, reduces row gaps, and centers scan-QR link row
> - Updates typography/colors: body text uses `TextColor.Alternative`;
input uses `background.section`, muted text color, and tighter margins
> - Cleans up styles (removes background tints) and updates snapshots;
import/scan flows and logic remain unchanged
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
75cc51b. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

**Reason for change:** The RampsController previously had no request
caching infrastructure. Each API call was independent, leading to
duplicate network requests when multiple UI components needed the same
data, and no shared loading/error states across the app.

**Solution:** This PR adds mobile-side integration for the new
[RampsController request caching system that was
implemented](MetaMask/core#7536):

- **New hooks:** `useRampsControllerRequest` (generic) and
`useRampsGeolocation` (specialized) that automatically fetch on mount
and read from Redux
- **Domain-specific selectors:** `selectGeolocation`,
`selectGeolocationIsLoading`, `selectGeolocationError`,
`selectGeolocationStatus` - no cache keys required for consumers
- **Generic selectors:** `makeSelectRequestState`,
`makeSelectRequestData`, etc. for advanced use cases
- **Clean API:** Hooks return just `{ data, error, status }` - advanced
controls accessed via `Engine.context.RampsController`

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes:
[#TRAM-2931](https://consensyssoftware.atlassian.net/browse/TRAM-2931)

## **Manual testing steps**

Feature: Geolocation caching in Ramps

  Scenario: Geolocation is fetched and cached on deposit screen load
    Given the app is open and user is logged in
    When user navigates to the Deposit (Buy) screen
    Then geolocation should be fetched once and displayed
And subsequent navigations should use cached geolocation without new API
calls

  Scenario: Loading state is visible during geolocation fetch
    Given the user has not previously fetched geolocation
    When user navigates to the Deposit screen
    Then a loading state should be visible briefly
    And then the geolocation data should appear

## **Screenshots/Recordings**

### **Before**

N/A - New infrastructure, no visible UI changes

### **After**

N/A - New infrastructure, no visible UI changes

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Introduces mobile integration with RampsController request caching
focused on geolocation.
> 
> - Adds `useRampsGeolocation` hook returning `{ geolocation, isLoading,
error, fetchGeolocation }` and auto-fetching on mount
> - New selectors: `selectGeolocation` and `selectGeolocationRequest`
(via `createRequestSelector`) for data/loading/error without manual
cache keys
> - Initializes `RampsController` to call `updateGeolocation` on app
startup (non-blocking, errors swallowed)
> - `RampsService` now includes platform `context`
(`mobile-ios`/`mobile-android`) during init
> - Updates tests, snapshots, and initial state to include
`RampsController.requests`; upgrades `@metamask/ramps-controller` to
`^2.1.0`
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0d30da3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

use v3 for EVM historical prices instead of V1 price api.
Api platform team has made improvements on the v3 api; they added
geckoterminal as provider for historical prices, hence it should have
more coverage for prices.

## **Changelog**

CHANGELOG entry: using v3 api to get historical prices for asset details
page instead of v1

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->


### **Before**

<!-- [screenshots/recordings] -->


https://github.com/user-attachments/assets/69625f29-0394-4bcc-bec3-a553b8f2704f



### **After**

<!-- [screenshots/recordings] -->


https://github.com/user-attachments/assets/ea15d185-c35e-4495-b124-2b9baf1c0aef


## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Switch EVM historical price fetch to v3**
> 
> - In `useTokenHistoricalPrices`, replace v1 `price.api` endpoint with
v3 and change path to use CAIP-2/CAIP-19 (`eip155:{chainId}` and
`erc20:{address}`) for EVM assets
> - Preserve existing query params (`timePeriod`, `vsCurrency`, optional
`from`/`to`) and 204 handling; non-EVM flow unchanged
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8e2fd83. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
- Fix Android E2E report job running before perps tests complete by
adding `perps-android-smoke` to the report job's `needs` array (was
commented out)

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry:

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Android E2E workflow**
> 
> - Adds `perps-android-smoke` to `report-android-smoke-tests` `needs`,
so the final report aggregates results after perps tests complete.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
505fc8b. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@pull pull Bot locked and limited conversation to collaborators Jan 9, 2026
@pull pull Bot added the ⤵️ pull label Jan 9, 2026
@pull pull Bot merged commit 8df7772 into Reality2byte:main Jan 9, 2026
0 of 9 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants