chore: update app configurations and screens

This commit is contained in:
2026-05-31 13:48:02 +02:00
parent 9296a9bc8b
commit d3c0ef2420
5 changed files with 90 additions and 98 deletions
+42 -4
View File
@@ -70,6 +70,9 @@ export default function PreviewScreen({
const [selectedStickerId, setSelectedStickerId] = useState<string | null>(null);
const [showStickerTray, setShowStickerTray] = useState<boolean>(false);
// Idle Timer state
const idleTimerRef = useRef<any>(null);
// Frame state
const [selectedFrameId, setSelectedFrameId] = useState<string | null>(
frameMode === 'always' ? initialFrameId : null
@@ -227,7 +230,7 @@ export default function PreviewScreen({
};
// Auto-save and exit
const handleExit = async () => {
const handleExit = useCallback(async () => {
if (stickers.length === 0 && layout === 'single' && !activeFrame && dateOverlay === 'off') {
onReset();
return;
@@ -248,6 +251,36 @@ export default function PreviewScreen({
setIsProcessing(false);
onReset();
}
}, [stickers, layout, activeFrame, dateOverlay, onReset]);
// Idle timer logic
const resetIdleTimer = useCallback(() => {
if (idleTimerRef.current) clearTimeout(idleTimerRef.current);
idleTimerRef.current = setTimeout(() => {
handleExit();
}, 60000);
}, [handleExit]);
useEffect(() => {
resetIdleTimer();
return () => {
if (idleTimerRef.current) clearTimeout(idleTimerRef.current);
};
}, [resetIdleTimer]);
const handleRetakeClick = async () => {
if (stickers.length > 0 || layout !== 'single' || activeFrame || dateOverlay !== 'off') {
setIsProcessing(true);
setStatusMessage('Wird vor dem Wiederholen gespeichert...');
try {
const capturedUri = await captureComposite();
await saveToGallery(capturedUri);
} catch (error) {
console.error('Auto-saving before retake failed:', error);
}
setIsProcessing(false);
}
onRetakeLast();
};
// ── Render the collage ──
@@ -303,7 +336,12 @@ export default function PreviewScreen({
};
return (
<Animated.View entering={FadeIn.duration(400)} exiting={FadeOut.duration(300)} style={styles.container}>
<Animated.View
entering={FadeIn.duration(400)}
exiting={FadeOut.duration(300)}
style={styles.container}
onTouchStart={resetIdleTimer}
>
{/* Left panel: Preview Canvas */}
<TouchableOpacity
style={styles.previewPanel}
@@ -482,7 +520,7 @@ export default function PreviewScreen({
)}
<View style={styles.rowActions}>
<TouchableOpacity style={[styles.smallBtn, styles.retakeBtn]} onPress={onRetakeLast}>
<TouchableOpacity style={[styles.smallBtn, styles.retakeBtn]} onPress={handleRetakeClick}>
<FontAwesomeIcon icon={faRotateLeft} size={14} color={THEME.colors.error} style={{ marginRight: 6 }} />
<Text style={[styles.smallBtnText, { color: THEME.colors.error }]}>Wiederholen</Text>
</TouchableOpacity>
@@ -686,7 +724,7 @@ const styles = StyleSheet.create({
width: 480,
height: 320,
backgroundColor: '#fff',
padding: 10,
padding: 0,
shadowColor: THEME.colors.gradientGlow,
shadowOffset: { width: 0, height: 0 },
shadowOpacity: 0.35,