Skip to content

refactor: standardize intro sheets - #1314

Open
pwltr wants to merge 5 commits into
fix/polishfrom
fix/sheet-intros
Open

pwltr wants to merge 5 commits into
fix/polishfrom
fix/sheet-intros

Conversation

@pwltr

@pwltr pwltr commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

This PR:

  1. Adds a shared intro-sheet layout for consistent artwork, copy, spacing, and actions
  2. Migrates the backup, QuickPay, background payments, update, high-balance, PIN, and force-transfer intros to the shared layout
  3. Aligns full-screen and timed-sheet actions with their intended behavior
  4. Adds localized QuickPay copy and the full-size background-payments illustration
  5. Documents timed-sheet eligibility, dismissal, and presentation behavior

Description

  • Adds a reusable intro-sheet component so artwork sizing, text layout, and button placement remain consistent.
  • Updates intro sheets to use the shared component while preserving their individual actions and eligibility rules.
  • Keeps the full-screen background-payments intro focused on enabling the feature, while its timed prompt retains the deferral action.
  • Adds localized QuickPay sheet messaging across supported locales.
  • Sizes the sent-transaction checkmark consistently with intro-sheet artwork.
  • Documents the timed-sheet behavior used by backup, QuickPay, background payments, PIN, and high-balance prompts.

Out of Scope

  • Timed-sheet scheduling and eligibility logic remains unchanged.
  • Full-screen onboarding layouts remain separate where their structure differs from sheet intros.

Design

  • Bitkit Wallet Figma
  • Mapped frames: Back up wallet › Backup Intro, Settings > General › BackgroundPayments Intro, and Settings > General › QuickPay Intro.
  • The remaining sheet variants reuse the same intro layout; exact out-of-map frame matches are not documented in docs/screens-map.md.

Preview

demo.mp4

QA Notes

Manual Tests

  • 1. Home with an eligible backup prompt → wait for Backup Intro: artwork, copy, Later, and Back Up Now fit without overlap.
  • 2. Home with an eligible QuickPay prompt → tap Later: sheet dismisses and does not return after the preference is recorded.
  • 3. QuickPay Intro → tap Learn More: QuickPay Settings opens.
  • 4. Background Payments Intro full screen: only Enable is shown; the timed sheet shows Later and Enable.
  • 5. Settings → Security → Secure Wallet intro: Continue works and the prompt variant retains Later.
  • 6. Receive a transaction → open New Transaction sheet: checkmark matches the intro artwork width and remains fully visible.
  • 7. Change locale → open QuickPay Intro: the updated description is translated.

Automated Checks

  • Local validation: just compile, just test (2,602 tests), and just lint pass.

@greptile-apps

greptile-apps Bot commented Sep 18, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

The PR appears safe to merge, with a non-blocking accessibility and small-display layout concern in the new shared intro component.

Findings

  1. P2 Actions Can Become Inaccessible

Summary

This PR introduces a reusable intro-sheet layout and migrates backup, QuickPay, background-payments, PIN, force-transfer, high-balance, and update prompts to it. It also aligns timed-sheet actions, adds localized QuickPay messaging and new artwork, standardizes transaction artwork sizing, and documents timed-sheet behavior.

  • Consolidates artwork, copy, spacing, optional secondary actions, loading state, and test tags in SheetIntro.
  • Separates full-screen background-payments behavior from its deferrable timed prompt.
  • Persists QuickPay timed-prompt dismissal before navigating to settings.
  • Adds QuickPay translations and timed-sheet lifecycle documentation.
  • The shared layout should handle vertically constrained and accessibility-scaled displays.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Intro presentation] --> B{Presentation type}
    B -->|Full-screen route| C[Single intended action]
    B -->|Timed sheet| D[Shared SheetIntro]
    C --> E[Enable or continue]
    D --> F{User action}
    F -->|Later or cancel| G[Persist dismissal state]
    F -->|Continue or learn more| H[Perform feature action]
    G --> I[Dismiss timed sheet]
    H --> I
Loading

Reviews (1) · Last reviewed commit: "chore: prepare sheet intro pr"

Comment thread app/src/main/java/to/bitkit/ui/components/SheetIntro.kt
@pwltr
pwltr added this pull request to stack #1315 September 18, 2026 13:51
@github-actions

github-actions Bot commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Regtest APK

Built from 9c79f4d (run).

Download bitkit-dev-debug universal APK (expires in 30 days).

@pwltr
pwltr requested review from jvsena42 and ovitrif September 18, 2026 15:07
ovi-reviewer[bot]

This comment was marked as resolved.

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No findings. The title says refactor, but this PR touches the PIN prompt, force transfer, update and backup sheets, so I reviewed it as a behaviour change.

Old and new behaviour compared on each migrated sheet (swipe-dismiss and Back included):

  • Backup / high balance / update. The same actions and the same persisted keys (backupWarningIgnoredMillis, balanceWarningTimes/balanceWarningIgnoredMillis). Critical updates still route to CriticalUpdateScreen, because AppUpdateTimedSheet.shouldShow() is false when critical.
  • QuickPay timed sheet. The new Later sets quickPayIntroSeen and dismisses, which is the same flag a swipe wrote before. No state lost.
  • Background payments. The timed sheet keeps Later/Enable. The full-screen intro is Enable-only. That matches iOS NotificationsIntro, and the user still reaches the settings screen when they decline the permission.
  • PIN prompt. showLaterButton still gates Later (only Home passes true), so there is no new skip path. The duplicate SecureWalletContinue tag is gone, and the e2e taps still resolve.
  • Force transfer. PrimaryButton debounce plus enabled && !isLoading are unchanged. Dismiss never calls forceTransfer.
  • Scheduling. Nothing under utils/timedsheets/ or the AppViewModel timed-sheet code changed. docs/timed-sheets.md matches the code: the 2s resume delay, priority order, intervals, thresholds and persisted keys.
  • Strings. The new settings__quickpay__sheet__description is in base and all 15 locales with no format args.
  • Test tags. Referenced tags are preserved. The renamed root tags have no references in androidTest, journeys or bitkit-e2e-tests.

Figma, Handoff v62: Backup Intro, BackgroundPayments Intro, the QuickPay and Background Payments sheets, High Wallet Balance, Update, Force close and the PIN prompt all match. Title, accent, copy, button order and variant, artwork, 32dp sides and the 32/8/32 rhythm are consistent. One question for design, not this PR: the full-screen BackgroundPayments Intro frame accents the title in Blue, while the timed sheet frame and this code use Purple.

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: ✅ Approve


Review: diff 30 files.

Findings:
3 inline (non-blocking)

Audit:
Skipped - only auth touched (score 2, threshold 3).

QA: emu-1 redroid container on Android 15, dev build 188

  1. passed: Backup Intro artwork, copy, Later, and Back Up Now fit without overlap; Later returned Home.

    Test 1:
    Home with an eligible backup prompt → wait for Backup Intro: artwork, copy, Later, and Back Up Now fit…
    1.mp4
  2. passed: Later dismissed QuickPay Intro, and the sheet stayed dismissed after restarting the app.

    Test 2:
    Home with an eligible QuickPay prompt → tap Later: sheet dismisses and does not return after the preference…
    2.mp4
  3. passed: Learn More opened QuickPay Settings.

    Test 3:
    QuickPay Intro → tap Learn More: QuickPay Settings opens.
    3.mp4
  4. passed: The full-screen Background Payments intro showed only Enable; the timed sheet showed Later and Enable.

    Test 4:
    Background Payments Intro full screen: only Enable is shown; the timed sheet shows Later and Enable.
    4.mp4
  5. passed: The Secure Wallet prompt retained Later, and Continue opened Choose 4-Digit PIN.

    Test 5:
    Settings → Security → Secure Wallet intro: Continue works and the prompt variant retains Later.
    5.mp4
  6. passed: A real 10,000-sat on-chain send showed a fully visible checkmark matching the intro artwork width.

    Test 6:
    Receive a transaction → open New Transaction sheet: checkmark matches the intro artwork width and remains…
    6.mp4
  7. passed: QuickPay Intro showed the updated description in French.

    Test 7:
    Change locale → open QuickPay Intro: the updated description is translated.
    7.mp4

Tip

Test 1 worth a journey:

  • Fund the wallet with a confirmed transaction
  • Return to Home and wait for Backup Intro
  • Verify the artwork, copy, Later, and Back Up fit without overlap
  • Tap Later and verify Home returns

Test 2 worth a journey:

  • Fund the Spending balance and return to Home
  • Wait for the QuickPay timed sheet
  • Tap Later
  • Restart the app and wait on Home
  • Verify QuickPay does not return

Test 3 worth a journey:

  • Fund the Spending balance and return to Home
  • Wait for the QuickPay timed intro
  • Tap Learn More
  • Verify QuickPay Settings opens

Test 4 worth a journey:

  • Fund the Spending balance and return to Home
  • Wait for the Background Payments timed sheet
  • Verify Later and Enable are both shown
  • Tap Later
  • Reset the settings state in Dev Settings
  • Open Settings, General, and Background Payments
  • Verify the full-screen intro shows only Enable

Test 5 worth a journey:

  • Open Settings, Security, PIN Code, and Enable PIN
  • Verify the PIN chooser opens
  • Return to a fresh empty wallet and reveal the Secure suggestion
  • Open Secure and verify Later is shown
  • Tap Secure Wallet and verify the PIN chooser opens

Test 6 worth a journey:

  • Receive and confirm a transaction in the wallet
  • Open Send with a regtest on-chain address
  • Enter 10 000 sats and continue
  • Swipe to pay
  • Verify the transaction checkmark matches the intro artwork width and remains fully visible

Test 7 worth a journey:

  • Change the app locale to French
  • Fund the Spending balance and return to Home
  • Wait for QuickPay Intro
  • Verify the description is translated into French

Coverage:
QA: 7 of 7 manual tests passed


Reviewed by gpt-5.6-sol-high via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner)

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: ✅ Approve


Reaudit: diff 20 files.

Findings:
2 inline (non-blocking)

Audit:
Already done in comment.

Coverage:
QA: journeys and manual tests await all reviewers to approve, author can run it now via comment: @ovi-reviewer test


Reviewed by gpt-5.6-sol-high via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants