diff --git a/.changeset/spotty-jobs-poke.md b/.changeset/spotty-jobs-poke.md
new file mode 100644
index 000000000000..cd4c42f3ede6
--- /dev/null
+++ b/.changeset/spotty-jobs-poke.md
@@ -0,0 +1,5 @@
+---
+"live-mobile": minor
+---
+
+QR code scanning was failling to retrieve recipient's address in send flow
diff --git a/apps/ledger-live-mobile/src/components/CameraScreen/QRCodeBottomLayer.tsx b/apps/ledger-live-mobile/src/components/CameraScreen/QRCodeBottomLayer.tsx
deleted file mode 100644
index cd1dfdb64eb3..000000000000
--- a/apps/ledger-live-mobile/src/components/CameraScreen/QRCodeBottomLayer.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import React, { memo } from "react";
-import { Trans } from "react-i18next";
-import { Text, ProgressBar, NumberedList, Box } from "@ledgerhq/native-ui";
-import { rgba } from "../../colors";
-import { useTheme } from "styled-components/native";
-
-type Props = {
- progress?: number;
- liveQrCode?: boolean;
- instruction?: React.ReactNode | string;
-};
-
-function QrCodeBottomLayer({ progress, liveQrCode, instruction }: Props) {
- const { colors } = useTheme();
-
- return (
-
-
- {instruction || (
-
- )}
-
- {liveQrCode && (
- <>
- {progress !== undefined && progress > 0 ? (
-
-
-
-
-
-
- ) : (
- ,
- },
- {
- description: ,
- },
- {
- description: ,
- },
- ]}
- itemContainerProps={{ mb: 3 }}
- />
- )}
- >
- )}
-
- );
-}
-
-export default memo(QrCodeBottomLayer);
diff --git a/apps/ledger-live-mobile/src/components/CameraScreen/index.tsx b/apps/ledger-live-mobile/src/components/CameraScreen/index.tsx
deleted file mode 100644
index fd48cd9ff8b3..000000000000
--- a/apps/ledger-live-mobile/src/components/CameraScreen/index.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import React from "react";
-import { View } from "react-native";
-import { rgba } from "../../colors";
-import QRCodeBottomLayer from "./QRCodeBottomLayer";
-import { Box, Flex } from "@ledgerhq/native-ui";
-import { useTheme } from "styled-components/native";
-import ScanTargetSvg from "./ScanTargetSvg";
-
-type Props = {
- width: number;
- height: number;
- progress?: number;
- liveQrCode?: boolean;
- instruction?: React.ReactNode | string;
-};
-export default function CameraScreen({ width, height, progress, liveQrCode, instruction }: Props) {
- const { colors } = useTheme();
-
- // Make the viewfinder borders 2/3 of the screen shortest border
- const wrapperStyle =
- width > height
- ? {
- height,
- alignSelf: "stretch" as const,
- }
- : {
- width,
- flexGrow: 1,
- };
- return (
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/apps/ledger-live-mobile/src/components/Scanner.tsx b/apps/ledger-live-mobile/src/components/Scanner.tsx
index fa54d3c7701c..9d12bf9cfc15 100644
--- a/apps/ledger-live-mobile/src/components/Scanner.tsx
+++ b/apps/ledger-live-mobile/src/components/Scanner.tsx
@@ -1,64 +1,115 @@
-import React, { useContext } from "react";
-import { StyleSheet, View } from "react-native";
-import { BarCodeScanningResult, Camera, CameraType } from "expo-camera/legacy";
-import { Flex } from "@ledgerhq/native-ui";
-import StyledStatusBar from "./StyledStatusBar";
-import CameraScreen from "./CameraScreen";
-import getWindowDimensions from "~/logic/getWindowDimensions";
-import RequiresCameraPermissions from "./RequiresCameraPermissions";
-import CameraPermissionContext from "./RequiresCameraPermissions/CameraPermissionContext";
-import ForceTheme from "./theme/ForceTheme";
+import React from "react";
+import { Box, Flex, Icons, NumberedList, ProgressBar, Text } from "@ledgerhq/native-ui";
+import { Trans, useTranslation } from "react-i18next";
+import { useTheme } from "styled-components/native";
+import { CameraView, BarcodeScanningResult } from "expo-camera";
+import RequiresCameraPermissions from "~/components/RequiresCameraPermissions";
+import CameraPermissionContext from "~/components/RequiresCameraPermissions/CameraPermissionContext";
+import ScanTargetSvg from "./CameraScreen/ScanTargetSvg";
type Props = {
- onResult: (_: string) => void;
- liveQrCode?: boolean;
+ onResult: (data: string) => void;
+ liveQRCode?: boolean;
progress?: number;
- instruction?: React.ReactNode | string;
};
-const Scanner = ({ onResult, liveQrCode, progress, instruction }: Props) => {
- const hasPermission = useContext(CameraPermissionContext).permissionGranted;
- const { width, height } = getWindowDimensions();
-
- if (!hasPermission) return ;
+const ScanQrCode = ({ onResult, liveQRCode = false, progress }: Props) => {
+ const { t } = useTranslation();
+ const { colors } = useTheme();
+ const onBarCodeScanned = ({ data }: BarcodeScanningResult) => {
+ onResult(data);
+ };
return (
-
-
-
- onResult(data)}
- barCodeScannerSettings={{
- barCodeTypes: ["qr"],
- }}
+
+
+
+
-
-
-
-
- );
-};
+
+ {({ permissionGranted }) =>
+ permissionGranted ? (
+
+ ) : null
+ }
+
+
+
+
+
+ {t("walletSync.synchronize.qrCode.scan.description")}
+
+
+
+ {liveQRCode && (
+
+
+
+
-const ScannerWrappedInRequiresCameraPermission: React.FC = props => {
- return (
-
-
-
+ <>
+ {progress !== undefined && progress > 0 ? (
+
+
+
+
+
+
+ ) : (
+ ,
+ },
+ {
+ description: ,
+ },
+ {
+ description: ,
+ },
+ ]}
+ itemContainerProps={{ mb: 3 }}
+ />
+ )}
+ >
+
+ )}
+
+
);
};
-export default ScannerWrappedInRequiresCameraPermission;
-const styles = StyleSheet.create({
- camera: {
- flex: 1,
- },
-});
+export default ScanQrCode;
diff --git a/apps/ledger-live-mobile/src/locales/en/common.json b/apps/ledger-live-mobile/src/locales/en/common.json
index 49b7e3e03f97..f094a73282f7 100644
--- a/apps/ledger-live-mobile/src/locales/en/common.json
+++ b/apps/ledger-live-mobile/src/locales/en/common.json
@@ -3725,7 +3725,7 @@
"highFeeModal": "Be careful, network fees are greater than <1>10%1> of the amount. Do you want to continue?",
"scan": {
"title": "Scan QR code",
- "descBottom": "Please center the QR code inside the square.",
+ "descBottom": "Scan QR code",
"fallback": {
"header": "Scan QR code",
"title": "Enable camera",
diff --git a/apps/ledger-live-mobile/src/screens/ImportAccounts/Scan.tsx b/apps/ledger-live-mobile/src/screens/ImportAccounts/Scan.tsx
index 13f583e7d9f1..b657669dbedb 100644
--- a/apps/ledger-live-mobile/src/screens/ImportAccounts/Scan.tsx
+++ b/apps/ledger-live-mobile/src/screens/ImportAccounts/Scan.tsx
@@ -102,11 +102,11 @@ class Scan extends PureComponent<
};
render() {
- const { progress, error } = this.state;
+ const { error, progress } = this.state;
return (
-
+
);
diff --git a/apps/ledger-live-mobile/src/screens/Settings/Debug/Broken/BenchmarkQRStream.tsx b/apps/ledger-live-mobile/src/screens/Settings/Debug/Broken/BenchmarkQRStream.tsx
index 6310ced575a7..a289dc332368 100644
--- a/apps/ledger-live-mobile/src/screens/Settings/Debug/Broken/BenchmarkQRStream.tsx
+++ b/apps/ledger-live-mobile/src/screens/Settings/Debug/Broken/BenchmarkQRStream.tsx
@@ -87,7 +87,7 @@ class BenchmarkQRStream extends PureComponent {
},
]}
>
-
+