Skip to content

Conversation

@janicduplessis
Copy link
Contributor

@janicduplessis janicduplessis commented Nov 13, 2025

Fixes APP-3214

What changed (plus any additional context for devs)

  • Remove current contact support alert.
  • Remove confusing alert "Your current authentication method (Face Recognition) is not secure enough"
  • Add a new WalletErrorSheet component to handle cases where the wallet is damaged. Supports the following states:
    • Device transfer on iOS
    • Remove passcode on iOS and Android
  • Fix Android prompting for passcode when the user doesn't have one.
  • Fix wallet.damaged value

Screen recordings / screenshots

TODO

What to test

iOS

Note: Must use a real device

Passcode removed

  • Make sure the device has a passcode
  • Import a wallet
  • Remove passcode
  • Try to interact with the wallet

Device transfer

  • Make sure the device has a passcode
  • Go to Developer Settings -> Simulate Device Transfer
  • Try to interact with the wallet

Android

Passcode removed

  • Make sure the device has a passcode
  • Import a wallet
  • Remove passcode
  • Try to interact with the wallet

@linear
Copy link

linear bot commented Nov 13, 2025

@janicduplessis
Copy link
Contributor Author

/perf

@ibrahimtaveras00 ibrahimtaveras00 self-requested a review November 19, 2025 18:19
Copy link
Contributor

@ibrahimtaveras00 ibrahimtaveras00 left a comment

Choose a reason for hiding this comment

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

Issues during my testing, posted here

@janicduplessis janicduplessis marked this pull request as ready for review November 26, 2025 16:39
@github-actions
Copy link

Launch in simulator or device for dbe7f3b

@github-actions
Copy link

github-actions bot commented Nov 26, 2025

🧪 Flashlight Performance Report (AWS Device Farm)

🔀 Commit: 1d15ec1

📎 View Artifacts

Metric Current Δ vs Baseline
Time to Interactive (TTI) 5461 ms 🟢 -100.1 ms (-1.8%)
Average FPS 55.57 🔴 -1.1 (-1.9%)
Average RAM 402.9 MB 🔴 +14.3 MB (+3.7%)

@github-actions
Copy link

Launch in simulator or device for 1b2a598

@github-actions
Copy link

Launch in simulator or device for 3294694

@github-actions
Copy link

Launch in simulator or device for 70f2315

@github-actions
Copy link

Launch in simulator or device for f5408dd

@github-actions
Copy link

Launch in simulator or device for d227848

@github-actions
Copy link

github-actions bot commented Dec 9, 2025

Launch in simulator or device for 637425c

@github-actions
Copy link

github-actions bot commented Dec 9, 2025

Launch in simulator or device for f366db1

@github-actions
Copy link

Launch in simulator or device for 2682125

<>
<CopyFloatingEmojis textToCopy={accountAddress}>
<ActionButton onPress={handlePressCopy} icon="􀐅" testID="receive-button">
<CopyFloatingEmojis textToCopy={accountAddress} onPress={handlePressCopy} disabled={isDamagedWallet}>
Copy link
Contributor Author

Choose a reason for hiding this comment

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

There was an issue on Android where the copied toast didn't work because only the onPress on CopyFloatingEmojis was getting called.


switch (action) {
case 'import':
await savePIN('1111');
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I noticed that in e2e tests the PIN screen would always ask to create a PIN since we never saved it when using the deep link handler here.

validPin = await getExistingPIN();
// eslint-disable-next-line no-empty
} catch (e) {}
if (!validPin) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This fixes the create pin screen showing up when the user doesn't have a PIN. Places where pin creation is possible already use authenticateWithPINAndCreateIfNeeded which handle this case.

This is needed since if keychain is missing we no longer have the user pin. When that happens we should not ask them to create a new PIN, they should restore from backup.

"no_price": "الأرصدة الصغيرة"
},
"authenticate": {
"alert": {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Cleanup some unused messages.

name: DEFAULT_WALLET_NAME,
primary: true,
type: WalletTypes.mnemonic,
encryptionType: EncryptionType.keychain,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This field was added to know the type of encryption used on the wallet. This allows us to only check wallets saved in keychain.

Copy link
Contributor

@ibrahimtaveras00 ibrahimtaveras00 left a comment

Choose a reason for hiding this comment

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

All issues have been resolved, QA Passed 👍🏽

});

const validateRecipient = (toAddress?: string, tokenAddress?: string) => {
if (!toAddress || toAddress?.toLowerCase() === tokenAddress?.toLowerCase()) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Separated this in 2 different checks since we want to show the sheet only in the case that the validation fails because the recipient wallet is in damaged state.


checkKeychainIntegrity: async () => {
try {
const startTime = Date.now();
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is a complete rewrite of checkKeychainIntegrity with our current requirements.


export const loadWallet = async <S extends Screen>({
address,
showErrorIfNotLoaded = true,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I didn't see any cases where we wouldn't want to show the error sheet when loading wallet, so removed this option.

@github-actions
Copy link

Launch in simulator or device for bd794d8

@github-actions
Copy link

Launch in simulator or device for 4d4032d

@github-actions
Copy link

github-actions bot commented Jan 6, 2026

Launch in simulator or device for 40b7f26

@github-actions
Copy link

github-actions bot commented Jan 6, 2026

Launch in simulator or device for aba1072

@github-actions
Copy link

github-actions bot commented Jan 7, 2026

Launch in simulator or device for 1d15ec1

@janicduplessis janicduplessis merged commit 2eac7ec into develop Jan 12, 2026
21 of 24 checks passed
@janicduplessis janicduplessis deleted the @janic/wallet-error branch January 12, 2026 17:15
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.

5 participants