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% 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 { }, ]} > - +