1
0
mirror of https://github.com/DocNR/POWR.git synced 2025-05-19 08:22:05 +00:00
POWR/components/SimpleSplashScreen.tsx

111 lines
2.9 KiB
TypeScript

// components/SimpleSplashScreen.tsx
import React, { useEffect, useState } from 'react';
import { View, Image, ActivityIndicator, StyleSheet, Platform, Text } from 'react-native';
import * as SplashScreen from 'expo-splash-screen';
// Keep the splash screen visible while we fetch resources
SplashScreen.preventAutoHideAsync().catch((error) => {
console.warn('Error preventing auto hide of splash screen:', error);
});
interface SplashScreenProps {
onFinish: () => void;
}
const SimpleSplashScreen: React.FC<SplashScreenProps> = ({ onFinish }) => {
const [imageLoaded, setImageLoaded] = useState(false);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
console.log('SimpleSplashScreen mounted');
try {
// Hide the native splash screen
SplashScreen.hideAsync().catch((error) => {
console.warn('Error hiding native splash screen:', error);
});
} catch (e) {
console.error('Exception hiding splash screen:', e);
}
// Simulate video duration with a timeout
const timer = setTimeout(() => {
console.log('SimpleSplashScreen timer complete, calling onFinish');
onFinish();
}, 3000); // 3 seconds splash display for better visibility
return () => {
console.log('SimpleSplashScreen unmounting, clearing timer');
clearTimeout(timer);
};
}, [onFinish]);
const handleImageLoad = () => {
console.log('Splash image loaded successfully');
setImageLoaded(true);
};
const handleImageError = (e: any) => {
console.error('Error loading splash image:', e);
setError('Failed to load splash image');
};
return (
<View style={styles.container}>
{/* Logo image */}
<Image
source={require('../assets/images/splash.png')}
style={styles.image}
resizeMode="contain"
onLoad={handleImageLoad}
onError={handleImageError}
/>
{/* Show app name as text for better reliability */}
<Text style={styles.appName}>POWR</Text>
{/* Loading indicator */}
<ActivityIndicator
size="large"
color="#ffffff"
style={styles.loader}
/>
{/* Error message if image fails to load */}
{error && (
<Text style={styles.errorText}>{error}</Text>
)}
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#000000',
alignItems: 'center',
justifyContent: 'center',
},
image: {
width: Platform.OS === 'android' ? '70%' : '80%',
height: Platform.OS === 'android' ? '70%' : '80%',
},
appName: {
color: '#ffffff',
fontSize: 32,
fontWeight: 'bold',
marginTop: 20,
},
loader: {
marginTop: 30,
},
errorText: {
color: '#ff6666',
marginTop: 20,
textAlign: 'center',
paddingHorizontal: 20,
}
});
export default SimpleSplashScreen;