Skip to content

chore(runway): cherry-pick fix: qr scanner appearing before the confirmations screen#30193

Merged
vpintorico merged 3 commits into
release/7.77.0from
cherry-pick-7-77-0-a9c779f
May 14, 2026
Merged

chore(runway): cherry-pick fix: qr scanner appearing before the confirmations screen#30193
vpintorico merged 3 commits into
release/7.77.0from
cherry-pick-7-77-0-a9c779f

Conversation

@runway-github

@runway-github runway-github Bot commented May 14, 2026

Copy link
Copy Markdown
Contributor

Description

This PR fixes the issue where the qr scanning appears before the
confirmation screen.

Changelog

CHANGELOG entry: fixes the the qr scanner appearing before confirmations
page

Related issues

Fixes: #29949

Manual testing steps

  Scenario: QR hardware wallet transaction shows confirmation screen first
    Given the user has a QR hardware wallet account (e.g. Keystone) set up
      And the user is on that QR account in MetaMask
    When the user initiates a send transaction to an address
    Then the confirmation screen is displayed (NOT the QR scanner)
      And the user sees transaction details (amount, recipient, gas)
  Scenario: QR hardware wallet user confirms a transaction
    Given the user is on the confirmation screen for a QR account transaction
    When the user taps "Confirm"
    Then the QR scanner screen appears
      And the app waits for the QR code scan to complete the transaction
  Scenario: QR hardware wallet user rejects a transaction
    Given the user is on the confirmation screen for a QR account transaction
    When the user taps "Reject"
    Then the transaction is cancelled
      And the QR scanner does NOT appear
  Scenario: QR hardware wallet signature request shows confirmation first
    Given the user is on a QR hardware wallet account
    When a dApp requests a signature (personal_sign or eth_signTypedData)
    Then the confirmation screen is displayed
      And the QR scanner does NOT appear until the user taps "Confirm"
  Scenario: QR hardware wallet signature request shows QRInfo after confirm
    Given the user is on the confirmation screen for a QR account signature request
    When the user taps "Confirm"
    Then the QR scanner / QRInfo view is shown
      And the user can scan the QR code to complete signing

Screenshots/Recordings

Before

After

Screen_Recording_20260513_172613_MetaMask.mp4
Screen_Recording_20260514_195337_MetaMask.mp4

Pre-merge author checklist

Performance checks (if applicable)

  • I've tested on Android
    • Ideally on a mid-range device; emulator is acceptable
  • I've tested with a power user scenario
  • Use these power-user
    SRPs

    to import wallets with many accounts and tokens
  • I've instrumented key operations with Sentry traces for production
    performance metrics
  • See trace() for usage and
    addToken
    for an example

For performance guidelines and tooling, see the Performance
Guide
.

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.

Note

Medium Risk
Changes confirmation submit flow for QR hardware wallets by adding new
state and altering when scanning UI is shown; mistakes could block or
prematurely trigger signing for QR accounts. Scope is contained to
confirmations/QR hardware paths with updated tests.

Overview
Prevents the QR scanner/QRInfo view from appearing before the
confirmations screen by introducing signingConfirmed in
QRHardwareContext and only rendering QRInfo when QR signing is
active and the user has confirmed.

Updates useConfirmActions so tapping Confirm during an in-progress
QR signing session sets signingConfirmed and explicitly shows the
scanner, while still delegating to useQrConfirm for QR-hardware
accounts; also ensures signingConfirmed is set before executing the
default approval/transaction paths.

Adjusts QR confirm UX so useQrConfirm re-shows the
awaiting-confirmation bottom sheet when QR signing is already in
progress (instead of opening the QRInfo scanner), and updates footer
behavior/tests so the button label remains Confirm during QR signing.

Reviewed by Cursor Bugbot for commit
864f724. Bugbot is set up for automated
code reviews on this repo. Configure
here.

[a9c779f](https://github.com/MetaMask/metamask-mobile/commit/a9c779ffadf3bb5e7f8ae7f8f328f46acd18109a)

…30088)

<!--
Please submit this PR as a draft initially.

Do not mark it as "Ready for review" until this PR meets the canonical
Definition of Ready For Review in `docs/readme/ready-for-review.md`.

In short: the template must be materially complete (not just section
titles
present), all status checks must be currently passing, and the only
expected
follow-up commits must be reviewer-driven.
-->

This PR fixes the issue where the qr scanning appears before the
confirmation screen.

<!--
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?
-->

<!--
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: fixes the the qr scanner appearing before confirmations
page

Fixes: #29949

```gherkin
  Scenario: QR hardware wallet transaction shows confirmation screen first
    Given the user has a QR hardware wallet account (e.g. Keystone) set up
      And the user is on that QR account in MetaMask
    When the user initiates a send transaction to an address
    Then the confirmation screen is displayed (NOT the QR scanner)
      And the user sees transaction details (amount, recipient, gas)
  Scenario: QR hardware wallet user confirms a transaction
    Given the user is on the confirmation screen for a QR account transaction
    When the user taps "Confirm"
    Then the QR scanner screen appears
      And the app waits for the QR code scan to complete the transaction
  Scenario: QR hardware wallet user rejects a transaction
    Given the user is on the confirmation screen for a QR account transaction
    When the user taps "Reject"
    Then the transaction is cancelled
      And the QR scanner does NOT appear
  Scenario: QR hardware wallet signature request shows confirmation first
    Given the user is on a QR hardware wallet account
    When a dApp requests a signature (personal_sign or eth_signTypedData)
    Then the confirmation screen is displayed
      And the QR scanner does NOT appear until the user taps "Confirm"
  Scenario: QR hardware wallet signature request shows QRInfo after confirm
    Given the user is on the confirmation screen for a QR account signature request
    When the user taps "Confirm"
    Then the QR scanner / QRInfo view is shown
      And the user can scan the QR code to complete signing
```

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

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

https://github.com/user-attachments/assets/ee6004b2-2f63-47b2-b007-d623b7ed990e

https://github.com/user-attachments/assets/9798e0f2-6756-4e4b-87fd-ee2cc1ebf98b

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

<!--
Every checklist item must be consciously assessed before marking this PR
as
"Ready for review". A checked box means you deliberately considered that
responsibility, not that you literally performed every action listed.

Unchecked boxes are ambiguous: they are not an implicit "N/A" and they
are not
a silent "skip". See `docs/readme/ready-for-review.md` for the full
checklist
semantics.
-->

- [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.

- [ ] I've tested on Android
  - Ideally on a mid-range device; emulator is acceptable
- [ ] I've tested with a power user scenario
- Use these [power-user
SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93)
to import wallets with many accounts and tokens
- [ ] I've instrumented key operations with Sentry traces for production
performance metrics
- See [`trace()`](/app/util/trace.ts) for usage and
[`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274)
for an example

For performance guidelines and tooling, see the [Performance
Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers).

<!--
Reviewer checklist items follow the same semantics as the author
checklist: an
unchecked box is ambiguous, a checked box means the reviewer consciously
assessed that responsibility. See `docs/readme/ready-for-review.md`.
-->

- [ ] 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]
> **Medium Risk**
> Changes confirmation submit flow for QR hardware wallets by adding new
state and altering when scanning UI is shown; mistakes could block or
prematurely trigger signing for QR accounts. Scope is contained to
confirmations/QR hardware paths with updated tests.
>
> **Overview**
> Prevents the QR scanner/`QRInfo` view from appearing before the
confirmations screen by introducing `signingConfirmed` in
`QRHardwareContext` and only rendering `QRInfo` when QR signing is
active *and* the user has confirmed.
>
> Updates `useConfirmActions` so tapping Confirm during an in-progress
QR signing session sets `signingConfirmed` and explicitly shows the
scanner, while still delegating to `useQrConfirm` for QR-hardware
accounts; also ensures `signingConfirmed` is set before executing the
default approval/transaction paths.
>
> Adjusts QR confirm UX so `useQrConfirm` re-shows the
awaiting-confirmation bottom sheet when QR signing is already in
progress (instead of opening the `QRInfo` scanner), and updates footer
behavior/tests so the button label remains `Confirm` during QR signing.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
864f724. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@runway-github runway-github Bot requested a review from a team as a code owner May 14, 2026 16:12
@github-actions

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbotv2 metamaskbotv2 Bot added the team-bots Bot team (for MetaMask Bot, Runway Bot, etc.) label May 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

⏭️ Smart E2E selection skipped - PR targets a release branch (release/*)

All E2E tests pre-selected.

View GitHub Actions results

@sonarqubecloud

Copy link
Copy Markdown

@vpintorico vpintorico enabled auto-merge (squash) May 14, 2026 20:19
@vpintorico vpintorico merged commit 839c3ae into release/7.77.0 May 14, 2026
194 of 196 checks passed
@vpintorico vpintorico deleted the cherry-pick-7-77-0-a9c779f branch May 14, 2026 20:21
@github-actions github-actions Bot locked and limited conversation to collaborators May 14, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

size-M team-bots Bot team (for MetaMask Bot, Runway Bot, etc.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants