[pull] main from MetaMask:main#425
Merged
Merged
Conversation
## **Description**
This PR adds tracking for remote feature flags to user traits for
analytics purposes.
**What is the reason for the change?**
We need to capture feature flag values as user traits in our analytics
system to better understand user segmentation and feature adoption.
**What is the improvement/solution?**
Added a `useEffect` in `FeatureFlagOverrideContext` that sends all
remote feature flags to user traits in a single bulk call via
`addTraitsToUser` whenever the flags are received or updated from the
`RemoteFeatureFlagController`.
## **Changelog**
CHANGELOG entry: null
## **Related issues**
Fixes:
## **Manual testing steps**
Feature: Feature Flag User Traits Tracking
Scenario: Feature flags are added to user traits when received from
remote controller
Given the app is launched with MetaMetrics enabled
When remote feature flags are fetched from the server
Then all feature flag values are sent to Segment as user traits in a
single bulk call
Scenario: Feature flags are updated in user traits when they change
Given the app has already received feature flags
When the remote feature flags are updated with new values
Then the updated feature flag values are sent to Segment as user
traits## **Screenshots/Recordings**
<!-- Not applicable - analytics/internal change with no UI impact -->
### **Before**
N/A - Feature flags were not being tracked as user traits when received
from remote controller.
### **After**
Feature flags from the remote controller are now automatically sent to
user traits via `addTraitsToUser` in bulk whenever they are received or
updated.
## **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]
> Bulk-send remote feature flags to analytics user traits on
receipt/updates and add tests validating single-call, bulk behavior.
>
> - **Feature Flags/Analytics**:
> - Add `useEffect` in `app/contexts/FeatureFlagOverrideContext.tsx` to
call `addTraitsToUser(rawFeatureFlags)` whenever remote flags are
received or updated (bulk, single call).
> - **Tests** (`app/contexts/FeatureFlagOverrideContext.test.tsx`):
> - Add “Remote Feature Flag Change Tracking” tests to verify bulk add
on initial load, on updates, no call when empty, and single-call (not
per-flag).
> - Adjust snapshot tests to account for initial bulk call (clearing
mocks) and add a test asserting bulk call on mount; minor test
description tweaks.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6ebbba8. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description** This PR integrates the `@metamask/ramps-controller` package into the mobile app's Engine. The Ramps Controller will manage on-ramp/off-ramp state and interactions in a centralized manner. **Changes include:** - Added `@metamask/ramps-controller` as a dependency - Created initialization functions for `RampsController` and `RampsService` - Created messengers for both `RampsController` and `RampsService` - Added Redux selectors for accessing Ramps Controller state (`selectRampsControllerState`, `selectGeolocation`) - Registered both controllers in the Engine - Updated Engine types to include Ramps Controller actions, events, and state - Added comprehensive unit tests for all new code ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: [TRAM-2831](https://consensyssoftware.atlassian.net/browse/TRAM-2831) ## **Manual testing steps** This feature is integration only and can only really be tested via dev logs etc. Feature: Ramps Controller Integration Scenario: App starts with RampsController initialized Given the app has not been launched When user launches the app Then the RampsController should be initialized in the Engine And the RampsService should be initialized in the Engine And the RampsController state should contain geolocation as null ## **Screenshots/Recordings** ### **Before** N/A - Internal infrastructure change with no UI impact ### **After** N/A - Internal infrastructure change with no UI impact ## **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. [TRAM-2831]: https://consensyssoftware.atlassian.net/browse/TRAM-2831?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Integrates `@metamask/ramps-controller` into Engine with controller/service inits, messengers, selectors, types, and tests, plus related constants/fixtures/env updates. > > - **Engine**: > - Register `RampsController` and `RampsService`; expose in `Engine.context` and state; include in initialization map and state selectors. > - Add init modules `controllers/ramps-controller/ramps-controller-init.ts` and `ramps-service-init.ts` (with `getRampsEnvironment`). > - Update `BACKGROUND_STATE_CHANGE_EVENT_NAMES` and `STATELESS_NON_CONTROLLER_NAMES` to include ramps; export in `Engine.state` getters. > - **Messengers**: > - Add `getRampsControllerMessenger` (delegates `RampsService:getGeolocation`) and `getRampsServiceMessenger`; register in `CONTROLLER_MESSENGERS`. > - **Selectors**: > - Add `selectRampsControllerState` and `selectGeolocation` under `app/selectors/rampsController`. > - **Types**: > - Extend Engine actions/events/state and controller names to include ramps controller/service. > - **Tests/Fixtures**: > - Add unit tests for ramps controller/service inits and messengers; update `Engine.test.ts` to expect ramps; add selector tests. > - Update initial background state and logs snapshots to include `RampsController: { geolocation: null }`. > - **Tooling/Deps**: > - Add dependency `@metamask/ramps-controller` and lockfile changes. > - Update `babel.config.tests.js` to not inline env vars for ramps files. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4088ebd. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Add metric name indicator shortcuts (Vol, OI, Funding) to asset row subtitles in the Perps home screen to reflect the current sorting mechanism. **What changed:** - Asset rows now display the metric label alongside the value (e.g., "$1.2B Vol" instead of just "$1.2B") - Labels are capitalized: Vol, OI, Funding - Price change metric doesn't show a label since the % suffix already indicates the metric ## **Changelog** CHANGELOG entry: Added indicator name shortcuts in Perps asset pills to reflect sorting mechanism ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2177 ## **Manual testing steps** ```gherkin Feature: Perps home screen metric indicators Scenario: User views asset rows with volume sorting Given user has the Perps home screen open And markets are sorted by volume (default) When user views the asset rows Then each row displays the volume value with "Vol" suffix (e.g., "$1.2B Vol") Scenario: User changes sorting to Open Interest Given user has the Perps home screen open When user changes sorting to Open Interest Then each row displays the OI value with "OI" suffix (e.g., "$25M OI") Scenario: User changes sorting to Funding Rate Given user has the Perps home screen open When user changes sorting to Funding Rate Then each row displays the funding rate with "Funding" suffix (e.g., "0.01% Funding") Scenario: User changes sorting to Price Change Given user has the Perps home screen open When user changes sorting to Price Change Then each row displays only the percentage (e.g., "+2.5%") without additional label ``` ## **Screenshots/Recordings** ### **Before** <!-- Asset rows show only values like "$1.2B" without metric indicator --> <img width="1206" height="2622" alt="Simulator Screenshot - iPhone16Pro-Delta - 2025-12-18 at 12 13 30" src="https://github.com/user-attachments/assets/91cfcc0a-280f-41e9-a2e0-4dfb306d5365" /> ### **After** <!-- Asset rows now show values with metric indicator like "$1.2B Vol" --> https://github.com/user-attachments/assets/6911f453-d660-4a7e-ba30-fd80acb680d9 ## **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] > Adds localized metric labels (Vol, OI, Funding) to Perps market row subtitles and updates tests accordingly. > > - **Perps UI**: > - `PerpsMarketRowItem.tsx`: Append localized metric indicators to the secondary value (e.g., `"$1.2B Vol"`, `"0.0500% Funding"`, `"25M OI"`); uses `strings('perps.sort.*_short')`; adds `numberOfLines` to trim text. > - **Tests**: > - Update `PerpsMarketRowItem.test.tsx` expectations to include metric labels across scenarios (volume ranges, zero values, funding rate cases, live updates). > - **i18n**: > - `locales/languages/en.json`: Add `perps.sort.volume_short` (Vol), `perps.sort.funding_rate_short` (Funding), `perps.sort.open_interest_short` (OI). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1a6143b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Position Size field in the asset details screen was showing 3 decimals for USD values (e.g., `$10.103`) instead of the standard 2 decimals used for fiat currency display. Changed the formatting config from `PRICE_RANGES_UNIVERSAL` (significant-digit based) to `PRICE_RANGES_MINIMAL_VIEW` (fixed 2 decimals), aligning with how the Margin field is already formatted. ## **Changelog** CHANGELOG entry: Fixed position size USD display showing 3 decimals instead of 2 ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2184 ## **Manual testing steps** ```gherkin Feature: Position Size USD Display Scenario: user views position size in USD Given user has an open position on any market And user is on the asset details screen When user taps the swap icon on the Size field to toggle to USD display Then position size should display with 2 decimal places (e.g., $10.10 not $10.103) ``` ## **Screenshots/Recordings** ### **Before** <img width="1206" height="2622" alt="Simulator Screenshot - iPhone16Pro-Delta - 2025-12-18 at 12 16 01" src="https://github.com/user-attachments/assets/5f484111-b288-4f8a-a817-ffded81fdfae" /> ### **After** <img width="1206" height="2622" alt="Simulator Screenshot - iPhone16Pro-Beta - 2025-12-18 at 12 16 18" src="https://github.com/user-attachments/assets/a10336e4-db61-4a27-ab12-da37e46da92c" /> ## **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] > Switch USD size display in `PerpsPositionCard` to minimal fiat formatting (2-decimal) by using `PRICE_RANGES_MINIMAL_VIEW`. > > - **UI (Perps)**: > - Update USD size formatting in `app/components/UI/Perps/components/PerpsPositionCard/PerpsPositionCard.tsx` to use `PRICE_RANGES_MINIMAL_VIEW` when `showSizeInUSD` is active, ensuring 2-decimal fiat display. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 05c0374. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Fix text truncation in the Perps market header for hip-3 markets (like XYZ100). The market name was being clamped/cut off when displayed alongside the leverage badge due to missing flex constraints in the flex row layout. Added `flexShrink: 1` to the asset name text style and `flexShrink: 0` to the leverage badge style to ensure proper layout behavior. ## **Changelog** CHANGELOG entry: Fixed market name text being truncated in Perps header for hip-3 markets ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2194 ## **Manual testing steps** ```gherkin Feature: Perps market header display Scenario: user views hip-3 market header Given user is on the Perps trading section When user navigates to a hip-3 market page (e.g., XYZ100) Then the header shows the full market name "XYZ100-USD" without truncation And the leverage badge "20x" is fully visible next to the market name ``` ## **Screenshots/Recordings** ### **Before** <!-- Market name "XYZ100-USD" text is clamped/truncated by the leverage badge --> ### **After** <!-- Market name displays fully alongside the leverage badge --> <img width="1206" height="2622" alt="Simulator Screenshot - iPhone16Pro-Gamma - 2025-12-18 at 19 44 41" src="https://github.com/user-attachments/assets/33f898b8-8764-46c2-8f45-3642fc5caa4f" /> ## **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] > Set `flexShrink: 1` on `assetName` and `flexShrink: 0` on `maxLeverage` to fix market name truncation alongside the leverage badge. > > - **Perps UI layout**: > - **Market Header (`PerpsMarketHeader.styles.ts`)**: Add `flexShrink: 1` to `assetName` to allow text to shrink instead of truncating. > - **Leverage Badge (`PerpsLeverage.styles.ts`)**: Add `flexShrink: 0` to `maxLeverage` to prevent the badge from compressing. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fb18ca0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
#24048) ## **Description** Fixed an issue where the MUSD CTA was incorrectly displaying when a single unsupported chain (like BSC) was selected in the network filter. The bug occurred because when a non-buyable chain was selected, the code was still showing the CTA if mUSD was buyable on *any* chain (e.g., Mainnet or Linea), rather than hiding it completely. This was confusing for users since they couldn't actually buy mUSD on the selected chain. **Changes:** - When a non-buyable chain is selected (BSC, Polygon, Arbitrum, etc.), the CTA now correctly hides - When a buyable chain is selected but mUSD is not available in the user's region for that specific chain, the CTA now correctly hides ## **Changelog** CHANGELOG entry: Fixed mUSD CTA incorrectly appearing on unsupported chains like BSC ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-124 ## **Manual testing steps** ```gherkin Feature: MUSD CTA visibility Scenario: user selects BSC network Given user is on the token list view And user does not have any MUSD balance And user does not have any token balance When user selects BSC as the only network filter Then the MUSD CTA should not be displayed Scenario: user selects Linea network Given user is on the token list view And user does not have any MUSD balance And user does not have any token balance And mUSD is buyable in user's region on Linea When user selects Linea as the only network filter Then the MUSD CTA should be displayed with network icon Scenario: user selects Mainnet network Given user is on the token list view And user does not have any MUSD balance And user does not have any token balance And mUSD is buyable in user's region on Mainnet When user selects Mainnet as the only network filter Then the MUSD CTA should be displayed with network icon Scenario: user selects all networks Given user is on the token list view And user does not have any MUSD balance And user does not have any token balance And mUSD is buyable in user's region When user has all networks selected Then the MUSD CTA should be displayed without network icon Scenario: user selects Linea network Given user is on the token list view And user does not have any MUSD balance And user does has token balance When user selects any network filter Then the MUSD CTA should be displayed with network icon Then the MUSD CTA should direct to BuyWithToken component on the chain of token being converted (soon to be constrained to that chain specifically in. separate pr) ``` ## **Screenshots/Recordings** ### **Before** <!-- [screenshots/recordings] --> ### **After** https://github.com/user-attachments/assets/45040e69-f737-4112-baad-36f0390c3453 <!-- [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] > Updates the mUSD CTA to show/hide and route per selected chain and regional availability, with a new feature flag, network badge, and supporting hooks/tests. > > - **Earn UI – mUSD CTA**: > - Integrates `useMusdCtaVisibility` to conditionally render CTA; hides on non-buyable/unsupported chains and when mUSD isn’t buyable in-region. > - Shows network badge for single supported selections using `BadgeWrapper` and `getNetworkImageSource`; aligns avatar layout. > - Adjusts buy flow to use `selectedChainId` (fallback to `MUSD_CONVERSION_DEFAULT_CHAIN_ID`). > - **Hooks/Logic**: > - Adds `useHasMusdBalance` to detect mUSD balances across chains. > - Adds `useMusdCtaVisibility` to compute `shouldShowCta`, `showNetworkIcon`, and `selectedChainId` based on feature flag, selected networks, ramp token availability, and balances. > - Introduces `MUSD_BUYABLE_CHAIN_IDS` (excludes BSC) and uses `MUSD_TOKEN_ASSET_ID_BY_CHAIN` for routing. > - **Feature Flags/Config**: > - Adds env flag `MM_MUSD_CTA_ENABLED` and selector `selectIsMusdCtaEnabledFlag`. > - **Tests**: > - Extensive new tests for `useHasMusdBalance`, `useMusdCtaVisibility`, and updated CTA tests for visibility, routing, and network badge behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit cd04745. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR fixes sentence case violations in lines 6001-7000 of the `locales/languages/en.json` file as part of ongoing content papercut improvements. The changes convert Title Case strings to sentence case following standard capitalization conventions. **What is the reason for the change?** Content consistency and adherence to proper sentence case formatting across the app. **What is the improvement/solution?** Updated ~31 locale keys from Title Case to sentence case, and updated all affected test files to match the new casing. ## **Changelog** CHANGELOG entry: Fixed sentence case violations in English locale strings lines 6001-7000 ## **Related issues** Fixes: Part of content papercut improvements batch 7 Follows: #23499 (lines 1-1000), #23516 (lines 1001-2000), #23957 (lines 2001-3000), #23994 (lines 3001-4000), #23996 (lines 4001-5000), #24049 (lines 5001-6000) Related: #23272 (original comprehensive PR) ## **Manual testing steps** ```gherkin Feature: Locale string display Scenario: user views UI elements with updated locale strings Given the app is running with the updated locale file When user views QR code options Then "Text" and "QR code" should display in sentence case When user views gas fee warnings Then "Max priority fee" and "Max fee" should display in sentence case When user views confirm screens Then "Get signature" should display in sentence case And "Standard account" should display in sentence case When user views bridge transaction details Then "Estimated time", "Quote details", "Network fee" should display in sentence case And "Price impact", "Minimum received" should display in sentence case And "View on block explorer", "Transaction details" should display in sentence case When user views wallet recovery Then "Wallet recovery", "Log in with social accounts", "Set up" should display in sentence case When user views multichain account screens Then "Account details", "Account name", "Account address" should display in sentence case And "Wallet name", "Reveal recovery phrase" should display in sentence case And "Edit account name", "Remove account", "Share address" should display in sentence case When user views Card screens Then "Enable card", "Enable assets" should display in sentence case And "Verification not approved", "Verification required" should display in sentence case When user views Rewards screens Then "Unknown error", "Season summary coming soon", "Rewards settings" should display in sentence case ``` ## **Screenshots/Recordings** N/A - This is a content-only change with no visual differences beyond text casing ## **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)). ## **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. --- ## **Technical Details** ### Changes Made: - **Locale file**: Updated ~31 keys in `locales/languages/en.json` (lines 6001-7000) - **Test files**: Updated 12 test files to match new casing - **Snapshots**: Regenerated 1 snapshot file to match new casing ### Affected Areas: - QR code display options (Text, QR code) - Gas fee validation messages (Max priority fee, Max fee) - Confirm/Signature flows (Get signature, Standard account) - Bridge transaction details (Estimated time, Quote details, Network fee, Price impact, etc.) - View on block explorer links - Wallet recovery and setup flows - Multichain account management (Account details, names, addresses, removal, sharing) - Card verification statuses and enablement - Rewards authentication and settings ### Validation: - All affected unit tests pass - No old Title Case strings remain in updated snapshot files - Changes are purely cosmetic (text casing only) 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Converts various Title Case strings to sentence case in `locales/languages/en.json` and updates affected tests/snapshots to match. > > - **Localization**: > - Convert multiple strings to sentence case in `locales/languages/en.json` (e.g., `Share address`, `Account details`, `Verification not approved`, `View on block explorer`, `Network fee`, `Price impact`, `Estimated time`, etc.). > - **Tests/Snapshots**: > - Update assertions and snapshot text to match new casing across: > - `app/components/Nav/App/App.test.tsx` (`Share address`) > - Bridge: `BlockExplorersModal.test.tsx`, `QuoteDetailsCard.test.tsx.snap` (tooltips/text) > - Card: `CardHome.test.tsx` (KYC titles/messages) > - Navbar: `index.test.jsx` (titles like `Account details`) > - Confirmations: footer/info/switch-account-type rows and modal tests (`Get signature`, `Standard account`) > - Rewards: `RewardsNavigator.test.tsx` (`Authentication failed`) > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit a10cb71. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 : )