/** * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import React, { useState, useEffect } from 'react'; import { NavigationContainer, useIsFocused, useNavigation as useAppNavigation, type NavigationProp, } from '@react-navigation/native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { createStackNavigator } from '@react-navigation/stack'; import { View, Text } from 'react-native'; import { CommonStyles } from './styles/components'; import { ExampleAppButton } from './controls/ExampleAppButton'; import { TermsOfServiceControls } from './controls/TermsOfServiceControls'; import OverlayModal from './helpers/overlayModal'; import NavigationScreen from './screens/NavigationScreen'; import MultipleMapsScreen from './screens/MultipleMapsScreen'; import MapIdScreen from './screens/MapIdScreen'; import RouteTokenScreen from './screens/RouteTokenScreen'; import { NavigationProvider, TaskRemovedBehavior, useNavigation, } from '@googlemaps/react-native-navigation-sdk'; import IntegrationTestsScreen from './screens/IntegrationTestsScreen'; export type ScreenNames = [ 'Home', 'Navigation', 'Multiple maps', 'Map ID', 'Route Token', 'Integration tests', ]; export type RootStackParamList = Record; export type StackNavigation = NavigationProp; const HomeScreen = () => { const { navigate } = useAppNavigation(); const isFocused = useIsFocused(); const insets = useSafeAreaInsets(); const [sdkVersion, setSdkVersion] = useState(''); const [isTosOverlayOpen, setIsTosOverlayOpen] = useState(false); const { navigationController } = useNavigation(); useEffect(() => { const fetchVersion = async () => { try { const version = await navigationController.getNavSDKVersion(); setSdkVersion(version); } catch (error) { console.error('Failed to fetch SDK version:', error); setSdkVersion('Unknown'); } }; fetchVersion(); }, [navigationController]); return ( {/* SDK Version Display */} Navigation SDK Version: {sdkVersion || 'Loading...'} {/* Spacer */} isFocused && navigate('Navigation')} /> isFocused && navigate('Multiple maps')} /> isFocused && navigate('Map ID')} /> isFocused && navigate('Route Token')} /> {/* Spacer */} {/* Terms of Service Management Button */} setIsTosOverlayOpen(true)} backgroundColor="#9c27b0" /> {/* TOS Overlay Modal */} setIsTosOverlayOpen(false)} height={400} > isFocused && navigate('Integration tests')} backgroundColor="grey" pressedBackgroundColor="darkGrey" testID="integration_tests_button" /> ); }; const Stack = createStackNavigator(); /** * Root component of the application. * @return {NavigationProvider} The NavigationProvider as a root component. */ export default function App() { return ( ); }