Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/remove-llm-reborn-abtest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"live-mobile": patch
"@ledgerhq/types-live": patch
---

Remove llmRebornABtest feature flag and legacy NoLedgerYetModal onboarding path
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ export default class OnboardingStepsPage {
acceptAnalyticsButton = () => getElementById(this.acceptAnalyticsButtonId);
accessWalletButton = () => getElementById("onboarding-accessWallet");
noLedgerYetButton = () => getElementById("onboarding-noLedgerYet");
exploreAppButton = () => getElementById("onboarding-noLedgerYetModal-explore");
connectLedgerButton = () => getElementById("Existing Wallet | Connect");

setupLedger = "onboarding-setupLedger";
Expand Down Expand Up @@ -65,11 +64,7 @@ export default class OnboardingStepsPage {
}

async chooseToExploreApp() {
await tapByElement(this.exploreAppButton());
// In test mode, the carousel is skipped and only the last slide
// is shown. This avoids all carousel animation/clipping issues
// with the new React Native New Architecture. Just wait for the
// final slide and tap the explore button.
// DETOX: chooseNoLedgerYet navigates straight to discover live (no upsell modal).
await waitForElementById(this.discoverLiveTitle(3));
await waitForElementById(this.exploreWithoutDeviceButtonId);
await tapById(this.exploreWithoutDeviceButtonId);
Expand Down
18 changes: 0 additions & 18 deletions apps/ledger-live-mobile/src/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1867,31 +1867,13 @@
"postWelcomeStep": {
"title": "Let’s get started",
"noLedgerYet": "I don’t have a Ledger yet",
"noLedgerYetModal": {
"title": "Millions of users. 0 hacks.",
"desc": "Experience peace of mind with a Ledger securing your digital assets.",
"buy": "Buy a Ledger",
"explore": "Explore this app"
},
"setupLedger": {
"title": "Set up your Ledger",
"subtitle": "Select if your Ledger is new or was reset."
},
"accessWallet": {
"title": "Access your wallet",
"subtitle": "Select if your Ledger is already set up."
},
"buyNano": {
"title": "Buy a Ledger Nano X",
"subtitle": "A Ledger device is the only way to ensure your assets are secure "
},
"discoverLedger": {
"title": "Explore Ledger Wallet",
"subtitle": "Explore the app and learn about its benefits "
},
"desktopSync": {
"title": "Sync with desktop app",
"subtitle": "Sync your assets from Ledger Wallet desktop with your mobile."
}
},
"welcomeBackStep": {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Button, Icons } from "@ledgerhq/native-ui";
import { useFocusEffect, useNavigation, useRoute } from "@react-navigation/native";
import React, { useCallback, useState } from "react";
import React, { useCallback } from "react";
import { Linking } from "react-native";
import { useTranslation } from "~/context/Locale";
import { useDispatch } from "~/context/hooks";
Expand All @@ -11,11 +11,11 @@ import { OnboardingNavigatorParamList } from "~/components/RootNavigator/types/O
import { StackNavigatorProps } from "~/components/RootNavigator/types/helpers";
import { NavigatorName, ScreenName } from "~/const";
import { SelectionCards } from "./Cards/SelectionCard";
import { NoLedgerYetModal } from "./NoLedgerYetModal";
import OnboardingView from "./OnboardingView";
import { useFeature, useWalletFeaturesConfig } from "@features/platform-feature-flags";
import { useWalletFeaturesConfig } from "@features/platform-feature-flags";
import { urls } from "~/utils/urls";
import { useLocalizedUrl } from "LLM/hooks/useLocalizedUrls";
import { DETOX_ENABLED } from "~/utils/constants";

type NavigationProps = StackNavigatorProps<
OnboardingNavigatorParamList,
Expand All @@ -31,28 +31,9 @@ function PostWelcomeSelection() {
const userHasDevice = route.params?.userHasDevice ?? false;
const currentNavigation = navigation.getParent()?.getParent()?.getState().routes[0].name;
const isInOnboarding = currentNavigation === NavigatorName.BaseOnboarding;
const llmRebornABtest = useFeature("llmRebornABtest");
const localizedRebornUrl = useLocalizedUrl(urls.reborn);
const { isEnabled: isWallet40Enabled } = useWalletFeaturesConfig("mobile");

const [modalOpen, setModalOpen] = useState(false);

const openModal = () => {
identifyUser(null);
track("button_clicked", {
button: "I don’t have a Ledger yet",
});
if (llmRebornABtest?.enabled) {
Linking.openURL(localizedRebornUrl);
} else {
setModalOpen(true);
}
};

const closeModal = () => {
setModalOpen(false);
};

const identifyUser = useCallback(
(hasDevice: boolean | null) => {
if (isInOnboarding) dispatch(setOnboardingHasDevice(hasDevice));
Expand All @@ -61,10 +42,21 @@ function PostWelcomeSelection() {
[dispatch, isInOnboarding],
);

useFocusEffect(() => {
if (!modalOpen) {
identifyUser(null);
const openNoLedgerYet = useCallback(() => {
identifyUser(null);
track("button_clicked", {
button: "I don’t have a Ledger yet",
});
// Detox: keep the discover-live read-only e2e path; production opens the Reborn URL
if (DETOX_ENABLED) {
navigation.navigate(ScreenName.OnboardingModalDiscoverLive);
return;
}
Linking.openURL(localizedRebornUrl);
}, [identifyUser, localizedRebornUrl, navigation]);

useFocusEffect(() => {
identifyUser(null);
});
Comment on lines +58 to 60

const setupLedger = () => {
Expand All @@ -88,7 +80,7 @@ function PostWelcomeSelection() {
}}
footer={
isWallet40Enabled && userHasDevice ? undefined : (
<Button type="default" mb={10} onPress={openModal} testID="onboarding-noLedgerYet">
<Button type="default" mb={10} onPress={openNoLedgerYet} testID="onboarding-noLedgerYet">
{t("onboarding.postWelcomeStep.noLedgerYet")}
</Button>
)
Expand Down Expand Up @@ -120,8 +112,6 @@ function PostWelcomeSelection() {
},
]}
/>

<NoLedgerYetModal isOpen={modalOpen} onClose={closeModal} />
</OnboardingView>
);
}
Expand Down
7 changes: 1 addition & 6 deletions e2e/mobile/page/onboarding/onboardingSteps.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ export default class OnboardingStepsPage {
onboardingGetStartedButton = () => getElementById(this.getStartedButtonId);
acceptAnalyticsButton = () => getElementById(this.acceptAnalyticsButtonId);
noLedgerYetButton = () => getElementById("onboarding-noLedgerYet");
exploreAppButton = () => getElementById("onboarding-noLedgerYetModal-explore");
setupLedgerButton = () => getElementById(this.setupLedger);
accessWalletButton = () => getElementById(this.accessWallet);
deviceCardHeader = (title: string) => getElementById(`${this.deviceCardId(title)}-header`);
Expand Down Expand Up @@ -137,11 +136,7 @@ export default class OnboardingStepsPage {

@Step("Choose to explore app")
async chooseToExploreApp(): Promise<void> {
await tapByElement(this.exploreAppButton());
// In test mode, the carousel is skipped and only the last slide
// is shown. This avoids all carousel animation/clipping issues
// with the new React Native New Architecture. Just wait for the
// final slide and tap the explore button.
// DETOX: chooseNoLedgerYet navigates straight to discover live (no upsell modal).
await waitForElementById(this.discoverLiveTitle(3));
await waitForElementById(this.exploreWithoutDeviceButtonId);
await tapById(this.exploreWithoutDeviceButtonId);
Expand Down
1 change: 0 additions & 1 deletion libs/ledgerjs/packages/types-live/src/feature.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,8 @@
currencyUnichainSepolia: DefaultFeature;
currencyArc: DefaultFeature;
currencyArcTestnet: DefaultFeature;
currencyRobinhood: DefaultFeature;

Check warning on line 176 in libs/ledgerjs/packages/types-live/src/feature.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

'DefaultFeature' is deprecated.

See more on https://sonarcloud.io/project/issues?id=LedgerHQ_ledger-live&issues=AZ7629FkC8HypAW_mxGa&open=AZ7629FkC8HypAW_mxGa&pullRequest=18962
currencyRobinhoodTestnet: DefaultFeature;

Check warning on line 177 in libs/ledgerjs/packages/types-live/src/feature.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

'DefaultFeature' is deprecated.

See more on https://sonarcloud.io/project/issues?id=LedgerHQ_ledger-live&issues=AZ7629FkC8HypAW_mxGb&open=AZ7629FkC8HypAW_mxGb&pullRequest=18962
};

/**
Expand Down Expand Up @@ -325,7 +325,6 @@
zcashShielded: DefaultFeature;
llmNanoOnboardingFundWallet: DefaultFeature;
lldRebornABtest: DefaultFeature;
llmRebornABtest: DefaultFeature;
lifiSolana: DefaultFeature;
llmOnboardingEnableSync: Feature_OnboardingEnableSync;
lldOnboardingEnableSync: Feature_OnboardingEnableSync;
Expand All @@ -347,7 +346,7 @@
llmTransferButtonCopyVariant: Feature_LlmTransferButtonCopyVariant;
lldTezosStaking: DefaultFeature;
llmTezosStaking: DefaultFeature;
swapToEarn: DefaultFeature;

Check warning on line 349 in libs/ledgerjs/packages/types-live/src/feature.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

'DefaultFeature' is deprecated.

See more on https://sonarcloud.io/project/issues?id=LedgerHQ_ledger-live&issues=AZ7629FkC8HypAW_mxIc&open=AZ7629FkC8HypAW_mxIc&pullRequest=18962
};

/**
Expand Down Expand Up @@ -973,7 +972,7 @@
/** @deprecated Moved to `@shared/feature-flags`. Use `Features["lwmWallet40"]` from `@shared/feature-flags` instead. */
export type Feature_LwmWallet40 = Feature<Feature_Wallet40_Params>;
/** @deprecated Moved to `@shared/feature-flags`. Use `Features["lwdWallet40"]` from `@shared/feature-flags` instead. */
export type Feature_LwdWallet40 = Feature<Feature_Wallet40_Params>;

Check warning on line 975 in libs/ledgerjs/packages/types-live/src/feature.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

'Feature' is deprecated.

See more on https://sonarcloud.io/project/issues?id=LedgerHQ_ledger-live&issues=AZ7629FkC8HypAW_mxJ6&open=AZ7629FkC8HypAW_mxJ6&pullRequest=18962
/** @deprecated Moved to `@shared/feature-flags`. Use `Features["lwmNewWordingOptInNotificationsDrawer"]` from `@shared/feature-flags` instead. */
export type Feature_LwmNewWordingOptInNotificationsDrawer = Feature<{
variant: ABTestingVariants;
Expand Down
1 change: 0 additions & 1 deletion shared/feature-flags/src/flags/team-engagement/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ export { analyticsOptIn } from "./analyticsOptIn";
export * from "./llmNanoOnboardingFundWallet";
export * from "./llmNanoSUpsellBanners";
export * from "./llmOnboardingEnableSync";
export * from "./llmRebornABtest";
export * from "./llmSyncOnboardingIncr1";
export * from "./lwmNotificationsOptIn";
export * from "./lwmNewWordingOptInNotificationsDrawer";
Expand Down

This file was deleted.

Loading