e649aba8e1
* Android & TypeScript part of scanned code corner points. Scanned frame dimensions also included in callback. #2076 * TS fix. #2076 * Implement iOS parts of code scanner corner points with additional scanned frame data. * Add example page for code scanning * Use Point type from Point.ts * Update package/src/CodeScanner.ts Add parameters description to CodeScanner callback. Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/src/CodeScanner.ts More expressive description for CodeScannerFrame. Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/src/CodeScanner.ts Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/src/CodeScanner.ts Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/ios/Core/CameraSession+CodeScanner.swift Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/ios/Core/CameraSession+CodeScanner.swift Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Remove default values from CodeSCannerFrame * Linting * Multiply code corner points in swift --------- Co-authored-by: stemy <balazs.stemler@metrix.co.hu> Co-authored-by: Zoli <iamzozo@metrix.co.hu> Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com>
66 lines
2.4 KiB
TypeScript
66 lines
2.4 KiB
TypeScript
import { NavigationContainer } from '@react-navigation/native'
|
|
import React, { useEffect, useState } from 'react'
|
|
import { createNativeStackNavigator } from '@react-navigation/native-stack'
|
|
import { PermissionsPage } from './PermissionsPage'
|
|
import { MediaPage } from './MediaPage'
|
|
import { CameraPage } from './CameraPage'
|
|
import { CodeScannerPage } from './CodeScannerPage'
|
|
import type { Routes } from './Routes'
|
|
import { Camera, CameraPermissionStatus } from 'react-native-vision-camera'
|
|
import { GestureHandlerRootView } from 'react-native-gesture-handler'
|
|
import { StyleSheet } from 'react-native'
|
|
import { DevicesPage } from './DevicesPage'
|
|
|
|
const Stack = createNativeStackNavigator<Routes>()
|
|
|
|
export function App(): React.ReactElement | null {
|
|
const [cameraPermission, setCameraPermission] = useState<CameraPermissionStatus>()
|
|
const [microphonePermission, setMicrophonePermission] = useState<CameraPermissionStatus>()
|
|
|
|
useEffect(() => {
|
|
Camera.getCameraPermissionStatus().then(setCameraPermission)
|
|
Camera.getMicrophonePermissionStatus().then(setMicrophonePermission)
|
|
}, [])
|
|
|
|
console.log(`Re-rendering Navigator. Camera: ${cameraPermission} | Microphone: ${microphonePermission}`)
|
|
|
|
if (cameraPermission == null || microphonePermission == null) {
|
|
// still loading
|
|
return null
|
|
}
|
|
|
|
const showPermissionsPage = cameraPermission !== 'granted' || microphonePermission === 'not-determined'
|
|
return (
|
|
<NavigationContainer>
|
|
<GestureHandlerRootView style={styles.root}>
|
|
<Stack.Navigator
|
|
screenOptions={{
|
|
headerShown: false,
|
|
statusBarStyle: 'dark',
|
|
animationTypeForReplace: 'push',
|
|
}}
|
|
initialRouteName={showPermissionsPage ? 'PermissionsPage' : 'CameraPage'}>
|
|
<Stack.Screen name="PermissionsPage" component={PermissionsPage} />
|
|
<Stack.Screen name="CameraPage" component={CameraPage} />
|
|
<Stack.Screen name="CodeScannerPage" component={CodeScannerPage} />
|
|
<Stack.Screen
|
|
name="MediaPage"
|
|
component={MediaPage}
|
|
options={{
|
|
animation: 'none',
|
|
presentation: 'transparentModal',
|
|
}}
|
|
/>
|
|
<Stack.Screen name="Devices" component={DevicesPage} />
|
|
</Stack.Navigator>
|
|
</GestureHandlerRootView>
|
|
</NavigationContainer>
|
|
)
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
root: {
|
|
flex: 1,
|
|
},
|
|
})
|