Skip to content

Commit c98d19a

Browse files
fix: android crash for new social login users cp-7.79.0 (#30775)
## Description Cherry-pick of #30765 with manual conflict resolution. Skips success animation on Android for seedless onboarding flow to prevent crash on new social login users. ## Changes - Add `SEEDLESS_ONBOARDING` to `ONBOARDING_SUCCESS_FLOW` enum - Skip success animation on Android for seedless onboarding - Include seedless onboarding in wallet home steps eligibility ## Original PR #30765 CHANGELOG entry: null <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Targeted UI/navigation guard on Android for one onboarding flow; no auth or wallet-core logic changes beyond existing success-flow routing. > > **Overview** > Fixes an **Android crash** when new **social (seedless) login** users finish password setup by skipping the Rive-based **onboarding success animation** on that platform for the new flow. > > **Choose Password** now resets navigation to **Onboarding Success** with `successFlow: SEEDLESS_ONBOARDING` instead of `showPasswordHint: true`, and a matching **`SEEDLESS_ONBOARDING`** value is added to **`ONBOARDING_SUCCESS_FLOW`**. **Onboarding Success** conditionally omits **`OnboardingSuccessEndAnimation`** when `Platform.OS === 'android'` and the flow is seedless. **Wallet home onboarding steps** eligibility treats seedless onboarding like other first-time completion flows, with tests updated. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit a1ce648. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Gaurav Goel <grvgoel19@gmail.com>
1 parent 1657ce6 commit c98d19a

6 files changed

Lines changed: 24 additions & 8 deletions

File tree

app/components/Views/ChoosePassword/index.test.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
PREVIOUS_SCREEN,
77
PROTECT,
88
} from '../../../constants/navigation';
9+
import { ONBOARDING_SUCCESS_FLOW } from '../../../constants/onboarding';
910
import Routes from '../../../constants/navigation/Routes';
1011
import { Provider } from 'react-redux';
1112
import { backgroundState } from '../../../util/test/initial-root-state';
@@ -699,7 +700,9 @@ describe('ChoosePassword', () => {
699700
routes: [
700701
{
701702
name: 'OnboardingSuccess',
702-
params: { showPasswordHint: true },
703+
params: {
704+
successFlow: ONBOARDING_SUCCESS_FLOW.SEEDLESS_ONBOARDING,
705+
},
703706
},
704707
],
705708
});

app/components/Views/ChoosePassword/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import { MetaMetricsEvents } from '../../../core/Analytics';
6060
import {
6161
AccountType,
6262
getSocialAccountType,
63+
ONBOARDING_SUCCESS_FLOW,
6364
} from '../../../constants/onboarding';
6465
import type {
6566
IMetaMetricsEvent,
@@ -355,7 +356,9 @@ const ChoosePassword = () => {
355356
routes: [
356357
{
357358
name: Routes.ONBOARDING.SUCCESS,
358-
params: { showPasswordHint: true },
359+
params: {
360+
successFlow: ONBOARDING_SUCCESS_FLOW.SEEDLESS_ONBOARDING,
361+
},
359362
},
360363
],
361364
});

app/components/Views/OnboardingSuccess/index.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { useCallback, useLayoutEffect } from 'react';
2+
import { Platform } from 'react-native';
23
import { useDispatch } from 'react-redux';
34
import { SafeAreaView } from 'react-native-safe-area-context';
45
import {
@@ -105,13 +106,19 @@ export const OnboardingSuccessComponent: React.FC<OnboardingSuccessProps> = ({
105106
return strings('onboarding_success.wallet_ready');
106107
};
107108

109+
const shouldSkipSuccessAnimation =
110+
Platform.OS === 'android' &&
111+
successFlow === ONBOARDING_SUCCESS_FLOW.SEEDLESS_ONBOARDING;
112+
108113
const renderContent = () => (
109114
<>
110-
<OnboardingSuccessEndAnimation
111-
onAnimationComplete={() => {
112-
// No-op: Animation completion not needed in success mode
113-
}}
114-
/>
115+
{!shouldSkipSuccessAnimation && (
116+
<OnboardingSuccessEndAnimation
117+
onAnimationComplete={() => {
118+
// No-op: Animation completion not needed in success mode
119+
}}
120+
/>
121+
)}
115122
<Text
116123
variant={TextVariant.DisplayMd}
117124
fontFamily={FontFamily.Accent}

app/constants/onboarding.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export enum ONBOARDING_SUCCESS_FLOW {
6969
BACKED_UP_SRP = 'backedUpSRP',
7070
NO_BACKED_UP_SRP = 'noBackedUpSRP',
7171
IMPORT_FROM_SEED_PHRASE = 'importFromSeedPhrase',
72+
SEEDLESS_ONBOARDING = 'seedlessOnboarding',
7273
SETTINGS_BACKUP = 'settingsBackup',
7374
REMINDER_BACKUP = 'reminderBackup',
7475
}

app/util/onboarding/walletHomeOnboardingStepsEligibility.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ describe('shouldMarkWalletHomeOnboardingStepsEligible', () => {
66
ONBOARDING_SUCCESS_FLOW.BACKED_UP_SRP,
77
ONBOARDING_SUCCESS_FLOW.NO_BACKED_UP_SRP,
88
ONBOARDING_SUCCESS_FLOW.IMPORT_FROM_SEED_PHRASE,
9+
ONBOARDING_SUCCESS_FLOW.SEEDLESS_ONBOARDING,
910
])('returns true for first-time onboarding flow %s', (flow) => {
1011
expect(shouldMarkWalletHomeOnboardingStepsEligible(flow)).toBe(true);
1112
});

app/util/onboarding/walletHomeOnboardingStepsEligibility.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export function shouldMarkWalletHomeOnboardingStepsEligible(
2323
return (
2424
successFlow === ONBOARDING_SUCCESS_FLOW.BACKED_UP_SRP ||
2525
successFlow === ONBOARDING_SUCCESS_FLOW.NO_BACKED_UP_SRP ||
26-
successFlow === ONBOARDING_SUCCESS_FLOW.IMPORT_FROM_SEED_PHRASE
26+
successFlow === ONBOARDING_SUCCESS_FLOW.IMPORT_FROM_SEED_PHRASE ||
27+
successFlow === ONBOARDING_SUCCESS_FLOW.SEEDLESS_ONBOARDING
2728
);
2829
}

0 commit comments

Comments
 (0)