From 0dd183ed5af2955ccd70058d0c997218c4fc5b29 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Tue, 12 Nov 2019 16:10:19 +0100 Subject: [PATCH 1/3] Limit QR code scanner to 1 code per second --- packages/mobile/src/qrcode/QRScanner.tsx | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/mobile/src/qrcode/QRScanner.tsx b/packages/mobile/src/qrcode/QRScanner.tsx index aff1036d2d3..951a24c9ce5 100644 --- a/packages/mobile/src/qrcode/QRScanner.tsx +++ b/packages/mobile/src/qrcode/QRScanner.tsx @@ -23,19 +23,35 @@ interface DispatchProps { handleBarcodeDetected: typeof handleBarcodeDetected } +interface State { + isScanningEnabled: boolean +} + type Props = DispatchProps & WithNamespaces & NavigationFocusInjectedProps -class QRScanner extends React.Component { +class QRScanner extends React.Component { static navigationOptions = () => ({ ...headerWithBackButton, headerTitle: i18n.t('sendFlow7:scanCode'), }) + state = { + isScanningEnabled: true, + } + camera: RNCamera | null = null + // This method would be called multiple times with the same + // QR code, so we need to catch only the first one onBardCodeDetected = (rawData: any) => { - Logger.debug('QRScanner', 'Bar code detected') - this.props.handleBarcodeDetected(rawData) + if (this.state.isScanningEnabled) { + this.setState({ isScanningEnabled: false }) + Logger.debug('QRScanner', 'Bar code detected') + this.props.handleBarcodeDetected(rawData) + setTimeout(() => { + this.setState({ isScanningEnabled: true }) + }, 1000) + } } onPressShowYourCode = () => { From 3d33a8fcb9a83e0c748d57df3b37b9947dca7c33 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Tue, 12 Nov 2019 16:11:28 +0100 Subject: [PATCH 2/3] Disable Dark mode for iOS --- packages/mobile/ios/Podfile.lock | 11 ++++------- packages/mobile/ios/celo/Info.plist | 2 ++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/mobile/ios/Podfile.lock b/packages/mobile/ios/Podfile.lock index 3b7ebbe71cb..9d1a4834a09 100644 --- a/packages/mobile/ios/Podfile.lock +++ b/packages/mobile/ios/Podfile.lock @@ -491,22 +491,19 @@ DEPENDENCIES: - Yoga (from `../../../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: - https://cdn.cocoapods.org/: + https://github.com/cocoapods/specs.git: - Analytics - boost-for-react-native - - Fabric - - Firebase - - FirebaseCore - - FirebaseInstanceID - - GoogleUtilities - https://github.com/cocoapods/specs.git: - Crashlytics + - Fabric - Firebase - FirebaseAnalytics - FirebaseAnalyticsInterop - FirebaseAuth - FirebaseAuthInterop + - FirebaseCore - FirebaseDatabase + - FirebaseInstanceID - FirebaseMessaging - FirebaseStorage - GoogleAppMeasurement diff --git a/packages/mobile/ios/celo/Info.plist b/packages/mobile/ios/celo/Info.plist index 8ce66d27d44..a34ccca2254 100644 --- a/packages/mobile/ios/celo/Info.plist +++ b/packages/mobile/ios/celo/Info.plist @@ -2,6 +2,8 @@ + UIUserInterfaceStyle + Light CFBundleDevelopmentRegion en CFBundleDisplayName From 0fc1627bc12d5783c271f29f76089f864438d2fa Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Tue, 12 Nov 2019 17:02:53 +0100 Subject: [PATCH 3/3] Address the comments --- packages/mobile/src/qrcode/QRScanner.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/mobile/src/qrcode/QRScanner.tsx b/packages/mobile/src/qrcode/QRScanner.tsx index 951a24c9ce5..0ca8521ccc7 100644 --- a/packages/mobile/src/qrcode/QRScanner.tsx +++ b/packages/mobile/src/qrcode/QRScanner.tsx @@ -35,6 +35,8 @@ class QRScanner extends React.Component { headerTitle: i18n.t('sendFlow7:scanCode'), }) + timeout: undefined | number = undefined + state = { isScanningEnabled: true, } @@ -45,10 +47,11 @@ class QRScanner extends React.Component { // QR code, so we need to catch only the first one onBardCodeDetected = (rawData: any) => { if (this.state.isScanningEnabled) { - this.setState({ isScanningEnabled: false }) - Logger.debug('QRScanner', 'Bar code detected') - this.props.handleBarcodeDetected(rawData) - setTimeout(() => { + this.setState({ isScanningEnabled: false }, () => { + Logger.debug('QRScanner', 'Bar code detected') + this.props.handleBarcodeDetected(rawData) + }) + this.timeout = setTimeout(() => { this.setState({ isScanningEnabled: true }) }, 1000) } @@ -58,6 +61,12 @@ class QRScanner extends React.Component { navigate(Screens.QRCode) } + componentWillUnmount() { + if (this.timeout) { + clearTimeout(this.timeout) + } + } + render() { const { t } = this.props return (