Skip to content

Commit 4356941

Browse files
committed
Move back to using react-native-vision-camera
1 parent 0c8e7ea commit 4356941

File tree

5 files changed

+47
-47
lines changed

5 files changed

+47
-47
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"react-native-tor": "^0.1.8",
146146
"react-native-unimodules": "^0.14.10",
147147
"react-native-vector-icons": "9.2.0",
148+
"react-native-vision-camera": "4.3.2",
148149
"react-native-web": "0.19.12",
149150
"react-native-web-linear-gradient": "^1.1.2",
150151
"react-native-web-maps": "^0.3.0",

src/components/Camera.tsx

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,57 @@
1-
import React, { ReactNode, useState, useEffect } from "react";
1+
import React, { ReactNode, useEffect } from "react";
22
import { StyleProp, ViewStyle, InteractionManager, StyleSheet } from "react-native";
3-
import { Camera, CameraType } from "react-native-camera-kit";
3+
import {
4+
Camera,
5+
useCodeScanner,
6+
useCameraDevice,
7+
useCameraPermission,
8+
} from "react-native-vision-camera";
49
import Container from "./Container";
5-
import { PLATFORM } from "../utils/constants";
6-
7-
let ReactNativePermissions: any;
8-
if (PLATFORM !== "macos") {
9-
ReactNativePermissions = require("react-native-permissions");
10-
}
1110

1211
export interface ICamera {
1312
active?: boolean;
1413
children?: ReactNode | JSX.Element;
15-
cameraType?: keyof CameraType;
14+
cameraType?: keyof CameraType; // TODO(hsjoberg)
1615
onRead?: (text: string) => void;
1716
onNotAuthorized?: () => void; // TODO(hsjoberg):
1817
style?: StyleProp<ViewStyle>;
1918
}
20-
export default function CameraComponent({
21-
cameraType,
22-
children,
23-
onNotAuthorized,
24-
onRead,
25-
style,
26-
active,
27-
}: ICamera) {
28-
const [start, setStart] = useState(false);
19+
export default function CameraComponent({ children, onNotAuthorized, onRead, active }: ICamera) {
20+
const device = useCameraDevice("back");
21+
const { hasPermission, requestPermission } = useCameraPermission();
22+
const codeScanner = useCodeScanner({
23+
codeTypes: ["qr"],
24+
onCodeScanned: (codes) => {
25+
if (codes.length >= 0) {
26+
onRead?.(codes[0].value ?? "");
27+
}
28+
},
29+
});
2930
active = active ?? true;
3031

3132
useEffect(() => {
32-
InteractionManager.runAfterInteractions(async () => {
33-
const permission =
34-
PLATFORM === "ios"
35-
? ReactNativePermissions.PERMISSIONS.IOS.CAMERA
36-
: ReactNativePermissions.PERMISSIONS.ANDROID.CAMERA;
37-
const result = await ReactNativePermissions.request(permission);
38-
39-
if (result === "granted" || result === "limited") {
40-
console.log("Camera permission not granted");
41-
setStart(true);
42-
} else {
43-
console.log("Camera permission granted");
33+
(async () => {
34+
if (hasPermission === false) {
35+
console.log("Does not have camera permission");
36+
if (await !requestPermission()) {
37+
// TODO fix await
38+
onNotAuthorized?.();
39+
}
4440
}
45-
});
46-
}, []);
41+
})();
42+
}, [requestPermission, hasPermission]);
4743

48-
if (!start || !active) {
44+
if (!active || !hasPermission || !device) {
4945
return <Container style={{ backgroundColor: "black" }}>{children ?? <></>}</Container>;
5046
}
5147

5248
return (
5349
<>
5450
<Camera
55-
style={[{ width: "100%", height: "100%" }, style]}
56-
scanBarcode={true}
57-
cameraType={cameraType}
58-
onReadCode={(event: any) => onRead?.(event.nativeEvent.codeStringValue)}
51+
style={StyleSheet.absoluteFill}
52+
codeScanner={codeScanner}
53+
device={device}
54+
isActive={active}
5955
/>
6056
{children}
6157
</>

src/components/FooterNav.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ export default function FooterNav() {
2020
<FooterTab>
2121
<Button
2222
testID="FOOTER_SEND"
23-
onPress={() =>
24-
navigation.navigate("Send", { screen: "SendCameraKit", params: { viaSwipe: false } })
25-
}
23+
onPress={() => navigation.navigate("Send", { params: { viaSwipe: false } })}
2624
onLongPress={() => {
2725
navigation.navigate("Send", { screen: "SendCameraKit", params: { viaSwipe: false } });
2826
}}

src/windows/Send/SendCamera.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import Clipboard from "@react-native-clipboard/clipboard";
44
import { Icon, Text } from "native-base";
55
import { StackNavigationProp } from "@react-navigation/stack";
66
import { getStatusBarHeight } from "react-native-status-bar-height";
7-
// import {
8-
// Camera,
9-
// useCodeScanner,
10-
// CameraPosition,
11-
// useCameraDevice,
12-
// useCameraPermission,
13-
// } from "react-native-vision-camera";
7+
import {
8+
Camera,
9+
useCodeScanner,
10+
CameraPosition,
11+
useCameraDevice,
12+
useCameraPermission,
13+
} from "react-native-vision-camera";
1414

1515
import BarcodeMask from "../../components/BarCodeMask";
1616
import { SendStackParamList } from "./index";

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12787,6 +12787,11 @@ react-native-vector-icons@^7.0.0:
1278712787
prop-types "^15.7.2"
1278812788
yargs "^15.0.2"
1278912789

12790+
12791+
version "4.3.2"
12792+
resolved "https://registry.yarnpkg.com/react-native-vision-camera/-/react-native-vision-camera-4.3.2.tgz#4acf80b62328275a69b22cd142f71a4e4aa2c12e"
12793+
integrity sha512-zrMWS+I5kIV9UShryRBOjV0PfOvKIH1LlvnQKw8n4D2NOuT6d3dTZ1KtwmktorwrPxRPf3FRktSn2Gv6F1kmWQ==
12794+
1279012795
react-native-web-linear-gradient@^1.1.2:
1279112796
version "1.1.2"
1279212797
resolved "https://registry.yarnpkg.com/react-native-web-linear-gradient/-/react-native-web-linear-gradient-1.1.2.tgz#33f85f7085a0bb5ffa5106faf02ed105b92a9ed7"

0 commit comments

Comments
 (0)